@things-factory/worklist 10.1.4 → 10.1.6
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-client/components/activity-approval-ribon.js +17 -2
- package/dist-client/components/activity-approval-ribon.js.map +1 -1
- package/dist-client/components/decision-slots.d.ts +89 -0
- package/dist-client/components/decision-slots.js +111 -0
- package/dist-client/components/decision-slots.js.map +1 -0
- package/dist-client/pages/activity-approval/activity-approval-page.d.ts +72 -0
- package/dist-client/pages/activity-approval/activity-approval-page.js +425 -43
- package/dist-client/pages/activity-approval/activity-approval-page.js.map +1 -1
- package/dist-client/pages/activity-catalog/activity-catalog-page.d.ts +24 -0
- package/dist-client/pages/activity-catalog/activity-catalog-page.js +101 -6
- package/dist-client/pages/activity-catalog/activity-catalog-page.js.map +1 -1
- package/dist-client/pages/installable-activity/installable-activity-list-page.d.ts +27 -0
- package/dist-client/pages/installable-activity/installable-activity-list-page.js +70 -11
- package/dist-client/pages/installable-activity/installable-activity-list-page.js.map +1 -1
- package/dist-client/route.d.ts +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-server/controllers/activity-approval/approval-line.d.ts +32 -0
- package/dist-server/controllers/activity-approval/approval-line.js +35 -0
- package/dist-server/controllers/activity-approval/approval-line.js.map +1 -1
- package/dist-server/controllers/activity-approval/approve.js +17 -0
- package/dist-server/controllers/activity-approval/approve.js.map +1 -1
- package/dist-server/controllers/activity-approval/reject.js +21 -1
- package/dist-server/controllers/activity-approval/reject.js.map +1 -1
- package/dist-server/controllers/activity-installation/activity-installation-controller.js +5 -9
- package/dist-server/controllers/activity-installation/activity-installation-controller.js.map +1 -1
- package/dist-server/controllers/activity-installation/installable-to-activity.d.ts +49 -0
- package/dist-server/controllers/activity-installation/installable-to-activity.js +40 -0
- package/dist-server/controllers/activity-installation/installable-to-activity.js.map +1 -0
- package/dist-server/controllers/activity-installation/registry-conflict.d.ts +32 -0
- package/dist-server/controllers/activity-installation/registry-conflict.js +21 -0
- package/dist-server/controllers/activity-installation/registry-conflict.js.map +1 -0
- package/dist-server/service/activity/activity-decision-key-item-type.d.ts +160 -0
- package/dist-server/service/activity/activity-decision-key-item-type.js +176 -0
- package/dist-server/service/activity/activity-decision-key-item-type.js.map +1 -0
- package/dist-server/service/activity/activity-type.d.ts +3 -0
- package/dist-server/service/activity/activity-type.js +8 -0
- package/dist-server/service/activity/activity-type.js.map +1 -1
- package/dist-server/service/activity/activity.d.ts +30 -0
- package/dist-server/service/activity/activity.js +14 -0
- package/dist-server/service/activity/activity.js.map +1 -1
- package/dist-server/service/activity/decision-key-declaration.d.ts +33 -0
- package/dist-server/service/activity/decision-key-declaration.js +67 -0
- package/dist-server/service/activity/decision-key-declaration.js.map +1 -0
- package/dist-server/service/activity/{credential-guard-subscriber.d.ts → declaration-guard-subscriber.d.ts} +6 -1
- package/dist-server/service/activity/declaration-guard-subscriber.js +46 -0
- package/dist-server/service/activity/declaration-guard-subscriber.js.map +1 -0
- package/dist-server/service/activity/index.d.ts +3 -3
- package/dist-server/service/activity/index.js +2 -2
- package/dist-server/service/activity/index.js.map +1 -1
- package/dist-server/service/activity/search-key-declaration.d.ts +38 -0
- package/dist-server/service/activity/search-key-declaration.js +49 -0
- package/dist-server/service/activity/search-key-declaration.js.map +1 -0
- package/dist-server/service/activity-instance/activity-instance-type.js.map +1 -1
- package/dist-server/service/activity-instance/index.d.ts +1 -1
- package/dist-server/service/activity-template/index.d.ts +1 -1
- package/dist-server/service/activity-thread/index.d.ts +1 -1
- package/dist-server/service/index.d.ts +3 -3
- package/dist-server/service/installable-activity/installable-activity-mutation.js +24 -0
- package/dist-server/service/installable-activity/installable-activity-mutation.js.map +1 -1
- package/dist-server/service/installable-activity/installable-activity.d.ts +9 -0
- package/dist-server/service/installable-activity/installable-activity.js +5 -0
- package/dist-server/service/installable-activity/installable-activity.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +9 -9
- package/translations/en.json +28 -6
- package/translations/ja.json +22 -0
- package/translations/ko.json +28 -6
- package/translations/ms.json +22 -0
- package/translations/zh.json +22 -0
- package/dist-server/service/activity/credential-guard-subscriber.js +0 -35
- package/dist-server/service/activity/credential-guard-subscriber.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installable-activity-mutation.js","sourceRoot":"","sources":["../../../server/service/installable-activity/installable-activity-mutation.ts"],"names":[],"mappings":";;;;AAAA,+CAAsE;AAEtE,qIAA6G;AAC7G,yDAAkE;AAClE,uEAA+D;AAGxD,IAAM,2BAA2B,GAAjC,MAAM,2BAA2B;IACtC;;;;;OAKG;
|
|
1
|
+
{"version":3,"file":"installable-activity-mutation.js","sourceRoot":"","sources":["../../../server/service/installable-activity/installable-activity-mutation.ts"],"names":[],"mappings":";;;;AAAA,+CAAsE;AAEtE,qIAA6G;AAC7G,yDAAkE;AAClE,uEAA+D;AAGxD,IAAM,2BAA2B,GAAjC,MAAM,2BAA2B;IACtC;;;;;OAKG;IACH;;;;;;;;;;;;;;;;;;;;OAoBG;IAIG,AAAN,KAAK,CAAC,2BAA2B,CAAc,IAAY,EAAS,OAAwB;QAC1F,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAE1C,OAAO,MAAM,IAAA,qDAAe,EAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;IACnE,CAAC;IAED,sGAAsG;IAIhG,AAAN,KAAK,CAAC,6BAA6B,CAAc,IAAY,EAAS,OAAwB;QAC5F,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAC1C,MAAM,UAAU,GAAG,EAAE,CAAC,aAAa,CAAC,sBAAQ,CAAC,CAAA;QAE7C,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,SAAS,CAAC;YAC1C,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE;YACzB,IAAI;SACL,CAAC,CAAA;QAEF,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAM;QACR,CAAC;QAED,OAAO,MAAM,UAAU,CAAC,IAAI,CAAC;YAC3B,GAAG,QAAQ;YACX,KAAK,EAAE,4BAAc,CAAC,UAAU;YAChC,OAAO,EAAE,IAAI;SACd,CAAC,CAAA;IACJ,CAAC;CACF,CAAA;AA5DY,kEAA2B;AA+BhC;IAHL,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,wBAAS,EAAC,mFAAmF,CAAC;IAC9F,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,sBAAQ,EAAE,EAAE,WAAW,EAAE,8DAA8D,EAAE,CAAC;IAC5E,mBAAA,IAAA,kBAAG,EAAC,MAAM,CAAC,CAAA;IAAgB,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;8EAIlE;AAMK;IAHL,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,wBAAS,EAAC,mFAAmF,CAAC;IAC9F,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,sBAAQ,EAAE,EAAE,WAAW,EAAE,gEAAgE,EAAE,CAAC;IAC5E,mBAAA,IAAA,kBAAG,EAAC,MAAM,CAAC,CAAA;IAAgB,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;gFAkBpE;sCA3DU,2BAA2B;IADvC,IAAA,uBAAQ,EAAC,6CAAmB,CAAC;GACjB,2BAA2B,CA4DvC","sourcesContent":["import { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'\n\nimport { installActivity } from '../../controllers/activity-installation/activity-installation-controller.js'\nimport { Activity, ActivityStatus } from '../activity/activity.js'\nimport { InstallableActivity } from './installable-activity.js'\n\n@Resolver(InstallableActivity)\nexport class InstallableActivityMutation {\n /**\n * 양식을 이 도메인에 세운다.\n *\n * 세우는 방법은 `installActivity` 한 벌만 갖는다 — 화면에서 누르는 것과 앱이 기동할 때 세우는 것이\n * 서로 다른 코드를 타면 언젠가 갈라지고, 그때 「화면으로 세운 것만 되는」 결함이 된다.\n */\n /*\n * Authorization (2026-09-11)\n *\n * Both mutations here had no `@privilege` directive and no `checkAuthority` call inside, so any\n * signed-in user of the domain could deactivate an activity. Deactivating one blocks the work it\n * carries: with `OOC Review` (dataset) deactivated, that domain can no longer raise or process an\n * out-of-control review.\n *\n * The pair is `activity:mutation`. These calls write this module's own `Activity` rows and grant\n * no capability outside it, so one pair covers both. Seven existing declarations in this package\n * already use that pair for creating, deleting and enabling the same entity, and both mutations\n * return `Activity` rather than `Boolean`, which matches those seven rather than a light switch.\n *\n * `domainOwnerGranted: true` matches those seven as well. The people who actually call this are\n * domain owners, and they pass without an explicit grant.\n *\n * This closes the door for the first time; it is not a rename, so there is no `legacy` alias to\n * carry and no record of who was passing through while it was undeclared. If someone is blocked\n * after this deploys, an administrator grants `activity:mutation` (the privilege row is created\n * at boot).\n */\n @Directive('@transaction')\n @Directive('@privilege(category: \"activity\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Activity, { description: 'To activate installable activity to Activity on given domain' })\n async activateInstallableActivity(@Arg('name') name: string, @Ctx() context: ResolverContext): Promise<Activity> {\n const { domain, user, tx } = context.state\n\n return await installActivity(name, domain, { manager: tx, user })\n }\n\n /* Same privilege pair as activating. Deactivating is the heavier of the two: it stops submissions. */\n @Directive('@transaction')\n @Directive('@privilege(category: \"activity\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Mutation(returns => Activity, { description: 'To deactivate installable activity to Activity on given domain' })\n async deactivateInstallableActivity(@Arg('name') name: string, @Ctx() context: ResolverContext): Promise<Activity> {\n const { domain, user, tx } = context.state\n const repository = tx.getRepository(Activity)\n\n const activity = await repository.findOneBy({\n domain: { id: domain.id },\n name\n })\n\n if (!activity) {\n return\n }\n\n return await repository.save({\n ...activity,\n state: ActivityStatus.Deprecated,\n updater: user\n })\n }\n}\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Activity, ActivityStartingType, ActivityType, ActivityUIType, MultipleInstanceType } from '../activity/activity.js';
|
|
2
2
|
import { ActivityModelItem } from '../activity/activity-model-type.js';
|
|
3
|
+
import { ActivityDecisionKeyItem } from '../activity/activity-decision-key-item-type.js';
|
|
3
4
|
import { ActivityReadiness } from './activity-readiness.js';
|
|
4
5
|
import { UpdateActivityInstanceStateAddendum } from '../../controllers/common.js';
|
|
5
6
|
export declare class InstallableActivity {
|
|
@@ -43,6 +44,14 @@ export declare class InstallableActivity {
|
|
|
43
44
|
startingType?: ActivityStartingType;
|
|
44
45
|
multiple?: MultipleInstanceType;
|
|
45
46
|
model?: ActivityModelItem[];
|
|
47
|
+
/**
|
|
48
|
+
* Which input values an approver judges by. See Activity.decisionKeys.
|
|
49
|
+
*
|
|
50
|
+
* installActivity spreads this whole template onto the Activity row, so a field declared here
|
|
51
|
+
* reaches the row only if the entity has a column for it — a spread save drops what it does not
|
|
52
|
+
* recognise and reports success.
|
|
53
|
+
*/
|
|
54
|
+
decisionKeys?: ActivityDecisionKeyItem[];
|
|
46
55
|
uiType?: ActivityUIType;
|
|
47
56
|
uiSource?: string;
|
|
48
57
|
viewType?: ActivityUIType;
|
|
@@ -5,6 +5,7 @@ const tslib_1 = require("tslib");
|
|
|
5
5
|
const type_graphql_1 = require("type-graphql");
|
|
6
6
|
const activity_js_1 = require("../activity/activity.js");
|
|
7
7
|
const activity_model_type_js_1 = require("../activity/activity-model-type.js");
|
|
8
|
+
const activity_decision_key_item_type_js_1 = require("../activity/activity-decision-key-item-type.js");
|
|
8
9
|
const activity_readiness_js_1 = require("./activity-readiness.js");
|
|
9
10
|
let InstallableActivity = class InstallableActivity {
|
|
10
11
|
constructor() {
|
|
@@ -66,6 +67,10 @@ tslib_1.__decorate([
|
|
|
66
67
|
(0, type_graphql_1.Field)(type => [activity_model_type_js_1.ActivityModelItem], { nullable: true }),
|
|
67
68
|
tslib_1.__metadata("design:type", Array)
|
|
68
69
|
], InstallableActivity.prototype, "model", void 0);
|
|
70
|
+
tslib_1.__decorate([
|
|
71
|
+
(0, type_graphql_1.Field)(type => [activity_decision_key_item_type_js_1.ActivityDecisionKeyItem], { nullable: true }),
|
|
72
|
+
tslib_1.__metadata("design:type", Array)
|
|
73
|
+
], InstallableActivity.prototype, "decisionKeys", void 0);
|
|
69
74
|
tslib_1.__decorate([
|
|
70
75
|
(0, type_graphql_1.Field)({ nullable: true }),
|
|
71
76
|
tslib_1.__metadata("design:type", String)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installable-activity.js","sourceRoot":"","sources":["../../../server/service/installable-activity/installable-activity.ts"],"names":[],"mappings":";;;;AAAA,+CAAqD;AAErD,yDAMgC;AAChC,+EAAsE;AACtE,mEAA2D;AAIpD,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IAAzB;QAyDL,aAAQ,GAAY,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"installable-activity.js","sourceRoot":"","sources":["../../../server/service/installable-activity/installable-activity.ts"],"names":[],"mappings":"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","sourcesContent":["import { Field, Int, ObjectType } from 'type-graphql'\n\nimport {\n Activity,\n ActivityStartingType,\n ActivityType,\n ActivityUIType,\n MultipleInstanceType\n} from '../activity/activity.js'\nimport { ActivityModelItem } from '../activity/activity-model-type.js'\nimport { ActivityDecisionKeyItem } from '../activity/activity-decision-key-item-type.js'\nimport { ActivityReadiness } from './activity-readiness.js'\nimport { UpdateActivityInstanceStateAddendum } from '../../controllers/common.js'\n\n@ObjectType({ description: 'Entity for InstallableActivity' })\nexport class InstallableActivity {\n /**\n * The key. **Not a name to show anyone.**\n *\n * The callback is found by this value (`activityInstance.activity.name`), so renaming it stops\n * the callback from running — an approval completes and the effect never happens, with nothing\n * on screen to say so. plant hit exactly that on 2026-09-01.\n */\n @Field({ nullable: true })\n name?: string\n\n /**\n * What to call this work on screen, when the key is not something a person reads.\n *\n * The catalog showed 「MES Disposition Approval」 among twenty-three Korean cards because the key\n * was the only name it had. Declared work already carried a `label` for this; built work had\n * nowhere to put one, so the identifier leaked into the screen.\n *\n * Optional. Without it the catalog falls back to the key, which is right for activities whose\n * key already reads as a name.\n */\n @Field({ nullable: true, description: 'What to call this work on screen, when the key is not readable' })\n label?: string\n\n @Field({ nullable: true, description: 'Release information of the Activity' })\n release?: string\n\n @Field({ nullable: true, description: 'Provider information of the Activity' })\n provider?: string\n\n /** One line for developers, in English, like every other GraphQL description in this repo. */\n @Field({ nullable: true })\n description?: string\n\n /**\n * What this work is, **in the words of the person who receives it.**\n *\n * `description` is written for us and it is English by convention, so a Korean screen showing it\n * to an approver says nothing useful. This field is the sentence that person actually needs:\n * when the item reaches them, and what happens once they approve it.\n *\n * i18n keys are welcome here — the catalog runs it through i18next, so a module can either put\n * the sentence in directly or point at a key it already ships.\n */\n @Field(type => [String], {\n nullable: true,\n description: 'What this work is, for the person who receives it. Plain sentences or i18n keys.'\n })\n guide?: string[]\n\n @Field({ nullable: true })\n category?: string\n\n @Field({ nullable: true })\n activityType?: ActivityType\n\n @Field({ nullable: true })\n priority?: number = 1\n\n @Field({ nullable: true })\n startingType?: ActivityStartingType\n\n @Field({\n nullable: true,\n description:\n 'Parallel or sequential are properties as a multi-instance activity, otherwise it means a single instance.'\n })\n multiple?: MultipleInstanceType\n\n @Field(type => [ActivityModelItem], { nullable: true })\n model?: ActivityModelItem[]\n\n /**\n * Which input values an approver judges by. See Activity.decisionKeys.\n *\n * installActivity spreads this whole template onto the Activity row, so a field declared here\n * reaches the row only if the entity has a column for it — a spread save drops what it does not\n * recognise and reports success.\n */\n @Field(type => [ActivityDecisionKeyItem], { nullable: true })\n decisionKeys?: ActivityDecisionKeyItem[]\n\n @Field({ nullable: true })\n uiType?: ActivityUIType\n\n @Field({ nullable: true })\n uiSource?: string\n\n @Field({ nullable: true })\n viewType?: ActivityUIType\n\n @Field({ nullable: true })\n viewSource?: string\n\n @Field({ nullable: true })\n reportType?: ActivityUIType\n\n @Field({ nullable: true })\n reportSource?: string\n\n @Field(type => String, { nullable: true })\n thumbnail?: string\n\n @Field(type => Activity, { nullable: true })\n activity?: Activity\n\n /**\n * **이 도메인이 이 단계를 쓰나** — 세워진 양식의 결재선에 결재자가 있나.\n *\n * 결재선은 양식이 아니라 **그 현장이 정하는 것**이다(installActivity 머리말). 그래서 같은 업무가\n * 어느 공장에서는 결재를 받고 어느 공장에서는 그냥 지나간다.\n *\n * 그 사실이 지금까지 **기동 로그 한 줄**에만 있었다 — 「결재선 비어 있음 miratek, system」. 로그는\n * 기동할 때 한 번 지나가고 그 뒤로 아무 데도 없다. 사람이 조치해야 하는 사실의 집이 아니다.\n *\n * 세지 않는 것 둘을 적어 둔다.\n *\n * - **사람 수가 아니라 단계 수다.** 역할로 걸린 한 단계는 그 역할을 가진 여러 사람이 본다. 「3명」\n * 이라고 적으면 틀린 수를 말하게 된다.\n * - **참조는 세지 않는다.** 참조는 결재를 막지 않으므로, 참조만 있는 결재선은 결재자가 없는 것과\n * 같다(needsApproval). 세면 「이 단계를 쓴다」로 읽히는데 실제로는 그냥 지나간다.\n *\n * 비어 있다는 것이 무슨 일을 뜻하는지는 **업무마다 다르다** — 부적합 처분은 상신이 막히고, 정비\n * 완료 확인은 확인 없이 닫힌다. 그 결과는 각 업무의 guide 가 말할 자리다. 이 칸은 사실만 낸다.\n */\n @Field(type => Int, {\n nullable: true,\n description: 'How many approval steps this activity has in this domain. Steps, not people; references excluded.'\n })\n approvalSteps?: number\n\n /**\n * What the registering module says about how far along this type is.\n *\n * Declared, not computed — see ActivityReadiness. Missing means nobody has said, which the\n * screen shows as 「선언 없음」 rather than as a zero.\n */\n @Field(type => ActivityReadiness, { nullable: true })\n readiness?: ActivityReadiness\n\n callback?: (content: any, addendum: UpdateActivityInstanceStateAddendum, context: ResolverContext) => void\n}\n"]}
|