diff --git a/packages/datalib/src/PerspectiveConfig.ts b/packages/datalib/src/PerspectiveConfig.ts index ef1eb461a..9277c86da 100644 --- a/packages/datalib/src/PerspectiveConfig.ts +++ b/packages/datalib/src/PerspectiveConfig.ts @@ -116,6 +116,7 @@ export function createPerspectiveNodeConfig(name: { schemaName?: string; pureNam export function createPerspectiveConfig(rootObject: { schemaName?: string; pureName: string }): PerspectiveConfig { const rootNode = createPerspectiveNodeConfig(rootObject); + rootNode.isNodeChecked = true; return { nodes: [rootNode], references: [], diff --git a/packages/datalib/src/PerspectiveTreeNode.ts b/packages/datalib/src/PerspectiveTreeNode.ts index 433c07a07..60c2d8f60 100644 --- a/packages/datalib/src/PerspectiveTreeNode.ts +++ b/packages/datalib/src/PerspectiveTreeNode.ts @@ -195,25 +195,24 @@ export abstract class PerspectiveTreeNode { toggleChecked(value?: boolean) { this.includeInNodeSet('checkedColumns', value == null ? !this.isChecked : value); - // if (this.defaultChecked) { - // this.includeInNodeSet('uncheckedColumns', value == null ? this.isChecked : value); - // } else { - // this.includeInNodeSet('checkedColumns', value == null ? !this.isChecked : value); - // } } toggleCheckedNode(value?: boolean) { - this.setConfig(cfg => ({ - ...cfg, - nodes: cfg.nodes.map(node => - node.designerId == this.designerId - ? { - ...node, - isNodeChecked: value == null ? !node.isNodeChecked : value, - } - : node - ), - })); + this.setConfig(cfg => { + const [cfgChanged, nodeCfg] = this.ensureNodeConfig(cfg); + const res = { + ...cfgChanged, + nodes: cfgChanged.nodes.map(node => + node.designerId == (this.designerId || nodeCfg.designerId) + ? { + ...node, + isNodeChecked: value == null ? !node.isNodeChecked : value, + } + : node + ), + }; + return res; + }); } toggleSecondaryChecked(value?: boolean) {} @@ -222,7 +221,7 @@ export abstract class PerspectiveTreeNode { return null; } - ensureNodeConfig(cfg: PerspectiveConfig): PerspectiveConfig { + ensureNodeConfig(cfg: PerspectiveConfig): [PerspectiveConfig, PerspectiveNodeConfig] { let node = cfg.nodes.find(x => x.designerId == this.designerId); if (!node) { const nodeConfig: PerspectiveNodeConfig = { @@ -236,13 +235,16 @@ export abstract class PerspectiveTreeNode { isAutoGenerated: true, columns: this.createReferenceConfigColumns(), }; - return { - ...cfg, - nodes: [...cfg.nodes, nodeConfig], - references: [...cfg.references, refConfig], - }; + return [ + { + ...cfg, + nodes: [...cfg.nodes, nodeConfig], + references: [...cfg.references, refConfig], + }, + nodeConfig, + ]; } - return cfg; + return [cfg, null]; } includeInNodeSet(field: 'expandedColumns' | 'uncheckedColumns' | 'checkedColumns', isIncluded: boolean) { @@ -252,14 +254,13 @@ export abstract class PerspectiveTreeNode { [field]: isIncluded ? [...(n[field] || []), this.codeName] : (n[field] || []).filter(x => x != this.codeName), }); - cfg = this.parentNode?.ensureNodeConfig(cfg); - if (isIncluded && field == 'expandedColumns') { - cfg = this.ensureNodeConfig(cfg); - } + const [cfgChanged, nodeCfg] = this.parentNode?.ensureNodeConfig(cfg); return { - ...cfg, - nodes: cfg.nodes.map(n => (n.designerId == this.parentNode?.designerId ? changedFields(n) : n)), + ...cfgChanged, + nodes: cfgChanged.nodes.map(n => + n.designerId == (this.parentNode?.designerId || nodeCfg?.designerId) ? changedFields(n) : n + ), }; }); } @@ -1063,10 +1064,15 @@ export function getTableChildPerspectiveNodes( ) ) ); - // const circularColumns = columnNodes.filter(x => x.isCircular).map(x => x.columnName); - // const defaultColumns = getPerspectiveDefaultColumns(table, db, circularColumns); - // for (const node of columnNodes) { - // node.defaultChecked = defaultColumns.includes(node.columnName); + + // if (!columnNodes.find(x => x.isChecked)) { + // const circularColumns = columnNodes.filter(x => x.isCircular).map(x => x.columnName); + // const defaultColumns = getPerspectiveDefaultColumns(table, db, circularColumns); + // for (const node of columnNodes) { + // if (defaultColumns.includes(node.columnName)) { + // no + // } + // } // } const res = []; diff --git a/packages/web/src/perspectives/PerspectiveDesigner.svelte b/packages/web/src/perspectives/PerspectiveDesigner.svelte index 4e724afc4..79c6078b4 100644 --- a/packages/web/src/perspectives/PerspectiveDesigner.svelte +++ b/packages/web/src/perspectives/PerspectiveDesigner.svelte @@ -83,13 +83,16 @@ } res.isArranged = isArranged; + if (!res.nodes.find(x => x.designerId == res.rootDesignerId)) { + res.rootDesignerId = res.nodes[0]?.designerId; + } return res; }); } async function detectAutoArrange(config: PerspectiveConfig, dbInfos) { - if (config.isArranged && config.nodes.find(x => !x.position)) { + if (config.nodes.find(x => !x.position)) { await tick(); runCommand('designer.arrange'); }