Define custom join
Join name
{ joinName = e.target['value']; }} />
Base table
{ if (e.detail) { fromDesignerId = e.detail; } }} />
Connection
{ conidOverride = e.detail; }} />
Database
{ databaseOverride = e.detail; }} />
Referenced table
{ if (e.detail) { const name = fullNameFromString(e.detail); refTableName = name.pureName; refSchemaName = name.schemaName; const refTable = $refDbInfo?.tables?.find( x => x.pureName == refTableName && x.schemaName == refSchemaName ); columns = refTable?.primaryKey?.columns?.map(col => ({ refColumnName: col.columnName, })) || []; } }} />
Base column - {fromTableInfo?.pureName}
Ref column - {refTableName || '(table not set)'}
{#each columns as column, index}
{#key column.baseColumnName} ({ label: col.columnName, value: col.columnName, }))} on:change={e => { if (e.detail) { columns = columns.map((col, i) => (i == index ? { ...col, baseColumnName: e.detail } : col)); } }} /> {/key}
{#key column.refColumnName} ({ label: col.columnName, value: col.columnName, }))} on:change={e => { if (e.detail) { columns = columns.map((col, i) => (i == index ? { ...col, refColumnName: e.detail } : col)); } }} /> {/key}
{ const x = [...columns]; x.splice(index, 1); columns = x; }} />
{/each} { columns = [ ...columns, { baseColumnName: '', refColumnName: '', }, ]; }} />
{ setConfig(cfg => { const newNode = createPerspectiveNodeConfig({ pureName: refTableName, schemaName: refSchemaName }); newNode.designerId = editValue?.refNodeDesignerId || uuidv1(); newNode.conid = conidOverride; newNode.database = databaseOverride; newNode.position = cfg.nodes.find(x => x.designerId == editValue?.refNodeDesignerId)?.position; newNode.alias = joinName; const newRef = { designerId: editValue?.referenceDesignerId || uuidv1(), sourceId: fromDesignerId, targetId: newNode.designerId, columns: columns.map(col => ({ source: col.baseColumnName, target: col.refColumnName, })), }; return { ...cfg, nodes: [...cfg.nodes.filter(x => x.designerId != editValue?.refNodeDesignerId), newNode], references: [...cfg.references.filter(x => x.designerId != editValue?.referenceDesignerId), newRef], }; }); // const newJoin = { // joinid, // joinName, // baseDesignerId: fromDesignerId, // refTableName, // refSchemaName, // columns, // conid: conidOverride, // database: databaseOverride, // }; // setConfig(cfg => ({ // ...cfg, // customJoins: editValue // ? cfg.customJoins.map(x => (x.joinid == editValue.joinid ? newJoin : x)) // : [...(cfg.customJoins || []), newJoin], // })); closeCurrentModal(); }} />