mirror of
https://github.com/chartdb/chartdb.git
synced 2025-11-02 13:03:17 +00:00
fix(filter): filter toggle issues with no schemas dbs (#856)
This commit is contained in:
@@ -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(
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user