From 15b61ce2fa3087489dd75bc5933d1b3634cf3fe2 Mon Sep 17 00:00:00 2001
From: Vyacheslav Tumanov <me@slavatumanov.me>
Date: Fri, 25 Aug 2023 13:44:36 +0500
Subject: [PATCH] UBER-770: add custom enum and ref attributes for grouping
 (#3622)

Signed-off-by: Vyacheslav Tumanov <me@slavatumanov.me>
---
 .../src/components/ViewOptionsButton.svelte              | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/plugins/view-resources/src/components/ViewOptionsButton.svelte b/plugins/view-resources/src/components/ViewOptionsButton.svelte
index 42a1d63ee3..58d6412145 100644
--- a/plugins/view-resources/src/components/ViewOptionsButton.svelte
+++ b/plugins/view-resources/src/components/ViewOptionsButton.svelte
@@ -21,6 +21,7 @@
   import { focusStore } from '../selection'
   import { setViewOptions } from '../viewOptions'
   import ViewOptionsEditor from './ViewOptions.svelte'
+  import core from '@hcengineering/core'
 
   export let viewlet: Viewlet | undefined
   export let kind: ButtonKind = 'regular'
@@ -53,6 +54,12 @@
       variant: viewlet.variant ? viewlet.variant : { $exists: false }
     })
 
+    const customAttributes = classes
+      .flatMap((c) => Array.from(client.getHierarchy().getOwnAttributes(c).values()))
+      .filter(
+        (attr) => attr.isCustom && !attr.isHidden && [core.class.RefTo, core.class.EnumOf].includes(attr.type._class)
+      )
+      .map((a) => a.name)
     const mergedModel: ViewOptionsModel = {
       groupBy: [],
       orderBy: [],
@@ -68,7 +75,7 @@
       mergedModel.orderBy.push(...(ev.viewOptions?.orderBy ?? []))
       mergedModel.other.push(...(ev.viewOptions?.other ?? []))
     }
-
+    mergedModel.groupBy = Array.from(new Set([...mergedModel.groupBy, ...customAttributes]))
     mergedModel.groupBy = mergedModel.groupBy.filter((it, idx, arr) => arr.indexOf(it) === idx)
     mergedModel.orderBy = mergedModel.orderBy.filter((it, idx, arr) => arr.indexOf(it) === idx)
     mergedModel.other = mergedModel.other.filter((it, idx, arr) => arr.findIndex((q) => q.key === it.key) === idx)