Files
stackrender/src/lib/table.ts
T

42 lines
1.4 KiB
TypeScript

import { getForeignRelationships } from "@/utils/relationship";
import { DatabaseType } from "./schemas/database-schema";
import { RelationshipType } from "./schemas/relationship-schema";
import { TableType } from "./schemas/table-schema";
export interface SortableTable {
tableId: string;
relationships: string[];
}
export interface RenderableTable extends TableType {
foreignRelationships: RelationshipType[]
}
export const toSortableTable = (table: RenderableTable): SortableTable => {
return {
tableId: table.id,
relationships: table.foreignRelationships.filter(
(relationship : RelationshipType) => !(relationship.targetTable.id == relationship.sourceTable.id && relationship.sourceTable.id == table.id)
).map((relationship: RelationshipType) => relationship.sourceTable.id)
}
}
export const toRenderableTable = (table: TableType, database: DatabaseType): RenderableTable => {
let renderableTable: RenderableTable | TableType = {
...table,
sourceRelations: database.relationships.filter((relationship: RelationshipType) =>
relationship.sourceTableId == table.id),
targetRelations: database.relationships.filter((relationship: RelationshipType) =>
relationship.targetTableId == table.id),
} ;
(renderableTable as RenderableTable).foreignRelationships = getForeignRelationships(renderableTable) ;
return renderableTable as RenderableTable ;
}