@things-factory/worklist 6.1.55 → 6.1.57

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 (55) hide show
  1. package/client/components/activity-approval-ribon.ts +165 -0
  2. package/client/components/activity-instance-ribon.ts +19 -93
  3. package/client/components/activity-thread-ribon.ts +160 -0
  4. package/client/pages/activity/activity-page.ts +2 -0
  5. package/client/pages/activity-approval/activity-approval-page.ts +32 -3
  6. package/client/pages/activity-instance/activity-instance-start-page.ts +4 -2
  7. package/client/pages/activity-instance/activity-instance-view.ts +17 -10
  8. package/client/pages/activity-thread/activity-thread-page.ts +14 -7
  9. package/client/pages/activity-thread/activity-thread-view-page.ts +2 -0
  10. package/client/templates/activity-approval-context-template.ts +121 -23
  11. package/client/templates/activity-instance-context-template.ts +116 -115
  12. package/client/templates/activity-thread-context-template.ts +117 -18
  13. package/dist-client/components/activity-approval-ribon.d.ts +13 -0
  14. package/dist-client/components/activity-approval-ribon.js +166 -0
  15. package/dist-client/components/activity-approval-ribon.js.map +1 -0
  16. package/dist-client/components/activity-instance-ribon.d.ts +1 -0
  17. package/dist-client/components/activity-instance-ribon.js +19 -80
  18. package/dist-client/components/activity-instance-ribon.js.map +1 -1
  19. package/dist-client/components/activity-thread-ribon.d.ts +13 -0
  20. package/dist-client/components/activity-thread-ribon.js +160 -0
  21. package/dist-client/components/activity-thread-ribon.js.map +1 -0
  22. package/dist-client/pages/activity/activity-page.js +2 -2
  23. package/dist-client/pages/activity/activity-page.js.map +1 -1
  24. package/dist-client/pages/activity-approval/activity-approval-page.d.ts +5 -4
  25. package/dist-client/pages/activity-approval/activity-approval-page.js +28 -5
  26. package/dist-client/pages/activity-approval/activity-approval-page.js.map +1 -1
  27. package/dist-client/pages/activity-instance/activity-instance-start-page.d.ts +0 -1
  28. package/dist-client/pages/activity-instance/activity-instance-start-page.js +4 -4
  29. package/dist-client/pages/activity-instance/activity-instance-start-page.js.map +1 -1
  30. package/dist-client/pages/activity-instance/activity-instance-view.d.ts +1 -1
  31. package/dist-client/pages/activity-instance/activity-instance-view.js +17 -10
  32. package/dist-client/pages/activity-instance/activity-instance-view.js.map +1 -1
  33. package/dist-client/pages/activity-thread/activity-thread-page.d.ts +4 -4
  34. package/dist-client/pages/activity-thread/activity-thread-page.js +13 -9
  35. package/dist-client/pages/activity-thread/activity-thread-page.js.map +1 -1
  36. package/dist-client/pages/activity-thread/activity-thread-view-page.js +2 -2
  37. package/dist-client/pages/activity-thread/activity-thread-view-page.js.map +1 -1
  38. package/dist-client/route.d.ts +1 -1
  39. package/dist-client/templates/activity-approval-context-template.js +124 -23
  40. package/dist-client/templates/activity-approval-context-template.js.map +1 -1
  41. package/dist-client/templates/activity-instance-context-template.js +116 -102
  42. package/dist-client/templates/activity-instance-context-template.js.map +1 -1
  43. package/dist-client/templates/activity-thread-context-template.js +120 -18
  44. package/dist-client/templates/activity-thread-context-template.js.map +1 -1
  45. package/dist-client/tsconfig.tsbuildinfo +1 -1
  46. package/dist-server/service/activity-approval/activity-approval-mutation.js +12 -0
  47. package/dist-server/service/activity-approval/activity-approval-mutation.js.map +1 -1
  48. package/dist-server/tsconfig.tsbuildinfo +1 -1
  49. package/package.json +3 -3
  50. package/server/service/activity-approval/activity-approval-mutation.ts +19 -1
  51. package/translations/en.json +3 -0
  52. package/translations/ja.json +3 -0
  53. package/translations/ko.json +3 -0
  54. package/translations/ms.json +136 -133
  55. package/translations/zh.json +133 -130
