From 04d35dcead669185f8f8e3139c2fb8907d9e6b77 Mon Sep 17 00:00:00 2001 From: Andrey Sobolev Date: Wed, 13 Mar 2024 12:43:12 +0700 Subject: [PATCH] UBERF-5825: Fix github issues (#4924) Signed-off-by: Andrey Sobolev --- common/config/rush/command-line.json | 2 +- models/tracker/package.json | 3 +- models/tracker/src/index.ts | 4 +- models/tracker/src/plugin.ts | 6 +- models/tracker/src/types.ts | 18 ++- models/tracker/src/viewlets.ts | 9 +- packages/core/src/hierarchy.ts | 11 ++ .../presentation/src/components/Card.svelte | 24 ++-- .../src/components/MessageBox.svelte | 16 ++- .../src/components/NavLink.svelte | 4 +- .../extensions/ComponentExtensions.svelte | 2 +- .../extensions/DocCreateExtComponent.svelte | 18 ++- .../src/components/extensions/manager.ts | 16 ++- packages/presentation/src/types.ts | 10 +- packages/query/src/index.ts | 2 +- packages/ui/src/components/ButtonBase.svelte | 2 + .../src/components/ButtonWithDropdown.svelte | 25 +++- plugins/devmodel-resources/src/index.ts | 3 +- .../src/components/PriorityEditor.svelte | 1 + plugins/tracker-assets/lang/en.json | 3 +- plugins/tracker-assets/lang/es.json | 3 +- plugins/tracker-assets/lang/pt.json | 3 +- plugins/tracker-assets/lang/ru.json | 3 +- .../src/components/CreateIssue.svelte | 121 +++++++++++++++--- .../components/ComponentPresenter.svelte | 26 +--- .../src/components/issues/IssueExtra.svelte | 63 +++++++++ .../components/issues/IssuePresenter.svelte | 21 +-- .../components/issues/edit/EditIssue.svelte | 4 +- .../milestones/MilestoneSelector.svelte | 2 + plugins/tracker-resources/src/index.ts | 4 +- plugins/tracker-resources/src/plugin.ts | 3 - plugins/tracker/package.json | 1 + plugins/tracker/src/index.ts | 22 +++- server/core/src/storage.ts | 5 +- server/core/src/triggers.ts | 3 +- server/core/src/types.ts | 3 + tests/sanity/tests/tracker/filter.spec.ts | 2 +- 37 files changed, 342 insertions(+), 126 deletions(-) create mode 100644 plugins/tracker-resources/src/components/issues/IssueExtra.svelte diff --git a/common/config/rush/command-line.json b/common/config/rush/command-line.json index dec55abd01..73fe2a1869 100644 --- a/common/config/rush/command-line.json +++ b/common/config/rush/command-line.json @@ -19,7 +19,7 @@ "name": "_phase:validate", "dependencies": { "self": ["_phase:build"], - "upstream": ["_phase:validate"] + "upstream": ["_phase:validate", "_phase:build"] }, "ignoreMissingScript": true, "allowWarningsOnSuccess": false diff --git a/models/tracker/package.json b/models/tracker/package.json index bcf2a2b42a..7ba20a041f 100644 --- a/models/tracker/package.json +++ b/models/tracker/package.json @@ -51,6 +51,7 @@ "@hcengineering/tracker-resources": "^0.6.0", "@hcengineering/ui": "^0.6.11", "@hcengineering/view": "^0.6.9", - "@hcengineering/workbench": "^0.6.9" + "@hcengineering/workbench": "^0.6.9", + "@hcengineering/model-preference": "^0.6.0" } } diff --git a/models/tracker/src/index.ts b/models/tracker/src/index.ts index 5f826f29c3..c11ea08856 100644 --- a/models/tracker/src/index.ts +++ b/models/tracker/src/index.ts @@ -36,6 +36,7 @@ import { TIssueTemplate, TMilestone, TProject, + TProjectTargetPreference, TRelatedIssueTarget, TTimeSpendReport, TTypeEstimation, @@ -401,7 +402,8 @@ export function createModel (builder: Builder): void { TTypeReportedTime, TRelatedIssueTarget, TTypeEstimation, - TTypeRemainingTime + TTypeRemainingTime, + TProjectTargetPreference ) builder.mixin(tracker.class.Project, core.class.Class, activity.mixin.ActivityDoc, {}) diff --git a/models/tracker/src/plugin.ts b/models/tracker/src/plugin.ts index d506a4865e..f12964cc9c 100644 --- a/models/tracker/src/plugin.ts +++ b/models/tracker/src/plugin.ts @@ -44,7 +44,8 @@ export default mergeIds(trackerId, tracker, { Unarchive: '' as IntlString, UnarchiveConfirm: '' as IntlString, AllProjects: '' as IntlString, - MapRelatedIssues: '' as IntlString + MapRelatedIssues: '' as IntlString, + Extensions: '' as IntlString }, activity: { TxIssueCreated: '' as AnyComponent, @@ -61,7 +62,8 @@ export default mergeIds(trackerId, tracker, { EditRelatedTargetsPopup: '' as AnyComponent, SettingsRelatedTargets: '' as AnyComponent, IssueSearchIcon: '' as AnyComponent, - MembersArrayEditor: '' as AnyComponent + MembersArrayEditor: '' as AnyComponent, + IssueExtra: '' as AnyComponent }, app: { Tracker: '' as Ref diff --git a/models/tracker/src/types.ts b/models/tracker/src/types.ts index 90d8547575..a352077319 100644 --- a/models/tracker/src/types.ts +++ b/models/tracker/src/types.ts @@ -38,6 +38,7 @@ import { TypeDate, TypeMarkup, TypeNumber, + TypeRecord, TypeRef, TypeString, UX @@ -45,9 +46,10 @@ import { import attachment from '@hcengineering/model-attachment' import core, { TAttachedDoc, TDoc, TStatus, TType } from '@hcengineering/model-core' import task, { TTask, TProject as TTaskProject } from '@hcengineering/model-task' -import { type IntlString } from '@hcengineering/platform' +import { getEmbeddedLabel, type IntlString } from '@hcengineering/platform' import tags, { type TagElement } from '@hcengineering/tags' import { + type ProjectTargetPreference, type Component, type Issue, type IssueChildInfo, @@ -68,6 +70,8 @@ import { import tracker from './plugin' import { type TaskType } from '@hcengineering/task' +import preference, { TPreference } from '@hcengineering/model-preference' + export const DOMAIN_TRACKER = 'tracker' as Domain @Model(tracker.class.IssueStatus, core.class.Status) @@ -392,3 +396,15 @@ export class TTypeEstimation extends TType {} @UX(core.string.Number) @Model(tracker.class.TypeRemainingTime, core.class.Type) export class TTypeRemainingTime extends TType {} + +@Model(tracker.class.ProjectTargetPreference, preference.class.Preference) +export class TProjectTargetPreference extends TPreference implements ProjectTargetPreference { + @Prop(TypeRef(core.class.Space), core.string.Space) + declare attachedTo: Ref + + @Prop(TypeDate(), tracker.string.LastUpdated) + usedOn!: Timestamp + + @Prop(TypeRecord(), getEmbeddedLabel('Properties')) + props?: { key: string, value: any }[] +} diff --git a/models/tracker/src/viewlets.ts b/models/tracker/src/viewlets.ts index f080199179..ee2711ca1d 100644 --- a/models/tracker/src/viewlets.ts +++ b/models/tracker/src/viewlets.ts @@ -19,9 +19,9 @@ import { type Builder } from '@hcengineering/model' import core from '@hcengineering/model-core' import task from '@hcengineering/model-task' import view, { showColorsViewOption } from '@hcengineering/model-view' +import tags from '@hcengineering/tags' import { type BuildModelKey, type ViewOptionsModel } from '@hcengineering/view' import tracker from './plugin' -import tags from '@hcengineering/tags' export const issuesOptions = (kanban: boolean): ViewOptionsModel => ({ groupBy: [ @@ -126,6 +126,13 @@ export function issueConfig ( displayProps: { compression: true }, props: { kind: 'list', full: false } }, + { + key: '', + label: tracker.string.Extensions, + presenter: tracker.component.IssueExtra, + displayProps: { compression: true }, + props: { kind: 'list', full: false } + }, ...(milestone ? [ { diff --git a/packages/core/src/hierarchy.ts b/packages/core/src/hierarchy.ts index 1768f7b6ed..d827addcf0 100644 --- a/packages/core/src/hierarchy.ts +++ b/packages/core/src/hierarchy.ts @@ -56,6 +56,17 @@ export class Hierarchy { return new Proxy(doc, this.getMixinProxyHandler(mixin)) as M } + asIf(doc: D | undefined, mixin: Ref>): M | undefined { + if (doc === undefined) { + return undefined + } + return this.hasMixin(doc, mixin) ? this.as(doc, mixin) : undefined + } + + asIfArray(docs: D[], mixin: Ref>): M[] { + return docs.map((it) => this.asIf(it, mixin)).filter((it) => it !== undefined) as M[] + } + static toDoc(doc: D): D { return _toDoc(doc) } diff --git a/packages/presentation/src/components/Card.svelte b/packages/presentation/src/components/Card.svelte index 7d7be99959..bbed53e71b 100644 --- a/packages/presentation/src/components/Card.svelte +++ b/packages/presentation/src/components/Card.svelte @@ -73,7 +73,7 @@ } } - function handleOkClick () { + function handleOkClick (): void { if (canSave) { if (okProcessing) { return @@ -191,15 +191,19 @@ {#if $$slots.buttons} {/if} - -