diff --git a/packages/datalib/src/PerspectiveTreeNode.ts b/packages/datalib/src/PerspectiveTreeNode.ts index e94951d89..0e69f32be 100644 --- a/packages/datalib/src/PerspectiveTreeNode.ts +++ b/packages/datalib/src/PerspectiveTreeNode.ts @@ -190,6 +190,12 @@ export abstract class PerspectiveTreeNode { return null; } + get hasUncheckedNodeInPath() { + if (!this.parentNode) return false; + if (!this.isCheckedNode) return true; + return this.parentNode.hasUncheckedNodeInPath; + } + get childDataColumn() { if (this.isCheckedColumn) { return this.codeName; diff --git a/packages/web/src/designer/DesignerTable.svelte b/packages/web/src/designer/DesignerTable.svelte index 56e136b64..bed751dcf 100644 --- a/packages/web/src/designer/DesignerTable.svelte +++ b/packages/web/src/designer/DesignerTable.svelte @@ -66,7 +66,8 @@ $: top = table?.top; $: mainIcon = settings?.getMainTableIcon ? settings?.getMainTableIcon(designerId) : null; $: specificDb = settings?.tableSpecificDb ? settings?.tableSpecificDb(designerId) : null; - $: filterParentRows = settings?.hasFilterParentRowsFlag ? settings?.hasFilterParentRowsFlag(designerId) : null; + $: filterParentRows = settings?.hasFilterParentRowsFlag ? settings?.hasFilterParentRowsFlag(designerId) : false; + $: isGrayed = settings?.isGrayedTable ? settings?.isGrayedTable(designerId) : false; export function isSelected() { return table?.isSelectedTable; @@ -234,6 +235,7 @@ >
!x.position) && perspectiveNodesHaveStructure(config, dbInfos, conid, database) && - config.nodes.every(x => root.findNodeByDesignerId(x.designerId)) + config.nodes.every(x => root?.findNodeByDesignerId(x.designerId)) ) { await tick(); runCommand('designer.arrange'); @@ -152,8 +152,8 @@ return [{ text: 'Remove', onClick: () => onRemoveReference(reference) }]; }, columnMenu: ({ designer, designerId, column, foreignKey }) => { - const node = root.findNodeByDesignerId(designerId); - const child = node.childNodes.find(x => x.columnName == column.columnName); + const node = root?.findNodeByDesignerId(designerId); + const child = node?.childNodes?.find(x => x.columnName == column.columnName); return getPerspectiveNodeMenu({ config, setConfig, @@ -165,7 +165,7 @@ }); }, tableMenu: ({ designer, designerId, onRemoveTable }) => { - const node = root.findNodeByDesignerId(designerId); + const node = root?.findNodeByDesignerId(designerId); return [ { text: 'Remove', onClick: () => onRemoveTable({ designerId }) }, getPerspectiveNodeMenu({ @@ -265,6 +265,13 @@ } }, hasFilterParentRowsFlag: designerId => !!config.nodes.find(x => x.designerId == designerId)?.isParentFilter, + isGrayedTable: designerId => { + const node = root?.findNodeByDesignerId(designerId); + if (!node) return true; + if (node?.hasUncheckedNodeInPath) return true; + + return false; + }, }} referenceComponent={QueryDesignerReference} value={createDesignerModel(config, dbInfos)}