@@ -100,12 +48,6 @@
{/if}
-
- {#if mouseIn}
-
- {/if}
{/if}
{#if column.showParent(columnLevel)}
@@ -116,11 +58,6 @@
.wrap {
display: flex;
}
- .menuButton {
- position: absolute;
- right: 0;
- bottom: 0;
- }
.label {
flex-wrap: nowrap;
}
@@ -143,12 +80,6 @@
align-self: center;
font-size: 18px;
}
- /* .resizer {
- background-color: var(--theme-border);
- width: 2px;
- cursor: col-resize;
- z-index: 1;
- } */
.grouping {
color: var(--theme-font-alt);
white-space: nowrap;
diff --git a/packages/web/src/perspectives/perspectiveMenu.ts b/packages/web/src/perspectives/perspectiveMenu.ts
index e4fea761..36fb9016 100644
--- a/packages/web/src/perspectives/perspectiveMenu.ts
+++ b/packages/web/src/perspectives/perspectiveMenu.ts
@@ -1,4 +1,5 @@
import { ChangePerspectiveConfigFunc, PerspectiveConfig, PerspectiveTreeNode } from 'dbgate-datalib';
+import _ from 'lodash';
import { showModal } from '../modals/modalTools';
import CustomJoinModal from './CustomJoinModal.svelte';
@@ -15,7 +16,63 @@ export function getPerspectiveNodeMenu(props: PerspectiveNodeMenuProps) {
const { node, conid, database, root, config, setConfig } = props;
const customJoin = node.customJoinConfig;
const filterInfo = node.filterInfo;
+
+ const parentUniqueName = node?.parentNode?.uniqueName || '';
+ const uniqueName = node.uniqueName;
+ const order = config.sort?.[parentUniqueName]?.find(x => x.uniqueName == uniqueName)?.order;
+ const orderIndex =
+ config.sort?.[parentUniqueName]?.length > 1
+ ? _.findIndex(config.sort?.[parentUniqueName], x => x.uniqueName == uniqueName)
+ : -1;
+ const isSortDefined = config.sort?.[parentUniqueName]?.length > 0;
+
+ const setSort = order => {
+ setConfig(
+ cfg => ({
+ ...cfg,
+ sort: {
+ ...cfg.sort,
+ [parentUniqueName]: [{ uniqueName, order }],
+ },
+ }),
+ true
+ );
+ };
+
+ const addToSort = order => {
+ setConfig(
+ cfg => ({
+ ...cfg,
+ sort: {
+ ...cfg.sort,
+ [parentUniqueName]: [...(cfg.sort?.[parentUniqueName] || []), { uniqueName, order }],
+ },
+ }),
+ true
+ );
+ };
+
+ const clearSort = () => {
+ setConfig(
+ cfg => ({
+ ...cfg,
+ sort: {
+ ...cfg.sort,
+ [parentUniqueName]: [],
+ },
+ }),
+ true
+ );
+ };
+
return [
+ { onClick: () => setSort('ASC'), text: 'Sort ascending' },
+ { onClick: () => setSort('DESC'), text: 'Sort descending' },
+ isSortDefined && !order && { onClick: () => addToSort('ASC'), text: 'Add to sort - ascending' },
+ isSortDefined && !order && { onClick: () => addToSort('DESC'), text: 'Add to sort - descending' },
+ order && { onClick: () => clearSort(), text: 'Clear sort criteria' },
+ { divider: true },
+
filterInfo && {
text: 'Add to filter',
onClick: () =>