fix(filter): filter toggle issues with no schemas dbs (#856)

This commit is contained in:
Guy Ben-Aharon
2025-08-17 12:54:56 +03:00
committed by GitHub
parent b4ccfcdcde
commit d0dee84970
3 changed files with 90 additions and 12 deletions

View File

@@ -205,7 +205,11 @@ export const DiagramFilterProvider: React.FC<React.PropsWithChildren> = ({
schemaIds: newSchemaIds,
tableIds: newTableIds,
},
allTables satisfies FilterTableInfo[]
allTables satisfies FilterTableInfo[],
{
databaseWithSchemas:
databasesWithSchemas.includes(databaseType),
}
);
});
},
@@ -252,11 +256,15 @@ export const DiagramFilterProvider: React.FC<React.PropsWithChildren> = ({
schemaIds: undefined,
tableIds: newTableIds,
},
allTables satisfies FilterTableInfo[]
allTables satisfies FilterTableInfo[],
{
databaseWithSchemas:
databasesWithSchemas.includes(databaseType),
}
);
});
},
[allTables]
[allTables, databaseType]
);
const toggleTableFilter: DiagramFilterContext['toggleTableFilter'] =
@@ -340,7 +348,11 @@ export const DiagramFilterProvider: React.FC<React.PropsWithChildren> = ({
schemaIds: newSchemaIds,
tableIds: newTableIds,
},
allTables satisfies FilterTableInfo[]
allTables satisfies FilterTableInfo[],
{
databaseWithSchemas:
databasesWithSchemas.includes(databaseType),
}
);
});
},
@@ -450,11 +462,15 @@ export const DiagramFilterProvider: React.FC<React.PropsWithChildren> = ({
...filterByTableIds,
tableIds: newTableIds,
},
allTables satisfies FilterTableInfo[]
allTables satisfies FilterTableInfo[],
{
databaseWithSchemas:
databasesWithSchemas.includes(databaseType),
}
);
});
},
[allTables]
[allTables, databaseType]
);
const removeTablesFromFilter: DiagramFilterContext['removeTablesFromFilter'] =
@@ -491,11 +507,15 @@ export const DiagramFilterProvider: React.FC<React.PropsWithChildren> = ({
...filterByTableIds,
tableIds: newTableIds,
},
allTables satisfies FilterTableInfo[]
allTables satisfies FilterTableInfo[],
{
databaseWithSchemas:
databasesWithSchemas.includes(databaseType),
}
);
});
},
[allTables]
[allTables, databaseType]
);
const eventConsumer = useCallback(

View File

@@ -20,7 +20,8 @@ export interface FilterTableInfo {
*/
export function reduceFilter(
filter: DiagramFilter,
tables: FilterTableInfo[]
tables: FilterTableInfo[],
options: { databaseWithSchemas: boolean }
): DiagramFilter {
let { schemaIds, tableIds } = filter;
@@ -34,9 +35,9 @@ export function reduceFilter(
}
// Get all unique schema IDs from tables
const allSchemaIds = [
...new Set(tables.filter((t) => t.schemaId).map((t) => t.schemaId!)),
];
const allSchemaIds = options.databaseWithSchemas
? [...new Set(tables.filter((t) => t.schemaId).map((t) => t.schemaId!))]
: [];
const allTableIds = tables.map((t) => t.id);
// in case its db with no schemas

View File

@@ -1,4 +1,6 @@
import { defaultSchemas } from '@/lib/data/default-schemas';
import { schemaNameToSchemaId } from '../db-schema';
import type { Diagram } from '../diagram';
import type { DiagramFilter } from './diagram-filter';
export const filterTable = ({
@@ -70,3 +72,58 @@ export const filterRelationship = ({
};
export const filterDependency = filterRelationship;
export const applyFilterOnDiagram = ({
diagram,
filter,
}: {
diagram: Diagram;
filter: DiagramFilter;
}): Diagram => {
const defaultSchema = defaultSchemas[diagram.databaseType];
const filteredTables = diagram.tables?.filter((table) =>
filterTable({
table: { id: table.id, schema: table.schema },
filter,
options: { defaultSchema },
})
);
const filteredRelationships = diagram.relationships?.filter(
(relationship) =>
filterRelationship({
tableA: {
id: relationship.sourceTableId,
schema: relationship.sourceSchema,
},
tableB: {
id: relationship.targetTableId,
schema: relationship.targetSchema,
},
filter,
options: { defaultSchema },
})
);
const filteredDependencies = diagram.dependencies?.filter((dependency) =>
filterDependency({
tableA: {
id: dependency.tableId,
schema: dependency.schema,
},
tableB: {
id: dependency.dependentTableId,
schema: dependency.dependentSchema,
},
filter,
options: { defaultSchema },
})
);
return {
...diagram,
tables: filteredTables,
relationships: filteredRelationships,
dependencies: filteredDependencies,
};
};