|
|
@ -57,9 +57,9 @@ const populateTables = () => { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
const populateRelations = () => { |
|
|
|
const populateRelations = () => { |
|
|
|
const ltarColumns = Object.keys(metasWithId.value).reduce((acc: any[], tableId) => { |
|
|
|
const ltarColumns = tables.value.reduce((acc: any[], table) => { |
|
|
|
const table = metasWithId.value[tableId] |
|
|
|
const meta = metasWithId.value[table.id!] |
|
|
|
const ltarColumns = table.columns.filter((column: any) => column.uidt === UITypes.LinkToAnotherRecord) |
|
|
|
const ltarColumns = meta.columns.filter((column: any) => column.uidt === UITypes.LinkToAnotherRecord && column.system !== 1) |
|
|
|
|
|
|
|
|
|
|
|
ltarColumns.forEach((column: any) => { |
|
|
|
ltarColumns.forEach((column: any) => { |
|
|
|
if (column.colOptions.type === 'hm') { |
|
|
|
if (column.colOptions.type === 'hm') { |
|
|
@ -68,8 +68,13 @@ const populateRelations = () => { |
|
|
|
|
|
|
|
|
|
|
|
if (column.colOptions.type === 'mm') { |
|
|
|
if (column.colOptions.type === 'mm') { |
|
|
|
// Remove duplicate relations |
|
|
|
// Remove duplicate relations |
|
|
|
const relatedColumnId = column.colOptions.fk_child_column_id |
|
|
|
const isCorrespondingRelationAlreadyAdded = acc.find( |
|
|
|
if (!acc.find((col) => col.id === relatedColumnId)) { |
|
|
|
(c) => |
|
|
|
|
|
|
|
c.colOptions.type === 'mm' && |
|
|
|
|
|
|
|
c.colOptions.fk_parent_column_id === column.colOptions.fk_child_column_id && |
|
|
|
|
|
|
|
c.colOptions.fk_child_column_id === column.colOptions.fk_parent_column_id, |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
if (!isCorrespondingRelationAlreadyAdded) { |
|
|
|
acc.push(column) |
|
|
|
acc.push(column) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -81,23 +86,31 @@ const populateRelations = () => { |
|
|
|
edges.value = ltarColumns.map((column: any) => { |
|
|
|
edges.value = ltarColumns.map((column: any) => { |
|
|
|
const source = column.fk_model_id |
|
|
|
const source = column.fk_model_id |
|
|
|
const target = column.colOptions.fk_related_model_id |
|
|
|
const target = column.colOptions.fk_related_model_id |
|
|
|
const targetColumnId = column.colOptions.fk_related_column_id |
|
|
|
let sourceColumnId, targetColumnId |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (column.colOptions.type === 'hm') { |
|
|
|
|
|
|
|
sourceColumnId = column.colOptions.fk_child_column_id |
|
|
|
|
|
|
|
targetColumnId = column.colOptions.fk_parent_column_id |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (column.colOptions.type === 'mm') { |
|
|
|
|
|
|
|
sourceColumnId = column.colOptions.fk_parent_column_id |
|
|
|
|
|
|
|
targetColumnId = column.colOptions.fk_child_column_id |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
dagreGraph.setEdge(source, target) |
|
|
|
dagreGraph.setEdge(source, target) |
|
|
|
|
|
|
|
|
|
|
|
return { |
|
|
|
return { |
|
|
|
id: `e${source}-${target}`, |
|
|
|
id: `e-${sourceColumnId}-${source}-${targetColumnId}-${target}`, |
|
|
|
source: `${source}`, |
|
|
|
source: `${source}`, |
|
|
|
target: `${target}`, |
|
|
|
target: `${target}`, |
|
|
|
sourceHandle: `s-${column.id}-${source}`, |
|
|
|
sourceHandle: `s-${sourceColumnId}-${source}`, |
|
|
|
targetHandle: `d-${targetColumnId}-${target}`, |
|
|
|
targetHandle: `d-${targetColumnId}-${target}`, |
|
|
|
type: 'custom', |
|
|
|
type: 'custom', |
|
|
|
data: { column, table: metasWithId.value[source], relatedTable: metasWithId.value[target] }, |
|
|
|
data: { |
|
|
|
|
|
|
|
column, |
|
|
|
|
|
|
|
}, |
|
|
|
} |
|
|
|
} |
|
|
|
}) |
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
// console.log('json:elements', JSON.parse(JSON.stringify(elements))) |
|
|
|
|
|
|
|
// console.log('elements', elements) |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
const layoutNodes = () => { |
|
|
|
const layoutNodes = () => { |
|
|
@ -135,8 +148,6 @@ const populateErd = (shouldReset = false) => { |
|
|
|
populateElements() |
|
|
|
populateElements() |
|
|
|
populateRelations() |
|
|
|
populateRelations() |
|
|
|
layoutNodes() |
|
|
|
layoutNodes() |
|
|
|
console.log('nodes', nodes.value) |
|
|
|
|
|
|
|
console.log('edges', edges.value) |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
onBeforeMount(async () => { |
|
|
|
onBeforeMount(async () => { |
|
|
|