From cb3ef3401ab5ce51451c64f7a72edf718533270e Mon Sep 17 00:00:00 2001 From: Denis Bykhov Date: Tue, 9 Sep 2025 14:37:34 +0500 Subject: [PATCH] AddTag action (#9813) Signed-off-by: Denis Bykhov --- models/process/src/index.ts | 14 ++ models/server-process/src/index.ts | 4 + plugins/card-assets/lang/cs.json | 1 + plugins/card-assets/lang/de.json | 1 + plugins/card-assets/lang/en.json | 1 + plugins/card-assets/lang/es.json | 1 + plugins/card-assets/lang/fr.json | 1 + plugins/card-assets/lang/it.json | 1 + plugins/card-assets/lang/ja.json | 1 + plugins/card-assets/lang/pt.json | 1 + plugins/card-assets/lang/ru.json | 1 + plugins/card-assets/lang/zh.json | 1 + plugins/card/src/index.ts | 3 +- .../presenters/AddTagPresenter.svelte | 49 +++++++ .../settings/AddRelationEditor.svelte | 2 +- .../components/settings/AddTagEditor.svelte | 132 ++++++++++++++++++ .../components/settings/TagSelector.svelte | 78 +++++++++++ plugins/process-resources/src/index.ts | 6 +- plugins/process-resources/src/plugin.ts | 4 +- plugins/process/src/index.ts | 3 +- .../process-resources/src/functions.ts | 43 ++++-- server-plugins/process-resources/src/index.ts | 2 + server-plugins/process/src/index.ts | 1 + 23 files changed, 336 insertions(+), 15 deletions(-) create mode 100644 plugins/process-resources/src/components/presenters/AddTagPresenter.svelte create mode 100644 plugins/process-resources/src/components/settings/AddTagEditor.svelte create mode 100644 plugins/process-resources/src/components/settings/TagSelector.svelte diff --git a/models/process/src/index.ts b/models/process/src/index.ts index faabdfad98..ab4340a52e 100644 --- a/models/process/src/index.ts +++ b/models/process/src/index.ts @@ -1051,6 +1051,20 @@ export function createModel (builder: Builder): void { process.method.AddRelation ) + builder.createDoc( + process.class.Method, + core.space.Model, + { + label: card.string.AddTag, + objectClass: card.class.Tag, + editor: process.component.AddTagEditor, + presenter: process.component.AddTagPresenter, + contextClass: card.class.Tag, + requiredParams: ['_id'] + }, + process.method.AddTag + ) + builder.createDoc( process.class.Trigger, core.space.Model, diff --git a/models/server-process/src/index.ts b/models/server-process/src/index.ts index f3b6255dcf..bdd6d59bf5 100644 --- a/models/server-process/src/index.ts +++ b/models/server-process/src/index.ts @@ -91,6 +91,10 @@ export function createModel (builder: Builder): void { func: serverProcess.func.AddRelation }) + builder.mixin(process.method.AddTag, process.class.Method, serverProcess.mixin.MethodImpl, { + func: serverProcess.func.AddTag + }) + builder.mixin(process.function.FirstValue, process.class.ProcessFunction, serverProcess.mixin.FuncImpl, { func: serverProcess.transform.FirstValue }) diff --git a/plugins/card-assets/lang/cs.json b/plugins/card-assets/lang/cs.json index d1de5c9829..9a116e78dc 100644 --- a/plugins/card-assets/lang/cs.json +++ b/plugins/card-assets/lang/cs.json @@ -12,6 +12,7 @@ "Parent": "Nadřazený", "Tags": "Štítky", "Tag": "Štítek", + "AddTag": "Přidat štítek", "CardLibrary": "Knihovna karet", "MinimizeAll": "Minimalizovat vše", "ExpandAll": "Rozbalit vše", diff --git a/plugins/card-assets/lang/de.json b/plugins/card-assets/lang/de.json index 018ae63b5d..ebeeefd4c4 100644 --- a/plugins/card-assets/lang/de.json +++ b/plugins/card-assets/lang/de.json @@ -12,6 +12,7 @@ "Parent": "Eltern", "Tags": "Tags", "Tag": "Tag", + "AddTag": "Tag hinzufügen", "CardLibrary": "Kartenbibliothek", "MinimizeAll": "Alle minimieren", "ExpandAll": "Alle erweitern", diff --git a/plugins/card-assets/lang/en.json b/plugins/card-assets/lang/en.json index de1fd4a1ad..0804c8e012 100644 --- a/plugins/card-assets/lang/en.json +++ b/plugins/card-assets/lang/en.json @@ -12,6 +12,7 @@ "Parent": "Parent", "Tags": "Tags", "Tag": "Tag", + "AddTag": "Add Tag", "CardLibrary": "Card Library", "MinimizeAll": "Minimize All", "ExpandAll": "Expand All", diff --git a/plugins/card-assets/lang/es.json b/plugins/card-assets/lang/es.json index 4a9127e648..d5abde8139 100644 --- a/plugins/card-assets/lang/es.json +++ b/plugins/card-assets/lang/es.json @@ -12,6 +12,7 @@ "Parent": "Padre", "Tags": "Etiquetas", "Tag": "Etiqueta", + "AddTag": "Agregar Etiqueta", "CardLibrary": "Biblioteca de Tarjetas", "MinimizeAll": "Minimizar Todo", "ExpandAll": "Expandir Todo", diff --git a/plugins/card-assets/lang/fr.json b/plugins/card-assets/lang/fr.json index da2a1e73b2..28e9762341 100644 --- a/plugins/card-assets/lang/fr.json +++ b/plugins/card-assets/lang/fr.json @@ -12,6 +12,7 @@ "Parent": "Parent", "Tags": "Étiquettes", "Tag": "Étiquette", + "AddTag": "Ajouter une étiquette", "CardLibrary": "Bibliothèque de cartes", "MinimizeAll": "Tout réduire", "ExpandAll": "Tout développer", diff --git a/plugins/card-assets/lang/it.json b/plugins/card-assets/lang/it.json index b1cd78e3cd..a642912077 100644 --- a/plugins/card-assets/lang/it.json +++ b/plugins/card-assets/lang/it.json @@ -12,6 +12,7 @@ "Parent": "Genitore", "Tags": "Tag", "Tag": "Tag", + "AddTag": "Aggiungi Tag", "CardLibrary": "Libreria Carte", "MinimizeAll": "Minimizza Tutto", "ExpandAll": "Espandi Tutto", diff --git a/plugins/card-assets/lang/ja.json b/plugins/card-assets/lang/ja.json index 37f7355829..48620e3d41 100644 --- a/plugins/card-assets/lang/ja.json +++ b/plugins/card-assets/lang/ja.json @@ -12,6 +12,7 @@ "Parent": "親", "Tags": "タグ", "Tag": "タグ", + "AddTag": "タグを追加", "CardLibrary": "カードライブラリ", "MinimizeAll": "すべて最小化", "ExpandAll": "すべて展開", diff --git a/plugins/card-assets/lang/pt.json b/plugins/card-assets/lang/pt.json index 810cd06c1e..a86bf51b8c 100644 --- a/plugins/card-assets/lang/pt.json +++ b/plugins/card-assets/lang/pt.json @@ -12,6 +12,7 @@ "Parent": "Principal", "Tags": "Tags", "Tag": "Tag", + "AddTag": "Adicionar Tag", "CardLibrary": "Biblioteca de Cartões", "MinimizeAll": "Minimizar Tudo", "ExpandAll": "Expandir Tudo", diff --git a/plugins/card-assets/lang/ru.json b/plugins/card-assets/lang/ru.json index a97feb8901..5bc7380bb0 100644 --- a/plugins/card-assets/lang/ru.json +++ b/plugins/card-assets/lang/ru.json @@ -12,6 +12,7 @@ "Parent": "Родитель", "Tags": "Теги", "Tag": "Тег", + "AddTag": "Добавить тег", "CardLibrary": "Библиотека карт", "MinimizeAll": "Свернуть все", "ExpandAll": "Развернуть все", diff --git a/plugins/card-assets/lang/zh.json b/plugins/card-assets/lang/zh.json index 74edfa617d..a84bf00df9 100644 --- a/plugins/card-assets/lang/zh.json +++ b/plugins/card-assets/lang/zh.json @@ -12,6 +12,7 @@ "Parent": "父级", "Tags": "标签", "Tag": "标签", + "AddTag": "添加标签", "CardLibrary": "卡片库", "MinimizeAll": "全部最小化", "ExpandAll": "全部展开", diff --git a/plugins/card/src/index.ts b/plugins/card/src/index.ts index 429b623bac..2f3669798f 100644 --- a/plugins/card/src/index.ts +++ b/plugins/card/src/index.ts @@ -167,7 +167,8 @@ const cardPlugin = plugin(cardId, { CardApplication: '' as IntlString, Views: '' as IntlString, Labels: '' as IntlString, - GetIndividualPublicLink: '' as IntlString + GetIndividualPublicLink: '' as IntlString, + AddTag: '' as IntlString }, section: { Attachments: '' as Ref, diff --git a/plugins/process-resources/src/components/presenters/AddTagPresenter.svelte b/plugins/process-resources/src/components/presenters/AddTagPresenter.svelte new file mode 100644 index 0000000000..1550674de0 --- /dev/null +++ b/plugins/process-resources/src/components/presenters/AddTagPresenter.svelte @@ -0,0 +1,49 @@ + + + +
+
+ + diff --git a/plugins/process-resources/src/components/settings/AddRelationEditor.svelte b/plugins/process-resources/src/components/settings/AddRelationEditor.svelte index 9614c2f874..bd089e02ac 100644 --- a/plugins/process-resources/src/components/settings/AddRelationEditor.svelte +++ b/plugins/process-resources/src/components/settings/AddRelationEditor.svelte @@ -13,7 +13,7 @@ // limitations under the License. --> + +
+ + + +
+ +{#if possibleAttrs.length > 0} +
+
+{/if} + + diff --git a/plugins/process-resources/src/components/settings/TagSelector.svelte b/plugins/process-resources/src/components/settings/TagSelector.svelte new file mode 100644 index 0000000000..5c69e78cbd --- /dev/null +++ b/plugins/process-resources/src/components/settings/TagSelector.svelte @@ -0,0 +1,78 @@ + + + + diff --git a/plugins/process-resources/src/index.ts b/plugins/process-resources/src/index.ts index e3566c8a19..7ede1cd856 100644 --- a/plugins/process-resources/src/index.ts +++ b/plugins/process-resources/src/index.ts @@ -59,6 +59,8 @@ import NotifierExtension from './components/NotifierExtension.svelte' import AddRelationPresenter from './components/presenters/AddRelationPresenter.svelte' import CreateCardPresenter from './components/presenters/CreateCardPresenter.svelte' import AddRelationEditor from './components/settings/AddRelationEditor.svelte' +import AddTagEditor from './components/settings/AddTagEditor.svelte' +import AddTagPresenter from './components/presenters/AddTagPresenter.svelte' import CardUpdateEditor from './components/settings/CardUpdateEditor.svelte' import CardUpdatePresenter from './components/settings/CardUpdatePresenter.svelte' import CreateCardEditor from './components/settings/CreateCardEditor.svelte' @@ -128,7 +130,9 @@ export default async (): Promise => ({ CardUpdatePresenter, ToDoSettingPresenter, TimeEditor, - TimePresenter + TimePresenter, + AddTagEditor, + AddTagPresenter }, criteriaEditor: { DateCriteria, diff --git a/plugins/process-resources/src/plugin.ts b/plugins/process-resources/src/plugin.ts index 34b95cd503..a722fed6e1 100644 --- a/plugins/process-resources/src/plugin.ts +++ b/plugins/process-resources/src/plugin.ts @@ -66,7 +66,9 @@ export default mergeIds(processId, process, { CardUpdatePresenter: '' as AnyComponent, ToDoSettingPresenter: '' as AnyComponent, TimeEditor: '' as AnyComponent, - TimePresenter: '' as AnyComponent + TimePresenter: '' as AnyComponent, + AddTagEditor: '' as AnyComponent, + AddTagPresenter: '' as AnyComponent }, criteriaEditor: { StringCriteria: '' as AnyComponent, diff --git a/plugins/process/src/index.ts b/plugins/process/src/index.ts index b044b51380..65420b7c61 100644 --- a/plugins/process/src/index.ts +++ b/plugins/process/src/index.ts @@ -201,7 +201,8 @@ export default plugin(processId, { CreateToDo: '' as Ref>, UpdateCard: '' as Ref>, CreateCard: '' as Ref>, - AddRelation: '' as Ref> + AddRelation: '' as Ref>, + AddTag: '' as Ref> }, trigger: { OnCardUpdate: '' as Ref, diff --git a/server-plugins/process-resources/src/functions.ts b/server-plugins/process-resources/src/functions.ts index 1260365285..051122ca75 100644 --- a/server-plugins/process-resources/src/functions.ts +++ b/server-plugins/process-resources/src/functions.ts @@ -13,7 +13,7 @@ // limitations under the License. // -import cardPlugin, { Card, MasterTag } from '@hcengineering/card' +import cardPlugin, { Card, MasterTag, Tag } from '@hcengineering/card' import core, { Association, Data, Doc, generateId, Hierarchy, matchQuery, Ref, Relation, Tx } from '@hcengineering/core' import process, { Execution, @@ -82,10 +82,10 @@ export async function UpdateCard ( params: MethodParams, execution: Execution, control: ProcessControl -): Promise { - if (Object.keys(params).length === 0) return +): Promise { + if (Object.keys(params).length === 0) throw processError(process.error.RequiredParamsNotProvided, { params: 'ANY' }) const target = control.cache.get(execution.card) - if (target === undefined) return + if (target === undefined) throw processError(process.error.ObjectNotFound, { _id: execution.card }) const update: Record = {} const prevValue: Record = {} for (const key in params) { @@ -99,16 +99,39 @@ export async function UpdateCard ( return { txes: res, rollback, context: null } } +export async function AddTag ( + params: MethodParams, + execution: Execution, + control: ProcessControl +): Promise { + const { _id, props } = params + if (_id === undefined) throw processError(process.error.RequiredParamsNotProvided, { params: '_id' }) + const res: Tx[] = [] + const context: Ref[] = [execution.card] + const _process = control.client.getModel().findObject(execution.process) + if (_process === undefined) throw processError(process.error.ObjectNotFound, { _id: execution.process }) + res.push( + control.client.txFactory.createTxMixin( + execution.card, + _process.masterTag, + core.space.Workspace, + _id as Ref, + props + ) + ) + return { txes: res, rollback: undefined, context } +} + export async function RunSubProcess ( params: MethodParams, execution: Execution, control: ProcessControl -): Promise { - if (params._id === undefined) return +): Promise { + if (params._id === undefined) throw processError(process.error.RequiredParamsNotProvided, { params: '_id' }) const card = params.card ?? execution.card const processId = params._id as Ref const target = control.client.getModel().findObject(processId) - if (target === undefined) return + if (target === undefined) throw processError(process.error.ObjectNotFound, { _id: processId }) const res: Tx[] = [] const resultContext: Ref[] = [] for (const _card of Array.isArray(card) ? card : [card]) { @@ -154,14 +177,14 @@ export async function CreateToDo ( params: MethodParams, execution: Execution, control: ProcessControl -): Promise { +): Promise { for (const key in { user: params.user, title: params.title }) { const val = (params as any)[key] if (isEmpty(val)) { throw processError(process.error.RequiredParamsNotProvided, { params: key }) } } - if (params.user === undefined || params.title === undefined) return + if (params.user === undefined || params.title === undefined) return { txes: [], rollback: [], context: null } const res: Tx[] = [] const rollback: Tx[] = [] const id = generateId() @@ -194,7 +217,7 @@ export async function CreateCard ( params: MethodParams, execution: Execution, control: ProcessControl -): Promise { +): Promise { const { _class, title, ...attrs } = params for (const key in { _class, title }) { const val = (params as any)[key] diff --git a/server-plugins/process-resources/src/index.ts b/server-plugins/process-resources/src/index.ts index a029304886..c4311bd267 100644 --- a/server-plugins/process-resources/src/index.ts +++ b/server-plugins/process-resources/src/index.ts @@ -77,6 +77,7 @@ import { UpdateCard, CreateCard, AddRelation, + AddTag, CheckToDo, OnCardUpdateCheck, CheckTime @@ -352,6 +353,7 @@ export default async () => ({ UpdateCard, CreateCard, AddRelation, + AddTag, CheckToDo, OnCardUpdateCheck, CheckTime diff --git a/server-plugins/process/src/index.ts b/server-plugins/process/src/index.ts index 1d3ee93ac4..783dd8e998 100644 --- a/server-plugins/process/src/index.ts +++ b/server-plugins/process/src/index.ts @@ -46,6 +46,7 @@ export default plugin(serverProcessId, { CreateCard: '' as Resource, AddRelation: '' as Resource, WaitSubProcess: '' as Resource, + AddTag: '' as Resource, CheckToDo: '' as Resource, OnCardUpdateCheck: '' as Resource, CheckTime: '' as Resource