@things-factory/worklist 6.0.26 → 6.0.28

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.
Files changed (213) hide show
  1. package/client/bootstrap.ts +13 -4
  2. package/client/components/activity-starter-form.ts +41 -10
  3. package/client/grist-editor/grist-editor-activity-search-key.ts +79 -0
  4. package/client/grist-editor/popup-activity-search-keys-input.ts +167 -0
  5. package/client/pages/activity/activity-list-page.ts +74 -11
  6. package/client/pages/activity/activity-partial-view.ts +82 -0
  7. package/client/pages/activity/starter-list-page.ts +1 -0
  8. package/client/pages/activity-approval/activity-approval-page.ts +61 -14
  9. package/client/pages/activity-instance/activity-instance-page.ts +18 -0
  10. package/client/pages/activity-instance/activity-instance-search-page.ts +377 -0
  11. package/client/pages/activity-instance/activity-instance-view.ts +135 -0
  12. package/client/pages/activity-store/activity-store-page.ts +1 -1
  13. package/client/pages/activity-template/activity-template-list-page.ts +1 -1
  14. package/client/pages/activity-thread/activity-thread-page.ts +32 -6
  15. package/client/pages/activity-thread/activity-thread-view.ts +102 -0
  16. package/client/pages/installable-activity/installable-activity-list-page.ts +1 -1
  17. package/client/pages/todo/approval-waiting-list-page.ts +12 -2
  18. package/client/pages/todo/draft-list-page.ts +19 -5
  19. package/client/pages/todo/todo-list-page.ts +14 -3
  20. package/client/route.ts +4 -0
  21. package/client/types/activity-instance-type.ts +123 -0
  22. package/client/types/activity-instance.ts +124 -0
  23. package/client/types/activity-model-type.ts +40 -0
  24. package/client/types/activity-search-key-item-type.ts +9 -0
  25. package/client/types/activity-thread-type.ts +19 -0
  26. package/client/types/activity-thread.ts +88 -0
  27. package/client/types/activity.ts +97 -0
  28. package/client/{types.js → types/types.ts} +1 -9
  29. package/dist-client/bootstrap.d.ts +1 -0
  30. package/dist-client/bootstrap.js +7 -3
  31. package/dist-client/bootstrap.js.map +1 -1
  32. package/dist-client/components/activity-starter-form.d.ts +1 -1
  33. package/dist-client/components/activity-starter-form.js +40 -9
  34. package/dist-client/components/activity-starter-form.js.map +1 -1
  35. package/dist-client/grist-editor/grist-editor-activity-search-key.d.ts +12 -0
  36. package/dist-client/grist-editor/grist-editor-activity-search-key.js +70 -0
  37. package/dist-client/grist-editor/grist-editor-activity-search-key.js.map +1 -0
  38. package/dist-client/grist-editor/popup-activity-search-keys-input.d.ts +17 -0
  39. package/dist-client/grist-editor/popup-activity-search-keys-input.js +177 -0
  40. package/dist-client/grist-editor/popup-activity-search-keys-input.js.map +1 -0
  41. package/dist-client/pages/activity/activity-list-page.d.ts +4 -0
  42. package/dist-client/pages/activity/activity-list-page.js +73 -11
  43. package/dist-client/pages/activity/activity-list-page.js.map +1 -1
  44. package/dist-client/pages/activity/activity-partial-view.d.ts +13 -0
  45. package/dist-client/pages/activity/activity-partial-view.js +56 -0
  46. package/dist-client/pages/activity/activity-partial-view.js.map +1 -0
  47. package/dist-client/pages/activity/starter-list-page.js.map +1 -1
  48. package/dist-client/pages/activity-approval/activity-approval-page.d.ts +2 -2
  49. package/dist-client/pages/activity-approval/activity-approval-page.js +59 -14
  50. package/dist-client/pages/activity-approval/activity-approval-page.js.map +1 -1
  51. package/dist-client/pages/activity-instance/activity-instance-page.d.ts +2 -1
  52. package/dist-client/pages/activity-instance/activity-instance-page.js +15 -0
  53. package/dist-client/pages/activity-instance/activity-instance-page.js.map +1 -1
  54. package/dist-client/pages/activity-instance/activity-instance-search-page.d.ts +76 -0
  55. package/dist-client/pages/activity-instance/activity-instance-search-page.js +371 -0
  56. package/dist-client/pages/activity-instance/activity-instance-search-page.js.map +1 -0
  57. package/dist-client/pages/activity-instance/activity-instance-view.d.ts +14 -0
  58. package/dist-client/pages/activity-instance/activity-instance-view.js +130 -0
  59. package/dist-client/pages/activity-instance/activity-instance-view.js.map +1 -0
  60. package/dist-client/pages/activity-store/activity-store-page.js +1 -1
  61. package/dist-client/pages/activity-store/activity-store-page.js.map +1 -1
  62. package/dist-client/pages/activity-template/activity-template-list-page.js +1 -1
  63. package/dist-client/pages/activity-template/activity-template-list-page.js.map +1 -1
  64. package/dist-client/pages/activity-thread/activity-thread-page.d.ts +2 -2
  65. package/dist-client/pages/activity-thread/activity-thread-page.js +29 -6
  66. package/dist-client/pages/activity-thread/activity-thread-page.js.map +1 -1
  67. package/dist-client/pages/activity-thread/activity-thread-view.d.ts +11 -0
  68. package/dist-client/pages/activity-thread/activity-thread-view.js +103 -0
  69. package/dist-client/pages/activity-thread/activity-thread-view.js.map +1 -0
  70. package/dist-client/pages/installable-activity/installable-activity-list-page.js +1 -1
  71. package/dist-client/pages/installable-activity/installable-activity-list-page.js.map +1 -1
  72. package/dist-client/pages/todo/approval-waiting-list-page.js +12 -2
  73. package/dist-client/pages/todo/approval-waiting-list-page.js.map +1 -1
  74. package/dist-client/pages/todo/draft-list-page.d.ts +4 -8
  75. package/dist-client/pages/todo/draft-list-page.js +16 -3
  76. package/dist-client/pages/todo/draft-list-page.js.map +1 -1
  77. package/dist-client/pages/todo/todo-list-page.js +13 -3
  78. package/dist-client/pages/todo/todo-list-page.js.map +1 -1
  79. package/dist-client/route.d.ts +1 -1
  80. package/dist-client/route.js +3 -0
  81. package/dist-client/route.js.map +1 -1
  82. package/dist-client/tsconfig.tsbuildinfo +1 -1
  83. package/dist-client/types/activity-instance-type.d.ts +76 -0
  84. package/dist-client/types/activity-instance-type.js +11 -0
  85. package/dist-client/types/activity-instance-type.js.map +1 -0
  86. package/dist-client/types/activity-instance.d.ts +70 -0
  87. package/dist-client/types/activity-instance.js +36 -0
  88. package/dist-client/types/activity-instance.js.map +1 -0
  89. package/dist-client/types/activity-model-type.d.ts +31 -0
  90. package/dist-client/types/activity-model-type.js +18 -0
  91. package/dist-client/types/activity-model-type.js.map +1 -0
  92. package/dist-client/types/activity-search-key-item-type.d.ts +6 -0
  93. package/dist-client/types/activity-search-key-item-type.js +3 -0
  94. package/dist-client/types/activity-search-key-item-type.js.map +1 -0
  95. package/dist-client/types/activity-thread-type.d.ts +15 -0
  96. package/dist-client/types/activity-thread-type.js +7 -0
  97. package/dist-client/types/activity-thread-type.js.map +1 -0
  98. package/dist-client/types/activity-thread.d.ts +37 -0
  99. package/dist-client/types/activity-thread.js +51 -0
  100. package/dist-client/types/activity-thread.js.map +1 -0
  101. package/dist-client/types/activity.d.ts +62 -0
  102. package/dist-client/types/activity.js +35 -0
  103. package/dist-client/types/activity.js.map +1 -0
  104. package/dist-client/types/types.d.ts +15 -0
  105. package/dist-client/types/types.js +30 -0
  106. package/dist-client/types/types.js.map +1 -0
  107. package/dist-client/types.js +1 -0
  108. package/dist-client/types.js.map +1 -1
  109. package/dist-server/controllers/activity-approval/approve.js +3 -1
  110. package/dist-server/controllers/activity-approval/approve.js.map +1 -1
  111. package/dist-server/controllers/activity-approval/reject.js +2 -0
  112. package/dist-server/controllers/activity-approval/reject.js.map +1 -1
  113. package/dist-server/controllers/activity-installation/activity-installation-controller.js +25 -0
  114. package/dist-server/controllers/activity-installation/activity-installation-controller.js.map +1 -0
  115. package/dist-server/controllers/activity-installation/call-webhook.js +41 -0
  116. package/dist-server/controllers/activity-installation/call-webhook.js.map +1 -0
  117. package/dist-server/controllers/activity-installation/callback-registry.js +21 -0
  118. package/dist-server/controllers/activity-installation/callback-registry.js.map +1 -0
  119. package/dist-server/controllers/activity-instance/abort.js +1 -1
  120. package/dist-server/controllers/activity-instance/abort.js.map +1 -1
  121. package/dist-server/controllers/activity-instance/adjust.js +1 -1
  122. package/dist-server/controllers/activity-instance/adjust.js.map +1 -1
  123. package/dist-server/controllers/activity-instance/delegate.js +5 -0
  124. package/dist-server/controllers/activity-instance/delegate.js.map +1 -1
  125. package/dist-server/controllers/activity-instance/draft.js +27 -1
  126. package/dist-server/controllers/activity-instance/draft.js.map +1 -1
  127. package/dist-server/controllers/activity-instance/post.js +39 -4
  128. package/dist-server/controllers/activity-instance/post.js.map +1 -1
  129. package/dist-server/controllers/activity-instance/start.js +1 -1
  130. package/dist-server/controllers/activity-instance/start.js.map +1 -1
  131. package/dist-server/controllers/activity-thread/submit.js +2 -2
  132. package/dist-server/controllers/activity-thread/submit.js.map +1 -1
  133. package/dist-server/controllers/common.js +105 -57
  134. package/dist-server/controllers/common.js.map +1 -1
  135. package/dist-server/controllers/index.js +1 -1
  136. package/dist-server/controllers/index.js.map +1 -1
  137. package/dist-server/service/activity/activity-history.js +15 -0
  138. package/dist-server/service/activity/activity-history.js.map +1 -1
  139. package/dist-server/service/activity/activity-search-key-item-type.js +28 -0
  140. package/dist-server/service/activity/activity-search-key-item-type.js.map +1 -0
  141. package/dist-server/service/activity/activity-type.js +32 -0
  142. package/dist-server/service/activity/activity-type.js.map +1 -1
  143. package/dist-server/service/activity/activity.js +25 -3
  144. package/dist-server/service/activity/activity.js.map +1 -1
  145. package/dist-server/service/activity-approval/event-subscriber.js +1 -1
  146. package/dist-server/service/activity-approval/event-subscriber.js.map +1 -1
  147. package/dist-server/service/activity-instance/activity-instance-history.js +53 -0
  148. package/dist-server/service/activity-instance/activity-instance-history.js.map +1 -1
  149. package/dist-server/service/activity-instance/activity-instance-query.js +70 -0
  150. package/dist-server/service/activity-instance/activity-instance-query.js.map +1 -1
  151. package/dist-server/service/activity-instance/activity-instance.js +53 -0
  152. package/dist-server/service/activity-instance/activity-instance.js.map +1 -1
  153. package/dist-server/service/activity-instance/event-subscriber.js +4 -4
  154. package/dist-server/service/activity-instance/event-subscriber.js.map +1 -1
  155. package/dist-server/service/activity-thread/activity-thread.js +4 -1
  156. package/dist-server/service/activity-thread/activity-thread.js.map +1 -1
  157. package/dist-server/service/installable-activity/installable-activity-mutation.js +1 -1
  158. package/dist-server/service/installable-activity/installable-activity-mutation.js.map +1 -1
  159. package/dist-server/service/installable-activity/installable-activity-query.js +1 -1
  160. package/dist-server/service/installable-activity/installable-activity-query.js.map +1 -1
  161. package/dist-server/service/installable-activity/installable-activity.js.map +1 -1
  162. package/dist-server/tsconfig.tsbuildinfo +1 -1
  163. package/package.json +8 -7
  164. package/server/controllers/activity-approval/approve.ts +5 -2
  165. package/server/controllers/activity-approval/reject.ts +3 -0
  166. package/server/controllers/{activity-installation-controller.ts → activity-installation/activity-installation-controller.ts} +12 -1
  167. package/server/controllers/activity-instance/abort.ts +1 -1
  168. package/server/controllers/activity-instance/adjust.ts +1 -1
  169. package/server/controllers/activity-instance/delegate.ts +9 -1
  170. package/server/controllers/activity-instance/draft.ts +30 -3
  171. package/server/controllers/activity-instance/post.ts +55 -7
  172. package/server/controllers/activity-instance/start.ts +1 -1
  173. package/server/controllers/activity-thread/submit.ts +3 -2
  174. package/server/controllers/common.ts +133 -56
  175. package/server/controllers/index.ts +1 -1
  176. package/server/service/activity/activity-history.ts +13 -0
  177. package/server/service/activity/activity-search-key-item-type.ts +16 -0
  178. package/server/service/activity/activity-type.ts +28 -1
  179. package/server/service/activity/activity.ts +22 -3
  180. package/server/service/activity-approval/event-subscriber.ts +1 -1
  181. package/server/service/activity-instance/activity-instance-history.ts +41 -0
  182. package/server/service/activity-instance/activity-instance-query.ts +74 -1
  183. package/server/service/activity-instance/activity-instance.ts +41 -0
  184. package/server/service/activity-instance/event-subscriber.ts +4 -4
  185. package/server/service/activity-thread/activity-thread.ts +6 -3
  186. package/server/service/installable-activity/installable-activity-mutation.ts +1 -1
  187. package/server/service/installable-activity/installable-activity-query.ts +1 -1
  188. package/server/service/installable-activity/installable-activity.ts +3 -1
  189. package/things-factory.config.js +5 -5
  190. package/translations/en.json +5 -0
  191. package/translations/ko.json +5 -0
  192. package/translations/ms.json +5 -0
  193. package/translations/zh.json +5 -0
  194. package/dist-client/pages/installed-activity/installed-activity-list-page.d.ts +0 -45
  195. package/dist-client/pages/installed-activity/installed-activity-list-page.js +0 -412
  196. package/dist-client/pages/installed-activity/installed-activity-list-page.js.map +0 -1
  197. package/dist-client/pages/installed-activity/installed-activity-model-item-list.d.ts +0 -1
  198. package/dist-client/pages/installed-activity/installed-activity-model-item-list.js +0 -20
  199. package/dist-client/pages/installed-activity/installed-activity-model-item-list.js.map +0 -1
  200. package/dist-client/templates/activity-context-template.d.ts +0 -2
  201. package/dist-client/templates/activity-context-template.js +0 -62
  202. package/dist-client/templates/activity-context-template.js.map +0 -1
  203. package/dist-server/service/installed-activity/index.js +0 -10
  204. package/dist-server/service/installed-activity/index.js.map +0 -1
  205. package/dist-server/service/installed-activity/installed-activity-mutation.js +0 -60
  206. package/dist-server/service/installed-activity/installed-activity-mutation.js.map +0 -1
  207. package/dist-server/service/installed-activity/installed-activity-query.js +0 -48
  208. package/dist-server/service/installed-activity/installed-activity-query.js.map +0 -1
  209. package/dist-server/service/installed-activity/installed-activity-type.js +0 -21
  210. package/dist-server/service/installed-activity/installed-activity-type.js.map +0 -1
  211. package/dist-server/service/installed-activity/installed-activity.js +0 -70
  212. package/dist-server/service/installed-activity/installed-activity.js.map +0 -1
  213. /package/server/controllers/{call-webhook.ts → activity-installation/call-webhook.ts} +0 -0
