diff --git a/src/pages/editor-page/side-panel/dependencies-section/dependencies-section.tsx b/src/pages/editor-page/side-panel/dependencies-section/dependencies-section.tsx
index 1ca6f4d7..c8ed1f81 100644
--- a/src/pages/editor-page/side-panel/dependencies-section/dependencies-section.tsx
+++ b/src/pages/editor-page/side-panel/dependencies-section/dependencies-section.tsx
@@ -13,13 +13,16 @@ import {
TooltipTrigger,
} from '@/components/tooltip/tooltip';
import type { DBDependency } from '@/lib/domain/db-dependency';
-import { shouldShowDependencyBySchemaFilter } from '@/lib/domain/db-dependency';
import { useLayout } from '@/hooks/use-layout';
+import { useDiagramFilter } from '@/context/diagram-filter-context/use-diagram-filter';
+import { filterDependency } from '@/lib/domain/diagram-filter/filter';
+import { defaultSchemas } from '@/lib/data/default-schemas';
export interface DependenciesSectionProps {}
export const DependenciesSection: React.FC
= () => {
- const { dependencies, filteredSchemas, getTable } = useChartDB();
+ const { dependencies, getTable, databaseType } = useChartDB();
+ const { filter } = useDiagramFilter();
const [filterText, setFilterText] = React.useState('');
const { closeAllDependenciesInSidebar } = useLayout();
const { t } = useTranslation();
@@ -44,12 +47,26 @@ export const DependenciesSection: React.FC = () => {
);
};
- const filterSchema: (dependency: DBDependency) => boolean = (
+ const filterDependencies: (dependency: DBDependency) => boolean = (
dependency
- ) => shouldShowDependencyBySchemaFilter(dependency, filteredSchemas);
+ ) =>
+ filterDependency({
+ tableA: {
+ id: dependency.tableId,
+ schema: dependency.schema,
+ },
+ tableB: {
+ id: dependency.dependentTableId,
+ schema: dependency.dependentSchema,
+ },
+ filter,
+ options: {
+ defaultSchema: defaultSchemas[databaseType],
+ },
+ });
return dependencies
- .filter(filterSchema)
+ .filter(filterDependencies)
.filter(filterName)
.sort((a, b) => {
const dependentTableA = getTable(a.dependentTableId);
@@ -60,7 +77,7 @@ export const DependenciesSection: React.FC = () => {
`${dependentTableB?.name}${tableB?.name}`
);
});
- }, [dependencies, filterText, filteredSchemas, getTable]);
+ }, [dependencies, filterText, filter, getTable, databaseType]);
return (
diff --git a/src/pages/editor-page/side-panel/relationships-section/relationships-section.tsx b/src/pages/editor-page/side-panel/relationships-section/relationships-section.tsx
index efb37521..3f61774b 100644
--- a/src/pages/editor-page/side-panel/relationships-section/relationships-section.tsx
+++ b/src/pages/editor-page/side-panel/relationships-section/relationships-section.tsx
@@ -5,7 +5,6 @@ import { Input } from '@/components/input/input';
import { RelationshipList } from './relationship-list/relationship-list';
import { useChartDB } from '@/hooks/use-chartdb';
import type { DBRelationship } from '@/lib/domain/db-relationship';
-import { shouldShowRelationshipBySchemaFilter } from '@/lib/domain/db-relationship';
import { useLayout } from '@/hooks/use-layout';
import { EmptyState } from '@/components/empty-state/empty-state';
import { ScrollArea } from '@/components/scroll-area/scroll-area';
@@ -16,11 +15,15 @@ import {
TooltipTrigger,
} from '@/components/tooltip/tooltip';
import { useDialog } from '@/hooks/use-dialog';
+import { useDiagramFilter } from '@/context/diagram-filter-context/use-diagram-filter';
+import { filterRelationship } from '@/lib/domain/diagram-filter/filter';
+import { defaultSchemas } from '@/lib/data/default-schemas';
export interface RelationshipsSectionProps {}
export const RelationshipsSection: React.FC = () => {
- const { relationships, filteredSchemas } = useChartDB();
+ const { relationships, databaseType } = useChartDB();
+ const { filter } = useDiagramFilter();
const [filterText, setFilterText] = React.useState('');
const { closeAllRelationshipsInSidebar } = useLayout();
const { t } = useTranslation();
@@ -34,13 +37,26 @@ export const RelationshipsSection: React.FC = () => {
!filterText?.trim?.() ||
relationship.name.toLowerCase().includes(filterText.toLowerCase());
- const filterSchema: (relationship: DBRelationship) => boolean = (
+ const filterRelationships: (relationship: DBRelationship) => boolean = (
relationship
) =>
- shouldShowRelationshipBySchemaFilter(relationship, filteredSchemas);
+ filterRelationship({
+ tableA: {
+ id: relationship.sourceTableId,
+ schema: relationship.sourceSchema,
+ },
+ tableB: {
+ id: relationship.targetTableId,
+ schema: relationship.targetSchema,
+ },
+ filter,
+ options: {
+ defaultSchema: defaultSchemas[databaseType],
+ },
+ });
- return relationships.filter(filterSchema).filter(filterName);
- }, [relationships, filterText, filteredSchemas]);
+ return relationships.filter(filterRelationships).filter(filterName);
+ }, [relationships, filterText, filter, databaseType]);
const handleCreateRelationship = useCallback(async () => {
setFilterText('');
diff --git a/src/pages/editor-page/side-panel/side-panel.tsx b/src/pages/editor-page/side-panel/side-panel.tsx
index dfe61aca..2943e8e4 100644
--- a/src/pages/editor-page/side-panel/side-panel.tsx
+++ b/src/pages/editor-page/side-panel/side-panel.tsx
@@ -1,4 +1,4 @@
-import React, { useCallback, useMemo } from 'react';
+import React from 'react';
import {
Select,
SelectContent,
@@ -12,8 +12,6 @@ import { RelationshipsSection } from './relationships-section/relationships-sect
import { useLayout } from '@/hooks/use-layout';
import type { SidebarSection } from '@/context/layout-context/layout-context';
import { useTranslation } from 'react-i18next';
-import type { SelectBoxOption } from '@/components/select-box/select-box';
-import { SelectBox } from '@/components/select-box/select-box';
import { useChartDB } from '@/hooks/use-chartdb';
import { DependenciesSection } from './dependencies-section/dependencies-section';
import { useBreakpoint } from '@/hooks/use-breakpoint';
@@ -25,69 +23,12 @@ export interface SidePanelProps {}
export const SidePanel: React.FC = () => {
const { t } = useTranslation();
- const { schemas, filterSchemas, filteredSchemas, databaseType } =
- useChartDB();
- const {
- selectSidebarSection,
- selectedSidebarSection,
- isSelectSchemaOpen,
- openSelectSchema,
- closeSelectSchema,
- } = useLayout();
+ const { databaseType } = useChartDB();
+ const { selectSidebarSection, selectedSidebarSection } = useLayout();
const { isMd: isDesktop } = useBreakpoint('md');
- const schemasOptions: SelectBoxOption[] = useMemo(
- () =>
- schemas.map(
- (schema): SelectBoxOption => ({
- label: schema.name,
- value: schema.id,
- description: `(${schema.tableCount} tables)`,
- })
- ),
- [schemas]
- );
-
- const setIsSelectSchemaOpen = useCallback(
- (open: boolean) => {
- if (open) {
- openSelectSchema();
- } else {
- closeSelectSchema();
- }
- },
- [openSelectSchema, closeSelectSchema]
- );
-
return (