@@ -0,0 +1,165 @@
1
+ import '@material/mwc-button'
2
+ import '@operato/property-editor/ox-properties-dynamic-view.js'
3
+ import '@things-factory/organization/dist-client/component/approval-line-brief.js'
4
+ import '../templates/activity-approval-context-template.js'
5
+
6
+ import { css, html, LitElement } from 'lit'
7
+ import { customElement, property, state } from 'lit/decorators.js'
8
+
9
+ import { i18next, localize } from '@operato/i18n'
10
+ import { toggleOverlay } from '@operato/layout'
11
+
12
+ @customElement('activity-approval-ribon')
13
+ export class ActivityApprovalRibon extends localize(i18next)(LitElement) {
14
+ static styles = [
15
+ css`
16
+ :host {
17
+ display: flex;
18
+ background-color: var(--worklist-status-color);
19
+ color: var(--theme-white-color);
20
+ align-items: center;
21
+ min-height: 44px;
22
+ --fontsize-small: 12px;
23
+ }
24
+
25
+ div {
26
+ border-left: var(--border-dark-color);
27
+ padding: var(--padding-narrow) var(--padding-default);
28
+ align-self: center;
29
+ }
30
+
31
+ :host([state='assigned']) {
32
+ --worklist-status-color: #5f7184;
33
+ }
34
+
35
+ :host([state='started']) {
36
+ --worklist-status-color: #56af45;
37
+ }
38
+
39
+ :host([state='delegated']) {
40
+ --worklist-status-color: #8654b0;
41
+ }
42
+
43
+ :host([state='submitted']) {
44
+ --worklist-status-color: #428df3;
45
+ }
46
+
47
+ :host([state='escalated']) {
48
+ --worklist-status-color: #595de5;
49
+ }
50
+
51
+ :host([state='rejected']) {
52
+ --worklist-status-color: #f27429;
53
+ }
54
+
55
+ :host([state='ended']) {
56
+ --worklist-status-color: #02acae;
57
+ }
58
+
59
+ :host([state='aborted']) {
60
+ --worklist-status-color: #cb3a33;
61
+ }
62
+
63
+ mwc-icon {
64
+ font-size: 24px;
65
+ }
66
+
67
+ [desc] {
68
+ flex: 2;
69
+ font-size: var(--fontsize-small);
70
+ }
71
+
72
+ [desc] * {
73
+ vertical-align: middle;
74
+ }
75
+
76
+ [assignee] {
77
+ text-align: center;
78
+ font-size: var(--fontsize-small);
79
+ line-height: 1.3;
80
+ }
81
+
82
+ [assignee] span {
83
+ display: block;
84
+ font-size: var(--fontsize-large);
85
+ font-weight: bold;
86
+ }
87
+
88
+ approval-line-brief {
89
+ background-color: var(--worklist-status-color);
90
+ flex: 2;
91
+ font-size: var(--fontsize-small);
92
+ }
93
+
94
+ [state] {
95
+ text-align: right;
96
+ font-size: var(--fontsize-small);
97
+ }
98
+
99
+ @media only screen and (max-width: 460px) {
100
+ :host {
101
+ flex-direction: column;
102
+ }
103
+ div {
104
+ border-left: none;
105
+ border-bottom: var(--border-dark-color);
106
+ }
107
+ [assignee] {
108
+ display: none;
109
+ }
110
+ mwc-icon {
111
+ padding: 0;
112
+ }
113
+ }
114
+ `
115
+ ]
116
+
117
+ @property({ type: Object }) activityApproval: any
118
+
119
+ render() {
120
+ const { activityInstance, state } = this.activityApproval?.activityThread || {}
121
+ const { description, assignee, approvalLine, activity } = activityInstance || {}
122
+ const { startingType } = activity || {}
123
+
124
+ return html`
125
+ <div desc>
126
+ <mwc-icon
127
+ @click=${() => {
128
+ toggleOverlay('activity-info-overlay', {
129
+ template: html`<activity-approval-context-template
130
+ .activityApproval=${this.activityApproval}
131
+ state=${state}
132
+ ></activity-approval-context-template>`
133
+ })
134
+ }}
135
+ >description</mwc-icon
136
+ >
137
+ ${description}
138
+ </div>
139
+ ${startingType == 'issue' && assignee
140
+ ? html`
141
+ <div assignee>
142
+ ${i18next.t('field.assignee')}
143
+ <span>${assignee?.name}&nbsp;</span>
144
+ </div>
145
+ `
146
+ : html``}
147
+ ${approvalLine
148
+ ? html`<approval-line-brief
149
+ .model=${approvalLine}
150
+ .current=${this.activityApproval.order}
151
+ ></approval-line-brief>`
152
+ : html``}
153
+
154
+ <div state>${i18next.t('label.activity-state-' + state)}</div>
155
+ `
156
+ }
157
+
158
+ updated(changes) {
159
+ if (changes.has('activityApproval')) {
160
+ const { state } = this.activityApproval.activityThread
161
+
162
+ this.setAttribute('state', state)
163
+ }
164
+ }
165
+ }
@@ -1,5 +1,6 @@
1
1
  import '@material/mwc-button'
