diff --git a/packages/datalib/src/PerspectiveDisplay.ts b/packages/datalib/src/PerspectiveDisplay.ts new file mode 100644 index 000000000..330fb9c98 --- /dev/null +++ b/packages/datalib/src/PerspectiveDisplay.ts @@ -0,0 +1,18 @@ +import { PerspectiveTableNode, PerspectiveTreeNode } from './PerspectiveTreeNode'; + +export class PerspectiveDisplayColumn { + constructor(public label: string, public field: string) {} +} + +export class PerspectiveDisplay { + columns: PerspectiveDisplayColumn[] = []; + + constructor(public root: PerspectiveTreeNode, public rows: any[]) { + const children = root.childNodes; + for (const child of children) { + if (child.isChecked) { + this.columns.push(new PerspectiveDisplayColumn(child.title, child.codeName)); + } + } + } +} diff --git a/packages/datalib/src/PerspectiveTreeNode.ts b/packages/datalib/src/PerspectiveTreeNode.ts index 756618e1f..e9075b0a3 100644 --- a/packages/datalib/src/PerspectiveTreeNode.ts +++ b/packages/datalib/src/PerspectiveTreeNode.ts @@ -7,6 +7,7 @@ import _cloneDeep from 'lodash/cloneDeep'; export interface PerspectiveDataLoadProps { schemaName: string; pureName: string; + dataColumns: string[]; bindingColumns?: string[]; bindingValues?: any[][]; } @@ -128,6 +129,7 @@ export class PerspectiveTableColumnNode extends PerspectiveTreeNode { pureName: this.foreignKey.refTableName, bindingColumns: [this.foreignKey.columns[0].refColumnName], bindingValues: parentRows.map(row => row[this.foreignKey.columns[0].columnName]), + dataColumns: null, }; } @@ -178,6 +180,7 @@ export class PerspectiveTableNode extends PerspectiveTreeNode { return { schemaName: this.table.schemaName, pureName: this.table.pureName, + dataColumns: null, }; } @@ -227,6 +230,7 @@ export class PerspectiveTableReferenceNode extends PerspectiveTableNode { pureName: this.table.pureName, bindingColumns: [this.foreignKey.columns[0].columnName], bindingValues: parentRows.map(row => row[this.foreignKey.columns[0].refColumnName]), + dataColumns: null, }; } } diff --git a/packages/datalib/src/index.ts b/packages/datalib/src/index.ts index ed75afad5..ae389e549 100644 --- a/packages/datalib/src/index.ts +++ b/packages/datalib/src/index.ts @@ -14,3 +14,4 @@ export * from './FormViewDisplay'; export * from './TableFormViewDisplay'; export * from './CollectionGridDisplay'; export * from './deleteCascade'; +export * from './PerspectiveDisplay'; diff --git a/packages/web/src/perspectives/PerspectiveTable.svelte b/packages/web/src/perspectives/PerspectiveTable.svelte index 72b2733ed..1c4f5f69e 100644 --- a/packages/web/src/perspectives/PerspectiveTable.svelte +++ b/packages/web/src/perspectives/PerspectiveTable.svelte @@ -3,6 +3,7 @@ // groupPerspectiveLoadProps, PerspectiveDataLoadProps, PerspectiveDataLoadPropsWithNode, + PerspectiveDisplay, PerspectiveTreeNode, } from 'dbgate-datalib'; import _ from 'lodash'; @@ -10,13 +11,13 @@ import { prop_dev } from 'svelte/internal'; export let root: PerspectiveTreeNode; + let dataRows; async function loadLevelData(node: PerspectiveTreeNode, parentRows: any[]) { // const loadProps: PerspectiveDataLoadPropsWithNode[] = []; const loadChildNodes = []; const loadChildRows = []; const loadProps = node.getNodeLoadProps(parentRows); - console.log('LOADER', loadProps.pureName); const rows = await node.loader(loadProps); // console.log('ROWS', rows, node.isRoot); @@ -58,7 +59,8 @@ if (!node) return; const rows = []; await loadLevelData(node, rows); - console.log('RESULT', rows); + dataRows = rows; + // console.log('RESULT', rows); // const rows = await node.loadLevelData(); // for (const child of node.childNodes) { // const loadProps = []; @@ -69,8 +71,44 @@ } $: loadData(root); + $: display = root && dataRows ? new PerspectiveDisplay(root, dataRows) : null; - - -
xxx
+
+ {#if display} + + + + {#each display.columns as column} + + {/each} + + + + {#each display.rows as row} + + {#each display.columns as column} + + {/each} + + {/each} + +
{column.label}
{row[column.field]}
+ {/if} +
+ + diff --git a/packages/web/src/perspectives/PerspectiveView.svelte b/packages/web/src/perspectives/PerspectiveView.svelte index 6d9bfd669..b329c35b6 100644 --- a/packages/web/src/perspectives/PerspectiveView.svelte +++ b/packages/web/src/perspectives/PerspectiveView.svelte @@ -63,13 +63,20 @@ // : null; async function loader(props: PerspectiveDataLoadProps) { - const { schemaName, pureName, bindingColumns, bindingValues } = props; + const { schemaName, pureName, bindingColumns, bindingValues, dataColumns } = props; const select: Select = { commandType: 'select', from: { name: { schemaName, pureName }, }, - selectAll: true, + columns: dataColumns?.map(columnName => ({ + exprType: 'column', + columnName, + source: { + name: { schemaName, pureName }, + }, + })), + selectAll: !dataColumns, }; if (bindingColumns?.length == 1) { select.where = {