File tree Expand file tree Collapse file tree 7 files changed +48
-6
lines changed
packages/json-table-schema-visualizer/src Expand file tree Collapse file tree 7 files changed +48
-6
lines changed Original file line number Diff line number Diff line change @@ -51,6 +51,7 @@ const Column = ({
5151 relationalTables = { relationalTables }
5252 offsetY = { offsetY }
5353 tableName = { tableName }
54+ columnName = { colName }
5455 >
5556 { ( highlighted ) => (
5657 < >
Original file line number Diff line number Diff line change @@ -11,6 +11,7 @@ interface ColumnWrapperProps {
1111 tableName : string ;
1212 relationalTables ?: string [ ] | null ;
1313 highlightColor : string ;
14+ columnName : string ;
1415}
1516
1617const 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
Original file line number Diff line number Diff 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 = ( ) => {
Original file line number Diff line number Diff line change @@ -21,7 +21,7 @@ interface SearchProps {
2121const 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 } ` ) ;
Original file line number Diff line number Diff line change @@ -17,12 +17,21 @@ interface TablesInfoProviderProps {
1717
1818const 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 >
Original file line number Diff line number Diff 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}
Original file line number Diff line number Diff 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 }
You can’t perform that action at this time.
0 commit comments