2
2
  import '@operato/property-editor/ox-properties-dynamic-view.js'
3
+ import '@things-factory/organization/dist-client/component/approval-line-brief.js'
3
4
  import '../templates/activity-instance-context-template.js'
4
5
 
5
6
  import { css, html, LitElement } from 'lit'
@@ -16,6 +17,8 @@ export class ActivityInstanceRibon extends localize(i18next)(LitElement) {
16
17
  display: flex;
17
18
  background-color: var(--worklist-status-color);
18
19
  color: var(--theme-white-color);
20
+ align-items: center;
21
+ min-height: 44px;
19
22
  --fontsize-small: 12px;
20
23
  }
21
24
 
@@ -61,11 +64,11 @@ export class ActivityInstanceRibon extends localize(i18next)(LitElement) {
61
64
  font-size: 24px;
62
65
  }
63
66
 
64
- [desc],
65
- [flow] {
67
+ [desc] {
66
68
  flex: 2;
67
69
  font-size: var(--fontsize-small);
68
70
  }
71
+
69
72
  [desc] * {
70
73
  vertical-align: middle;
71
74
  }
@@ -82,63 +85,15 @@ export class ActivityInstanceRibon extends localize(i18next)(LitElement) {
82
85
  font-weight: bold;
83
86
  }
84
87
 
85
- [flow] ul {
86
- list-style: none;
87
- margin: 0;
88
- padding: 0;
89
- display: flex;
90
- }
91
-
92
- [flow] li {
93
- width: 85px;
94
- text-align: center;
95
- color: rgba(255, 255, 255, 0.7);
96
- }
97
-
98
- [flow] span:before {
99
- content: '';
100
- height: 2px;
101
- width: 70px;
102
- display: block;
103
- position: absolute;
104
- margin-left: -70px;
105
- margin-top: 6px;
106
- background-color: rgba(0, 0, 0, 0.4);
107
- }
108
-
109
- [flow] span {
110
- display: block;
111
- width: 15px;
112
- height: 15px;
113
- margin: auto;
114
- background-color: rgba(0, 0, 0, 0.4);
115
- border-radius: 50%;
116
- color: var(--theme-white-color);
117
- line-height: 1.2;
118
- }
119
-
120
- [flow] [past] span {
121
- background-color: rgba(255, 255, 255, 0.9);
122
- color: var(--primary-text-color);
123
- }
124
-
125
- [flow] [now] span {
126
- background-color: #84d600;
127
- color: var(--theme-white-color);
128
- }
129
-
130
- [flow] [now] {
131
- font-weight: bold;
132
- color: var(--theme-white-color);
133
- }
134
-
135
- [flow] [past] span:before,
136
- [flow] [now] span:before {
137
- background-color: rgba(255, 255, 255, 0.9);
88
+ approval-line-brief {
89
+ background-color: var(--worklist-status-color);
90
+ flex: 2;
91
+ font-size: var(--fontsize-small);
138
92
  }
139
93
 
140
- [flow] li:first-child span:before {
141
- display: none;
94
+ [state] {
95
+ text-align: right;
96
+ font-size: var(--fontsize-small);
142
97
  }
143
98
 
144
99
  @media only screen and (max-width: 460px) {
@@ -160,34 +115,10 @@ export class ActivityInstanceRibon extends localize(i18next)(LitElement) {
160
115
  ]
161
116
 
162
117
  @property({ type: Object }) activityInstance: any = {}
163
- // @property({ type: Array }) activityThreads: any
164
-
165
- // @state() picked: boolean = false
166
118
 
167
119
  render() {
168
- const {
169
- id,
170
- name,
171
- description,
172
- input,
173
- state,
174
- assignee,
175
- threadsMin = 0,
176
- threadsMax = 0,
177
- activity
178
- } = this.activityInstance || {}
179
- const { startingType, model, thumbnail } = activity || {}
180
-
181
- // const inputSpec = (model || [])
182
- // .filter(item => item.inout === 'in' || item.inout === 'inout')
183
- // .map(item => {
184
- // return {
185
- // ...item,
186
- // label: item.name
187
- // }
188
- // })
189
-
190
- // const pickable = !this.picked && this.activityThreads?.length < threadsMax
120
+ const { description, state, assignee, approvalLine, activity } = this.activityInstance || {}
121
+ const { startingType } = activity || {}
191
122
 
192
123
  return html`
193
124
  <div desc>
@@ -204,22 +135,17 @@ export class ActivityInstanceRibon extends localize(i18next)(LitElement) {
204
135
  >
205
136
  ${description}
206
137
  </div>
207
- ${startingType == 'issue'
138
+ ${startingType == 'issue' && assignee
208
139
  ? html`
209
140
  <div assignee>
210
- ${i18next.t('label.assignee')}
211
- <span>${assignee?.name}</span>
141
+ ${i18next.t('field.assignee')}
142
+ <span>${assignee?.name}&nbsp;</span>
212
143
  </div>
213
144
  `
214
145
  : html``}
146
+ ${approvalLine ? html`<approval-line-brief .model=${approvalLine}></approval-line-brief>` : html``}
215
147
 
216
- <div flow>
217
- <ul>
218
- <li past><span>1</span>myself</li>
219
- <li now><span>2</span>경리실장</li>
220
- <li><span>3</span>사장님</li>
221
- </ul>
222
- </div>
148
+ <div state>${i18next.t('label.activity-state-' + state)}</div>
223
149
  `
224
150
  }
225
151
 
@@ -0,0 +1,160 @@
1
+ import '@material/mwc-button'
2
+ import '@operato/property-editor/ox-properties-dynamic-view.js'
3
+ import '@things-factory/organization/dist-client/component/approval-line-brief.js'
4
+ import '../templates/activity-thread-context-template.js'
5
+
6
+ import { css, html, LitElement } from 'lit'
7
+ import { customElement, property, state } from 'lit/decorators.js'
8
+
9
+ import { i18next, localize } from '@operato/i18n'
10
+ import { toggleOverlay } from '@operato/layout'
11
+
12
+ @customElement('activity-thread-ribon')
13
+ export class ActivityThreadRibon extends localize(i18next)(LitElement) {
14
+ static styles = [
15
+ css`
16
+ :host {
17
+ display: flex;
18
+ background-color: var(--worklist-status-color);
19
+ color: var(--theme-white-color);
20
+ align-items: center;
21
+ min-height: 44px;
22
+ --fontsize-small: 12px;
23
+ }
24
+
25
+ div {
26
+ border-left: var(--border-dark-color);
27
+ padding: var(--padding-narrow) var(--padding-default);
28
+ align-self: center;
29
+ }
30
+
31
+ :host([state='assigned']) {
32
+ --worklist-status-color: #5f7184;
33
+ }
34
+
35
+ :host([state='started']) {
36
+ --worklist-status-color: #56af45;
37
+ }
38
+
39
+ :host([state='delegated']) {
40
+ --worklist-status-color: #8654b0;
41
+ }
42
+
43
+ :host([state='submitted']) {
44
+ --worklist-status-color: #428df3;
45
+ }
46
+
47
+ :host([state='escalated']) {
48
+ --worklist-status-color: #595de5;
49
+ }
50
+
51
+ :host([state='rejected']) {
52
+ --worklist-status-color: #f27429;
53
+ }
54
+
55
+ :host([state='ended']) {
56
+ --worklist-status-color: #02acae;
57
+ }
58
+
59
+ :host([state='aborted']) {
60
+ --worklist-status-color: #cb3a33;
61
+ }
62
+
63
+ mwc-icon {
64
+ font-size: 24px;
65
+ }
66
+
67
+ [desc] {
68
+ flex: 2;
69
+ font-size: var(--fontsize-small);
70
+ }
71
+
72
+ [desc] * {
73
+ vertical-align: middle;
74
+ }
75
+
76
+ [assignee] {
77
+ text-align: center;
78
+ font-size: var(--fontsize-small);
79
+ line-height: 1.3;
80
+ }
81
+
82
+ [assignee] span {
83
+ display: block;
84
+ font-size: var(--fontsize-large);
85
+ font-weight: bold;
86
+ }
87
+
88
+ approval-line-brief {
89
+ background-color: var(--worklist-status-color);
90
+ flex: 2;
91
+ font-size: var(--fontsize-small);
92
+ }
93
+
94
+ [state] {
95
+ text-align: right;
96
+ font-size: var(--fontsize-small);
97
+ }
98
+
99
+ @media only screen and (max-width: 460px) {
100
+ :host {
101
+ flex-direction: column;
102
+ }
103
+ div {
104
+ border-left: none;
105
+ border-bottom: var(--border-dark-color);
106
+ }
107
+ [assignee] {
108
+ display: none;
109
+ }
110
+ mwc-icon {
111
+ padding: 0;
112
+ }
113
+ }
114
+ `
115
+ ]
116
+
117
+ @property({ type: Object }) activityThread: any
118
+
119
+ render() {
120
+ const { state, activityInstance } = this.activityThread
121
+ const { description, assignee, approvalLine, activity } = activityInstance || {}
122
+ const { startingType } = activity || {}
123
+
124
+ return html`
125
+ <div desc>
126
+ <mwc-icon
127
+ @click=${() => {
128
+ toggleOverlay('activity-info-overlay', {
129
+ template: html`<activity-thread-context-template
130
+ .activityThread=${this.activityThread}
131
+ state=${state}
132
+ ></activity-thread-context-template>`
133
+ })
134
+ }}
135
+ >description</mwc-icon
136
+ >
137
+ ${description}
138
+ </div>
139
+ ${startingType == 'issue' && assignee
140
+ ? html`
141
+ <div assignee>
142
+ ${i18next.t('field.assignee')}
143
+ <span>${assignee?.name}&nbsp;</span>
144
+ </div>
145
+ `
146
+ : html``}
147
+ ${approvalLine ? html`<approval-line-brief .model=${approvalLine}></approval-line-brief>` : html``}
148
+
149
+ <div state>${i18next.t('label.activity-state-' + state)}</div>
150
+ `
151
+ }
152
+
153
+ updated(changes) {
154
+ if (changes.has('activityThread')) {
155
+ const { state } = this.activityThread
156
+
157
+ this.setAttribute('state', state)
158
+ }
159
+ }
160
+ }
@@ -139,6 +139,7 @@ export class ActivityPage extends connect(store)(localize(i18next)(PageView)) {
139
139
  .map(item => {
140
140
  return {
141
141
  ...item,
142
+ name: item.tag,
142
143
  label: item.name,
143
144
  property: item.options
144
145
  }
@@ -153,6 +154,7 @@ export class ActivityPage extends connect(store)(localize(i18next)(PageView)) {
153
154
  .map(item => {
154
155
  return {
155
156
  ...item,
157
+ name: item.tag,
156
158
  label: item.name,
157
159
  property: item.options
158
160
  }
@@ -1,5 +1,6 @@
1
1
  import '@operato/property-editor/ox-properties-dynamic-view.js'
2
2
  import '@operato/board/ox-board-viewer.js'
3
+ import '../../components/activity-approval-ribon.js'
3
4
 
4
5
  import gql from 'graphql-tag'
5
6
  import { css, html } from 'lit'
@@ -96,7 +97,6 @@ export class ActivityApprovalPage extends connect(store)(localize(i18next)(PageV
96
97
  position: relative;
97
98
 
98
99
  width: 100%;
99
- padding: 5px;
100
100
  overflow: auto;
101
101
  }
102
102
 
@@ -136,6 +136,8 @@ export class ActivityApprovalPage extends connect(store)(localize(i18next)(PageV
136
136
  @state() activityThread: any
137
137
  @state() board: any
138
138
 
139
+ @query('textarea') commentInput!: HTMLTextAreaElement
140
+
139
141
  get context() {
140
142
  const judgment = this.activityApproval?.judgment
141
143
 
@@ -162,13 +164,14 @@ export class ActivityApprovalPage extends connect(store)(localize(i18next)(PageV
162
164
  action: this.saveActivityApproval.bind(this),
163
165
  ...CommonButtonStyles.save
164
166
  }
165
- ],
166
- activityApproval: this.activityApproval
167
+ ]
168
+ // activityApproval: this.activityApproval
167
169
  }
168
170
  }
169
171
 
170
172
  render() {
171
173
  return html`
174
+ <activity-approval-ribon .activityApproval=${this.activityApproval}></activity-approval-ribon>
172
175
  ${this.activityContent()}
173
176
  <div comment>
174
177
  <textarea
@@ -212,6 +215,7 @@ export class ActivityApprovalPage extends connect(store)(localize(i18next)(PageV
212
215
  .map(item => {
213
216
  return {
214
217
  ...item,
218
+ name: item.tag,
215
219
  label: item.name,
216
220
  property: item.options
217
221
  }
@@ -226,6 +230,7 @@ export class ActivityApprovalPage extends connect(store)(localize(i18next)(PageV
226
230
  .map(item => {
227
231
  return {
228
232
  ...item,
233
+ name: item.tag,
229
234
  label: item.name,
230
235
  property: item.options
231
236
  }
@@ -356,6 +361,18 @@ export class ActivityApprovalPage extends connect(store)(localize(i18next)(PageV
356
361
  async rejectActivityApproval() {
357
362
  var { id, comment } = this.activityApproval
358
363
 
364
+ if (!comment) {
365
+ document.dispatchEvent(
366
+ new CustomEvent('notify', {
367
+ detail: {
368
+ message: i18next.t('text.enter a comment')
369
+ }
370
+ })
371
+ )
372
+ this.commentInput.focus()
373
+ return
374
+ }
375
+
359
376
  const response = await client.mutate({
360
377
  mutation: gql`
361
378
  mutation ($id: String!, $comment: String!) {
@@ -387,6 +404,18 @@ export class ActivityApprovalPage extends connect(store)(localize(i18next)(PageV
387
404
  async approveActivityApproval() {
388
405
  var { id, comment } = this.activityApproval
389
406
 
407
+ if (!comment) {
408
+ document.dispatchEvent(
409
+ new CustomEvent('notify', {
410
+ detail: {
411
+ message: i18next.t('text.enter a comment')
412
+ }
413
+ })
414
+ )
415
+ this.commentInput.focus()
416
+ return
417
+ }
418
+
390
419
  const response = await client.mutate({
391
420
  mutation: gql`
392
421
  mutation ($id: String!, $comment: String!) {
@@ -66,8 +66,8 @@ export class ActivityInstanceStartPage extends connect(store)(localize(i18next)(
66
66
  action: this.issueActivityInstance.bind(this),
67
67
  ...CommonButtonStyles.submit
68
68
  }
69
- ].filter(Boolean /* truthy only */),
70
- activityInstance: this.activityInstance
69
+ ].filter(Boolean /* truthy only */)
70
+ // activityInstance: this.activityInstance
71
71
  }
72
72
  }
73
73
 
@@ -109,6 +109,7 @@ export class ActivityInstanceStartPage extends connect(store)(localize(i18next)(
109
109
  .map(item => {
110
110
  return {
111
111
  ...item,
112
+ name: item.tag,
112
113
  label: item.name,
113
114
  property: item.options
114
115
  }
@@ -123,6 +124,7 @@ export class ActivityInstanceStartPage extends connect(store)(localize(i18next)(
123
124
  .map(item => {
124
125
  return {
125
126
  ...item,
127
+ name: item.tag,
126
128
  label: item.name,
127
129
  property: item.options
128
130
  }
@@ -52,23 +52,24 @@ export class ActivityInstanceView extends localize(i18next)(LitElement) {
52
52
  }
53
53
 
54
54
  renderSearchKeys() {
55
- const { key01, key02, key03, key04, key05 } = this.activityInstance!
55
+ const { activity } = this.activityInstance!
56
+ const { searchKeys = [] } = activity! || {}
56
57
 
57
- return html`
58
- <div>key01: ${key01}</div>
59
- <div>key02: ${key02}</div>
60
- <div>key03: ${key03}</div>
61
- <div>key04: ${key04}</div>
62
- <div>key05: ${key05}</div>
63
- `
58
+ return searchKeys?.map((item, index) => html` <div>${item.name}: ${this.activityInstance![`key0${index}`]}</div> `)
64
59
  }
65
60
 
66
61
  renderInOut() {
67
62
  const { input, output } = this.activityInstance!
68
63
 
69
64
  return html`
70
- <div>input: ${input}</div>
71
- <div>output: ${output}</div>
65
+ <div>
66
+ input:
67
+ <pre>${JSON.stringify(input, null, 2)}</pre>
68
+ </div>
69
+ <div>
70
+ output:
71
+ <pre>${JSON.stringify(output, null, 2)}</pre>
72
+ </div>
72
73
  `
73
74
  }
74
75
 
@@ -99,6 +100,12 @@ export class ActivityInstanceView extends localize(i18next)(LitElement) {
99
100
  id
100
101
  name
101
102
  description
103
+ searchKeys {
104
+ name
105
+ description
106
+ inputKey
107
+ tKey
108
+ }
102
109
  }
103
110
  activityThreads {
104
111
  state