@ketvietlab/ketsuite 0.1.29 → 0.1.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +1 -1
- package/dist/modules/account_backend/index.js +0 -6
- package/dist/modules/account_backend/index.js.map +1 -1
- package/dist/modules/account_backend/screens/account-defaults.d.ts.map +1 -1
- package/dist/modules/account_backend/screens/account-defaults.js +1 -1
- package/dist/modules/account_backend/screens/account-defaults.js.map +1 -1
- package/dist/modules/account_backend/screens/account-form.d.ts.map +1 -1
- package/dist/modules/account_backend/screens/account-form.js +3 -1
- package/dist/modules/account_backend/screens/account-form.js.map +1 -1
- package/dist/modules/account_backend/screens/accounts-list.d.ts.map +1 -1
- package/dist/modules/account_backend/screens/accounts-list.js +1 -1
- package/dist/modules/account_backend/screens/accounts-list.js.map +1 -1
- package/dist/modules/account_backend/screens/customer-invoice-form.d.ts.map +1 -1
- package/dist/modules/account_backend/screens/customer-invoice-form.js +1 -1
- package/dist/modules/account_backend/screens/customer-invoice-form.js.map +1 -1
- package/dist/modules/account_backend/screens/customer-invoices-list.d.ts.map +1 -1
- package/dist/modules/account_backend/screens/customer-invoices-list.js +1 -1
- package/dist/modules/account_backend/screens/customer-invoices-list.js.map +1 -1
- package/dist/modules/account_backend/screens/journal-entries-list.d.ts.map +1 -1
- package/dist/modules/account_backend/screens/journal-entries-list.js +1 -1
- package/dist/modules/account_backend/screens/journal-entries-list.js.map +1 -1
- package/dist/modules/account_backend/screens/journal-entry-create.d.ts.map +1 -1
- package/dist/modules/account_backend/screens/journal-entry-create.js +1 -1
- package/dist/modules/account_backend/screens/journal-entry-create.js.map +1 -1
- package/dist/modules/account_backend/screens/journal-form.d.ts.map +1 -1
- package/dist/modules/account_backend/screens/journal-form.js +3 -3
- package/dist/modules/account_backend/screens/journal-form.js.map +1 -1
- package/dist/modules/account_backend/screens/journals-list.d.ts.map +1 -1
- package/dist/modules/account_backend/screens/journals-list.js +1 -1
- package/dist/modules/account_backend/screens/journals-list.js.map +1 -1
- package/dist/modules/account_backend/screens/move-detail.d.ts.map +1 -1
- package/dist/modules/account_backend/screens/move-detail.js +3 -1
- package/dist/modules/account_backend/screens/move-detail.js.map +1 -1
- package/dist/modules/account_backend/screens/opening-balances.d.ts.map +1 -1
- package/dist/modules/account_backend/screens/opening-balances.js +2 -2
- package/dist/modules/account_backend/screens/opening-balances.js.map +1 -1
- package/dist/modules/account_backend/screens/overview.js +4 -2
- package/dist/modules/account_backend/screens/overview.js.map +1 -1
- package/dist/modules/account_backend/screens/payment-form.d.ts.map +1 -1
- package/dist/modules/account_backend/screens/payment-form.js +1 -1
- package/dist/modules/account_backend/screens/payment-form.js.map +1 -1
- package/dist/modules/account_backend/screens/payment-term-form.d.ts.map +1 -1
- package/dist/modules/account_backend/screens/payment-term-form.js +4 -2
- package/dist/modules/account_backend/screens/payment-term-form.js.map +1 -1
- package/dist/modules/account_backend/screens/payment-terms-list.d.ts.map +1 -1
- package/dist/modules/account_backend/screens/payment-terms-list.js +1 -1
- package/dist/modules/account_backend/screens/payment-terms-list.js.map +1 -1
- package/dist/modules/account_backend/screens/payments-list.d.ts.map +1 -1
- package/dist/modules/account_backend/screens/payments-list.js +1 -1
- package/dist/modules/account_backend/screens/payments-list.js.map +1 -1
- package/dist/modules/account_backend/screens/period-closes.d.ts.map +1 -1
- package/dist/modules/account_backend/screens/period-closes.js +1 -1
- package/dist/modules/account_backend/screens/period-closes.js.map +1 -1
- package/dist/modules/account_backend/screens/tax-form.d.ts.map +1 -1
- package/dist/modules/account_backend/screens/tax-form.js +3 -1
- package/dist/modules/account_backend/screens/tax-form.js.map +1 -1
- package/dist/modules/account_backend/screens/taxes-list.d.ts.map +1 -1
- package/dist/modules/account_backend/screens/taxes-list.js +1 -1
- package/dist/modules/account_backend/screens/taxes-list.js.map +1 -1
- package/dist/modules/account_backend/screens/vendor-bill-form.d.ts.map +1 -1
- package/dist/modules/account_backend/screens/vendor-bill-form.js +1 -1
- package/dist/modules/account_backend/screens/vendor-bill-form.js.map +1 -1
- package/dist/modules/account_backend/screens/vendor-bills-list.d.ts.map +1 -1
- package/dist/modules/account_backend/screens/vendor-bills-list.js +1 -1
- package/dist/modules/account_backend/screens/vendor-bills-list.js.map +1 -1
- package/dist/modules/account_partner_backend/screens/accounting-terms.d.ts.map +1 -1
- package/dist/modules/account_partner_backend/screens/accounting-terms.js +1 -1
- package/dist/modules/account_partner_backend/screens/accounting-terms.js.map +1 -1
- package/dist/modules/activity_backend/index.d.ts.map +1 -1
- package/dist/modules/activity_backend/index.js +0 -2
- package/dist/modules/activity_backend/index.js.map +1 -1
- package/dist/modules/activity_backend/screens/activities-list.d.ts.map +1 -1
- package/dist/modules/activity_backend/screens/activities-list.js +1 -1
- package/dist/modules/activity_backend/screens/activities-list.js.map +1 -1
- package/dist/modules/address_backend/index.d.ts.map +1 -1
- package/dist/modules/address_backend/index.js +0 -2
- package/dist/modules/address_backend/index.js.map +1 -1
- package/dist/modules/address_backend/screens/catalogs-list.d.ts.map +1 -1
- package/dist/modules/address_backend/screens/catalogs-list.js +1 -1
- package/dist/modules/address_backend/screens/catalogs-list.js.map +1 -1
- package/dist/modules/attendance_backend/screens/credentials.d.ts.map +1 -1
- package/dist/modules/attendance_backend/screens/credentials.js +1 -1
- package/dist/modules/attendance_backend/screens/credentials.js.map +1 -1
- package/dist/modules/attendance_backend/screens/period.d.ts.map +1 -1
- package/dist/modules/attendance_backend/screens/period.js +1 -1
- package/dist/modules/attendance_backend/screens/period.js.map +1 -1
- package/dist/modules/backend/current-company.d.ts +4 -0
- package/dist/modules/backend/current-company.d.ts.map +1 -0
- package/dist/modules/backend/current-company.js +27 -0
- package/dist/modules/backend/current-company.js.map +1 -0
- package/dist/modules/backend/design/client/backend-shell.d.mts +2 -2
- package/dist/modules/backend/design/client/backend-shell.d.mts.map +1 -1
- package/dist/modules/backend/design/client/backend-shell.mjs +1 -1
- package/dist/modules/backend/design/client/backend-shell.mjs.map +4 -4
- package/dist/modules/backend/design/client/ket-table.d.mts +2 -2
- package/dist/modules/backend/design/client/ket-table.d.mts.map +1 -1
- package/dist/modules/backend/design/client/ket-table.mjs +1 -1
- package/dist/modules/backend/design/client/ket-table.mjs.map +3 -3
- package/dist/modules/backend/design/client/search-filter.d.mts +2 -2
- package/dist/modules/backend/design/client/search-filter.d.mts.map +1 -1
- package/dist/modules/backend/design/client/search-filter.mjs +1 -1
- package/dist/modules/backend/design/client/search-filter.mjs.map +3 -3
- package/dist/modules/backend/design/forms.css +31 -0
- package/dist/modules/backend/index.d.ts +1 -0
- package/dist/modules/backend/index.d.ts.map +1 -1
- package/dist/modules/backend/index.js +1 -0
- package/dist/modules/backend/index.js.map +1 -1
- package/dist/modules/backend/optional-read.d.ts +4 -0
- package/dist/modules/backend/optional-read.d.ts.map +1 -0
- package/dist/modules/backend/optional-read.js +7 -0
- package/dist/modules/backend/optional-read.js.map +1 -0
- package/dist/modules/company_backend/index.d.ts.map +1 -1
- package/dist/modules/company_backend/index.js +0 -2
- package/dist/modules/company_backend/index.js.map +1 -1
- package/dist/modules/company_backend/screens/branch-form.d.ts.map +1 -1
- package/dist/modules/company_backend/screens/branch-form.js +3 -1
- package/dist/modules/company_backend/screens/branch-form.js.map +1 -1
- package/dist/modules/company_backend/screens/companies-list.d.ts.map +1 -1
- package/dist/modules/company_backend/screens/companies-list.js +1 -1
- package/dist/modules/company_backend/screens/companies-list.js.map +1 -1
- package/dist/modules/company_backend/screens/company-form.d.ts.map +1 -1
- package/dist/modules/company_backend/screens/company-form.js +1 -3
- package/dist/modules/company_backend/screens/company-form.js.map +1 -1
- package/dist/modules/company_backend/screens/context.d.ts.map +1 -1
- package/dist/modules/company_backend/screens/context.js +1 -1
- package/dist/modules/company_backend/screens/context.js.map +1 -1
- package/dist/modules/company_backend/screens/hierarchy.d.ts.map +1 -1
- package/dist/modules/company_backend/screens/hierarchy.js +1 -1
- package/dist/modules/company_backend/screens/hierarchy.js.map +1 -1
- package/dist/modules/crm_backend/client/crm-case-modal.d.mts +7 -7
- package/dist/modules/crm_backend/client/crm-case-modal.d.mts.map +1 -1
- package/dist/modules/crm_backend/client/crm-case-modal.mjs +1 -1
- package/dist/modules/crm_backend/client/crm-case-modal.mjs.map +3 -3
- package/dist/modules/crm_backend/client/crm-configuration-modal.d.mts +50 -50
- package/dist/modules/crm_backend/client/crm-configuration-modal.d.mts.map +1 -1
- package/dist/modules/crm_backend/client/crm-configuration-modal.mjs +1 -1
- package/dist/modules/crm_backend/client/crm-configuration-modal.mjs.map +3 -3
- package/dist/modules/crm_backend/messages.d.ts +0 -10
- package/dist/modules/crm_backend/messages.d.ts.map +1 -1
- package/dist/modules/crm_backend/messages.js +0 -10
- package/dist/modules/crm_backend/messages.js.map +1 -1
- package/dist/modules/crm_backend/screens/activity-planner.d.ts.map +1 -1
- package/dist/modules/crm_backend/screens/activity-planner.js +1 -1
- package/dist/modules/crm_backend/screens/activity-planner.js.map +1 -1
- package/dist/modules/crm_backend/screens/case-create.d.ts.map +1 -1
- package/dist/modules/crm_backend/screens/case-create.js +1 -1
- package/dist/modules/crm_backend/screens/case-create.js.map +1 -1
- package/dist/modules/crm_backend/screens/case-detail.d.ts.map +1 -1
- package/dist/modules/crm_backend/screens/case-detail.js +2 -2
- package/dist/modules/crm_backend/screens/case-detail.js.map +1 -1
- package/dist/modules/crm_backend/screens/cases-list.d.ts.map +1 -1
- package/dist/modules/crm_backend/screens/cases-list.js +1 -1
- package/dist/modules/crm_backend/screens/cases-list.js.map +1 -1
- package/dist/modules/crm_backend/screens/configuration.d.ts.map +1 -1
- package/dist/modules/crm_backend/screens/configuration.js +1 -1
- package/dist/modules/crm_backend/screens/configuration.js.map +1 -1
- package/dist/modules/crm_backend/screens/leaderboard.d.ts.map +1 -1
- package/dist/modules/crm_backend/screens/leaderboard.js +1 -1
- package/dist/modules/crm_backend/screens/leaderboard.js.map +1 -1
- package/dist/modules/crm_backend/screens/pipeline.d.ts.map +1 -1
- package/dist/modules/crm_backend/screens/pipeline.js +1 -1
- package/dist/modules/crm_backend/screens/pipeline.js.map +1 -1
- package/dist/modules/flow/domain/command-check.d.ts +3 -0
- package/dist/modules/flow/domain/command-check.d.ts.map +1 -0
- package/dist/modules/flow/domain/command-check.js +9 -0
- package/dist/modules/flow/domain/command-check.js.map +1 -0
- package/dist/modules/flow/domain/command.d.ts +33 -0
- package/dist/modules/flow/domain/command.d.ts.map +1 -0
- package/dist/modules/flow/domain/command.js +35 -0
- package/dist/modules/flow/domain/command.js.map +1 -0
- package/dist/modules/flow/domain/issue-bulk.d.ts +50 -0
- package/dist/modules/flow/domain/issue-bulk.d.ts.map +1 -0
- package/dist/modules/flow/domain/issue-bulk.js +97 -0
- package/dist/modules/flow/domain/issue-bulk.js.map +1 -0
- package/dist/modules/flow/domain/issue-dependency.d.ts +19 -0
- package/dist/modules/flow/domain/issue-dependency.d.ts.map +1 -0
- package/dist/modules/flow/domain/issue-dependency.js +59 -0
- package/dist/modules/flow/domain/issue-dependency.js.map +1 -0
- package/dist/modules/flow/domain/issue-discussion.d.ts +52 -0
- package/dist/modules/flow/domain/issue-discussion.d.ts.map +1 -0
- package/dist/modules/flow/domain/issue-discussion.js +114 -0
- package/dist/modules/flow/domain/issue-discussion.js.map +1 -0
- package/dist/modules/flow/domain/issue-transfer.d.ts +62 -0
- package/dist/modules/flow/domain/issue-transfer.d.ts.map +1 -0
- package/dist/modules/flow/domain/issue-transfer.js +171 -0
- package/dist/modules/flow/domain/issue-transfer.js.map +1 -0
- package/dist/modules/flow/domain/issue-validation.d.ts +68 -0
- package/dist/modules/flow/domain/issue-validation.d.ts.map +1 -0
- package/dist/modules/flow/domain/issue-validation.js +136 -0
- package/dist/modules/flow/domain/issue-validation.js.map +1 -0
- package/dist/modules/flow/domain/issue-write.d.ts +118 -0
- package/dist/modules/flow/domain/issue-write.d.ts.map +1 -0
- package/dist/modules/flow/domain/issue-write.js +372 -0
- package/dist/modules/flow/domain/issue-write.js.map +1 -0
- package/dist/modules/flow/domain/sprint-lifecycle.d.ts +61 -0
- package/dist/modules/flow/domain/sprint-lifecycle.d.ts.map +1 -0
- package/dist/modules/flow/domain/sprint-lifecycle.js +145 -0
- package/dist/modules/flow/domain/sprint-lifecycle.js.map +1 -0
- package/dist/modules/flow/functions/board.d.ts +7 -0
- package/dist/modules/flow/functions/board.d.ts.map +1 -0
- package/dist/modules/flow/functions/board.js +59 -0
- package/dist/modules/flow/functions/board.js.map +1 -0
- package/dist/modules/flow/functions/column.d.ts +8 -0
- package/dist/modules/flow/functions/column.d.ts.map +1 -0
- package/dist/modules/flow/functions/column.js +64 -0
- package/dist/modules/flow/functions/column.js.map +1 -0
- package/dist/modules/flow/functions/effects.d.ts +21 -0
- package/dist/modules/flow/functions/effects.d.ts.map +1 -0
- package/dist/modules/flow/functions/effects.js +96 -0
- package/dist/modules/flow/functions/effects.js.map +1 -0
- package/dist/modules/flow/functions/entity-save.d.ts +4 -0
- package/dist/modules/flow/functions/entity-save.d.ts.map +1 -0
- package/dist/modules/flow/functions/entity-save.js +60 -0
- package/dist/modules/flow/functions/entity-save.js.map +1 -0
- package/dist/modules/flow/functions/epic.d.ts +26 -0
- package/dist/modules/flow/functions/epic.d.ts.map +1 -0
- package/dist/modules/flow/functions/epic.js +151 -0
- package/dist/modules/flow/functions/epic.js.map +1 -0
- package/dist/modules/flow/functions/field.d.ts +9 -0
- package/dist/modules/flow/functions/field.d.ts.map +1 -0
- package/dist/modules/flow/functions/field.js +117 -0
- package/dist/modules/flow/functions/field.js.map +1 -0
- package/dist/modules/flow/functions/index.d.ts +5 -0
- package/dist/modules/flow/functions/index.d.ts.map +1 -0
- package/dist/modules/flow/functions/index.js +42 -0
- package/dist/modules/flow/functions/index.js.map +1 -0
- package/dist/modules/flow/functions/issue-batch.d.ts +6 -0
- package/dist/modules/flow/functions/issue-batch.d.ts.map +1 -0
- package/dist/modules/flow/functions/issue-batch.js +149 -0
- package/dist/modules/flow/functions/issue-batch.js.map +1 -0
- package/dist/modules/flow/functions/issue-dependency.d.ts +8 -0
- package/dist/modules/flow/functions/issue-dependency.d.ts.map +1 -0
- package/dist/modules/flow/functions/issue-dependency.js +54 -0
- package/dist/modules/flow/functions/issue-dependency.js.map +1 -0
- package/dist/modules/flow/functions/issue-discussion.d.ts +6 -0
- package/dist/modules/flow/functions/issue-discussion.d.ts.map +1 -0
- package/dist/modules/flow/functions/issue-discussion.js +86 -0
- package/dist/modules/flow/functions/issue-discussion.js.map +1 -0
- package/dist/modules/flow/functions/issue-read.d.ts +18 -0
- package/dist/modules/flow/functions/issue-read.d.ts.map +1 -0
- package/dist/modules/flow/functions/issue-read.js +159 -0
- package/dist/modules/flow/functions/issue-read.js.map +1 -0
- package/dist/modules/flow/functions/issue-write.d.ts +9 -0
- package/dist/modules/flow/functions/issue-write.d.ts.map +1 -0
- package/dist/modules/flow/functions/issue-write.js +149 -0
- package/dist/modules/flow/functions/issue-write.js.map +1 -0
- package/dist/modules/flow/functions/issueType.d.ts +8 -0
- package/dist/modules/flow/functions/issueType.d.ts.map +1 -0
- package/dist/modules/flow/functions/issueType.js +66 -0
- package/dist/modules/flow/functions/issueType.js.map +1 -0
- package/dist/modules/flow/functions/page.d.ts +22 -0
- package/dist/modules/flow/functions/page.d.ts.map +1 -0
- package/dist/modules/flow/functions/page.js +202 -0
- package/dist/modules/flow/functions/page.js.map +1 -0
- package/dist/modules/flow/functions/project.d.ts +26 -0
- package/dist/modules/flow/functions/project.d.ts.map +1 -0
- package/dist/modules/flow/functions/project.js +381 -0
- package/dist/modules/flow/functions/project.js.map +1 -0
- package/dist/modules/flow/functions/sprint.d.ts +17 -0
- package/dist/modules/flow/functions/sprint.d.ts.map +1 -0
- package/dist/modules/flow/functions/sprint.js +173 -0
- package/dist/modules/flow/functions/sprint.js.map +1 -0
- package/dist/modules/flow/functions/tag.d.ts +14 -0
- package/dist/modules/flow/functions/tag.d.ts.map +1 -0
- package/dist/modules/flow/functions/tag.js +88 -0
- package/dist/modules/flow/functions/tag.js.map +1 -0
- package/dist/modules/flow/index.d.ts +8 -2
- package/dist/modules/flow/index.d.ts.map +1 -1
- package/dist/modules/flow/index.js +7 -2
- package/dist/modules/flow/index.js.map +1 -1
- package/dist/modules/flow/pages.d.ts +1 -1
- package/dist/modules/flow/pages.d.ts.map +1 -1
- package/dist/modules/flow/pages.js +1 -1
- package/dist/modules/flow/pages.js.map +1 -1
- package/dist/modules/flow/queries/calendar.d.ts +21 -0
- package/dist/modules/flow/queries/calendar.d.ts.map +1 -0
- package/dist/modules/flow/queries/calendar.js +31 -0
- package/dist/modules/flow/queries/calendar.js.map +1 -0
- package/dist/modules/flow/queries/issue-dependencies.d.ts +17 -0
- package/dist/modules/flow/queries/issue-dependencies.d.ts.map +1 -0
- package/dist/modules/flow/queries/issue-dependencies.js +46 -0
- package/dist/modules/flow/queries/issue-dependencies.js.map +1 -0
- package/dist/modules/flow/queries/issue-followers.d.ts +6 -0
- package/dist/modules/flow/queries/issue-followers.d.ts.map +1 -0
- package/dist/modules/flow/queries/issue-followers.js +18 -0
- package/dist/modules/flow/queries/issue-followers.js.map +1 -0
- package/dist/modules/flow/queries/issue-list.d.ts +153 -0
- package/dist/modules/flow/queries/issue-list.d.ts.map +1 -0
- package/dist/modules/flow/queries/issue-list.js +439 -0
- package/dist/modules/flow/queries/issue-list.js.map +1 -0
- package/dist/modules/flow/queries/options.d.ts +4 -0
- package/dist/modules/flow/queries/options.d.ts.map +1 -0
- package/dist/modules/flow/queries/options.js +13 -0
- package/dist/modules/flow/queries/options.js.map +1 -0
- package/dist/modules/flow/queries/progress.d.ts +24 -0
- package/dist/modules/flow/queries/progress.d.ts.map +1 -0
- package/dist/modules/flow/queries/progress.js +54 -0
- package/dist/modules/flow/queries/progress.js.map +1 -0
- package/dist/modules/flow/queries/project-list.d.ts +4 -0
- package/dist/modules/flow/queries/project-list.d.ts.map +1 -0
- package/dist/modules/flow/queries/project-list.js +19 -0
- package/dist/modules/flow/queries/project-list.js.map +1 -0
- package/dist/modules/flow_backend/messages.d.ts +1 -2
- package/dist/modules/flow_backend/messages.d.ts.map +1 -1
- package/dist/modules/flow_backend/messages.js +0 -2
- package/dist/modules/flow_backend/messages.js.map +1 -1
- package/dist/modules/flow_backend/routes.js +1 -1
- package/dist/modules/flow_backend/routes.js.map +1 -1
- package/dist/modules/flow_backend/screens/all-epics.d.ts.map +1 -1
- package/dist/modules/flow_backend/screens/all-epics.js +1 -1
- package/dist/modules/flow_backend/screens/all-epics.js.map +1 -1
- package/dist/modules/flow_backend/screens/all-pages.d.ts.map +1 -1
- package/dist/modules/flow_backend/screens/all-pages.js +1 -1
- package/dist/modules/flow_backend/screens/all-pages.js.map +1 -1
- package/dist/modules/flow_backend/screens/epic-detail.js +1 -1
- package/dist/modules/flow_backend/screens/epic-detail.js.map +1 -1
- package/dist/modules/flow_backend/screens/gantt.d.ts.map +1 -1
- package/dist/modules/flow_backend/screens/gantt.js +1 -1
- package/dist/modules/flow_backend/screens/gantt.js.map +1 -1
- package/dist/modules/flow_backend/screens/issue-detail.js +2 -1
- package/dist/modules/flow_backend/screens/issue-detail.js.map +1 -1
- package/dist/modules/flow_backend/screens/issues.d.ts.map +1 -1
- package/dist/modules/flow_backend/screens/issues.js +1 -1
- package/dist/modules/flow_backend/screens/issues.js.map +1 -1
- package/dist/modules/flow_backend/screens/map.js +1 -1
- package/dist/modules/flow_backend/screens/map.js.map +1 -1
- package/dist/modules/flow_backend/screens/my-work.d.ts.map +1 -1
- package/dist/modules/flow_backend/screens/my-work.js +1 -1
- package/dist/modules/flow_backend/screens/my-work.js.map +1 -1
- package/dist/modules/flow_backend/screens/page-detail.js +1 -1
- package/dist/modules/flow_backend/screens/page-detail.js.map +1 -1
- package/dist/modules/flow_backend/screens/project-create.d.ts.map +1 -1
- package/dist/modules/flow_backend/screens/project-create.js +1 -1
- package/dist/modules/flow_backend/screens/project-create.js.map +1 -1
- package/dist/modules/flow_backend/screens/project-pages.d.ts.map +1 -1
- package/dist/modules/flow_backend/screens/project-pages.js +1 -1
- package/dist/modules/flow_backend/screens/project-pages.js.map +1 -1
- package/dist/modules/flow_backend/screens/projects-list.d.ts.map +1 -1
- package/dist/modules/flow_backend/screens/projects-list.js +1 -1
- package/dist/modules/flow_backend/screens/projects-list.js.map +1 -1
- package/dist/modules/flow_backend/screens/sprints.d.ts.map +1 -1
- package/dist/modules/flow_backend/screens/sprints.js +1 -1
- package/dist/modules/flow_backend/screens/sprints.js.map +1 -1
- package/dist/modules/flow_staff_channel/channel-routes.js +1 -1
- package/dist/modules/flow_staff_channel/channel-routes.js.map +1 -1
- package/dist/modules/hospitality_billing/messages.d.ts.map +1 -1
- package/dist/modules/hospitality_billing/messages.js +0 -2
- package/dist/modules/hospitality_billing/messages.js.map +1 -1
- package/dist/modules/hospitality_billing/screens/billing.d.ts.map +1 -1
- package/dist/modules/hospitality_billing/screens/billing.js +1 -1
- package/dist/modules/hospitality_billing/screens/billing.js.map +1 -1
- package/dist/modules/hospitality_billing/screens/page-frame.d.ts +1 -2
- package/dist/modules/hospitality_billing/screens/page-frame.d.ts.map +1 -1
- package/dist/modules/hospitality_billing/screens/page-frame.js +1 -1
- package/dist/modules/hospitality_billing/screens/page-frame.js.map +1 -1
- package/dist/modules/hospitality_core/messages.js +2 -2
- package/dist/modules/hospitality_core/messages.js.map +1 -1
- package/dist/modules/hospitality_core/screens/check-out-prep.d.ts.map +1 -1
- package/dist/modules/hospitality_core/screens/check-out-prep.js +1 -1
- package/dist/modules/hospitality_core/screens/check-out-prep.js.map +1 -1
- package/dist/modules/hospitality_core/screens/front-desk.d.ts.map +1 -1
- package/dist/modules/hospitality_core/screens/front-desk.js +40 -40
- package/dist/modules/hospitality_core/screens/front-desk.js.map +1 -1
- package/dist/modules/hospitality_core/screens/page-frame.d.ts +2 -3
- package/dist/modules/hospitality_core/screens/page-frame.d.ts.map +1 -1
- package/dist/modules/hospitality_core/screens/page-frame.js +3 -3
- package/dist/modules/hospitality_core/screens/page-frame.js.map +1 -1
- package/dist/modules/hospitality_core/screens/tape-chart.d.ts.map +1 -1
- package/dist/modules/hospitality_core/screens/tape-chart.js +3 -12
- package/dist/modules/hospitality_core/screens/tape-chart.js.map +1 -1
- package/dist/modules/hr_backend/screens/employee-form.d.ts.map +1 -1
- package/dist/modules/hr_backend/screens/employee-form.js +1 -1
- package/dist/modules/hr_backend/screens/employee-form.js.map +1 -1
- package/dist/modules/hr_backend/screens/leaves-list.d.ts.map +1 -1
- package/dist/modules/hr_backend/screens/leaves-list.js +1 -1
- package/dist/modules/hr_backend/screens/leaves-list.js.map +1 -1
- package/dist/modules/livedoc/islands.d.ts +9 -0
- package/dist/modules/livedoc/islands.d.ts.map +1 -1
- package/dist/modules/loyalty_backend/messages.d.ts +0 -10
- package/dist/modules/loyalty_backend/messages.d.ts.map +1 -1
- package/dist/modules/loyalty_backend/messages.js +0 -10
- package/dist/modules/loyalty_backend/messages.js.map +1 -1
- package/dist/modules/loyalty_backend/screens/index.d.ts.map +1 -1
- package/dist/modules/loyalty_backend/screens/index.js +5 -5
- package/dist/modules/loyalty_backend/screens/index.js.map +1 -1
- package/dist/modules/loyalty_backend/screens/page-frame.d.ts +2 -3
- package/dist/modules/loyalty_backend/screens/page-frame.d.ts.map +1 -1
- package/dist/modules/loyalty_backend/screens/page-frame.js +2 -2
- package/dist/modules/loyalty_backend/screens/page-frame.js.map +1 -1
- package/dist/modules/mail_backend/index.d.ts.map +1 -1
- package/dist/modules/mail_backend/index.js +0 -2
- package/dist/modules/mail_backend/index.js.map +1 -1
- package/dist/modules/mail_backend/screens/inbox-list.d.ts.map +1 -1
- package/dist/modules/mail_backend/screens/inbox-list.js +1 -1
- package/dist/modules/mail_backend/screens/inbox-list.js.map +1 -1
- package/dist/modules/mail_inbound_backend/index.d.ts.map +1 -1
- package/dist/modules/mail_inbound_backend/index.js +0 -2
- package/dist/modules/mail_inbound_backend/index.js.map +1 -1
- package/dist/modules/mail_inbound_backend/screens/inbound-list.d.ts.map +1 -1
- package/dist/modules/mail_inbound_backend/screens/inbound-list.js +1 -1
- package/dist/modules/mail_inbound_backend/screens/inbound-list.js.map +1 -1
- package/dist/modules/mail_transport_backend/index.d.ts.map +1 -1
- package/dist/modules/mail_transport_backend/index.js +0 -2
- package/dist/modules/mail_transport_backend/index.js.map +1 -1
- package/dist/modules/mail_transport_backend/screens/outbox-list.d.ts.map +1 -1
- package/dist/modules/mail_transport_backend/screens/outbox-list.js +1 -1
- package/dist/modules/mail_transport_backend/screens/outbox-list.js.map +1 -1
- package/dist/modules/manufacturing_backend/screens/order-execution.d.ts.map +1 -1
- package/dist/modules/manufacturing_backend/screens/order-execution.js +1 -1
- package/dist/modules/manufacturing_backend/screens/order-execution.js.map +1 -1
- package/dist/modules/oauth_backend/messages.d.ts +0 -4
- package/dist/modules/oauth_backend/messages.d.ts.map +1 -1
- package/dist/modules/oauth_backend/messages.js +0 -4
- package/dist/modules/oauth_backend/messages.js.map +1 -1
- package/dist/modules/oauth_backend/screens/index.d.ts.map +1 -1
- package/dist/modules/oauth_backend/screens/index.js +5 -5
- package/dist/modules/oauth_backend/screens/index.js.map +1 -1
- package/dist/modules/partner_backend/screens/form.d.ts.map +1 -1
- package/dist/modules/partner_backend/screens/form.js +3 -1
- package/dist/modules/partner_backend/screens/form.js.map +1 -1
- package/dist/modules/partner_backend/screens/list.d.ts.map +1 -1
- package/dist/modules/partner_backend/screens/list.js +1 -1
- package/dist/modules/partner_backend/screens/list.js.map +1 -1
- package/dist/modules/partner_backend/screens/new.d.ts.map +1 -1
- package/dist/modules/partner_backend/screens/new.js +1 -1
- package/dist/modules/partner_backend/screens/new.js.map +1 -1
- package/dist/modules/pricing_backend/index.js +0 -2
- package/dist/modules/pricing_backend/index.js.map +1 -1
- package/dist/modules/pricing_backend/screens/pricelist-detail.d.ts.map +1 -1
- package/dist/modules/pricing_backend/screens/pricelist-detail.js +1 -1
- package/dist/modules/pricing_backend/screens/pricelist-detail.js.map +1 -1
- package/dist/modules/pricing_backend/screens/pricelists-list.d.ts.map +1 -1
- package/dist/modules/pricing_backend/screens/pricelists-list.js +1 -1
- package/dist/modules/pricing_backend/screens/pricelists-list.js.map +1 -1
- package/dist/modules/product_backend/client/attribute-modal.d.mts +4 -4
- package/dist/modules/product_backend/client/attribute-modal.d.mts.map +1 -1
- package/dist/modules/product_backend/client/attribute-modal.mjs +1 -1
- package/dist/modules/product_backend/client/attribute-modal.mjs.map +3 -3
- package/dist/modules/product_backend/client/product-modal.d.mts +8 -8
- package/dist/modules/product_backend/client/product-modal.d.mts.map +1 -1
- package/dist/modules/product_backend/client/product-modal.mjs +1 -1
- package/dist/modules/product_backend/client/product-modal.mjs.map +3 -3
- package/dist/modules/product_backend/client/variant-editor.d.mts +3 -3
- package/dist/modules/product_backend/client/variant-editor.d.mts.map +1 -1
- package/dist/modules/product_backend/client/variant-editor.mjs +1 -1
- package/dist/modules/product_backend/client/variant-editor.mjs.map +3 -3
- package/dist/modules/product_backend/screens/detail.d.ts.map +1 -1
- package/dist/modules/product_backend/screens/detail.js +3 -2
- package/dist/modules/product_backend/screens/detail.js.map +1 -1
- package/dist/modules/product_backend/screens/variant.d.ts.map +1 -1
- package/dist/modules/product_backend/screens/variant.js +3 -2
- package/dist/modules/product_backend/screens/variant.js.map +1 -1
- package/dist/modules/purchase_backend/client/purchase-order-modal.d.mts +185 -0
- package/dist/modules/purchase_backend/client/purchase-order-modal.d.mts.map +1 -0
- package/dist/modules/purchase_backend/client/purchase-order-modal.mjs +2 -0
- package/dist/modules/purchase_backend/client/purchase-order-modal.mjs.map +7 -0
- package/dist/modules/purchase_backend/client/vendor-pricelist-modal.d.mts +52 -0
- package/dist/modules/purchase_backend/client/vendor-pricelist-modal.d.mts.map +1 -0
- package/dist/modules/purchase_backend/client/vendor-pricelist-modal.mjs +2 -0
- package/dist/modules/purchase_backend/client/vendor-pricelist-modal.mjs.map +7 -0
- package/dist/modules/purchase_backend/index.js +83 -14
- package/dist/modules/purchase_backend/index.js.map +1 -1
- package/dist/modules/purchase_backend/modal/context.d.ts +4 -0
- package/dist/modules/purchase_backend/modal/context.d.ts.map +1 -0
- package/dist/modules/purchase_backend/modal/context.js +94 -0
- package/dist/modules/purchase_backend/modal/context.js.map +1 -0
- package/dist/modules/purchase_backend/modal/order-modal-view.d.ts +18 -0
- package/dist/modules/purchase_backend/modal/order-modal-view.d.ts.map +1 -0
- package/dist/modules/purchase_backend/modal/order-modal-view.js +290 -0
- package/dist/modules/purchase_backend/modal/order-modal-view.js.map +1 -0
- package/dist/modules/purchase_backend/modal/pricelist-context.d.ts +3 -0
- package/dist/modules/purchase_backend/modal/pricelist-context.d.ts.map +1 -0
- package/dist/modules/purchase_backend/modal/pricelist-context.js +36 -0
- package/dist/modules/purchase_backend/modal/pricelist-context.js.map +1 -0
- package/dist/modules/purchase_backend/modal/pricelist-view.d.ts +12 -0
- package/dist/modules/purchase_backend/modal/pricelist-view.d.ts.map +1 -0
- package/dist/modules/purchase_backend/modal/pricelist-view.js +78 -0
- package/dist/modules/purchase_backend/modal/pricelist-view.js.map +1 -0
- package/dist/modules/purchase_backend/screens/order-detail.d.ts.map +1 -1
- package/dist/modules/purchase_backend/screens/order-detail.js +4 -2
- package/dist/modules/purchase_backend/screens/order-detail.js.map +1 -1
- package/dist/modules/purchase_backend/screens/overview.d.ts +5 -0
- package/dist/modules/purchase_backend/screens/overview.d.ts.map +1 -1
- package/dist/modules/purchase_backend/screens/overview.js +27 -6
- package/dist/modules/purchase_backend/screens/overview.js.map +1 -1
- package/dist/modules/purchase_backend/screens/rfq-create.d.ts.map +1 -1
- package/dist/modules/purchase_backend/screens/rfq-create.js +1 -1
- package/dist/modules/purchase_backend/screens/rfq-create.js.map +1 -1
- package/dist/modules/purchase_backend/screens/rfqs-list.d.ts +1 -1
- package/dist/modules/purchase_backend/screens/rfqs-list.d.ts.map +1 -1
- package/dist/modules/purchase_backend/screens/rfqs-list.js +1 -1
- package/dist/modules/purchase_backend/screens/rfqs-list.js.map +1 -1
- package/dist/modules/purchase_backend/screens/vendor-pricelist-create.d.ts.map +1 -1
- package/dist/modules/purchase_backend/screens/vendor-pricelist-create.js +1 -1
- package/dist/modules/purchase_backend/screens/vendor-pricelist-create.js.map +1 -1
- package/dist/modules/purchase_backend/screens/vendor-pricelists-list.d.ts +2 -1
- package/dist/modules/purchase_backend/screens/vendor-pricelists-list.d.ts.map +1 -1
- package/dist/modules/purchase_backend/screens/vendor-pricelists-list.js +2 -2
- package/dist/modules/purchase_backend/screens/vendor-pricelists-list.js.map +1 -1
- package/dist/modules/purchase_backend/search.d.ts +1 -1
- package/dist/modules/sale/functions/line-edit.d.ts +4 -0
- package/dist/modules/sale/functions/line-edit.d.ts.map +1 -0
- package/dist/modules/sale/functions/line-edit.js +120 -0
- package/dist/modules/sale/functions/line-edit.js.map +1 -0
- package/dist/modules/sale/index.d.ts.map +1 -1
- package/dist/modules/sale/index.js +16 -1
- package/dist/modules/sale/index.js.map +1 -1
- package/dist/modules/sale_backend/client/invoicing-policy-modal.d.mts +53 -0
- package/dist/modules/sale_backend/client/invoicing-policy-modal.d.mts.map +1 -0
- package/dist/modules/sale_backend/client/invoicing-policy-modal.mjs +2 -0
- package/dist/modules/sale_backend/client/invoicing-policy-modal.mjs.map +7 -0
- package/dist/modules/sale_backend/client/sale-order-modal.d.mts +161 -0
- package/dist/modules/sale_backend/client/sale-order-modal.d.mts.map +1 -0
- package/dist/modules/sale_backend/client/sale-order-modal.mjs +2 -0
- package/dist/modules/sale_backend/client/sale-order-modal.mjs.map +7 -0
- package/dist/modules/sale_backend/index.js +81 -20
- package/dist/modules/sale_backend/index.js.map +1 -1
- package/dist/modules/sale_backend/modal/context.d.ts +4 -0
- package/dist/modules/sale_backend/modal/context.d.ts.map +1 -0
- package/dist/modules/sale_backend/modal/context.js +94 -0
- package/dist/modules/sale_backend/modal/context.js.map +1 -0
- package/dist/modules/sale_backend/modal/order-modal-view.d.ts +18 -0
- package/dist/modules/sale_backend/modal/order-modal-view.d.ts.map +1 -0
- package/dist/modules/sale_backend/modal/order-modal-view.js +289 -0
- package/dist/modules/sale_backend/modal/order-modal-view.js.map +1 -0
- package/dist/modules/sale_backend/modal/policy-context.d.ts +3 -0
- package/dist/modules/sale_backend/modal/policy-context.d.ts.map +1 -0
- package/dist/modules/sale_backend/modal/policy-context.js +26 -0
- package/dist/modules/sale_backend/modal/policy-context.js.map +1 -0
- package/dist/modules/sale_backend/modal/policy-view.d.ts +11 -0
- package/dist/modules/sale_backend/modal/policy-view.d.ts.map +1 -0
- package/dist/modules/sale_backend/modal/policy-view.js +70 -0
- package/dist/modules/sale_backend/modal/policy-view.js.map +1 -0
- package/dist/modules/sale_backend/screens/invoicing-policies-list.d.ts +1 -1
- package/dist/modules/sale_backend/screens/invoicing-policies-list.d.ts.map +1 -1
- package/dist/modules/sale_backend/screens/invoicing-policies-list.js +1 -1
- package/dist/modules/sale_backend/screens/invoicing-policies-list.js.map +1 -1
- package/dist/modules/sale_backend/screens/invoicing-policy-create.d.ts.map +1 -1
- package/dist/modules/sale_backend/screens/invoicing-policy-create.js +1 -1
- package/dist/modules/sale_backend/screens/invoicing-policy-create.js.map +1 -1
- package/dist/modules/sale_backend/screens/order-detail.d.ts.map +1 -1
- package/dist/modules/sale_backend/screens/order-detail.js +3 -1
- package/dist/modules/sale_backend/screens/order-detail.js.map +1 -1
- package/dist/modules/sale_backend/screens/overview.d.ts +3 -0
- package/dist/modules/sale_backend/screens/overview.d.ts.map +1 -1
- package/dist/modules/sale_backend/screens/overview.js +22 -14
- package/dist/modules/sale_backend/screens/overview.js.map +1 -1
- package/dist/modules/sale_backend/screens/quotation-create.d.ts.map +1 -1
- package/dist/modules/sale_backend/screens/quotation-create.js +1 -1
- package/dist/modules/sale_backend/screens/quotation-create.js.map +1 -1
- package/dist/modules/sale_backend/screens/quotations-list.d.ts +1 -1
- package/dist/modules/sale_backend/screens/quotations-list.d.ts.map +1 -1
- package/dist/modules/sale_backend/screens/quotations-list.js +1 -1
- package/dist/modules/sale_backend/screens/quotations-list.js.map +1 -1
- package/dist/modules/sale_backend/screens/sales-orders-list.d.ts.map +1 -1
- package/dist/modules/sale_backend/screens/sales-orders-list.js +1 -1
- package/dist/modules/sale_backend/screens/sales-orders-list.js.map +1 -1
- package/dist/modules/stock/functions/inventory-preview.d.ts +4 -0
- package/dist/modules/stock/functions/inventory-preview.d.ts.map +1 -0
- package/dist/modules/stock/functions/inventory-preview.js +68 -0
- package/dist/modules/stock/functions/inventory-preview.js.map +1 -0
- package/dist/modules/stock/index.d.ts.map +1 -1
- package/dist/modules/stock/index.js +14 -1
- package/dist/modules/stock/index.js.map +1 -1
- package/dist/modules/stock_backend/client/inventory-count-modal.d.mts +60 -0
- package/dist/modules/stock_backend/client/inventory-count-modal.d.mts.map +1 -0
- package/dist/modules/stock_backend/client/inventory-count-modal.mjs +2 -0
- package/dist/modules/stock_backend/client/inventory-count-modal.mjs.map +7 -0
- package/dist/modules/stock_backend/client/stock-configuration-modal.d.mts +105 -0
- package/dist/modules/stock_backend/client/stock-configuration-modal.d.mts.map +1 -0
- package/dist/modules/stock_backend/client/stock-configuration-modal.mjs +2 -0
- package/dist/modules/stock_backend/client/stock-configuration-modal.mjs.map +7 -0
- package/dist/modules/stock_backend/client/stock-transfer-modal.d.mts +130 -0
- package/dist/modules/stock_backend/client/stock-transfer-modal.d.mts.map +1 -0
- package/dist/modules/stock_backend/client/stock-transfer-modal.mjs +2 -0
- package/dist/modules/stock_backend/client/stock-transfer-modal.mjs.map +7 -0
- package/dist/modules/stock_backend/functions/index.d.ts +10 -0
- package/dist/modules/stock_backend/functions/index.d.ts.map +1 -0
- package/dist/modules/stock_backend/functions/index.js +20 -0
- package/dist/modules/stock_backend/functions/index.js.map +1 -0
- package/dist/modules/stock_backend/functions.d.ts +1 -9
- package/dist/modules/stock_backend/functions.d.ts.map +1 -1
- package/dist/modules/stock_backend/functions.js +1 -18
- package/dist/modules/stock_backend/functions.js.map +1 -1
- package/dist/modules/stock_backend/index.js +52 -0
- package/dist/modules/stock_backend/index.js.map +1 -1
- package/dist/modules/stock_backend/islands.d.ts +8 -0
- package/dist/modules/stock_backend/islands.d.ts.map +1 -1
- package/dist/modules/stock_backend/islands.js +41 -0
- package/dist/modules/stock_backend/islands.js.map +1 -1
- package/dist/modules/stock_backend/modal/configuration-context.d.ts +3 -0
- package/dist/modules/stock_backend/modal/configuration-context.d.ts.map +1 -0
- package/dist/modules/stock_backend/modal/configuration-context.js +65 -0
- package/dist/modules/stock_backend/modal/configuration-context.js.map +1 -0
- package/dist/modules/stock_backend/modal/configuration-view.d.ts +21 -0
- package/dist/modules/stock_backend/modal/configuration-view.d.ts.map +1 -0
- package/dist/modules/stock_backend/modal/configuration-view.js +201 -0
- package/dist/modules/stock_backend/modal/configuration-view.js.map +1 -0
- package/dist/modules/stock_backend/modal/configuration.d.ts +20 -0
- package/dist/modules/stock_backend/modal/configuration.d.ts.map +1 -0
- package/dist/modules/stock_backend/modal/configuration.js +117 -0
- package/dist/modules/stock_backend/modal/configuration.js.map +1 -0
- package/dist/modules/stock_backend/modal/inventory-context.d.ts +3 -0
- package/dist/modules/stock_backend/modal/inventory-context.d.ts.map +1 -0
- package/dist/modules/stock_backend/modal/inventory-context.js +37 -0
- package/dist/modules/stock_backend/modal/inventory-context.js.map +1 -0
- package/dist/modules/stock_backend/modal/inventory-view.d.ts +14 -0
- package/dist/modules/stock_backend/modal/inventory-view.d.ts.map +1 -0
- package/dist/modules/stock_backend/modal/inventory-view.js +142 -0
- package/dist/modules/stock_backend/modal/inventory-view.js.map +1 -0
- package/dist/modules/stock_backend/modal/transfer-context.d.ts +3 -0
- package/dist/modules/stock_backend/modal/transfer-context.d.ts.map +1 -0
- package/dist/modules/stock_backend/modal/transfer-context.js +54 -0
- package/dist/modules/stock_backend/modal/transfer-context.js.map +1 -0
- package/dist/modules/stock_backend/modal/transfer-view.d.ts +15 -0
- package/dist/modules/stock_backend/modal/transfer-view.d.ts.map +1 -0
- package/dist/modules/stock_backend/modal/transfer-view.js +252 -0
- package/dist/modules/stock_backend/modal/transfer-view.js.map +1 -0
- package/dist/modules/stock_backend/routes.d.ts.map +1 -1
- package/dist/modules/stock_backend/routes.js +117 -34
- package/dist/modules/stock_backend/routes.js.map +1 -1
- package/dist/modules/stock_backend/screens/forecast.d.ts.map +1 -1
- package/dist/modules/stock_backend/screens/forecast.js +5 -32
- package/dist/modules/stock_backend/screens/forecast.js.map +1 -1
- package/dist/modules/stock_backend/screens/inventory.d.ts +3 -1
- package/dist/modules/stock_backend/screens/inventory.d.ts.map +1 -1
- package/dist/modules/stock_backend/screens/inventory.js +27 -74
- package/dist/modules/stock_backend/screens/inventory.js.map +1 -1
- package/dist/modules/stock_backend/screens/location-create.d.ts.map +1 -1
- package/dist/modules/stock_backend/screens/location-create.js +1 -1
- package/dist/modules/stock_backend/screens/location-create.js.map +1 -1
- package/dist/modules/stock_backend/screens/locations-list.d.ts +1 -1
- package/dist/modules/stock_backend/screens/locations-list.d.ts.map +1 -1
- package/dist/modules/stock_backend/screens/locations-list.js +1 -1
- package/dist/modules/stock_backend/screens/locations-list.js.map +1 -1
- package/dist/modules/stock_backend/screens/lot-create.d.ts.map +1 -1
- package/dist/modules/stock_backend/screens/lot-create.js +1 -1
- package/dist/modules/stock_backend/screens/lot-create.js.map +1 -1
- package/dist/modules/stock_backend/screens/lot-detail.d.ts.map +1 -1
- package/dist/modules/stock_backend/screens/lot-detail.js +3 -2
- package/dist/modules/stock_backend/screens/lot-detail.js.map +1 -1
- package/dist/modules/stock_backend/screens/lots-list.d.ts +1 -1
- package/dist/modules/stock_backend/screens/lots-list.d.ts.map +1 -1
- package/dist/modules/stock_backend/screens/lots-list.js +1 -1
- package/dist/modules/stock_backend/screens/lots-list.js.map +1 -1
- package/dist/modules/stock_backend/screens/overview.d.ts +9 -0
- package/dist/modules/stock_backend/screens/overview.d.ts.map +1 -0
- package/dist/modules/stock_backend/screens/overview.js +38 -0
- package/dist/modules/stock_backend/screens/overview.js.map +1 -0
- package/dist/modules/stock_backend/screens/picking-type-create.d.ts.map +1 -1
- package/dist/modules/stock_backend/screens/picking-type-create.js +1 -1
- package/dist/modules/stock_backend/screens/picking-type-create.js.map +1 -1
- package/dist/modules/stock_backend/screens/picking-types-list.d.ts +1 -1
- package/dist/modules/stock_backend/screens/picking-types-list.d.ts.map +1 -1
- package/dist/modules/stock_backend/screens/picking-types-list.js +1 -1
- package/dist/modules/stock_backend/screens/picking-types-list.js.map +1 -1
- package/dist/modules/stock_backend/screens/replenishment-create.d.ts.map +1 -1
- package/dist/modules/stock_backend/screens/replenishment-create.js +1 -1
- package/dist/modules/stock_backend/screens/replenishment-create.js.map +1 -1
- package/dist/modules/stock_backend/screens/replenishment-list.d.ts +2 -2
- package/dist/modules/stock_backend/screens/replenishment-list.d.ts.map +1 -1
- package/dist/modules/stock_backend/screens/replenishment-list.js +2 -2
- package/dist/modules/stock_backend/screens/replenishment-list.js.map +1 -1
- package/dist/modules/stock_backend/screens/stock-route-create.d.ts.map +1 -1
- package/dist/modules/stock_backend/screens/stock-route-create.js +1 -1
- package/dist/modules/stock_backend/screens/stock-route-create.js.map +1 -1
- package/dist/modules/stock_backend/screens/stock-route-detail.js +2 -1
- package/dist/modules/stock_backend/screens/stock-route-detail.js.map +1 -1
- package/dist/modules/stock_backend/screens/stock-routes-list.d.ts +1 -1
- package/dist/modules/stock_backend/screens/stock-routes-list.d.ts.map +1 -1
- package/dist/modules/stock_backend/screens/stock-routes-list.js +1 -1
- package/dist/modules/stock_backend/screens/stock-routes-list.js.map +1 -1
- package/dist/modules/stock_backend/screens/transfer-create.d.ts.map +1 -1
- package/dist/modules/stock_backend/screens/transfer-create.js +1 -1
- package/dist/modules/stock_backend/screens/transfer-create.js.map +1 -1
- package/dist/modules/stock_backend/screens/transfer-detail.d.ts.map +1 -1
- package/dist/modules/stock_backend/screens/transfer-detail.js +3 -2
- package/dist/modules/stock_backend/screens/transfer-detail.js.map +1 -1
- package/dist/modules/stock_backend/screens/transfers-list.d.ts +1 -1
- package/dist/modules/stock_backend/screens/transfers-list.d.ts.map +1 -1
- package/dist/modules/stock_backend/screens/transfers-list.js +1 -1
- package/dist/modules/stock_backend/screens/transfers-list.js.map +1 -1
- package/dist/modules/stock_backend/screens/warehouse-create.d.ts.map +1 -1
- package/dist/modules/stock_backend/screens/warehouse-create.js +1 -1
- package/dist/modules/stock_backend/screens/warehouse-create.js.map +1 -1
- package/dist/modules/stock_backend/screens/warehouses-list.d.ts +1 -1
- package/dist/modules/stock_backend/screens/warehouses-list.d.ts.map +1 -1
- package/dist/modules/stock_backend/screens/warehouses-list.js +1 -1
- package/dist/modules/stock_backend/screens/warehouses-list.js.map +1 -1
- package/dist/modules/stock_backend/search.d.ts +29 -0
- package/dist/modules/stock_backend/search.d.ts.map +1 -1
- package/dist/modules/stock_backend/search.js +22 -0
- package/dist/modules/stock_backend/search.js.map +1 -1
- package/dist/modules/user_backend/client/access-policy-modal.d.mts +4 -4
- package/dist/modules/user_backend/client/access-policy-modal.d.mts.map +1 -1
- package/dist/modules/user_backend/client/access-policy-modal.mjs +1 -1
- package/dist/modules/user_backend/client/access-policy-modal.mjs.map +3 -3
- package/dist/modules/user_backend/client/role-modal.d.mts +6 -6
- package/dist/modules/user_backend/client/role-modal.d.mts.map +1 -1
- package/dist/modules/user_backend/client/role-modal.mjs +1 -1
- package/dist/modules/user_backend/client/role-modal.mjs.map +3 -3
- package/dist/modules/user_backend/client/user-modal.d.mts +8 -8
- package/dist/modules/user_backend/client/user-modal.d.mts.map +1 -1
- package/dist/modules/user_backend/client/user-modal.mjs +1 -1
- package/dist/modules/user_backend/client/user-modal.mjs.map +3 -3
- package/dist/modules/user_backend/messages.d.ts +0 -6
- package/dist/modules/user_backend/messages.d.ts.map +1 -1
- package/dist/modules/user_backend/messages.js +0 -6
- package/dist/modules/user_backend/messages.js.map +1 -1
- package/dist/modules/user_backend/screens/access-policies-list.d.ts.map +1 -1
- package/dist/modules/user_backend/screens/access-policies-list.js +1 -1
- package/dist/modules/user_backend/screens/access-policies-list.js.map +1 -1
- package/dist/modules/user_backend/screens/profile-form.d.ts.map +1 -1
- package/dist/modules/user_backend/screens/profile-form.js +1 -1
- package/dist/modules/user_backend/screens/profile-form.js.map +1 -1
- package/dist/modules/user_backend/screens/roles-list.d.ts.map +1 -1
- package/dist/modules/user_backend/screens/roles-list.js +1 -1
- package/dist/modules/user_backend/screens/roles-list.js.map +1 -1
- package/dist/modules/user_backend/screens/users-list.d.ts.map +1 -1
- package/dist/modules/user_backend/screens/users-list.js +1 -1
- package/dist/modules/user_backend/screens/users-list.js.map +1 -1
- package/dist/modules/website_backend/screens/page-frame.d.ts +2 -3
- package/dist/modules/website_backend/screens/page-frame.d.ts.map +1 -1
- package/dist/modules/website_backend/screens/page-frame.js +2 -2
- package/dist/modules/website_backend/screens/page-frame.js.map +1 -1
- package/dist/permission-catalogue.d.ts.map +1 -1
- package/dist/permission-catalogue.js +2 -0
- package/dist/permission-catalogue.js.map +1 -1
- package/dist/role-templates.d.ts.map +1 -1
- package/dist/role-templates.js +23 -3
- package/dist/role-templates.js.map +1 -1
- package/dist/scaffold/index.js +1 -1
- package/dist/ui/client/live-doc-shell.d.ts +27 -1
- package/dist/ui/client/live-doc-shell.d.ts.map +1 -1
- package/dist/ui/client/live-doc-shell.js +43 -5
- package/dist/ui/client/live-doc-shell.js.map +1 -1
- package/dist/ui/client/live-doc-tail.d.ts +4 -0
- package/dist/ui/client/live-doc-tail.d.ts.map +1 -0
- package/dist/ui/client/live-doc-tail.js +21 -0
- package/dist/ui/client/live-doc-tail.js.map +1 -0
- package/dist/ui/client/live-doc-view.d.ts +18 -0
- package/dist/ui/client/live-doc-view.d.ts.map +1 -1
- package/dist/ui/client/live-doc-view.js +183 -4
- package/dist/ui/client/live-doc-view.js.map +1 -1
- package/dist/ui/client/live-doc.css +81 -0
- package/dist/ui/client/live-doc.d.mts +6 -3
- package/dist/ui/client/live-doc.d.mts.map +1 -1
- package/dist/ui/client/live-doc.mjs +14 -10
- package/dist/ui/client/live-doc.mjs.map +4 -4
- package/dist/ui/layout.d.ts +2 -2
- package/dist/ui/layout.d.ts.map +1 -1
- package/dist/ui/layout.js +3 -3
- package/dist/ui/layout.js.map +1 -1
- package/package.json +4 -4
- package/dist/modules/flow/functions.d.ts +0 -3
- package/dist/modules/flow/functions.d.ts.map +0 -1
- package/dist/modules/flow/functions.js +0 -1857
- package/dist/modules/flow/functions.js.map +0 -1
- package/dist/modules/flow/operations.d.ts +0 -414
- package/dist/modules/flow/operations.d.ts.map +0 -1
- package/dist/modules/flow/operations.js +0 -1671
- package/dist/modules/flow/operations.js.map +0 -1
|
@@ -0,0 +1,372 @@
|
|
|
1
|
+
import { actorRequired, commandKey, invalid, issue, n, now } from './command.js';
|
|
2
|
+
import { ISSUE_PRIORITIES } from '../types.js';
|
|
3
|
+
import { assignableSprint, columnOf, fieldValueError, fieldsOfProject, issueEpic, issueType, parentIssueError, projectExists, userExists, } from './issue-validation.js';
|
|
4
|
+
import { readableRow } from '../membership.js';
|
|
5
|
+
import { deleteFrom, eq, from, inArray } from '@ketvietlab/ketjs';
|
|
6
|
+
import { followIssue } from './issue-discussion.js';
|
|
7
|
+
import { ensureThread, postMessage } from '../../mail/index.js';
|
|
8
|
+
export async function saveIssue(ctx, input) {
|
|
9
|
+
if (!commandKey(input.idempotencyKey))
|
|
10
|
+
return invalid(issue('idempotencyKey', 'flow.error.idempotencyRequired'));
|
|
11
|
+
if (!actorRequired(ctx))
|
|
12
|
+
return invalid(issue('actor', 'flow.error.actorRequired'));
|
|
13
|
+
if (!String(input.title ?? '').trim())
|
|
14
|
+
return invalid(issue('title', 'flow.error.required'));
|
|
15
|
+
if (!ISSUE_PRIORITIES.includes(String(input.priority ?? 'normal')))
|
|
16
|
+
return invalid(issue('priority', 'flow.error.invalidPriority'));
|
|
17
|
+
if (!(await projectExists(ctx, input.projectId)))
|
|
18
|
+
return invalid(issue('projectId', 'flow.error.notFound'));
|
|
19
|
+
const column = await columnOf(ctx, input.columnId);
|
|
20
|
+
if (!column || String(column.projectId) !== String(input.projectId))
|
|
21
|
+
return invalid(issue('columnId', 'flow.error.invalidColumn'));
|
|
22
|
+
if (!(await userExists(ctx, input.assigneeUserId)))
|
|
23
|
+
return invalid(issue('assigneeUserId', 'flow.error.notFound'));
|
|
24
|
+
const sprint = await assignableSprint(ctx, input.sprintId);
|
|
25
|
+
if (sprint === undefined)
|
|
26
|
+
return invalid(issue('sprintId', 'flow.error.sprintClosed'));
|
|
27
|
+
if (sprint && String(sprint.projectId) !== String(input.projectId))
|
|
28
|
+
return invalid(issue('sprintId', 'flow.error.sprintProjectMismatch'));
|
|
29
|
+
const epic = await issueEpic(ctx, input.epicId);
|
|
30
|
+
if (epic === undefined)
|
|
31
|
+
return invalid(issue('epicId', 'flow.error.notFound'));
|
|
32
|
+
if (epic && String(epic.projectId) !== String(input.projectId))
|
|
33
|
+
return invalid(issue('epicId', 'flow.error.epicProjectMismatch'));
|
|
34
|
+
const kind = await issueType(ctx, input.typeId);
|
|
35
|
+
if (kind === undefined)
|
|
36
|
+
return invalid(issue('typeId', 'flow.error.notFound'));
|
|
37
|
+
if (kind && String(kind.projectId) !== String(input.projectId))
|
|
38
|
+
return invalid(issue('typeId', 'flow.error.typeProjectMismatch'));
|
|
39
|
+
return ctx.tx(async (tx) => {
|
|
40
|
+
const existing = await readableRow(tx, 'flow.Issue', input.id);
|
|
41
|
+
if (existing && String(existing.projectId) !== String(input.projectId))
|
|
42
|
+
return invalid(issue('projectId', 'flow.error.immutableProject'));
|
|
43
|
+
// moveIssue is the only door into a column, because it is the one that
|
|
44
|
+
// checks `blocks` dependencies before letting an issue reach a terminal
|
|
45
|
+
// state. Save used to keep `existing.columnId` and still answer ok, so a
|
|
46
|
+
// caller asking for a different column was told the move had happened.
|
|
47
|
+
if (existing && String(existing.columnId) !== String(input.columnId))
|
|
48
|
+
return invalid(issue('columnId', 'flow.error.columnNeedsMove'));
|
|
49
|
+
const parentError = await parentIssueError(tx, input.id, input.parentIssueId, String(input.projectId));
|
|
50
|
+
if (parentError)
|
|
51
|
+
return invalid(parentError);
|
|
52
|
+
// Resolved before the issue row is touched: `tx` only rolls back on a
|
|
53
|
+
// thrown exception, not on a plain `return invalid(...)`, so validating
|
|
54
|
+
// tags after the insert/compareAndSet below committed a half-written
|
|
55
|
+
// issue (row present, no tags, caller told `ok: false`) on every bad
|
|
56
|
+
// tagId — found by seeding 1000 issues and finding "failed" ones that
|
|
57
|
+
// existed anyway.
|
|
58
|
+
const tagIds = input.tagIds ? [...new Set(input.tagIds)] : null;
|
|
59
|
+
if (tagIds) {
|
|
60
|
+
const tags = tagIds.length
|
|
61
|
+
? await tx.db.all(from(tx.table('flow.Tag')).where(inArray(tx.table('flow.Tag').id, tagIds), eq(tx.table('flow.Tag').active, true)))
|
|
62
|
+
: [];
|
|
63
|
+
if (tags.length !== tagIds.length)
|
|
64
|
+
return invalid(issue('tagIds', 'flow.error.notFound'));
|
|
65
|
+
}
|
|
66
|
+
// Custom field values, resolved and checked here for the same reason the
|
|
67
|
+
// tags above are: `tx` rolls back on a thrown exception, not on a returned
|
|
68
|
+
// `invalid`, so anything validated after the write below leaves a
|
|
69
|
+
// half-written issue behind and still reports failure.
|
|
70
|
+
const fieldWrites = [];
|
|
71
|
+
if (input.fields) {
|
|
72
|
+
const defs = await fieldsOfProject(tx, input.projectId);
|
|
73
|
+
for (const [key, raw] of Object.entries(input.fields)) {
|
|
74
|
+
const field = defs.get(String(key));
|
|
75
|
+
// A field this project does not have, rather than one that is merely
|
|
76
|
+
// empty: naming it is a mistake worth reporting, the same as an epic
|
|
77
|
+
// from another board.
|
|
78
|
+
if (!field)
|
|
79
|
+
return invalid(issue(`field:${key}`, 'flow.error.fieldUnknown'));
|
|
80
|
+
const error = fieldValueError(field, raw);
|
|
81
|
+
if (error)
|
|
82
|
+
return invalid(error);
|
|
83
|
+
fieldWrites.push({ field, value: String(raw ?? '').trim() });
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
const timestamp = now();
|
|
87
|
+
const nextVersion = n(existing?.version) + 1;
|
|
88
|
+
// A reference the caller did not mention keeps what is stored; an
|
|
89
|
+
// explicit null clears it. `priority` and `estimate` below already read
|
|
90
|
+
// this way, but epic, sprint, parent, assignee and due date did not — so
|
|
91
|
+
// any caller sending a partial record silently cleared the rest. The
|
|
92
|
+
// issue detail screen is exactly that caller: its form carries no sprint
|
|
93
|
+
// and no parent field (both have their own action), so editing a title
|
|
94
|
+
// dropped the issue out of its sprint and orphaned its sub-task link.
|
|
95
|
+
const kept = (given, stored) => given === undefined ? (stored ?? null) : given || null;
|
|
96
|
+
const values = {
|
|
97
|
+
projectId: input.projectId,
|
|
98
|
+
columnId: existing ? existing.columnId : input.columnId,
|
|
99
|
+
typeId: input.typeId === undefined ? (existing?.typeId ?? null) : kind ? kind.id : null,
|
|
100
|
+
epicId: input.epicId === undefined ? (existing?.epicId ?? null) : epic ? epic.id : null,
|
|
101
|
+
sprintId: input.sprintId === undefined ? (existing?.sprintId ?? null) : sprint ? sprint.id : null,
|
|
102
|
+
parentIssueId: kept(input.parentIssueId, existing?.parentIssueId),
|
|
103
|
+
title: input.title.trim(),
|
|
104
|
+
assigneeUserId: kept(input.assigneeUserId, existing?.assigneeUserId),
|
|
105
|
+
priority: input.priority ?? existing?.priority ?? 'normal',
|
|
106
|
+
startDate: kept(input.startDate, existing?.startDate),
|
|
107
|
+
dueDate: kept(input.dueDate, existing?.dueDate),
|
|
108
|
+
estimate: input.estimate == null ? (existing?.estimate ?? null) : String(input.estimate),
|
|
109
|
+
active: true,
|
|
110
|
+
version: nextVersion,
|
|
111
|
+
updatedAt: timestamp,
|
|
112
|
+
};
|
|
113
|
+
let threadId;
|
|
114
|
+
if (existing) {
|
|
115
|
+
const expected = input.expectedVersion ?? n(existing.version);
|
|
116
|
+
const changed = await tx.db.compareAndSet('flow.Issue', { id: input.id }, { version: expected }, values);
|
|
117
|
+
if (!('dryRun' in changed) && !changed.matched)
|
|
118
|
+
return invalid(issue('version', 'flow.error.conflict', { current: existing.version }));
|
|
119
|
+
threadId = String(existing.threadId);
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
const thread = await ensureIssueThread(tx, input.id, input.title.trim(), timestamp);
|
|
123
|
+
threadId = String(thread.id);
|
|
124
|
+
await tx.db.insert('flow.Issue', {
|
|
125
|
+
id: input.id,
|
|
126
|
+
...values,
|
|
127
|
+
threadId: thread.id,
|
|
128
|
+
createdByUserId: tx.actor ?? null,
|
|
129
|
+
createdAt: timestamp,
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
if (tagIds) {
|
|
133
|
+
const IT = tx.table('flow.IssueTag');
|
|
134
|
+
await tx.db.del(deleteFrom(IT).where(eq(IT.issueId, input.id)));
|
|
135
|
+
for (const tagId of tagIds)
|
|
136
|
+
await tx.db.insertIfAbsent('flow.IssueTag', { id: `${input.id}:${tagId}`, issueId: input.id, tagId });
|
|
137
|
+
}
|
|
138
|
+
// One row per issue and field, so a value is replaced rather than
|
|
139
|
+
// accumulated. Emptying one deletes the row instead of storing "": a field
|
|
140
|
+
// nobody has answered and a field answered with nothing read the same on
|
|
141
|
+
// screen, and only one of them should cost a row.
|
|
142
|
+
for (const { field, value } of fieldWrites) {
|
|
143
|
+
const id = `${input.id}:${String(field.id)}`;
|
|
144
|
+
if (!value) {
|
|
145
|
+
const V = tx.table('flow.IssueFieldValue');
|
|
146
|
+
await tx.db.del(deleteFrom(V).where(eq(V.id, id)));
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
// insertIfAbsent then update, rather than branching on whether the row
|
|
150
|
+
// exists: `db.update` answers with a result object either way, so there
|
|
151
|
+
// is nothing truthy to branch on, and the pair is correct in both cases.
|
|
152
|
+
await tx.db.insertIfAbsent('flow.IssueFieldValue', {
|
|
153
|
+
id,
|
|
154
|
+
issueId: input.id,
|
|
155
|
+
fieldId: field.id,
|
|
156
|
+
value,
|
|
157
|
+
});
|
|
158
|
+
await tx.db.update('flow.IssueFieldValue', { id }, { value });
|
|
159
|
+
}
|
|
160
|
+
// Whoever opened it, and whoever it lands on, are subscribed to its
|
|
161
|
+
// thread. Until this existed the thread had no followers at all, so
|
|
162
|
+
// `postMessage` addressed nobody and every comment notified nobody — the
|
|
163
|
+
// discussion feature was wired end to end and silently inert.
|
|
164
|
+
if (!existing)
|
|
165
|
+
await followIssue(tx, threadId, tx.actor);
|
|
166
|
+
const assignee = values.assigneeUserId;
|
|
167
|
+
if (assignee)
|
|
168
|
+
await followIssue(tx, threadId, assignee);
|
|
169
|
+
// Only what actually moved: a system entry on every title edit is noise,
|
|
170
|
+
// and the timeline is the one place that has to stay readable.
|
|
171
|
+
const handedOver = assignee && String(assignee) !== String(existing?.assigneeUserId ?? '')
|
|
172
|
+
? [
|
|
173
|
+
{
|
|
174
|
+
field: 'assigneeUserId',
|
|
175
|
+
...(existing?.assigneeUserId ? { oldValue: String(existing.assigneeUserId) } : {}),
|
|
176
|
+
newValue: String(assignee),
|
|
177
|
+
},
|
|
178
|
+
]
|
|
179
|
+
: [];
|
|
180
|
+
const rescheduled = existing
|
|
181
|
+
? [
|
|
182
|
+
...moved('dueDate', existing.dueDate, values.dueDate),
|
|
183
|
+
...moved('priority', existing.priority, values.priority),
|
|
184
|
+
]
|
|
185
|
+
: [];
|
|
186
|
+
if (handedOver.length || rescheduled.length)
|
|
187
|
+
await postMessage(tx, {
|
|
188
|
+
id: `${input.id}:assigned:${nextVersion}`,
|
|
189
|
+
threadId,
|
|
190
|
+
authorUserId: tx.actor ?? undefined,
|
|
191
|
+
kind: 'system',
|
|
192
|
+
// A message key, resolved by whoever renders the timeline — the same
|
|
193
|
+
// arrangement crm_backend's `entryBody` already reads. Handing an issue
|
|
194
|
+
// over keeps its own key, because that is the entry people look for.
|
|
195
|
+
body: rescheduled.length && !handedOver.length ? 'flow.timeline.changed' : 'flow.timeline.assigned',
|
|
196
|
+
tracking: [...handedOver, ...rescheduled],
|
|
197
|
+
});
|
|
198
|
+
return { ok: true, id: input.id, version: nextVersion };
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* One system entry per command, carrying every tracked field that moved.
|
|
203
|
+
*
|
|
204
|
+
* The timeline used to record exactly one thing — who an issue was handed to —
|
|
205
|
+
* so "who put this in Done, and when" had no answer anywhere in the system. The
|
|
206
|
+
* fields tracked are the ones a person asks about afterwards: the column, the
|
|
207
|
+
* deadline, the priority and the sprint. Title and description are deliberately
|
|
208
|
+
* out: an entry per keystroke is what makes a timeline unreadable, and both
|
|
209
|
+
* already have their own history in the Live Doc.
|
|
210
|
+
*
|
|
211
|
+
* One message rather than one per field, because a single edit that moved three
|
|
212
|
+
* of them is one thing that happened.
|
|
213
|
+
*/
|
|
214
|
+
export async function trackIssueChange(tx, input) {
|
|
215
|
+
if (!input.changes.length || !input.threadId)
|
|
216
|
+
return;
|
|
217
|
+
await postMessage(tx, {
|
|
218
|
+
id: `${input.issueId}:changed:${input.version}`,
|
|
219
|
+
threadId: String(input.threadId),
|
|
220
|
+
authorUserId: tx.actor ?? undefined,
|
|
221
|
+
kind: 'system',
|
|
222
|
+
body: input.body,
|
|
223
|
+
tracking: input.changes,
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
/** A change worth an entry, or nothing when the value did not actually move. */
|
|
227
|
+
export const moved = (field, before, after) => {
|
|
228
|
+
const from = before == null || before === '' ? '' : String(before);
|
|
229
|
+
const to = after == null || after === '' ? '' : String(after);
|
|
230
|
+
if (from === to)
|
|
231
|
+
return [];
|
|
232
|
+
return [{ field, ...(from ? { oldValue: from } : {}), ...(to ? { newValue: to } : {}) }];
|
|
233
|
+
};
|
|
234
|
+
export async function ensureIssueThread(ctx, issueId, title, createdAt) {
|
|
235
|
+
return ensureThread(ctx, {
|
|
236
|
+
id: `thread:flow.Issue:${issueId}`,
|
|
237
|
+
resModel: 'flow.Issue',
|
|
238
|
+
resId: issueId,
|
|
239
|
+
displayName: title,
|
|
240
|
+
createdAt,
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
export async function moveIssue(ctx, input) {
|
|
244
|
+
if (!actorRequired(ctx))
|
|
245
|
+
return invalid(issue('actor', 'flow.error.actorRequired'));
|
|
246
|
+
if (!commandKey(input.idempotencyKey))
|
|
247
|
+
return invalid(issue('idempotencyKey', 'flow.error.idempotencyRequired'));
|
|
248
|
+
return ctx.tx(async (tx) => {
|
|
249
|
+
const held = await readableRow(tx, 'flow.Issue', input.id);
|
|
250
|
+
if (!held)
|
|
251
|
+
return invalid(issue('id', 'flow.error.notFound'));
|
|
252
|
+
const column = await columnOf(tx, input.columnId);
|
|
253
|
+
if (!column || String(column.projectId) !== String(held.projectId))
|
|
254
|
+
return invalid(issue('columnId', 'flow.error.invalidColumn'));
|
|
255
|
+
if (column.terminalState === true) {
|
|
256
|
+
const blockers = (await tx.db.select('flow.IssueDependency', { issueId: input.id, relation: 'blocks' })).map((row) => String(row.dependsOnIssueId));
|
|
257
|
+
if (blockers.length) {
|
|
258
|
+
const blockingIssues = await tx.db.all(from(tx.table('flow.Issue')).where(inArray(tx.table('flow.Issue').id, blockers)));
|
|
259
|
+
const columnIds = [...new Set(blockingIssues.map((row) => String(row.columnId)))];
|
|
260
|
+
const blockingColumns = columnIds.length
|
|
261
|
+
? await tx.db.all(from(tx.table('flow.Column')).where(inArray(tx.table('flow.Column').id, columnIds)))
|
|
262
|
+
: [];
|
|
263
|
+
const terminal = new Set(blockingColumns.filter((row) => row.terminalState === true).map((row) => String(row.id)));
|
|
264
|
+
const open = blockingIssues.filter((row) => !terminal.has(String(row.columnId)));
|
|
265
|
+
if (open.length)
|
|
266
|
+
return invalid(issue('columnId', 'flow.error.blocked'));
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
const timestamp = now();
|
|
270
|
+
const changed = await tx.db.compareAndSet('flow.Issue', { id: input.id }, { version: input.expectedVersion }, { columnId: input.columnId, version: n(held.version) + 1, updatedAt: timestamp });
|
|
271
|
+
if (!('dryRun' in changed) && !changed.matched)
|
|
272
|
+
return invalid(issue('version', 'flow.error.conflict', { current: held.version }));
|
|
273
|
+
await trackIssueChange(tx, {
|
|
274
|
+
issueId: input.id,
|
|
275
|
+
threadId: held.threadId,
|
|
276
|
+
version: n(held.version) + 1,
|
|
277
|
+
body: 'flow.timeline.moved',
|
|
278
|
+
changes: moved('columnId', held.columnId, input.columnId),
|
|
279
|
+
});
|
|
280
|
+
return { ok: true, id: input.id, version: n(held.version) + 1 };
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
export async function assignSprint(ctx, input) {
|
|
284
|
+
if (!actorRequired(ctx))
|
|
285
|
+
return invalid(issue('actor', 'flow.error.actorRequired'));
|
|
286
|
+
if (!commandKey(input.idempotencyKey))
|
|
287
|
+
return invalid(issue('idempotencyKey', 'flow.error.idempotencyRequired'));
|
|
288
|
+
return ctx.tx(async (tx) => {
|
|
289
|
+
const held = await readableRow(tx, 'flow.Issue', input.id);
|
|
290
|
+
if (!held)
|
|
291
|
+
return invalid(issue('id', 'flow.error.notFound'));
|
|
292
|
+
const sprint = await assignableSprint(tx, input.sprintId);
|
|
293
|
+
if (sprint === undefined)
|
|
294
|
+
return invalid(issue('sprintId', 'flow.error.sprintClosed'));
|
|
295
|
+
if (sprint && String(sprint.projectId) !== String(held.projectId))
|
|
296
|
+
return invalid(issue('sprintId', 'flow.error.sprintProjectMismatch'));
|
|
297
|
+
const timestamp = now();
|
|
298
|
+
const changed = await tx.db.compareAndSet('flow.Issue', { id: input.id }, { version: input.expectedVersion }, { sprintId: sprint ? sprint.id : null, version: n(held.version) + 1, updatedAt: timestamp });
|
|
299
|
+
if (!('dryRun' in changed) && !changed.matched)
|
|
300
|
+
return invalid(issue('version', 'flow.error.conflict', { current: held.version }));
|
|
301
|
+
await trackIssueChange(tx, {
|
|
302
|
+
issueId: input.id,
|
|
303
|
+
threadId: held.threadId,
|
|
304
|
+
version: n(held.version) + 1,
|
|
305
|
+
body: 'flow.timeline.sprint',
|
|
306
|
+
changes: moved('sprintId', held.sprintId, sprint ? sprint.id : null),
|
|
307
|
+
});
|
|
308
|
+
return { ok: true, id: input.id, version: n(held.version) + 1 };
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Leaves an issue's thread.
|
|
313
|
+
*
|
|
314
|
+
* The only way out of a subscription this module hands out freely: being
|
|
315
|
+
* assigned an issue, commenting on one, or being mentioned in one all
|
|
316
|
+
* subscribe you, and every comment afterwards reaches you. Without this the
|
|
317
|
+
* follower set only ever grows, and a single mention in a busy spec is a
|
|
318
|
+
* standing appointment nobody agreed to.
|
|
319
|
+
*
|
|
320
|
+
* Answers ok when there was nothing to remove, because "I do not want these"
|
|
321
|
+
* is satisfied either way.
|
|
322
|
+
*/
|
|
323
|
+
/**
|
|
324
|
+
* Take an issue off the board without pretending it was finished.
|
|
325
|
+
*
|
|
326
|
+
* `Issue.active` has been in the model and in four indexes since Flow was
|
|
327
|
+
* written, `issue.list` has taken `includeArchived`, and nothing has ever
|
|
328
|
+
* written `false` — so the only way to clear a cancelled task was to drop it in
|
|
329
|
+
* the done column, which made every progress figure lie about it.
|
|
330
|
+
*
|
|
331
|
+
* Under compare-and-set, unlike `page.archive`: an issue carries a version
|
|
332
|
+
* because two people work the same one, and archiving from a stale screen is
|
|
333
|
+
* exactly the kind of mistake that guard exists for.
|
|
334
|
+
*
|
|
335
|
+
* What archiving is *not*: it is not completion and it is not deletion.
|
|
336
|
+
* Dependencies stay, so an archived blocker still blocks — silently unblocking
|
|
337
|
+
* work is the worst way to clear a blocker (FLW-DEC-011). Sub-tasks keep their
|
|
338
|
+
* parent, so restoring a parent restores the branch as it was.
|
|
339
|
+
*/
|
|
340
|
+
export async function archiveIssue(ctx, input) {
|
|
341
|
+
return setIssueActive(ctx, input, false);
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Put it back, exactly where it was.
|
|
345
|
+
*
|
|
346
|
+
* Unlike `page.restore` this needs no reparenting rule: a sub-task of an
|
|
347
|
+
* archived parent is still listed on every board and list of its own, so it
|
|
348
|
+
* cannot come back invisible the way a page under an archived page would.
|
|
349
|
+
*/
|
|
350
|
+
export async function restoreIssue(ctx, input) {
|
|
351
|
+
return setIssueActive(ctx, input, true);
|
|
352
|
+
}
|
|
353
|
+
export async function setIssueActive(ctx, input, active) {
|
|
354
|
+
if (!actorRequired(ctx))
|
|
355
|
+
return invalid(issue('actor', 'flow.error.actorRequired'));
|
|
356
|
+
if (!commandKey(input.idempotencyKey))
|
|
357
|
+
return invalid(issue('idempotencyKey', 'flow.error.idempotencyRequired'));
|
|
358
|
+
return ctx.tx(async (tx) => {
|
|
359
|
+
const held = await readableRow(tx, 'flow.Issue', input.id);
|
|
360
|
+
if (!held)
|
|
361
|
+
return invalid(issue('id', 'flow.error.notFound'));
|
|
362
|
+
// Already where the caller wants it: say so rather than burning a version.
|
|
363
|
+
if (Boolean(held.active) === active)
|
|
364
|
+
return { ok: true, id: input.id, version: n(held.version) };
|
|
365
|
+
if (n(held.version) !== input.expectedVersion)
|
|
366
|
+
return invalid(issue('version', 'flow.error.conflict', { current: held.version }));
|
|
367
|
+
const version = n(held.version) + 1;
|
|
368
|
+
await tx.db.update('flow.Issue', { id: input.id }, { active, version, updatedAt: now() });
|
|
369
|
+
return { ok: true, id: input.id, version };
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
//# sourceMappingURL=issue-write.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue-write.js","sourceRoot":"","sources":["../../../../../../../../packages/ketsuite/src/modules/flow/domain/issue-write.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { Ctx } from '@ketvietlab/ketjs';
|
|
2
|
+
import type { FlowResult } from './command.ts';
|
|
3
|
+
/**
|
|
4
|
+
* Contend on one row per project, so an invariant that spans rows has
|
|
5
|
+
* something a database can serialize — see `flow.ProjectGuard`.
|
|
6
|
+
*
|
|
7
|
+
* The row is made on first use rather than with the project: a project that
|
|
8
|
+
* never starts a sprint never needs one, and creating it here means projects
|
|
9
|
+
* that predate this code get one the first time it matters.
|
|
10
|
+
*/
|
|
11
|
+
export declare function serializeProject(ctx: Ctx, projectId: string): Promise<void>;
|
|
12
|
+
export declare function startSprint(ctx: Ctx, input: {
|
|
13
|
+
id: string;
|
|
14
|
+
idempotencyKey: string;
|
|
15
|
+
}): Promise<FlowResult>;
|
|
16
|
+
/**
|
|
17
|
+
* Close a sprint, and say what happens to the work that did not finish.
|
|
18
|
+
*
|
|
19
|
+
* Closing used to change one column and stop. The issues stayed in a sprint
|
|
20
|
+
* nobody would look at again, and moving them was one screen each — the step
|
|
21
|
+
* every sprint process has, done by hand.
|
|
22
|
+
*
|
|
23
|
+
* `carryTo` names where the unfinished work goes: another sprint of the same
|
|
24
|
+
* project that is still open, or `null` to take it out of the sprint entirely.
|
|
25
|
+
* Omitting it leaves the work where it is, which is what closing has always
|
|
26
|
+
* done, so no existing caller changes behaviour.
|
|
27
|
+
*
|
|
28
|
+
* The carry is not compare-and-set. A sprint close is a deliberate act on the
|
|
29
|
+
* whole set, and failing it because one issue was edited a second ago would be
|
|
30
|
+
* the wrong answer; the version still moves, so anyone with that issue open
|
|
31
|
+
* gets the conflict on their own next save.
|
|
32
|
+
*/
|
|
33
|
+
/**
|
|
34
|
+
* Remove a sprint that was never started.
|
|
35
|
+
*
|
|
36
|
+
* Only `planned`, and there is no way back from `closed` at all. FLW-DEC-015
|
|
37
|
+
* asked which of the two a sprint is — a record of what a team did in a
|
|
38
|
+
* fortnight, or a planning tool somebody can take back — and the answer was
|
|
39
|
+
* the record. So `closed` is final: every figure that reports on the past
|
|
40
|
+
* reads a closed sprint, and those figures stay put. `closeSprint` is how a
|
|
41
|
+
* sprint ends; this is for the other case, one made by mistake or planned and
|
|
42
|
+
* then abandoned before it ever began.
|
|
43
|
+
*
|
|
44
|
+
* A sprint closed by accident is recovered by planning the next one, not by
|
|
45
|
+
* reopening the last.
|
|
46
|
+
*
|
|
47
|
+
* Issues planned into it are let go rather than deleted with it. They go back
|
|
48
|
+
* to the backlog, which is where they were before somebody put them in a
|
|
49
|
+
* sprint that never happened; taking the work away with the plan would be a
|
|
50
|
+
* surprise nobody asked for (FLW-016).
|
|
51
|
+
*/
|
|
52
|
+
export declare function deleteSprint(ctx: Ctx, input: {
|
|
53
|
+
id: string;
|
|
54
|
+
idempotencyKey: string;
|
|
55
|
+
}): Promise<FlowResult>;
|
|
56
|
+
export declare function closeSprint(ctx: Ctx, input: {
|
|
57
|
+
id: string;
|
|
58
|
+
carryTo?: string | null;
|
|
59
|
+
idempotencyKey: string;
|
|
60
|
+
}): Promise<FlowResult>;
|
|
61
|
+
//# sourceMappingURL=sprint-lifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sprint-lifecycle.d.ts","sourceRoot":"","sources":["../../../../../../../packages/ketsuite/src/modules/flow/domain/sprint-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AAE5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAK9C;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIjF;AAED,wBAAsB,WAAW,CAC/B,GAAG,EAAE,GAAG,EACR,KAAK,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GAC5C,OAAO,CAAC,UAAU,CAAC,CAoBrB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,GAAG,EACR,KAAK,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GAC5C,OAAO,CAAC,UAAU,CAAC,CAerB;AAED,wBAAsB,WAAW,CAC/B,GAAG,EAAE,GAAG,EACR,KAAK,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GACrE,OAAO,CAAC,UAAU,CAAC,CAiDrB"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { actorRequired, commandKey, invalid, issue, n, now } from './command.js';
|
|
2
|
+
import { readableRow } from '../membership.js';
|
|
3
|
+
import { deleteFrom, eq } from '@ketvietlab/ketjs';
|
|
4
|
+
import { moved, trackIssueChange } from './issue-write.js';
|
|
5
|
+
/**
|
|
6
|
+
* Contend on one row per project, so an invariant that spans rows has
|
|
7
|
+
* something a database can serialize — see `flow.ProjectGuard`.
|
|
8
|
+
*
|
|
9
|
+
* The row is made on first use rather than with the project: a project that
|
|
10
|
+
* never starts a sprint never needs one, and creating it here means projects
|
|
11
|
+
* that predate this code get one the first time it matters.
|
|
12
|
+
*/
|
|
13
|
+
export async function serializeProject(ctx, projectId) {
|
|
14
|
+
const id = `guard:${projectId}`;
|
|
15
|
+
await ctx.db.insertIfAbsent('flow.ProjectGuard', { id, projectId, updatedAt: now() });
|
|
16
|
+
await ctx.db.update('flow.ProjectGuard', { id }, { updatedAt: now() });
|
|
17
|
+
}
|
|
18
|
+
export async function startSprint(ctx, input) {
|
|
19
|
+
if (!actorRequired(ctx))
|
|
20
|
+
return invalid(issue('actor', 'flow.error.actorRequired'));
|
|
21
|
+
if (!commandKey(input.idempotencyKey))
|
|
22
|
+
return invalid(issue('idempotencyKey', 'flow.error.idempotencyRequired'));
|
|
23
|
+
return ctx.tx(async (tx) => {
|
|
24
|
+
const held = await readableRow(tx, 'flow.Sprint', input.id);
|
|
25
|
+
if (!held)
|
|
26
|
+
return invalid(issue('id', 'flow.error.notFound'));
|
|
27
|
+
if (held.state !== 'planned')
|
|
28
|
+
return invalid(issue('id', 'flow.error.invalidSprintState'));
|
|
29
|
+
// Take the project's guard row before reading, so a second caller doing
|
|
30
|
+
// the same thing waits here rather than racing past the check below. The
|
|
31
|
+
// read after it is a new statement and so takes a fresh snapshot, which is
|
|
32
|
+
// what lets it see a sprint the other transaction has just started.
|
|
33
|
+
await serializeProject(tx, String(held.projectId));
|
|
34
|
+
// A project runs at most one active sprint at a time, which is what makes
|
|
35
|
+
// "the current sprint" a well-defined thing for the board to show.
|
|
36
|
+
const active = await tx.db.select('flow.Sprint', { projectId: held.projectId, state: 'active' });
|
|
37
|
+
if (active.length)
|
|
38
|
+
return invalid(issue('id', 'flow.error.sprintAlreadyActive'));
|
|
39
|
+
await tx.db.update('flow.Sprint', { id: input.id }, { state: 'active' });
|
|
40
|
+
return { ok: true, id: input.id };
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Close a sprint, and say what happens to the work that did not finish.
|
|
45
|
+
*
|
|
46
|
+
* Closing used to change one column and stop. The issues stayed in a sprint
|
|
47
|
+
* nobody would look at again, and moving them was one screen each — the step
|
|
48
|
+
* every sprint process has, done by hand.
|
|
49
|
+
*
|
|
50
|
+
* `carryTo` names where the unfinished work goes: another sprint of the same
|
|
51
|
+
* project that is still open, or `null` to take it out of the sprint entirely.
|
|
52
|
+
* Omitting it leaves the work where it is, which is what closing has always
|
|
53
|
+
* done, so no existing caller changes behaviour.
|
|
54
|
+
*
|
|
55
|
+
* The carry is not compare-and-set. A sprint close is a deliberate act on the
|
|
56
|
+
* whole set, and failing it because one issue was edited a second ago would be
|
|
57
|
+
* the wrong answer; the version still moves, so anyone with that issue open
|
|
58
|
+
* gets the conflict on their own next save.
|
|
59
|
+
*/
|
|
60
|
+
/**
|
|
61
|
+
* Remove a sprint that was never started.
|
|
62
|
+
*
|
|
63
|
+
* Only `planned`, and there is no way back from `closed` at all. FLW-DEC-015
|
|
64
|
+
* asked which of the two a sprint is — a record of what a team did in a
|
|
65
|
+
* fortnight, or a planning tool somebody can take back — and the answer was
|
|
66
|
+
* the record. So `closed` is final: every figure that reports on the past
|
|
67
|
+
* reads a closed sprint, and those figures stay put. `closeSprint` is how a
|
|
68
|
+
* sprint ends; this is for the other case, one made by mistake or planned and
|
|
69
|
+
* then abandoned before it ever began.
|
|
70
|
+
*
|
|
71
|
+
* A sprint closed by accident is recovered by planning the next one, not by
|
|
72
|
+
* reopening the last.
|
|
73
|
+
*
|
|
74
|
+
* Issues planned into it are let go rather than deleted with it. They go back
|
|
75
|
+
* to the backlog, which is where they were before somebody put them in a
|
|
76
|
+
* sprint that never happened; taking the work away with the plan would be a
|
|
77
|
+
* surprise nobody asked for (FLW-016).
|
|
78
|
+
*/
|
|
79
|
+
export async function deleteSprint(ctx, input) {
|
|
80
|
+
if (!actorRequired(ctx))
|
|
81
|
+
return invalid(issue('actor', 'flow.error.actorRequired'));
|
|
82
|
+
if (!commandKey(input.idempotencyKey))
|
|
83
|
+
return invalid(issue('idempotencyKey', 'flow.error.idempotencyRequired'));
|
|
84
|
+
return ctx.tx(async (tx) => {
|
|
85
|
+
const held = await readableRow(tx, 'flow.Sprint', input.id);
|
|
86
|
+
if (!held)
|
|
87
|
+
return invalid(issue('id', 'flow.error.notFound'));
|
|
88
|
+
if (held.state !== 'planned')
|
|
89
|
+
return invalid(issue('id', 'flow.error.invalidSprintState'));
|
|
90
|
+
const planned = await tx.db.select('flow.Issue', { sprintId: input.id });
|
|
91
|
+
for (const row of planned)
|
|
92
|
+
await tx.db.update('flow.Issue', { id: row.id }, { sprintId: null, updatedAt: now() });
|
|
93
|
+
const S = tx.table('flow.Sprint');
|
|
94
|
+
await tx.db.del(deleteFrom(S).where(eq(S.id, input.id)));
|
|
95
|
+
return { ok: true, id: input.id, released: planned.length };
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
export async function closeSprint(ctx, input) {
|
|
99
|
+
if (!actorRequired(ctx))
|
|
100
|
+
return invalid(issue('actor', 'flow.error.actorRequired'));
|
|
101
|
+
if (!commandKey(input.idempotencyKey))
|
|
102
|
+
return invalid(issue('idempotencyKey', 'flow.error.idempotencyRequired'));
|
|
103
|
+
return ctx.tx(async (tx) => {
|
|
104
|
+
const held = await readableRow(tx, 'flow.Sprint', input.id);
|
|
105
|
+
if (!held)
|
|
106
|
+
return invalid(issue('id', 'flow.error.notFound'));
|
|
107
|
+
if (held.state !== 'active')
|
|
108
|
+
return invalid(issue('id', 'flow.error.invalidSprintState'));
|
|
109
|
+
let carried = 0;
|
|
110
|
+
if (input.carryTo !== undefined) {
|
|
111
|
+
const target = input.carryTo ? await readableRow(tx, 'flow.Sprint', input.carryTo) : null;
|
|
112
|
+
if (input.carryTo) {
|
|
113
|
+
if (!target || String(target.projectId) !== String(held.projectId))
|
|
114
|
+
return invalid(issue('carryTo', 'flow.error.sprintProjectMismatch'));
|
|
115
|
+
if (target.state === 'closed')
|
|
116
|
+
return invalid(issue('carryTo', 'flow.error.sprintClosed'));
|
|
117
|
+
if (String(target.id) === String(held.id))
|
|
118
|
+
return invalid(issue('carryTo', 'flow.error.invalidSprintState'));
|
|
119
|
+
}
|
|
120
|
+
const terminal = new Set((await tx.db.select('flow.Column', {
|
|
121
|
+
projectId: held.projectId,
|
|
122
|
+
terminalState: true,
|
|
123
|
+
active: true,
|
|
124
|
+
})).map((row) => String(row.id)));
|
|
125
|
+
const members = await tx.db.select('flow.Issue', { sprintId: input.id, active: true });
|
|
126
|
+
const timestamp = now();
|
|
127
|
+
for (const row of members) {
|
|
128
|
+
if (terminal.has(String(row.columnId)))
|
|
129
|
+
continue;
|
|
130
|
+
await tx.db.update('flow.Issue', { id: row.id }, { sprintId: target ? target.id : null, version: n(row.version) + 1, updatedAt: timestamp });
|
|
131
|
+
await trackIssueChange(tx, {
|
|
132
|
+
issueId: String(row.id),
|
|
133
|
+
threadId: row.threadId,
|
|
134
|
+
version: n(row.version) + 1,
|
|
135
|
+
body: 'flow.timeline.sprint',
|
|
136
|
+
changes: moved('sprintId', row.sprintId, target ? target.id : null),
|
|
137
|
+
});
|
|
138
|
+
carried += 1;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
await tx.db.update('flow.Sprint', { id: input.id }, { state: 'closed' });
|
|
142
|
+
return { ok: true, id: input.id, carried };
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=sprint-lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sprint-lifecycle.js","sourceRoot":"","sources":["../../../../../../../../packages/ketsuite/src/modules/flow/domain/sprint-lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Ctx, FnSpec } from '@ketvietlab/ketjs';
|
|
2
|
+
export declare function boardScopeHandler(ctx: Ctx): Promise<{
|
|
3
|
+
projectId: unknown;
|
|
4
|
+
}>;
|
|
5
|
+
export declare function boardRememberHandler(ctx: Ctx, args: Record<string, unknown>): Promise<import("../domain/command.ts").FlowResult>;
|
|
6
|
+
export declare const boardFunctions: Record<string, FnSpec>;
|
|
7
|
+
//# sourceMappingURL=board.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"board.d.ts","sourceRoot":"","sources":["../../../../../../../packages/ketsuite/src/modules/flow/functions/board.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAMpD,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,GAAG;;GAS/C;AAED,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,sDAejF;AAED,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAuBjD,CAAA"}
|