@things-factory/worklist 10.1.2 → 10.1.4
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/pages/activity-catalog/activity-catalog-page.d.ts +51 -0
- package/dist-client/pages/activity-catalog/activity-catalog-page.js +509 -0
- package/dist-client/pages/activity-catalog/activity-catalog-page.js.map +1 -0
- package/dist-client/route.d.ts +1 -1
- package/dist-client/route.js +3 -0
- package/dist-client/route.js.map +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-server/controllers/activity-installation/activity-installation-controller.d.ts +35 -0
- package/dist-server/controllers/activity-installation/activity-installation-controller.js +23 -0
- package/dist-server/controllers/activity-installation/activity-installation-controller.js.map +1 -1
- package/dist-server/service/activity/credential-field.d.ts +35 -0
- package/dist-server/service/activity/credential-field.js +89 -0
- package/dist-server/service/activity/credential-field.js.map +1 -0
- package/dist-server/service/activity/credential-guard-subscriber.d.ts +19 -0
- package/dist-server/service/activity/credential-guard-subscriber.js +35 -0
- package/dist-server/service/activity/credential-guard-subscriber.js.map +1 -0
- package/dist-server/service/activity/index.d.ts +2 -1
- package/dist-server/service/activity/index.js +2 -1
- package/dist-server/service/activity/index.js.map +1 -1
- package/dist-server/service/index.d.ts +1 -1
- package/dist-server/service/installable-activity/activity-readiness.d.ts +58 -0
- package/dist-server/service/installable-activity/activity-readiness.js +105 -0
- package/dist-server/service/installable-activity/activity-readiness.js.map +1 -0
- package/dist-server/service/installable-activity/installable-activity-query.js +27 -2
- package/dist-server/service/installable-activity/installable-activity-query.js.map +1 -1
- package/dist-server/service/installable-activity/installable-activity.d.ts +58 -0
- package/dist-server/service/installable-activity/installable-activity.js +44 -1
- package/dist-server/service/installable-activity/installable-activity.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +11 -11
- package/things-factory.config.js +1 -0
- package/translations/en.json +20 -0
- package/translations/ja.json +20 -0
- package/translations/ko.json +20 -0
- package/translations/ms.json +21 -1
- package/translations/zh.json +20 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installable-activity-query.js","sourceRoot":"","sources":["../../../server/service/installable-activity/installable-activity-query.ts"],"names":[],"mappings":";;;;AAAA,+CAAmF;AACnF,iDAAwE;AAExE,qIAAmH;AACnH,yDAAkD;AAClD,uEAA+D;AAC/D,iFAAwE;AAGjE,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;IAE7B,AAAN,KAAK,CAAC,mBAAmB,CAAc,IAAY,EAAS,OAAwB;QAClF,OAAO,MAAM,2DAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC9C,CAAC;IAGK,AAAN,KAAK,CAAC,qBAAqB,CACA,MAAiB,EACnC,OAAwB;QAE/B,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAEhC,MAAM,KAAK,GAAG,2DAAqB,CAAC,IAAI,EAAE,CAAA;QAE1C,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,IAAI,CAAC,QAAQ,GAAG,MAAM,IAAA,qBAAa,EAAC,sBAAQ,CAAC,CAAC,SAAS,CAAC;gBACtD,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE;gBACzB,IAAI,EAAE,IAAI,CAAC,IAAI;aAChB,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"installable-activity-query.js","sourceRoot":"","sources":["../../../server/service/installable-activity/installable-activity-query.ts"],"names":[],"mappings":";;;;AAAA,+CAAmF;AACnF,iDAAwE;AAExE,qIAAmH;AACnH,yDAAkD;AAClD,uEAA+D;AAC/D,2FAAqF;AACrF,iFAAwE;AAGjE,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;IAE7B,AAAN,KAAK,CAAC,mBAAmB,CAAc,IAAY,EAAS,OAAwB;QAClF,OAAO,MAAM,2DAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC9C,CAAC;IAGK,AAAN,KAAK,CAAC,qBAAqB,CACA,MAAiB,EACnC,OAAwB;QAE/B,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAEhC,MAAM,KAAK,GAAG,2DAAqB,CAAC,IAAI,EAAE,CAAA;QAE1C,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,IAAI,CAAC,QAAQ,GAAG,MAAM,IAAA,qBAAa,EAAC,sBAAQ,CAAC,CAAC,SAAS,CAAC;gBACtD,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE;gBACzB,IAAI,EAAE,IAAI,CAAC,IAAI;aAChB,CAAC,CAAA;YAEF;;;;;eAKG;YACH,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,iCAAc,CAAC,CAAC,MAAM,CAAA;QACxF,CAAC;QAED;;;;;;;;WAQG;QACH,MAAM,QAAQ,GAA0B,2DAAqB,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACvF,IAAI,EAAE,GAAG,CAAC,GAAG;YACb,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,WAAW,EAAE,SAAS;YACtB,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,SAAS,EAAE,GAAG,CAAC,SAAS;SACzB,CAAC,CAAC,CAAA;QAEH,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,EAAE,GAAG,QAAQ,CAAC,CAAA;QAEtC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAA;IAChD,CAAC;CACF,CAAA;AApDY,4DAAwB;AAE7B;IADL,IAAA,oBAAK,EAAC,OAAO,CAAC,EAAE,CAAC,6CAAoB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,gCAAgC,EAAE,CAAC;IAC/E,mBAAA,IAAA,kBAAG,EAAC,MAAM,CAAC,CAAA;IAAgB,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;mEAE1D;AAGK;IADL,IAAA,oBAAK,EAAC,OAAO,CAAC,EAAE,CAAC,sDAAuB,EAAE,EAAE,WAAW,EAAE,wCAAwC,EAAE,CAAC;IAElG,mBAAA,IAAA,mBAAI,EAAC,IAAI,CAAC,EAAE,CAAC,iBAAS,CAAC,CAAA;IACvB,mBAAA,IAAA,kBAAG,GAAE,CAAA;;6CAD2B,iBAAS;;qEA2C3C;mCAnDU,wBAAwB;IADpC,IAAA,uBAAQ,EAAC,6CAAmB,CAAC;GACjB,wBAAwB,CAoDpC","sourcesContent":["import { Arg, Args, Ctx, Query, Resolver, FieldResolver, Root } from 'type-graphql'\nimport { Domain, getRepository, ListParam } from '@things-factory/shell'\n\nimport { ActivityInstallations } from '../../controllers/activity-installation/activity-installation-controller.js'\nimport { Activity } from '../activity/activity.js'\nimport { InstallableActivity } from './installable-activity.js'\nimport { isApprovalStep } from '../../controllers/activity-approval/approval-line.js'\nimport { InstallableActivityList } from './installable-activity-type.js'\n\n@Resolver(InstallableActivity)\nexport class InstallableActivityQuery {\n @Query(returns => InstallableActivity!, { nullable: true, description: 'To fetch a InstallableActivity' })\n async installableActivity(@Arg('name') name: string, @Ctx() context: ResolverContext): Promise<InstallableActivity> {\n return await ActivityInstallations.get(name)\n }\n\n @Query(returns => InstallableActivityList, { description: 'To fetch multiple InstallableActivitys' })\n async installableActivities(\n @Args(type => ListParam) params: ListParam,\n @Ctx() context: ResolverContext\n ): Promise<InstallableActivityList> {\n const { domain } = context.state\n\n const items = ActivityInstallations.list()\n\n for (var item of items) {\n item.activity = await getRepository(Activity).findOneBy({\n domain: { id: domain.id },\n name: item.name\n })\n\n /*\n * 「이 도메인이 이 단계를 쓰나」를 값으로 낸다 — 판단은 여기서 다시 짜지 않는다.\n *\n * `isApprovalStep` 이 참조를 걸러 내는 그 자리다. 화면이 길이를 세면 참조만 있는 결재선을\n * 「결재자 있음」으로 그리고, 실제로는 그냥 지나간다.\n */\n item.approvalSteps = (item.activity?.approvalLine || []).filter(isApprovalStep).length\n }\n\n /*\n * Identified-but-unbuilt work comes out of this query too, because the catalog is the plan of\n * record — \"what is left\" has to be answerable on the screen.\n *\n * Shaped to look like an installable activity so the screen has one list to draw, but it\n * carries no `activity` (nothing is installed) and no callback. Its stage says planned or\n * not-worklist, and the screen keeps those apart from the built ones: a decision must not read\n * as a promise.\n */\n const intended: InstallableActivity[] = ActivityInstallations.listIntended().map(one => ({\n name: one.key,\n label: one.label,\n description: undefined,\n guide: one.guide,\n category: one.category,\n readiness: one.readiness\n }))\n\n const merged = [...items, ...intended]\n\n return { items: merged, total: merged.length }\n }\n}\n"]}
|
|
@@ -1,11 +1,42 @@
|
|
|
1
1
|
import { Activity, ActivityStartingType, ActivityType, ActivityUIType, MultipleInstanceType } from '../activity/activity.js';
|
|
2
2
|
import { ActivityModelItem } from '../activity/activity-model-type.js';
|
|
3
|
+
import { ActivityReadiness } from './activity-readiness.js';
|
|
3
4
|
import { UpdateActivityInstanceStateAddendum } from '../../controllers/common.js';
|
|
4
5
|
export declare class InstallableActivity {
|
|
6
|
+
/**
|
|
7
|
+
* The key. **Not a name to show anyone.**
|
|
8
|
+
*
|
|
9
|
+
* The callback is found by this value (`activityInstance.activity.name`), so renaming it stops
|
|
10
|
+
* the callback from running — an approval completes and the effect never happens, with nothing
|
|
11
|
+
* on screen to say so. plant hit exactly that on 2026-09-01.
|
|
12
|
+
*/
|
|
5
13
|
name?: string;
|
|
14
|
+
/**
|
|
15
|
+
* What to call this work on screen, when the key is not something a person reads.
|
|
16
|
+
*
|
|
17
|
+
* The catalog showed 「MES Disposition Approval」 among twenty-three Korean cards because the key
|
|
18
|
+
* was the only name it had. Declared work already carried a `label` for this; built work had
|
|
19
|
+
* nowhere to put one, so the identifier leaked into the screen.
|
|
20
|
+
*
|
|
21
|
+
* Optional. Without it the catalog falls back to the key, which is right for activities whose
|
|
22
|
+
* key already reads as a name.
|
|
23
|
+
*/
|
|
24
|
+
label?: string;
|
|
6
25
|
release?: string;
|
|
7
26
|
provider?: string;
|
|
27
|
+
/** One line for developers, in English, like every other GraphQL description in this repo. */
|
|
8
28
|
description?: string;
|
|
29
|
+
/**
|
|
30
|
+
* What this work is, **in the words of the person who receives it.**
|
|
31
|
+
*
|
|
32
|
+
* `description` is written for us and it is English by convention, so a Korean screen showing it
|
|
33
|
+
* to an approver says nothing useful. This field is the sentence that person actually needs:
|
|
34
|
+
* when the item reaches them, and what happens once they approve it.
|
|
35
|
+
*
|
|
36
|
+
* i18n keys are welcome here — the catalog runs it through i18next, so a module can either put
|
|
37
|
+
* the sentence in directly or point at a key it already ships.
|
|
38
|
+
*/
|
|
39
|
+
guide?: string[];
|
|
9
40
|
category?: string;
|
|
10
41
|
activityType?: ActivityType;
|
|
11
42
|
priority?: number;
|
|
@@ -20,5 +51,32 @@ export declare class InstallableActivity {
|
|
|
20
51
|
reportSource?: string;
|
|
21
52
|
thumbnail?: string;
|
|
22
53
|
activity?: Activity;
|
|
54
|
+
/**
|
|
55
|
+
* **이 도메인이 이 단계를 쓰나** — 세워진 양식의 결재선에 결재자가 있나.
|
|
56
|
+
*
|
|
57
|
+
* 결재선은 양식이 아니라 **그 현장이 정하는 것**이다(installActivity 머리말). 그래서 같은 업무가
|
|
58
|
+
* 어느 공장에서는 결재를 받고 어느 공장에서는 그냥 지나간다.
|
|
59
|
+
*
|
|
60
|
+
* 그 사실이 지금까지 **기동 로그 한 줄**에만 있었다 — 「결재선 비어 있음 miratek, system」. 로그는
|
|
61
|
+
* 기동할 때 한 번 지나가고 그 뒤로 아무 데도 없다. 사람이 조치해야 하는 사실의 집이 아니다.
|
|
62
|
+
*
|
|
63
|
+
* 세지 않는 것 둘을 적어 둔다.
|
|
64
|
+
*
|
|
65
|
+
* - **사람 수가 아니라 단계 수다.** 역할로 걸린 한 단계는 그 역할을 가진 여러 사람이 본다. 「3명」
|
|
66
|
+
* 이라고 적으면 틀린 수를 말하게 된다.
|
|
67
|
+
* - **참조는 세지 않는다.** 참조는 결재를 막지 않으므로, 참조만 있는 결재선은 결재자가 없는 것과
|
|
68
|
+
* 같다(needsApproval). 세면 「이 단계를 쓴다」로 읽히는데 실제로는 그냥 지나간다.
|
|
69
|
+
*
|
|
70
|
+
* 비어 있다는 것이 무슨 일을 뜻하는지는 **업무마다 다르다** — 부적합 처분은 상신이 막히고, 정비
|
|
71
|
+
* 완료 확인은 확인 없이 닫힌다. 그 결과는 각 업무의 guide 가 말할 자리다. 이 칸은 사실만 낸다.
|
|
72
|
+
*/
|
|
73
|
+
approvalSteps?: number;
|
|
74
|
+
/**
|
|
75
|
+
* What the registering module says about how far along this type is.
|
|
76
|
+
*
|
|
77
|
+
* Declared, not computed — see ActivityReadiness. Missing means nobody has said, which the
|
|
78
|
+
* screen shows as 「선언 없음」 rather than as a zero.
|
|
79
|
+
*/
|
|
80
|
+
readiness?: ActivityReadiness;
|
|
23
81
|
callback?: (content: any, addendum: UpdateActivityInstanceStateAddendum, context: ResolverContext) => void;
|
|
24
82
|
}
|
|
@@ -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_readiness_js_1 = require("./activity-readiness.js");
|
|
8
9
|
let InstallableActivity = class InstallableActivity {
|
|
9
10
|
constructor() {
|
|
10
11
|
this.priority = 1;
|
|
@@ -15,6 +16,10 @@ tslib_1.__decorate([
|
|
|
15
16
|
(0, type_graphql_1.Field)({ nullable: true }),
|
|
16
17
|
tslib_1.__metadata("design:type", String)
|
|
17
18
|
], InstallableActivity.prototype, "name", void 0);
|
|
19
|
+
tslib_1.__decorate([
|
|
20
|
+
(0, type_graphql_1.Field)({ nullable: true, description: 'What to call this work on screen, when the key is not readable' }),
|
|
21
|
+
tslib_1.__metadata("design:type", String)
|
|
22
|
+
], InstallableActivity.prototype, "label", void 0);
|
|
18
23
|
tslib_1.__decorate([
|
|
19
24
|
(0, type_graphql_1.Field)({ nullable: true, description: 'Release information of the Activity' }),
|
|
20
25
|
tslib_1.__metadata("design:type", String)
|
|
@@ -27,6 +32,13 @@ tslib_1.__decorate([
|
|
|
27
32
|
(0, type_graphql_1.Field)({ nullable: true }),
|
|
28
33
|
tslib_1.__metadata("design:type", String)
|
|
29
34
|
], InstallableActivity.prototype, "description", void 0);
|
|
35
|
+
tslib_1.__decorate([
|
|
36
|
+
(0, type_graphql_1.Field)(type => [String], {
|
|
37
|
+
nullable: true,
|
|
38
|
+
description: 'What this work is, for the person who receives it. Plain sentences or i18n keys.'
|
|
39
|
+
}),
|
|
40
|
+
tslib_1.__metadata("design:type", Array)
|
|
41
|
+
], InstallableActivity.prototype, "guide", void 0);
|
|
30
42
|
tslib_1.__decorate([
|
|
31
43
|
(0, type_graphql_1.Field)({ nullable: true }),
|
|
32
44
|
tslib_1.__metadata("design:type", String)
|
|
@@ -84,8 +96,39 @@ tslib_1.__decorate([
|
|
|
84
96
|
], InstallableActivity.prototype, "thumbnail", void 0);
|
|
85
97
|
tslib_1.__decorate([
|
|
86
98
|
(0, type_graphql_1.Field)(type => activity_js_1.Activity, { nullable: true }),
|
|
87
|
-
tslib_1.__metadata("design:type", activity_js_1.Activity
|
|
99
|
+
tslib_1.__metadata("design:type", activity_js_1.Activity
|
|
100
|
+
/**
|
|
101
|
+
* **이 도메인이 이 단계를 쓰나** — 세워진 양식의 결재선에 결재자가 있나.
|
|
102
|
+
*
|
|
103
|
+
* 결재선은 양식이 아니라 **그 현장이 정하는 것**이다(installActivity 머리말). 그래서 같은 업무가
|
|
104
|
+
* 어느 공장에서는 결재를 받고 어느 공장에서는 그냥 지나간다.
|
|
105
|
+
*
|
|
106
|
+
* 그 사실이 지금까지 **기동 로그 한 줄**에만 있었다 — 「결재선 비어 있음 miratek, system」. 로그는
|
|
107
|
+
* 기동할 때 한 번 지나가고 그 뒤로 아무 데도 없다. 사람이 조치해야 하는 사실의 집이 아니다.
|
|
108
|
+
*
|
|
109
|
+
* 세지 않는 것 둘을 적어 둔다.
|
|
110
|
+
*
|
|
111
|
+
* - **사람 수가 아니라 단계 수다.** 역할로 걸린 한 단계는 그 역할을 가진 여러 사람이 본다. 「3명」
|
|
112
|
+
* 이라고 적으면 틀린 수를 말하게 된다.
|
|
113
|
+
* - **참조는 세지 않는다.** 참조는 결재를 막지 않으므로, 참조만 있는 결재선은 결재자가 없는 것과
|
|
114
|
+
* 같다(needsApproval). 세면 「이 단계를 쓴다」로 읽히는데 실제로는 그냥 지나간다.
|
|
115
|
+
*
|
|
116
|
+
* 비어 있다는 것이 무슨 일을 뜻하는지는 **업무마다 다르다** — 부적합 처분은 상신이 막히고, 정비
|
|
117
|
+
* 완료 확인은 확인 없이 닫힌다. 그 결과는 각 업무의 guide 가 말할 자리다. 이 칸은 사실만 낸다.
|
|
118
|
+
*/
|
|
119
|
+
)
|
|
88
120
|
], InstallableActivity.prototype, "activity", void 0);
|
|
121
|
+
tslib_1.__decorate([
|
|
122
|
+
(0, type_graphql_1.Field)(type => type_graphql_1.Int, {
|
|
123
|
+
nullable: true,
|
|
124
|
+
description: 'How many approval steps this activity has in this domain. Steps, not people; references excluded.'
|
|
125
|
+
}),
|
|
126
|
+
tslib_1.__metadata("design:type", Number)
|
|
127
|
+
], InstallableActivity.prototype, "approvalSteps", void 0);
|
|
128
|
+
tslib_1.__decorate([
|
|
129
|
+
(0, type_graphql_1.Field)(type => activity_readiness_js_1.ActivityReadiness, { nullable: true }),
|
|
130
|
+
tslib_1.__metadata("design:type", activity_readiness_js_1.ActivityReadiness)
|
|
131
|
+
], InstallableActivity.prototype, "readiness", void 0);
|
|
89
132
|
exports.InstallableActivity = InstallableActivity = tslib_1.__decorate([
|
|
90
133
|
(0, type_graphql_1.ObjectType)({ description: 'Entity for InstallableActivity' })
|
|
91
134
|
], InstallableActivity);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installable-activity.js","sourceRoot":"","sources":["../../../server/service/installable-activity/installable-activity.ts"],"names":[],"mappings":";;;;AAAA,+
|
|
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 { 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 @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"]}
|