From 29257e9fc86e84209b2fd0d5dea0cbad3a9d005d Mon Sep 17 00:00:00 2001 From: Denis Bykhov Date: Wed, 6 Aug 2025 15:19:12 +0500 Subject: [PATCH] Improve process ui (#9645) --- models/process/src/index.ts | 2 + models/process/src/plugin.ts | 1 - packages/ui/src/components/Component.svelte | 6 +- plugins/process-assets/lang/cs.json | 3 +- plugins/process-assets/lang/de.json | 3 +- plugins/process-assets/lang/en.json | 3 +- plugins/process-assets/lang/es.json | 3 +- plugins/process-assets/lang/fr.json | 3 +- plugins/process-assets/lang/it.json | 3 +- plugins/process-assets/lang/ja.json | 3 +- plugins/process-assets/lang/pt.json | 3 +- plugins/process-assets/lang/ru.json | 11 +- plugins/process-assets/lang/zh.json | 3 +- ...ionLogs.svelte => ExecutionDetails.svelte} | 2 + .../src/components/ExecutonPresenter.svelte | 4 +- .../src/components/NextTriggers.svelte | 48 +++++ .../components/criterias/ArrayCriteria.svelte | 108 +++------- .../components/criterias/BaseCriteria.svelte | 183 +++++++++++++++++ .../criterias/BooleanCriteria.svelte | 183 +---------------- .../components/criterias/DateCriteria.svelte | 193 +----------------- .../components/criterias/EnumCriteria.svelte | 183 +---------------- .../criterias/NumberCriteria.svelte | 192 +---------------- .../components/criterias/RefCriteria.svelte | 189 +---------------- .../criterias/StringCriteria.svelte | 183 +---------------- .../UpdateAttributePresenter.svelte | 83 ++++++++ .../presenters/UpdateCardPresenter.svelte | 28 +-- .../settings/CardUpdatePresenter.svelte | 41 +--- .../components/settings/ToDoPresenter.svelte | 43 ++++ .../settings/TriggerPresenter.svelte | 4 +- plugins/process-resources/src/index.ts | 6 +- plugins/process-resources/src/plugin.ts | 12 +- plugins/process-resources/src/query.ts | 174 ++++++++++++++++ plugins/view-assets/lang/cs.json | 4 +- plugins/view-assets/lang/de.json | 4 +- plugins/view-assets/lang/en.json | 4 +- plugins/view-assets/lang/es.json | 4 +- plugins/view-assets/lang/fr.json | 4 +- plugins/view-assets/lang/it.json | 4 +- plugins/view-assets/lang/pt.json | 4 +- plugins/view-assets/lang/ru.json | 4 +- .../src/components/StringPresenter.svelte | 6 +- plugins/view-resources/src/plugin.ts | 5 - plugins/view-resources/src/utils.ts | 92 +++++---- 43 files changed, 738 insertions(+), 1303 deletions(-) rename plugins/process-resources/src/components/{ExecutionLogs.svelte => ExecutionDetails.svelte} (98%) create mode 100644 plugins/process-resources/src/components/NextTriggers.svelte create mode 100644 plugins/process-resources/src/components/criterias/BaseCriteria.svelte create mode 100644 plugins/process-resources/src/components/presenters/UpdateAttributePresenter.svelte create mode 100644 plugins/process-resources/src/components/settings/ToDoPresenter.svelte create mode 100644 plugins/process-resources/src/query.ts diff --git a/models/process/src/index.ts b/models/process/src/index.ts index ce730c1e56..572794a464 100644 --- a/models/process/src/index.ts +++ b/models/process/src/index.ts @@ -1021,6 +1021,7 @@ export function createModel (builder: Builder): void { label: process.string.OnToDoDone, icon: process.icon.ToDo, editor: process.component.ToDoCloseEditor, + presenter: process.component.ToDoSettingPresenter, requiredParams: ['_id'], checkFunction: process.triggerCheck.ToDo, init: false @@ -1035,6 +1036,7 @@ export function createModel (builder: Builder): void { label: process.string.OnToDoCancelled, icon: process.icon.ToDoRemove, editor: process.component.ToDoRemoveEditor, + presenter: process.component.ToDoSettingPresenter, requiredParams: ['_id'], checkFunction: process.triggerCheck.ToDo, init: false diff --git a/models/process/src/plugin.ts b/models/process/src/plugin.ts index 4ba17358cf..7dec168837 100644 --- a/models/process/src/plugin.ts +++ b/models/process/src/plugin.ts @@ -40,7 +40,6 @@ export default mergeIds(processId, process, { ContinueExecution: '' as Ref> }, string: { - Done: '' as IntlString, ConfigLabel: '' as IntlString, ConfigDescription: '' as IntlString, LogAction: '' as IntlString diff --git a/packages/ui/src/components/Component.svelte b/packages/ui/src/components/Component.svelte index faa00cd2e7..120eeeac2b 100644 --- a/packages/ui/src/components/Component.svelte +++ b/packages/ui/src/components/Component.svelte @@ -20,6 +20,7 @@ import ErrorPresenter from './ErrorPresenter.svelte' import Loading from './Loading.svelte' import ErrorBoundary from './internal/ErrorBoundary' + import { clone } from '@hcengineering/core' // Reference to rendered component instance export let innerRef: SvelteComponent | undefined = undefined @@ -31,7 +32,6 @@ export let disabled: boolean = false let _is: AnyComponent | AnySvelteComponent = is - let _props: any = props // See https://github.com/sveltejs/svelte/issues/4068 // When passing undefined prop value, then Svelte uses default value only first time when @@ -39,9 +39,11 @@ // Here we filter out undefined values from props on updates to ensure we don't overwrite them. const filterDefaultUndefined = (pnew: any, pold: any): any => pnew != null - ? Object.fromEntries(Object.entries(pnew).filter(([k, v]) => v !== undefined || pold?.[k] !== undefined)) + ? Object.fromEntries(Object.entries(clone(pnew)).filter(([k, v]) => v !== undefined || pold?.[k] !== undefined)) : pnew + let _props: any = filterDefaultUndefined(props, props) + $: if (!deepEqual(_is, is)) { _is = is } diff --git a/plugins/process-assets/lang/cs.json b/plugins/process-assets/lang/cs.json index dd0f838ab0..bcde0b753d 100644 --- a/plugins/process-assets/lang/cs.json +++ b/plugins/process-assets/lang/cs.json @@ -95,7 +95,8 @@ "Insert": "Vložit", "Remove": "Odstranit", "RemoveFirst": "Odstranit první", - "RemoveLast": "Odstranit poslední" + "RemoveLast": "Odstranit poslední", + "Cancelled": "Zrušeno" }, "error": { "MethodNotFound": "Metoda nenalezena: {methodId}", diff --git a/plugins/process-assets/lang/de.json b/plugins/process-assets/lang/de.json index 7aa1b951e0..fc8b50518a 100644 --- a/plugins/process-assets/lang/de.json +++ b/plugins/process-assets/lang/de.json @@ -95,7 +95,8 @@ "Insert": "Einfügen", "Remove": "Entfernen", "RemoveFirst": "Erstes entfernen", - "RemoveLast": "Letztes entfernen" + "RemoveLast": "Letztes entfernen", + "Cancelled": "Abgebrochen" }, "error": { "MethodNotFound": "Methode nicht gefunden: {methodId}", diff --git a/plugins/process-assets/lang/en.json b/plugins/process-assets/lang/en.json index 464555a00c..e1260f81d0 100644 --- a/plugins/process-assets/lang/en.json +++ b/plugins/process-assets/lang/en.json @@ -100,7 +100,8 @@ "Insert": "Insert", "Remove": "Remove", "RemoveFirst": "Remove first", - "RemoveLast": "Remove last" + "RemoveLast": "Remove last", + "Cancelled": "Cancelled" }, "error": { "MethodNotFound": "Method not found: {methodId}", diff --git a/plugins/process-assets/lang/es.json b/plugins/process-assets/lang/es.json index f4635422fa..bbd8b2cb5c 100644 --- a/plugins/process-assets/lang/es.json +++ b/plugins/process-assets/lang/es.json @@ -100,7 +100,8 @@ "ArraySizeGt": "Tamaño mayor que", "ArraySizeGte": "Tamaño mayor o igual que", "ArraySizeLt": "Tamaño menor que", - "ArraySizeLte": "Tamaño menor o igual que" + "ArraySizeLte": "Tamaño menor o igual que", + "Cancelled": "Cancelado" }, "error": { "MethodNotFound": "Método no encontrado: {methodId}", diff --git a/plugins/process-assets/lang/fr.json b/plugins/process-assets/lang/fr.json index c53503c201..050205ed97 100644 --- a/plugins/process-assets/lang/fr.json +++ b/plugins/process-assets/lang/fr.json @@ -100,7 +100,8 @@ "ArraySizeGt": "Taille supérieure à", "ArraySizeGte": "Taille supérieure ou égale à", "ArraySizeLt": "Taille inférieure à", - "ArraySizeLte": "Taille inférieure ou égale à" + "ArraySizeLte": "Taille inférieure ou égale à", + "Cancelled": "Annulé" }, "error": { "MethodNotFound": "Méthode introuvable : {methodId}", diff --git a/plugins/process-assets/lang/it.json b/plugins/process-assets/lang/it.json index 7c682e8dc1..799db7e362 100644 --- a/plugins/process-assets/lang/it.json +++ b/plugins/process-assets/lang/it.json @@ -100,7 +100,8 @@ "ArraySizeGt": "Dimensione maggiore di", "ArraySizeGte": "Dimensione maggiore o uguale a", "ArraySizeLt": "Dimensione minore di", - "ArraySizeLte": "Dimensione minore o uguale a" + "ArraySizeLte": "Dimensione minore o uguale a", + "Cancelled": "Annullato" }, "error": { "MethodNotFound": "Metodo non trovato: {methodId}", diff --git a/plugins/process-assets/lang/ja.json b/plugins/process-assets/lang/ja.json index fddffd90ee..fc7c711105 100644 --- a/plugins/process-assets/lang/ja.json +++ b/plugins/process-assets/lang/ja.json @@ -99,7 +99,8 @@ "ArraySizeGt": "サイズがより大きい", "ArraySizeGte": "サイズが以上", "ArraySizeLt": "サイズがより小さい", - "ArraySizeLte": "サイズが以下" + "ArraySizeLte": "サイズが以下", + "Cancelled": "キャンセル済み" }, "error": { "MethodNotFound": "メソッドが見つかりません: {methodId}", diff --git a/plugins/process-assets/lang/pt.json b/plugins/process-assets/lang/pt.json index 42f261eafe..d0eff74d13 100644 --- a/plugins/process-assets/lang/pt.json +++ b/plugins/process-assets/lang/pt.json @@ -100,7 +100,8 @@ "ArraySizeGt": "Tamanho maior que", "ArraySizeGte": "Tamanho maior ou igual a", "ArraySizeLt": "Tamanho menor que", - "ArraySizeLte": "Tamanho menor ou igual a" + "ArraySizeLte": "Tamanho menor ou igual a", + "Cancelled": "Cancelado" }, "error": { "MethodNotFound": "Método não encontrado: {methodId}", diff --git a/plugins/process-assets/lang/ru.json b/plugins/process-assets/lang/ru.json index 77bcbb5931..42c1861adf 100644 --- a/plugins/process-assets/lang/ru.json +++ b/plugins/process-assets/lang/ru.json @@ -96,11 +96,12 @@ "Each": "Каждый", "CreateCard": "Создать карточку", "OnCardUpdate": "При обновлении карточки", - "ArraySizeEquals": "Размер равен", - "ArraySizeGt": "Размер больше чем", - "ArraySizeGte": "Размер больше или равен", - "ArraySizeLt": "Размер меньше чем", - "ArraySizeLte": "Размер меньше или равен" + "ArraySizeEquals": "Количество равно", + "ArraySizeGt": "Количество больше", + "ArraySizeGte": "Количество больше или равно", + "ArraySizeLt": "Количество меньше", + "ArraySizeLte": "Количество меньше или равно", + "Cancelled": "Отменено" }, "error": { "MethodNotFound": "Метод не найден: {methodId}", diff --git a/plugins/process-assets/lang/zh.json b/plugins/process-assets/lang/zh.json index b1d880aeff..01ecd3207f 100644 --- a/plugins/process-assets/lang/zh.json +++ b/plugins/process-assets/lang/zh.json @@ -100,7 +100,8 @@ "ArraySizeGt": "大小大于", "ArraySizeGte": "大小大于等于", "ArraySizeLt": "大小小于", - "ArraySizeLte": "大小小于等于" + "ArraySizeLte": "大小小于等于", + "Cancelled": "已取消" }, "error": { "MethodNotFound": "找不到方法:{methodId}", diff --git a/plugins/process-resources/src/components/ExecutionLogs.svelte b/plugins/process-resources/src/components/ExecutionDetails.svelte similarity index 98% rename from plugins/process-resources/src/components/ExecutionLogs.svelte rename to plugins/process-resources/src/components/ExecutionDetails.svelte index 6ed423fecb..907f80717e 100644 --- a/plugins/process-resources/src/components/ExecutionLogs.svelte +++ b/plugins/process-resources/src/components/ExecutionDetails.svelte @@ -26,6 +26,7 @@ ViewletsSettingButton } from '@hcengineering/view-resources' import { createEventDispatcher } from 'svelte' + import NextTriggers from './NextTriggers.svelte' import process from '../plugin' export let execution: Execution @@ -128,6 +129,7 @@ showCancelButton={false} on:close > +
diff --git a/plugins/process-resources/src/components/ExecutonPresenter.svelte b/plugins/process-resources/src/components/ExecutonPresenter.svelte index e6bef70377..db26da87f5 100644 --- a/plugins/process-resources/src/components/ExecutonPresenter.svelte +++ b/plugins/process-resources/src/components/ExecutonPresenter.svelte @@ -19,7 +19,7 @@ import ErrorPresenter from './ErrorPresenter.svelte' import { continueExecution } from '../utils' import { showPopup } from '@hcengineering/ui' - import ExecutionLogs from './ExecutionLogs.svelte' + import ExecutionDetails from './ExecutionDetails.svelte' export let value: WithLookup @@ -29,7 +29,7 @@ function open (): void { showPopup( - ExecutionLogs, + ExecutionDetails, { execution: value }, diff --git a/plugins/process-resources/src/components/NextTriggers.svelte b/plugins/process-resources/src/components/NextTriggers.svelte new file mode 100644 index 0000000000..8352855f84 --- /dev/null +++ b/plugins/process-resources/src/components/NextTriggers.svelte @@ -0,0 +1,48 @@ + + + + +{#if execution.status === ExecutionStatus.Done} +