From 179973ba7f3ce758df56a7595187b12a6927b4f3 Mon Sep 17 00:00:00 2001 From: Andrey Sobolev <haiodo@users.noreply.github.com> Date: Tue, 26 Sep 2023 19:29:10 +0700 Subject: [PATCH] UBER-912 (#3742) Signed-off-by: Andrey Sobolev <haiodo@gmail.com> --- .../components/issues/edit/EditIssue.svelte | 9 +++++++- .../milestones/MilestoneEditor.svelte | 21 +++++++++++-------- .../milestones/MilestoneSelector.svelte | 10 ++++----- plugins/tracker/src/index.ts | 3 ++- 4 files changed, 27 insertions(+), 16 deletions(-) diff --git a/plugins/tracker-resources/src/components/issues/edit/EditIssue.svelte b/plugins/tracker-resources/src/components/issues/edit/EditIssue.svelte index 469f4f9f8e..11264b34f9 100644 --- a/plugins/tracker-resources/src/components/issues/edit/EditIssue.svelte +++ b/plugins/tracker-resources/src/components/issues/edit/EditIssue.svelte @@ -18,7 +18,13 @@ import notification from '@hcengineering/notification' import { Panel } from '@hcengineering/panel' import { getResource } from '@hcengineering/platform' - import presentation, { createQuery, getClient, ActionContext, contextStore } from '@hcengineering/presentation' + import presentation, { + createQuery, + getClient, + ActionContext, + contextStore, + ComponentExtensions + } from '@hcengineering/presentation' import setting, { settingId } from '@hcengineering/setting' import { Issue, Project } from '@hcengineering/tracker' import { @@ -194,6 +200,7 @@ </span> </svelte:fragment> <svelte:fragment slot="pre-utils"> + <ComponentExtensions extension={tracker.extensions.EditIssueHeader} /> {#if saved} <Label label={presentation.string.Saved} /> {/if} diff --git a/plugins/tracker-resources/src/components/milestones/MilestoneEditor.svelte b/plugins/tracker-resources/src/components/milestones/MilestoneEditor.svelte index da3dba99cc..15dfffddaa 100644 --- a/plugins/tracker-resources/src/components/milestones/MilestoneEditor.svelte +++ b/plugins/tracker-resources/src/components/milestones/MilestoneEditor.svelte @@ -24,12 +24,12 @@ DatePresenter, deviceOptionsStore as deviceInfo } from '@hcengineering/ui' + import { createEventDispatcher } from 'svelte' import { activeMilestone } from '../../issues' import tracker from '../../plugin' import MilestoneSelector from './MilestoneSelector.svelte' - import { createEventDispatcher } from 'svelte' - export let value: Issue | IssueTemplate + export let value: Issue | Issue[] | IssueTemplate export let space: Ref<Project> | undefined = undefined export let isEditable: boolean = true export let shouldShowLabel: boolean = true @@ -51,7 +51,7 @@ const dispatch = createEventDispatcher() const handleMilestoneIdChanged = async (newMilestoneId: Ref<Milestone> | null | undefined) => { - if (!isEditable || newMilestoneId === undefined || value.milestone === newMilestoneId) { + if (!isEditable || newMilestoneId === undefined || (!Array.isArray(value) && value.milestone === newMilestoneId)) { return } if (Array.isArray(value)) { @@ -68,19 +68,19 @@ const milestoneQuery = createQuery() let milestone: Milestone | undefined - $: if (value.milestone) { + $: if (!Array.isArray(value) && value.milestone) { milestoneQuery.query(tracker.class.Milestone, { _id: value.milestone }, (res) => { milestone = res.shift() }) } - $: _space = space ?? value.space + $: _space = space ?? (!Array.isArray(value) ? value.space : { $in: Array.from(new Set(value.map((it) => it.space))) }) $: twoRows = $deviceInfo.twoRows </script> {#if kind === 'list'} - {#if value.milestone} + {#if !Array.isArray(value) && value.milestone} <div class={compression ? 'label-wrapper' : 'clear-mins'}> <MilestoneSelector {kind} @@ -108,7 +108,7 @@ class:label-wrapper={compression} style:flex-direction={twoRows ? 'column' : 'row'} > - {#if (value.milestone && value.milestone !== $activeMilestone && groupBy !== 'milestone') || shouldShowPlaceholder} + {#if (!Array.isArray(value) && value.milestone && value.milestone !== $activeMilestone && groupBy !== 'milestone') || shouldShowPlaceholder} <div class="flex-row-center" class:minus-margin-vSpace={kind === 'list-header'} class:compression style:width> <MilestoneSelector {kind} @@ -122,8 +122,11 @@ {onlyIcon} {enlargedText} space={_space} - showTooltip={{ label: value.milestone ? tracker.string.MoveToMilestone : tracker.string.AddToMilestone }} - value={value.milestone} + showTooltip={{ + label: + !Array.isArray(value) && value.milestone ? tracker.string.MoveToMilestone : tracker.string.AddToMilestone + }} + value={!Array.isArray(value) ? value.milestone : undefined} onChange={handleMilestoneIdChanged} {isAction} /> diff --git a/plugins/tracker-resources/src/components/milestones/MilestoneSelector.svelte b/plugins/tracker-resources/src/components/milestones/MilestoneSelector.svelte index db2f3c1213..be0a2a1952 100644 --- a/plugins/tracker-resources/src/components/milestones/MilestoneSelector.svelte +++ b/plugins/tracker-resources/src/components/milestones/MilestoneSelector.svelte @@ -13,17 +13,17 @@ // limitations under the License. --> <script lang="ts"> - import { Ref, SortingOrder } from '@hcengineering/core' - import { getEmbeddedLabel, IntlString, translate } from '@hcengineering/platform' + import { DocumentQuery, Ref, SortingOrder } from '@hcengineering/core' + import { IntlString, getEmbeddedLabel, translate } from '@hcengineering/platform' import { createQuery } from '@hcengineering/presentation' - import { Milestone, Project } from '@hcengineering/tracker' + import { Milestone } from '@hcengineering/tracker' import type { ButtonKind, ButtonSize, LabelAndProps } from '@hcengineering/ui' - import { Button, ButtonShape, eventToHTMLElement, SelectPopup, showPopup, Label, themeStore } from '@hcengineering/ui' + import { Button, ButtonShape, Label, SelectPopup, eventToHTMLElement, showPopup, themeStore } from '@hcengineering/ui' import tracker from '../../plugin' import { milestoneStatusAssets } from '../../types' export let value: Ref<Milestone> | null | undefined - export let space: Ref<Project> | undefined = undefined + export let space: DocumentQuery<Milestone>['space'] | undefined = undefined export let shouldShowLabel: boolean = true export let isEditable: boolean = true export let onChange: ((newMilestoneId: Ref<Milestone> | undefined) => void) | undefined = undefined diff --git a/plugins/tracker/src/index.ts b/plugins/tracker/src/index.ts index d589e2ee3c..64e8caea55 100644 --- a/plugins/tracker/src/index.ts +++ b/plugins/tracker/src/index.ts @@ -487,6 +487,7 @@ export default plugin(trackerId, { ProjectIssueTargetOptions: '' as Ref<Mixin<ProjectIssueTargetOptions>> }, extensions: { - IssueListHeader: '' as ComponentExtensionId + IssueListHeader: '' as ComponentExtensionId, + EditIssueHeader: '' as ComponentExtensionId } })