@@ -3,9 +3,12 @@ import GraphQLUpload from 'graphql-upload/GraphQLUpload.js'
3
3
  import { Field, ID, InputType, Int, ObjectType } from 'type-graphql'
4
4
 
5
5
  import { ObjectRef, ScalarObject } from '@things-factory/shell'
6
+ import { ApprovalLineItem } from '@things-factory/organization'
6
7
 
7
- import { Activity, ActivityType, ActivityUIType } from './activity'
8
+ import { AssigneeItem } from '../activity-instance/activity-instance'
9
+ import { Activity, ActivityStatus, ActivityType, ActivityUIType } from './activity'
8
10
  import { ActivityModelItem } from './activity-model-type'
11
+ import { ActivitySearchKeyItem } from './activity-search-key-item-type'
9
12
 
10
13
  @InputType()
11
14
  export class NewActivity {
@@ -18,6 +21,12 @@ export class NewActivity {
18
21
  @Field({ nullable: true })
19
22
  activityType?: ActivityType
20
23
 
24
+ @Field(type => ScalarObject, { nullable: true })
25
+ searchKeys?: ActivitySearchKeyItem[]
26
+
27
+ @Field({ nullable: true })
28
+ state?: ActivityStatus
29
+
21
30
  @Field(type => ScalarObject, { nullable: true })
22
31
  model?: ActivityModelItem[]
23
32
 
@@ -51,6 +60,12 @@ export class NewActivity {
51
60
  @Field(type => ObjectRef, { nullable: true })
52
61
  supervisoryRole?: ObjectRef
53
62
 
63
+ @Field(type => ScalarObject, { nullable: true })
64
+ assignees?: AssigneeItem[]
65
+
66
+ @Field(type => ScalarObject, { nullable: true })
67
+ approvalLine?: ApprovalLineItem[]
68
+
54
69
  @Field({ nullable: true })
55
70
  uiType?: ActivityUIType
56
71
 
@@ -84,6 +99,12 @@ export class ActivityPatch {
84
99
  @Field({ nullable: true })
85
100
  activityType?: ActivityType
86
101
 
102
+ @Field(type => ScalarObject, { nullable: true })
103
+ searchKeys?: ActivitySearchKeyItem[]
104
+
105
+ @Field({ nullable: true })
106
+ state?: ActivityStatus
107
+
87
108
  @Field(type => ScalarObject, { nullable: true })
88
109
  model?: ActivityModelItem[]
89
110
 
@@ -117,6 +138,12 @@ export class ActivityPatch {
117
138
  @Field(type => ObjectRef, { nullable: true })
118
139
  supervisoryRole?: ObjectRef
119
140
 
141
+ @Field(type => ScalarObject, { nullable: true })
142
+ assignees?: AssigneeItem[]
143
+
144
+ @Field(type => ScalarObject, { nullable: true })
145
+ approvalLine?: ApprovalLineItem[]
146
+
120
147
  @Field({ nullable: true })
121
148
  uiType?: ActivityUIType
122
149
 
@@ -13,8 +13,11 @@ import {
13
13
 
14
14
  import { Role, User } from '@things-factory/auth-base'
15
15
  import { Domain } from '@things-factory/shell'
16
+ import { ApprovalLineItem } from '@things-factory/organization'
16
17
 
18
+ import { AssigneeItem } from '../activity-instance/activity-instance'
17
19
  import { ActivityModelItem } from './activity-model-type'
20
+ import { ActivitySearchKeyItem } from './activity-search-key-item-type'
18
21
 
19
22
  export enum ActivityStatus {
20
23
  Draft = 'draft',
@@ -48,8 +51,9 @@ registerEnumType(ActivityType, {
48
51
  export enum ActivityUIType {
49
52
  Generated = 'generated',
50
53
  Template = 'template',
51
- Page = 'page',
52
54
  Board = 'board',
55
+ CustomElement = 'custom-element',
56
+ Page = 'page',
53
57
  External = 'external'
54
58
  }
55
59
 
@@ -94,6 +98,10 @@ export class Activity {
94
98
  @Field({ nullable: true })
95
99
  state?: ActivityStatus
96
100
 
101
+ @Column('simple-json', { nullable: true })
102
+ @Field(type => [ActivitySearchKeyItem], { nullable: true })
103
+ searchKeys?: ActivitySearchKeyItem[]
104
+
97
105
  @Column('simple-json', { nullable: true })
98
106
  @Field(type => [ActivityModelItem], { nullable: true })
99
107
  model?: ActivityModelItem[]
@@ -136,19 +144,30 @@ export class Activity {
136
144
  issuerRoleId?: string
137
145
 
138
146
  @ManyToOne(type => Role, { nullable: true })
139
- @Field(type => Role, { nullable: true })
147
+ @Field(type => Role, { nullable: true, description: 'Roles eligible to pick up activity from the activity bank.' })
140
148
  assigneeRole?: Role
141
149
 
142
150
  @RelationId((activity: Activity) => activity.assigneeRole)
143
151
  assigneeRoleId?: string
144
152
 
145
153
  @ManyToOne(type => Role, { nullable: true })
146
- @Field(type => Role, { nullable: true })
154
+ @Field(type => Role, { nullable: true, description: 'The final authority on a given activity.' })
147
155
  supervisoryRole?: Role
148
156
 
149
157
  @RelationId((activity: Activity) => activity.supervisoryRole)
150
158
  supervisoryRoleId?: string
151
159
 
160
+ @Column('simple-json', { nullable: true })
161
+ @Field(type => [AssigneeItem], { nullable: true, description: 'Who to resolve for the activity.' })
162
+ assignees?: AssigneeItem[]
163
+
164
+ @Column('simple-json', { nullable: true })
165
+ @Field(type => [ApprovalLineItem], {
166
+ nullable: true,
167
+ description: 'Approval line for handling the activity.'
168
+ })
169
+ approvalLine?: ApprovalLineItem[]
170
+
152
171
  @Column({ nullable: true })
153
172
  @Field({ nullable: true })
154
173
  uiType?: ActivityUIType
@@ -3,7 +3,7 @@ import { EventSubscriber, EntitySubscriberInterface, InsertEvent, UpdateEvent }
3
3
  import { Domain, pubsub } from '@things-factory/shell'
4
4
 
5
5
  import { ActivityApproval } from './activity-approval'
6
- import { callWebhook } from '../../controllers/call-webhook'
6
+ import { callWebhook } from '../../controllers/activity-installation/call-webhook'
7
7
 
8
8
  @EventSubscriber()
9
9
  export class ActivityApprovalSubscriber implements EntitySubscriberInterface<ActivityApproval> {
@@ -72,6 +72,26 @@ export class ActivityInstanceHistory implements HistoryEntityInterface<ActivityI
72
72
  @Field({ nullable: true })
73
73
  adhocType?: string
74
74
 
75
+ @Column({ nullable: true, default: '' })
76
+ @Field({ nullable: true })
77
+ key01?: string = ''
78
+
79
+ @Column({ nullable: true, default: '' })
80
+ @Field({ nullable: true })
81
+ key02?: string = ''
82
+
83
+ @Column({ nullable: true, default: '' })
84
+ @Field({ nullable: true })
85
+ key03?: string = ''
86
+
87
+ @Column({ nullable: true, default: '' })
88
+ @Field({ nullable: true })
89
+ key04?: string = ''
90
+
91
+ @Column({ nullable: true, default: '' })
92
+ @Field({ nullable: true })
93
+ key05?: string = ''
94
+
75
95
  @Column({ nullable: true })
76
96
  @Field({ nullable: true })
77
97
  uiType?: ActivityUIType
@@ -146,6 +166,10 @@ export class ActivityInstanceHistory implements HistoryEntityInterface<ActivityI
146
166
  @Field({ nullable: true })
147
167
  updatedAt?: Date
148
168
 
169
+ @Column({ nullable: true })
170
+ @Field({ nullable: true })
171
+ issuedAt?: Date
172
+
149
173
  @Column({ nullable: true })
150
174
  @Field({ nullable: true })
151
175
  assignedAt?: Date
@@ -172,6 +196,13 @@ export class ActivityInstanceHistory implements HistoryEntityInterface<ActivityI
172
196
  @RelationId((activityInstance: ActivityInstance) => activityInstance.updater)
173
197
  updaterId?: string
174
198
 
199
+ @ManyToOne(type => User, { nullable: true })
200
+ @Field({ nullable: true })
201
+ issuer?: User
202
+
203
+ @RelationId((activityInstance: ActivityInstance) => activityInstance.issuer)
204
+ issuerId?: string
205
+
175
206
  @ManyToOne(type => User, { nullable: true })
176
207
  @Field({ nullable: true })
177
208
  starter?: User
@@ -200,4 +231,14 @@ export class ActivityInstanceHistory implements HistoryEntityInterface<ActivityI
200
231
  enum: HistoryActionType
201
232
  })
202
233
  public action!: HistoryActionType
234
+
235
+ isDelegatable(): boolean {
236
+ switch (this.state) {
237
+ case ActivityInstanceStatus.Posted:
238
+ case ActivityInstanceStatus.Assigned:
239
+ return true
240
+ default:
241
+ return false
242
+ }
243
+ }
203
244
  }
@@ -1,4 +1,4 @@
1
- import { Arg, Args, Ctx, FieldResolver, Query, Resolver, Root } from 'type-graphql'
1
+ import { Arg, Args, Ctx, Directive, FieldResolver, Query, Resolver, Root } from 'type-graphql'
2
2
 
3
3
  import { Attachment } from '@things-factory/attachment-base'
4
4
  import { Role, User } from '@things-factory/auth-base'
@@ -8,9 +8,11 @@ import { ActivityThread } from '../activity-thread/activity-thread'
8
8
  import { Activity } from '../activity/activity'
9
9
  import { ActivityInstance, ActivityInstanceStatus, AssigneeItem } from './activity-instance'
10
10
  import { ActivityInstanceList } from './activity-instance-type'
11
+ import { ApprovalLineItem } from '@things-factory/organization'
11
12
 
12
13
  @Resolver(ActivityInstance)
13
14
  export class ActivityInstanceQuery {
15
+ @Directive('@privilege(category: "activity-instance", privilege: "query", domainOwnerGranted: true)')
14
16
  @Query(returns => ActivityInstance!, { nullable: true, description: 'To fetch a ActivityInstance' })
15
17
  async activityInstance(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<ActivityInstance> {
16
18
  const { domain } = context.state
@@ -20,6 +22,7 @@ export class ActivityInstanceQuery {
20
22
  })
21
23
  }
22
24
 
25
+ @Directive('@privilege(category: "activity-instance", privilege: "query", domainOwnerGranted: true)')
23
26
  @Query(returns => ActivityInstanceList, { description: 'To fetch multiple ActivityInstances' })
24
27
  async activityInstances(@Args() params: ListParam, @Ctx() context: ResolverContext): Promise<ActivityInstanceList> {
25
28
  const { domain } = context.state
@@ -34,6 +37,32 @@ export class ActivityInstanceQuery {
34
37
  return { items, total }
35
38
  }
36
39
 
40
+ @Directive('@privilege(category: "activity-instance", privilege: "query", domainOwnerGranted: true)')
41
+ @Query(returns => ActivityInstanceList, { description: 'To fetch multiple activity instances by activity' })
42
+ async activityInstancesByActivity(
43
+ @Arg('activityId') activityId: string,
44
+ @Args() params: ListParam,
45
+ @Ctx() context: ResolverContext
46
+ ): Promise<ActivityInstanceList> {
47
+ const { domain } = context.state
48
+
49
+ const activity = await getRepository(Activity).findOneBy({ id: activityId })
50
+ const searchables = activity?.searchKeys?.map((item, index) => `key0${index + 1}`) || []
51
+
52
+ const queryBuilder = getQueryBuilderFromListParams({
53
+ repository: getRepository(ActivityInstance),
54
+ params,
55
+ domain,
56
+ alias: 'ai',
57
+ searchables: ['name', 'description'].concat(searchables)
58
+ }).where('ai.activity = :activity', { activity: activityId })
59
+
60
+ const [items, total] = await queryBuilder.getManyAndCount()
61
+
62
+ return { items, total }
63
+ }
64
+
65
+ // @Directive('@privilege(category: "activity-instance", privilege: "query", domainOwnerGranted: true)')
37
66
  @Query(returns => ActivityInstanceList, { description: 'To get list of activity instance that a user can pick' })
38
67
  async pickableActivityList(
39
68
  @Args() params: ListParam,
@@ -77,6 +106,7 @@ export class ActivityInstanceQuery {
77
106
  return { items, total }
78
107
  }
79
108
 
109
+ // @Directive('@privilege(category: "activity-instance", privilege: "query", domainOwnerGranted: true)')
80
110
  @Query(returns => ActivityInstanceList, { description: 'To fetch my own ActivityInstances' })
81
111
  async draftList(@Args() params: ListParam, @Ctx() context: ResolverContext): Promise<ActivityInstanceList> {
82
112
  var { domain, user } = context.state
@@ -193,6 +223,49 @@ export class ActivityInstanceQuery {
193
223
  return assigneeItemList
194
224
  }
195
225
 
226
+ @FieldResolver(type => [ApprovalLineItem])
227
+ async approvalLine(
228
+ @Root() activityInstance: ActivityInstance,
229
+ @Ctx() context: ResolverContext
230
+ ): Promise<ApprovalLineItem[]> {
231
+ const { domain, user } = context.state
232
+ const { approvalLine } = activityInstance
233
+
234
+ if (!approvalLine || !(approvalLine instanceof Array)) {
235
+ return null
236
+ }
237
+
238
+ var approvalLineItems = []
239
+
240
+ for (let item of approvalLine) {
241
+ var { type, value: id } = item
242
+ var approver
243
+
244
+ switch (type) {
245
+ case 'Employee':
246
+ approver = await getRepository('Employee').findOneBy({ domain: { id: domain.id }, id })
247
+ break
248
+ case 'Department':
249
+ approver = await getRepository('Department').findOneBy({ domain: { id: domain.id }, id })
250
+ break
251
+ case 'Role':
252
+ approver = await getRepository('Role').findOneBy({ domain: { id: domain.id }, id })
253
+ break
254
+ case 'Myself':
255
+ approver = user
256
+ break
257
+ case 'MyDepartment':
258
+ case 'MySupervisor':
259
+ break
260
+ default:
261
+ }
262
+
263
+ approver && approvalLineItems.push({ type, value: id, approver })
264
+ }
265
+
266
+ return approvalLineItems
267
+ }
268
+
196
269
  @FieldResolver(type => Role)
197
270
  async supervisoryRole(@Root() activityInstance: ActivityInstance): Promise<Role> {
198
271
  return (
@@ -91,6 +91,26 @@ export class ActivityInstance {
91
91
  @Field({ nullable: true })
92
92
  adhocType?: string
93
93
 
94
+ @Column({ nullable: true, default: '' })
95
+ @Field({ nullable: true })
96
+ key01?: string = ''
97
+
98
+ @Column({ nullable: true, default: '' })
99
+ @Field({ nullable: true })
100
+ key02?: string = ''
101
+
102
+ @Column({ nullable: true, default: '' })
103
+ @Field({ nullable: true })
104
+ key03?: string = ''
105
+
106
+ @Column({ nullable: true, default: '' })
107
+ @Field({ nullable: true })
108
+ key04?: string = ''
109
+
110
+ @Column({ nullable: true, default: '' })
111
+ @Field({ nullable: true })
112
+ key05?: string = ''
113
+
94
114
  @OneToMany(type => ActivityThread, activityThread => activityThread.activityInstance)
95
115
  @Field(type => [ActivityThread])
96
116
  activityThreads?: ActivityThread[]
@@ -180,6 +200,10 @@ export class ActivityInstance {
180
200
  @Field({ nullable: true })
181
201
  updatedAt?: Date
182
202
 
203
+ @Column({ nullable: true })
204
+ @Field({ nullable: true })
205
+ issuedAt?: Date
206
+
183
207
  @Column({ nullable: true })
184
208
  @Field({ nullable: true })
185
209
  assignedAt?: Date
@@ -206,6 +230,13 @@ export class ActivityInstance {
206
230
  @RelationId((activityInstance: ActivityInstance) => activityInstance.updater)
207
231
  updaterId?: string
208
232
 
233
+ @ManyToOne(type => User, { nullable: true })
234
+ @Field({ nullable: true })
235
+ issuer?: User
236
+
237
+ @RelationId((activityInstance: ActivityInstance) => activityInstance.issuer)
238
+ issuerId?: string
239
+
209
240
  @ManyToOne(type => User, { nullable: true })
210
241
  @Field({ nullable: true })
211
242
  starter?: User
@@ -222,4 +253,14 @@ export class ActivityInstance {
222
253
 
223
254
  @Field(type => String, { nullable: true })
224
255
  thumbnail?: string
256
+
257
+ isDelegatable(): boolean {
258
+ switch (this.state) {
259
+ case ActivityInstanceStatus.Posted:
260
+ case ActivityInstanceStatus.Assigned:
261
+ return true
262
+ default:
263
+ return false
264
+ }
265
+ }
225
266
  }
@@ -12,16 +12,16 @@ export class ActivityInstanceSubscriber implements EntitySubscriberInterface<Act
12
12
  return ActivityInstance
13
13
  }
14
14
 
15
- afterInsert(event: InsertEvent<ActivityInstance>): Promise<any> | void {
16
- const activityInstance = event.entity
15
+ async afterInsert(event: InsertEvent<ActivityInstance>): Promise<any | void> {
16
+ const { entity: activityInstance, manager: tx } = event
17
17
 
18
18
  pubsub.publish('activity-instance', {
19
19
  activityInstance
20
20
  })
21
21
  }
22
22
 
23
- afterUpdate(event: UpdateEvent<ActivityInstance>): Promise<any> | void {
24
- const activityInstance = event.entity
23
+ async afterUpdate(event: UpdateEvent<ActivityInstance>): Promise<any | void> {
24
+ const { entity: activityInstance, manager: tx } = event
25
25
 
26
26
  pubsub.publish('activity-instance', {
27
27
  activityInstance
@@ -82,11 +82,11 @@ export class ActivityThread {
82
82
 
83
83
  @Column({ nullable: true, default: 1 })
84
84
  @Field({ nullable: true })
85
- round: number = 1
85
+ round?: number = 1
86
86
 
87
87
  @Column({ nullable: true })
88
88
  @Field({ nullable: true })
89
- transaction: string
89
+ transaction?: string
90
90
 
91
91
  @Column({ nullable: true })
92
92
  @Field({ nullable: true })
@@ -146,6 +146,7 @@ export class ActivityThread {
146
146
  switch (this.state) {
147
147
  case ActivityThreadStatus.Started:
148
148
  case ActivityThreadStatus.Rejected:
149
+ case ActivityThreadStatus.Submitted:
149
150
  return true
150
151
  default:
151
152
  return false
@@ -158,9 +159,11 @@ export class ActivityThread {
158
159
  case ActivityThreadStatus.Started:
159
160
  case ActivityThreadStatus.Ended:
160
161
  case ActivityThreadStatus.Rejected:
162
+ case ActivityThreadStatus.Escalated:
163
+ case ActivityThreadStatus.Aborted:
164
+ case ActivityThreadStatus.Submitted:
161
165
  return true
162
166
  case ActivityThreadStatus.Delegated:
163
- case ActivityThreadStatus.Aborted:
164
167
  default:
165
168
  return false
166
169
  }
@@ -1,6 +1,6 @@
1
1
  import { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'
2
2
 
3
- import { ActivityInstallations } from '../../controllers/activity-installation-controller'
3
+ import { ActivityInstallations } from '../../controllers/activity-installation/activity-installation-controller'
4
4
  import { Activity, ActivityStatus } from '../activity/activity'
5
5
  import { InstallableActivity } from './installable-activity'
6
6
 
@@ -1,7 +1,7 @@
1
1
  import { Arg, Args, Ctx, Query, Resolver, FieldResolver, Root } from 'type-graphql'
2
2
  import { Domain, getRepository, ListParam } from '@things-factory/shell'
3
3
 
4
- import { ActivityInstallations } from '../../controllers/activity-installation-controller'
4
+ import { ActivityInstallations } from '../../controllers/activity-installation/activity-installation-controller'
5
5
  import { Activity } from '../activity/activity'
6
6
  import { InstallableActivity } from './installable-activity'
7
7
  import { InstallableActivityList } from './installable-activity-type'
@@ -1,4 +1,4 @@
1
- import { Field, ObjectType, registerEnumType } from 'type-graphql'
1
+ import { Field, ObjectType } from 'type-graphql'
2
2
 
3
3
  import { Activity, ActivityType, ActivityUIType } from '../activity/activity'
4
4
  import { ActivityModelItem } from '../activity/activity-model-type'
@@ -46,4 +46,6 @@ export class InstallableActivity {
46
46
 
47
47
  @Field(type => Activity, { nullable: true })
48
48
  activity?: Activity
49
+
50
+ callback?: (content: any, context: ResolverContext) => void
49
51
  }
@@ -14,19 +14,19 @@ export default {
14
14
  { tagname: 'draft-list-page', page: 'draft-list' },
15
15
  { tagname: 'starter-list-page', page: 'starter-list' },
16
16
  { tagname: 'reporter-list-page', page: 'reporter-list' },
17
+ { tagname: 'activity-key-set-list-page', page: 'activity-key-set-list' },
18
+ { tagname: 'activity-key-set-page', page: 'activity-key-set' },
17
19
  { tagname: 'activity-list-page', page: 'activity-list' },
18
- { tagname: 'activity-instance-list-page', page: 'activity-instance-list' },
19
20
  { tagname: 'activity-page', page: 'activity' },
21
+ { tagname: 'activity-instance-search-page', page: 'activity-instance-search' },
22
+ { tagname: 'activity-instance-list-page', page: 'activity-instance-list' },
20
23
  { tagname: 'activity-instance-page', page: 'activity-instance' },
21
24
  { tagname: 'activity-thread-page', page: 'activity-thread' },
22
25
  { tagname: 'activity-approval-page', page: 'activity-approval' },
23
26
  { tagname: 'worklist-home', page: 'worklist-home' },
24
27
  { tagname: 'activity-template-list-page', page: 'activity-template-list' },
25
28
  { tagname: 'activity-store-page', page: 'activity-store' },
26
- {
27
- tagname: 'activity-thread-list-page',
28
- page: 'activity-thread-list'
29
- },
29
+ { tagname: 'activity-thread-list-page', page: 'activity-thread-list' },
30
30
  { tagname: 'installable-activity-list-page', page: 'installable-activity-list' },
31
31
  { tagname: 'activity-approval-list-page', page: 'activity-approval-list' }
32
32
  ]
@@ -19,6 +19,7 @@
19
19
  "field.due-in": "due in",
20
20
  "field.hidden": "hidden",
21
21
  "field.inout": "inout",
22
+ "field.input-key": "input-key",
22
23
  "field.issuer": "issuer",
23
24
  "field.posted-at": "posted at",
24
25
  "field.issuer-role": "issuer role",
@@ -26,11 +27,13 @@
26
27
  "field.mandatory": "mandatory",
27
28
  "field.options": "options",
28
29
  "field.priority": "priority",
30
+ "field.provider": "provider",
29
31
  "field.quantifier": "quantifier",
30
32
  "field.report-type": "report type",
31
33
  "field.report-source": "report source",
32
34
  "field.release": "release",
33
35
  "field.schedule": "schedule",
36
+ "field.search-keys": "search keys",
34
37
  "field.spec": "spec",
35
38
  "field.standard-time": "ST(sec)",
36
39
  "field.startable": "startable",
@@ -58,6 +61,8 @@
58
61
  "title.activity list": "activity list",
59
62
  "title.activity model item list": "activity model item list",
60
63
  "title.activity instance list": "activity instance list",
64
+ "title.activity instance search": "activity instance search",
65
+ "title.activity instance view": "activity instance view",
61
66
  "title.activity intro": "activity intro",
62
67
  "title.activity preview": "activity preview",
63
68
  "title.activity reporter list": "activity reporter list",
@@ -19,6 +19,7 @@
19
19
  "field.due-in": "잔여시간",
20
20
  "field.hidden": "숨기기",
21
21
  "field.inout": "입출력",
22
+ "field.input-key": "입력키",
22
23
  "field.issuer": "발급자",
23
24
  "field.posted-at": "발급일",
24
25
  "field.issuer-role": "발급자 역할",
@@ -26,11 +27,13 @@
26
27
  "field.mandatory": "필수",
27
28
  "field.options": "선택옵션",
28
29
  "field.priority": "우선순위",
30
+ "field.provider": "공급자",
29
31
  "field.quantifier": "수량",
30
32
  "field.report-type": "리포트 타입",
31
33
  "field.report-source": "리포트 소스",
32
34
  "field.release": "배포버전",
33
35
  "field.schedule": "스케줄",
36
+ "field.search-keys": "검색키",
34
37
  "field.spec": "명세",
35
38
  "field.standard-time": "ST(초)",
36
39
  "field.startable": "시작 가능 업무",
@@ -58,6 +61,8 @@
58
61
  "title.activity list": "업무정의 리스트",
59
62
  "title.activity model item list": "업무 모델 항목",
60
63
  "title.activity instance list": "업무 리스트",
64
+ "title.activity instance search": "업무 검색",
65
+ "title.activity instance view": "업무 상세 정보",
61
66
  "title.activity intro": "업무 소개",
62
67
  "title.activity preview": "업무 미리보기",
63
68
  "title.activity reporter list": "업무 현황",
@@ -19,6 +19,7 @@
19
19
  "field.due-in": "due in",
20
20
  "field.hidden": "hidden",
21
21
  "field.inout": "inout",
22
+ "field.input-key": "[ms] input-key",
22
23
  "field.issuer": "issuer",
23
24
  "field.posted-at": "posted at",
24
25
  "field.issuer-role": "issuer role",
@@ -26,10 +27,12 @@
26
27
  "field.mandatory": "mandatory",
27
28
  "field.options": "options",
28
29
  "field.priority": "priority",
30
+ "field.provider": "provider",
29
31
  "field.quantifier": "quantifier",
30
32
  "field.report-type": "report type",
31
33
  "field.report-source": "report source",
32
34
  "field.schedule": "jadual",
35
+ "field.search-keys": "[ms] search keys",
33
36
  "field.release": "[ms] release",
34
37
  "field.spec": "spec",
35
38
  "field.standard-time": "ST(sec)",
@@ -58,6 +61,8 @@
58
61
  "title.activity list": "activity list",
59
62
  "title.activity model item list": "activity model item list",
60
63
  "title.activity instance list": "activity instance list",
64
+ "title.activity instance search": "activity instance search",
65
+ "title.activity instance view": "activity instance view",
61
66
  "title.activity intro": "activity intro",
62
67
  "title.activity preview": "activity preview",
63
68
  "title.activity reporter list": "activity reporter list",
@@ -18,9 +18,11 @@
18
18
  "field.due-at": "due at",
19
19
  "field.due-in": "due in",
20
20
  "field.inout": "inout",
21
+ "field.input-key": "[zh] input-key",
21
22
  "field.issuer": "issuer",
22
23
  "field.hidden": "hidden",
23
24
  "field.posted-at": "posted at",
25
+ "field.provider": "provider",
24
26
  "field.issuer-role": "issuer role",
25
27
  "field.lead-time": "LT(sec)",
26
28
  "field.mandatory": "mandatory",
@@ -28,6 +30,7 @@
28
30
  "field.priority": "priority",
29
31
  "field.quantifier": "quantifier",
30
32
  "field.schedule": "日程",
33
+ "field.search-keys": "[zh] search keys",
31
34
  "field.spec": "spec",
32
35
  "field.report-type": "report type",
33
36
  "field.release": "[zh] release",
@@ -58,6 +61,8 @@
58
61
  "title.activity list": "activity list",
59
62
  "title.activity model item list": "activity model item list",
60
63
  "title.activity instance list": "activity instance list",
64
+ "title.activity instance search": "activity instance search",
65
+ "title.activity instance view": "activity instance view",
61
66
  "title.activity intro": "activity intro",
62
67
  "title.activity preview": "activity preview",
63
68
  "title.activity reporter list": "activity reporter list",
@@ -1,45 +0,0 @@
1
- import '@operato/data-grist';
2
- import './installed-activity-model-item-list.js';
3
- import { DataGrist } from '@operato/data-grist';
4
- import { PageView } from '@operato/shell';
5
- declare const ActivityTemplateListPage_base: (new (...args: any[]) => {
6
- _storeUnsubscribe: import("redux").Unsubscribe;
7
- connectedCallback(): void;
8
- disconnectedCallback(): void;
9
- stateChanged(_state: unknown): void;
10
- readonly isConnected: boolean;
11
- }) & (new (...args: any[]) => import("lit").LitElement) & typeof PageView;
12
- export declare class ActivityTemplateListPage extends ActivityTemplateListPage_base {
13
- static styles: import("lit").CSSResult[];
14
- gristConfig: any;
15
- mode?: 'GRID' | 'LIST' | 'CARD';
16
- get context(): {
17
- search: {
18
- handler: (search: string) => void;
19
- placeholder: string;
20
- value: string;
21
- };
22
- filter: {
23
- handler: () => void;
24
- };
25
- help: string;
26
- actions: never[];
27
- };
28
- sorterControl?: any;
29
- grist: DataGrist;
30
- render(): import("lit-html").TemplateResult<1>;
31
- pageInitialized(lifecycle: any): Promise<void>;
32
- pageUpdated(changes: any, lifecycle: any): Promise<void>;
33
- fetchHandler({ page, limit, sortings, filters }: {
34
- page: any;
35
- limit: any;
36
- sortings?: never[] | undefined;
37
- filters?: never[] | undefined;
38
- }): Promise<{
39
- total: any;
40
- records: any;
41
- } | undefined>;
42
- activate(record: any): Promise<void>;
43
- deactivate(record: any): Promise<void>;
44
- }
45
- export {};