mirror of
https://github.com/stackrender/stackrender.git
synced 2026-09-10 11:15:42 +00:00
42 lines
1.4 KiB
TypeScript
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 ;
|
|
|
|
|
|
}
|