diff --git a/packages/datalib/src/PerspectiveConfig.ts b/packages/datalib/src/PerspectiveConfig.ts index 8c0dd3932..2067c8188 100644 --- a/packages/datalib/src/PerspectiveConfig.ts +++ b/packages/datalib/src/PerspectiveConfig.ts @@ -7,9 +7,11 @@ export interface PerspectiveConfigColumns { export interface PerspectiveConfig extends PerspectiveConfigColumns { filters: { [uniqueName: string]: string }; sort: { - uniqueName: string; - order: 'ASC' | 'DESC'; - }[]; + [parentUniqueName: string]: { + uniqueName: string; + order: 'ASC' | 'DESC'; + }[]; + }; } export function createPerspectiveConfig(): PerspectiveConfig { @@ -18,7 +20,7 @@ export function createPerspectiveConfig(): PerspectiveConfig { checkedColumns: [], uncheckedColumns: [], filters: {}, - sort: [], + sort: {}, }; } diff --git a/packages/datalib/src/PerspectiveTreeNode.ts b/packages/datalib/src/PerspectiveTreeNode.ts index 4855f4a92..1a50422f2 100644 --- a/packages/datalib/src/PerspectiveTreeNode.ts +++ b/packages/datalib/src/PerspectiveTreeNode.ts @@ -188,7 +188,7 @@ export abstract class PerspectiveTreeNode { getOrderBy(table: TableInfo): PerspectiveDataLoadProps['orderBy'] { const res = _compact( this.childNodes.map(node => { - const sort = this.config?.sort?.find(x => x.uniqueName == node.uniqueName); + const sort = this.config?.sort?.[node?.parentNode?.uniqueName]?.find(x => x.uniqueName == node.uniqueName); if (sort) { return { columnName: node.columnName, diff --git a/packages/web/src/perspectives/PerspectiveHeaderControl.svelte b/packages/web/src/perspectives/PerspectiveHeaderControl.svelte index ed8470866..c60a1e6b5 100644 --- a/packages/web/src/perspectives/PerspectiveHeaderControl.svelte +++ b/packages/web/src/perspectives/PerspectiveHeaderControl.svelte @@ -4,32 +4,30 @@ import DropDownButton from '../buttons/DropDownButton.svelte'; import FontIcon from '../icons/FontIcon.svelte'; - export let label; export let column: PerspectiveDisplayColumn; export let columnLevel; export let config: PerspectiveConfig; export let setConfig: ChangePerspectiveConfigFunc; - // export let setSort = undefined; - // export let addToSort = undefined; - // export let clearSort = undefined; - // export let grouping = undefined; - // export let order = undefined; - // export let orderIndex = undefined; - // export let isSortDefined = false; let mouseIn; + $: parentUniqueName = column.dataNode?.parentNode?.uniqueName || ''; $: uniqueName = column.dataNode.uniqueName; - // $: console.log('CFG', config); - $: order = config.sort?.find(x => x.uniqueName == uniqueName)?.order; - $: orderIndex = config.sort?.length > 1 ? _.findIndex(config.sort, x => x.uniqueName == uniqueName) : -1; - $: isSortDefined = config.sort?.length > 0; + $: order = config.sort?.[parentUniqueName]?.find(x => x.uniqueName == uniqueName)?.order; + $: orderIndex = + config.sort?.[parentUniqueName]?.length > 1 + ? _.findIndex(config.sort?.[parentUniqueName], x => x.uniqueName == uniqueName) + : -1; + $: isSortDefined = config.sort?.[parentUniqueName]?.length > 0; const setSort = order => { setConfig( cfg => ({ ...cfg, - sort: [{ uniqueName, order }], + sort: { + ...cfg.sort, + [parentUniqueName]: [{ uniqueName, order }], + }, }), true ); @@ -39,7 +37,10 @@ setConfig( cfg => ({ ...cfg, - sort: [...(cfg.sort || []), { uniqueName, order }], + sort: { + ...cfg.sort, + [parentUniqueName]: [...(cfg.sort?.[parentUniqueName] || []), { uniqueName, order }], + }, }), true ); @@ -49,19 +50,12 @@ setConfig( cfg => ({ ...cfg, - sort: [], + [parentUniqueName]: [], }), true ); }; - // display.setSort(col.uniqueName, order) - // addToSort={display.sortable ? order => display.addToSort(col.uniqueName, order) : null} - // order={display.sortable ? display.getSortOrder(col.uniqueName) : null} - // orderIndex={display.sortable ? display.getSortOrderIndex(col.uniqueName) : -1} - // isSortDefined={display.sortable ? display.isSortDefined() : false} - // clearSort={display.sortable ? () => display.clearSort() : null} - function getMenu() { return [ { onClick: () => setSort('ASC'), text: 'Sort ascending' },