From 00df852580464c4b02a50b1c87445add464f90aa Mon Sep 17 00:00:00 2001 From: Alexander Onnikov <Alexander.Onnikov@xored.com> Date: Wed, 28 Feb 2024 13:18:47 +0700 Subject: [PATCH] UBER-1209 Show inline actions on document space (#4799) Signed-off-by: Alexander Onnikov <Alexander.Onnikov@xored.com> --- .../components/navigator/TreeElement.svelte | 48 ++++++++----------- .../src/components/navigator/SpacesNav.svelte | 1 + 2 files changed, 20 insertions(+), 29 deletions(-) diff --git a/plugins/view-resources/src/components/navigator/TreeElement.svelte b/plugins/view-resources/src/components/navigator/TreeElement.svelte index fd05dd8c12..06dadc99ce 100644 --- a/plugins/view-resources/src/components/navigator/TreeElement.svelte +++ b/plugins/view-resources/src/components/navigator/TreeElement.svelte @@ -26,8 +26,7 @@ Menu, showPopup, getTreeCollapsed, - setTreeCollapsed, - IconActivity + setTreeCollapsed } from '@hcengineering/ui' import { createEventDispatcher } from 'svelte' @@ -58,14 +57,14 @@ popupMenuActions = result.filter((action) => action.inline !== true) }) - async function onMenuClick (ev: MouseEvent) { + async function onMenuClick (ev: MouseEvent): Promise<void> { showPopup(Menu, { actions: popupMenuActions, ctx: _id }, ev.target as HTMLElement, () => { hovered = false }) hovered = true } - async function onInlineClick (ev: MouseEvent, action: Action) { + async function onInlineClick (ev: MouseEvent, action: Action): Promise<void> { action.action([], ev) } @@ -108,39 +107,30 @@ <div class="an-element__grow" /> - {#if !parent} + {#if inlineActions.length > 0} {#each inlineActions as action} - <div - class="an-element__tool" - class:pressed={hovered} - on:click|preventDefault|stopPropagation={(ev) => onInlineClick(ev, action)} - > + <div class="an-element__tool" on:click|preventDefault|stopPropagation={(ev) => onInlineClick(ev, action)}> <Icon icon={action.icon ?? ActionIcon} size={'small'} /> </div> {/each} + {/if} + {#if popupMenuActions.length === 1 && popupMenuActions[0].icon} + <div id={_id} class="an-element__tool"> + <ActionIcon + label={popupMenuActions[0].label} + icon={popupMenuActions[0].icon} + size={'small'} + action={async (ev) => { + void popupMenuActions[0].action(_id, ev) + }} + /> + </div> + {:else if popupMenuActions.length > 0} <div class="an-element__tool" class:pressed={hovered} on:click|preventDefault|stopPropagation={onMenuClick}> <IconMoreH size={'small'} /> </div> - {:else} - {#await actions() then actionItems} - {#if actionItems.length === 1 && actionItems[0].icon} - <div id={_id} class="an-element__tool"> - <ActionIcon - label={actionItems[0].label} - icon={actionItems[0].icon} - size={'small'} - action={async (ev) => { - actionItems[0].action(_id, ev) - }} - /> - </div> - {:else if actionItems.length > 1} - <div class="an-element__tool" class:pressed={hovered} on:click|preventDefault|stopPropagation={onMenuClick}> - <IconMoreH size={'small'} /> - </div> - {/if} - {/await} {/if} + {#if notifications > 0 && collapsed} <div class="an-element__counter">{notifications}</div> {/if} diff --git a/plugins/workbench-resources/src/components/navigator/SpacesNav.svelte b/plugins/workbench-resources/src/components/navigator/SpacesNav.svelte index 16a7504648..214674cc11 100644 --- a/plugins/workbench-resources/src/components/navigator/SpacesNav.svelte +++ b/plugins/workbench-resources/src/components/navigator/SpacesNav.svelte @@ -97,6 +97,7 @@ result.push({ icon: act.icon ?? IconEdit, label: act.label, + inline: act.inline, action: async (ctx: any, evt: Event) => { const impl = await getResource(act.action) await impl(space, evt, act.actionProps)