Skip to content

Commit 9b77c07

Browse files
herzadinataBOCOVO
authored andcommitted
fix(dblm-ext): search: should highlight table border and selected column only
1 parent 9c7a8a8 commit 9b77c07

File tree

7 files changed

+48
-6
lines changed

7 files changed

+48
-6
lines changed

packages/json-table-schema-visualizer/src/components/Column/Column.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ const Column = ({
5151
relationalTables={relationalTables}
5252
offsetY={offsetY}
5353
tableName={tableName}
54+
columnName={colName}
5455
>
5556
{(highlighted) => (
5657
<>

packages/json-table-schema-visualizer/src/components/Column/ColumnWrapper.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ interface ColumnWrapperProps {
1111
tableName: string;
1212
relationalTables?: string[] | null;
1313
highlightColor: string;
14+
columnName: string;
1415
}
1516

1617
const ColumnWrapper = ({
@@ -19,8 +20,9 @@ const ColumnWrapper = ({
1920
tableName,
2021
relationalTables,
2122
highlightColor,
23+
columnName,
2224
}: ColumnWrapperProps) => {
23-
const { hoveredTableName } = useTablesInfo();
25+
const { hoveredTableName, highlightedColumn } = useTablesInfo();
2426
const [hovered, setHovered] = useState(false);
2527
const tablePreferredWidth = useTableWidth();
2628

@@ -36,6 +38,8 @@ const ColumnWrapper = ({
3638
hovered,
3739
tableName,
3840
hoveredTableName,
41+
highlightedColumn,
42+
columnName,
3943
relationalTables,
4044
);
4145

packages/json-table-schema-visualizer/src/components/DiagramViewer/DiagramWrapper.tsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,12 @@ const DiagramWrapper = ({ children }: DiagramWrapperProps) => {
3232
useCursorChanger("grabbing");
3333
const themeColors = useThemeColors();
3434
const stageRef = useRef<null | CoreStage>(null);
35-
const { hoveredTableName, setHoveredTableName } = useTablesInfo();
35+
const {
36+
hoveredTableName,
37+
setHoveredTableName,
38+
highlightedColumn,
39+
setHighlightedColumn,
40+
} = useTablesInfo();
3641

3742
// repositioning the stage only once
3843
const { scale: defaultStageScale, position: defaultStagePosition } =
@@ -105,9 +110,10 @@ const DiagramWrapper = ({ children }: DiagramWrapperProps) => {
105110
const handleStagePointerDown = (
106111
e: KonvaEventObject<MouseEvent | TouchEvent>,
107112
) => {
108-
if (hoveredTableName == null) return;
113+
if (hoveredTableName == null && highlightedColumn == null) return;
109114
if (nodeBelongsToTable(e.target)) return;
110115
setHoveredTableName(null);
116+
setHighlightedColumn(null);
111117
};
112118

113119
const fitToView = () => {

packages/json-table-schema-visualizer/src/components/Search/Search.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ interface SearchProps {
2121
const Search = ({ tables }: SearchProps) => {
2222
const [search, setSearch] = useState("");
2323
const [isOpen, setIsOpen] = useState(false);
24-
const { setHoveredTableName } = useTablesInfo();
24+
const { setHoveredTableName, setHighlightedColumn } = useTablesInfo();
2525
const dropdownRef = useRef<HTMLDivElement>(null);
2626

2727
const searchResults = useMemo(() => {
@@ -56,7 +56,12 @@ const Search = ({ tables }: SearchProps) => {
5656
}, [tables, search]);
5757

5858
const handleSelect = (result: SearchResult) => {
59-
setHoveredTableName(result.tableName);
59+
setHoveredTableName(null);
60+
if (result.type === "column") {
61+
setHighlightedColumn(`${result.tableName}.${result.name}`);
62+
} else {
63+
setHighlightedColumn(null);
64+
}
6065
// Center the diagram on the selected table and ask the table to highlight itself
6166
eventEmitter.emit("table:center", { tableName: result.tableName });
6267
eventEmitter.emit(`highlight:table:${result.tableName}`);

packages/json-table-schema-visualizer/src/providers/TablesInfoProvider.tsx

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,21 @@ interface TablesInfoProviderProps {
1717

1818
const TablesInfoProvider = ({ children, tables }: TablesInfoProviderProps) => {
1919
const [hoveredTableName, setHoveredTableName] = useState<string | null>(null);
20+
const [highlightedColumn, setHighlightedColumn] = useState<string | null>(
21+
null,
22+
);
2023
const { detailLevel } = useTableDetailLevel();
2124
const colsIndexes = computeColIndexes(tables, detailLevel);
2225

2326
return (
2427
<TablesInfoContext.Provider
25-
value={{ colsIndexes, hoveredTableName, setHoveredTableName }}
28+
value={{
29+
colsIndexes,
30+
hoveredTableName,
31+
setHoveredTableName,
32+
highlightedColumn,
33+
setHighlightedColumn,
34+
}}
2635
>
2736
{children}
2837
</TablesInfoContext.Provider>

packages/json-table-schema-visualizer/src/types/tablesInfoProviderValue.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,6 @@ export interface TablesInfoProviderValue {
44
colsIndexes: ColsIndexesMap;
55
hoveredTableName: string | null;
66
setHoveredTableName: (tableName: string | null) => void;
7+
highlightedColumn: string | null;
8+
setHighlightedColumn: (columnKey: string | null) => void;
79
}

packages/json-table-schema-visualizer/src/utils/shouldHighLightCol.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,27 @@ export const shouldHighLightCol = (
33
hovered: boolean,
44
tableName: string | null,
55
hoveredTable: string | null,
6+
highlightedColumn: string | null,
7+
columnName: string | null,
68
relationalTables?: string[] | null,
79
): boolean => {
810
if (hovered) {
911
return true;
1012
}
1113

14+
const columnKey =
15+
tableName != null && columnName != null
16+
? `${tableName}.${columnName}`
17+
: null;
18+
19+
if (
20+
highlightedColumn != null &&
21+
columnKey != null &&
22+
highlightedColumn === columnKey
23+
) {
24+
return true;
25+
}
26+
1227
if (hoveredTable === tableName && !!relationalTables) {
1328
return true;
1429
}

0 commit comments

Comments
 (0)