diff --git a/src/context/diagram-filter-context/diagram-filter-provider.tsx b/src/context/diagram-filter-context/diagram-filter-provider.tsx index 97143db9..d7b66f3a 100644 --- a/src/context/diagram-filter-context/diagram-filter-provider.tsx +++ b/src/context/diagram-filter-context/diagram-filter-provider.tsx @@ -20,11 +20,12 @@ import { useChartDB } from '@/hooks/use-chartdb'; import { filterTable } from '@/lib/domain/diagram-filter/filter'; import { schemaNameToSchemaId } from '@/lib/domain'; import { defaultSchemas } from '@/lib/data/default-schemas'; +import type { ChartDBEvent } from '../chartdb-context/chartdb-context'; export const DiagramFilterProvider: React.FC = ({ children, }) => { - const { diagramId, tables, schemas, databaseType } = useChartDB(); + const { diagramId, tables, schemas, databaseType, events } = useChartDB(); const { getDiagramFilter, updateDiagramFilter } = useStorage(); const [filter, setFilter] = useState({}); @@ -481,6 +482,23 @@ export const DiagramFilterProvider: React.FC = ({ [allTables] ); + const eventConsumer = useCallback( + (event: ChartDBEvent) => { + if (!hasActiveFilter) { + return; + } + + if (event.action === 'add_tables') { + addTablesToFilter({ + tableIds: event.data.tables.map((table) => table.id), + }); + } + }, + [hasActiveFilter, addTablesToFilter] + ); + + events.useSubscription(eventConsumer); + const value: DiagramFilterContext = { filter, clearSchemaIdsFilter: clearSchemaIds, diff --git a/src/dialogs/table-schema-dialog/table-schema-dialog.tsx b/src/dialogs/table-schema-dialog/table-schema-dialog.tsx index b220ea2e..f86478d0 100644 --- a/src/dialogs/table-schema-dialog/table-schema-dialog.tsx +++ b/src/dialogs/table-schema-dialog/table-schema-dialog.tsx @@ -28,7 +28,6 @@ import { import { useChartDB } from '@/hooks/use-chartdb'; import { defaultSchemas } from '@/lib/data/default-schemas'; import { Label } from '@/components/label/label'; -import { useDiagramFilter } from '@/context/diagram-filter-context/use-diagram-filter'; export interface TableSchemaDialogProps extends BaseDialogProps { table?: DBTable; @@ -46,7 +45,6 @@ export const TableSchemaDialog: React.FC = ({ }) => { const { t } = useTranslation(); const { databaseType } = useChartDB(); - const { addSchemaToFilter } = useDiagramFilter(); const [selectedSchemaId, setSelectedSchemaId] = useState( table?.schema ? schemaNameToSchemaId(table.schema) @@ -95,7 +93,6 @@ export const TableSchemaDialog: React.FC = ({ const { closeTableSchemaDialog } = useDialog(); const handleConfirm = useCallback(() => { - let createdSchemaId: string; if (isCreatingNew && newSchemaName.trim()) { const newSchema: DBSchema = { id: schemaNameToSchemaId(newSchemaName.trim()), @@ -103,26 +100,14 @@ export const TableSchemaDialog: React.FC = ({ tableCount: 0, }; - createdSchemaId = newSchema.id; - onConfirm({ schema: newSchema }); } else { const schema = schemas.find((s) => s.id === selectedSchemaId); if (!schema) return; - createdSchemaId = schema.id; onConfirm({ schema }); } - - addSchemaToFilter(createdSchemaId); - }, [ - onConfirm, - selectedSchemaId, - schemas, - isCreatingNew, - newSchemaName, - addSchemaToFilter, - ]); + }, [onConfirm, selectedSchemaId, schemas, isCreatingNew, newSchemaName]); const schemaOptions: SelectBoxOption[] = useMemo( () =>