From 113e52615bfb03d8e28a55078ff3c559479ce336 Mon Sep 17 00:00:00 2001 From: Mike Tasset Date: Wed, 30 Jul 2025 14:35:51 +0200 Subject: [PATCH 1/3] Update discussions panel menu --- .../components/viewer/comments/Panel.vue | 102 +++++++++++------- .../src/components/layout/Menu.vue | 11 +- .../src/helpers/layout/components.ts | 1 + 3 files changed, 76 insertions(+), 38 deletions(-) diff --git a/packages/frontend-2/components/viewer/comments/Panel.vue b/packages/frontend-2/components/viewer/comments/Panel.vue index 2568492b2..0577c8c80 100644 --- a/packages/frontend-2/components/viewer/comments/Panel.vue +++ b/packages/frontend-2/components/viewer/comments/Panel.vue @@ -5,44 +5,27 @@
@@ -77,6 +60,14 @@ import { import { useMixpanel } from '~~/lib/core/composables/mp' import { useCheckViewerCommentingAccess } from '~~/lib/viewer/composables/commentManagement' import { useSelectionUtilities } from '~~/lib/viewer/composables/ui' +import type { LayoutMenuItem } from '~~/lib/layout/helpers/components' +import { HorizontalDirection } from '~~/lib/common/composables/window' + +enum ActionTypes { + HideBubbles = 'hide-bubbles', + IncludeArchived = 'include-archived', + LoadedVersionsOnly = 'loaded-versions-only' +} graphql(` fragment ViewerCommentsListItem on Comment { @@ -117,6 +108,7 @@ const { } } = useInjectedViewerInterfaceState() const canPostComment = useCheckViewerCommentingAccess() +const menuId = useId() const showVisibilityOptions = ref(false) const settingsIcon = resolveComponent('IconViewerSettings') as ConcreteComponent @@ -159,7 +151,43 @@ watch(includeArchived, (newVal) => const { objectIds: selectedObjectIds } = useSelectionUtilities() const hasSelectedObjects = computed(() => selectedObjectIds.value.size > 0) +const actionsItems = computed(() => [ + [ + { + title: 'Show in 3D model', + id: ActionTypes.HideBubbles, + active: !hideBubbles.value + }, + { + title: `Show resolved (${commentThreadsMetadata.value?.totalArchivedCount || 0})`, + id: ActionTypes.IncludeArchived, + active: !!includeArchived.value + }, + { + title: 'Exclude threads from other versions', + id: ActionTypes.LoadedVersionsOnly, + active: !!loadedVersionsOnly.value + } + ] +]) +const onActionChosen = (params: { item: LayoutMenuItem; event: MouseEvent }) => { + const { item } = params + + switch (item.id) { + case ActionTypes.HideBubbles: + hideBubbles.value = !hideBubbles.value + break + case ActionTypes.IncludeArchived: + includeArchived.value = includeArchived.value ? undefined : 'includeArchived' + break + case ActionTypes.LoadedVersionsOnly: + loadedVersionsOnly.value = loadedVersionsOnly.value + ? undefined + : 'loadedVersionsOnly' + break + } +} const onNewDiscussion = () => { if (!hasSelectedObjects.value) return newThreadEditor.value = true diff --git a/packages/ui-components/src/components/layout/Menu.vue b/packages/ui-components/src/components/layout/Menu.vue index 70dc1661a..a149c6ce0 100644 --- a/packages/ui-components/src/components/layout/Menu.vue +++ b/packages/ui-components/src/components/layout/Menu.vue @@ -29,6 +29,9 @@ @click="chooseItem(item, $event)" > +
+ +
{{ item.title }} @@ -71,6 +74,8 @@ const props = defineProps<{ */ menuPosition?: HorizontalDirection mountMenuOnBody?: boolean + customMenuItemsClasses?: string[] + showTicks?: boolean }>() const menuItems = ref(null as Nullable<{ el: HTMLDivElement }>) @@ -131,6 +136,10 @@ const menuItemsClasses = computed(() => { 'mt-1 w-44 origin-top-right divide-y divide-outline-3 rounded-md bg-foundation shadow-lg border border-outline-2 z-50' ] + if (props.customMenuItemsClasses) { + classParts.push(...props.customMenuItemsClasses) + } + if (props.mountMenuOnBody) { classParts.push('fixed') } else { @@ -157,7 +166,7 @@ const buildButtonClassses = (params: { }) => { const { active, disabled, color } = params const classParts = [ - 'group flex space-x-2 w-full items-center rounded-md px-2 py-1 text-body-xs' + 'group flex space-x-2 w-full items-center rounded-md px-2 py-1 text-body-xs text-left' ] if (active && !color) { diff --git a/packages/ui-components/src/helpers/layout/components.ts b/packages/ui-components/src/helpers/layout/components.ts index 22f3ce375..d2a1c520f 100644 --- a/packages/ui-components/src/helpers/layout/components.ts +++ b/packages/ui-components/src/helpers/layout/components.ts @@ -31,6 +31,7 @@ export type LayoutMenuItem = { disabled?: boolean disabledTooltip?: string color?: 'danger' | 'info' + active?: boolean } export type LayoutDialogButton = { From e46facf79f23f52a5cc2f892bbf9c47e8fbc0012 Mon Sep 17 00:00:00 2001 From: Mike Tasset Date: Wed, 30 Jul 2025 14:55:04 +0200 Subject: [PATCH 2/3] Fix: Update discussion settings --- .../viewer/anchored-point/Thread.vue | 83 +++++++++++++------ .../components/viewer/comments/Panel.vue | 1 - 2 files changed, 58 insertions(+), 26 deletions(-) diff --git a/packages/frontend-2/components/viewer/anchored-point/Thread.vue b/packages/frontend-2/components/viewer/anchored-point/Thread.vue index a004f1634..6cf193e72 100644 --- a/packages/frontend-2/components/viewer/anchored-point/Thread.vue +++ b/packages/frontend-2/components/viewer/anchored-point/Thread.vue @@ -63,26 +63,26 @@ @click="emit('next', modelValue)" />
-
- +
+ + + +