@things-factory/worklist 10.1.256 → 10.1.258

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 (78) hide show
  1. package/dist-client/activity-state-counts.d.ts +3 -3
  2. package/dist-client/activity-state-counts.js +6 -5
  3. package/dist-client/activity-state-counts.js.map +1 -1
  4. package/dist-client/chip-counts.d.ts +1 -1
  5. package/dist-client/chip-counts.js +1 -1
  6. package/dist-client/chip-counts.js.map +1 -1
  7. package/dist-client/chip-filters.d.ts +3 -2
  8. package/dist-client/chip-filters.js +5 -3
  9. package/dist-client/chip-filters.js.map +1 -1
  10. package/dist-client/components/activity-/bowner-view.js +26 -40
  11. package/dist-client/components/activity-/bowner-view.js.map +1 -1
  12. package/dist-client/components/activity-instance-preview.js +37 -49
  13. package/dist-client/components/activity-instance-preview.js.map +1 -1
  14. package/dist-client/components/activity-intro-view.js +26 -40
  15. package/dist-client/components/activity-intro-view.js.map +1 -1
  16. package/dist-client/components/activity-reporter-view.js +26 -40
  17. package/dist-client/components/activity-reporter-view.js.map +1 -1
  18. package/dist-client/components/activity-starter-form.d.ts +2 -3
  19. package/dist-client/components/activity-starter-form.js +52 -64
  20. package/dist-client/components/activity-starter-form.js.map +1 -1
  21. package/dist-client/components/mutation-outcome.d.ts +6 -0
  22. package/dist-client/components/mutation-outcome.js +9 -0
  23. package/dist-client/components/mutation-outcome.js.map +1 -1
  24. package/dist-client/components/say-outcome.d.ts +3 -0
  25. package/dist-client/components/say-outcome.js +3 -0
  26. package/dist-client/components/say-outcome.js.map +1 -1
  27. package/dist-client/entity360/person-open-work-section.d.ts +2 -3
  28. package/dist-client/entity360/person-open-work-section.js +17 -31
  29. package/dist-client/entity360/person-open-work-section.js.map +1 -1
  30. package/dist-client/pages/activity/activity-list-page.d.ts +4 -2
  31. package/dist-client/pages/activity/activity-list-page.js +6 -11
  32. package/dist-client/pages/activity/activity-list-page.js.map +1 -1
  33. package/dist-client/pages/activity/activity-page.d.ts +13 -7
  34. package/dist-client/pages/activity/activity-page.js +111 -167
  35. package/dist-client/pages/activity/activity-page.js.map +1 -1
  36. package/dist-client/pages/activity-approval/activity-approval-page.d.ts +14 -8
  37. package/dist-client/pages/activity-approval/activity-approval-page.js +107 -123
  38. package/dist-client/pages/activity-approval/activity-approval-page.js.map +1 -1
  39. package/dist-client/pages/activity-catalog/activity-catalog-page.d.ts +10 -9
  40. package/dist-client/pages/activity-catalog/activity-catalog-page.js +38 -70
  41. package/dist-client/pages/activity-catalog/activity-catalog-page.js.map +1 -1
  42. package/dist-client/pages/activity-catalog/activity-detail-page.d.ts +6 -6
  43. package/dist-client/pages/activity-catalog/activity-detail-page.js +30 -57
  44. package/dist-client/pages/activity-catalog/activity-detail-page.js.map +1 -1
  45. package/dist-client/pages/activity-instance/activity-instance-list-page.js +2 -2
  46. package/dist-client/pages/activity-instance/activity-instance-list-page.js.map +1 -1
  47. package/dist-client/pages/activity-instance/activity-instance-search-page.d.ts +6 -3
  48. package/dist-client/pages/activity-instance/activity-instance-search-page.js +27 -29
  49. package/dist-client/pages/activity-instance/activity-instance-search-page.js.map +1 -1
  50. package/dist-client/pages/activity-instance/activity-instance-start-page.d.ts +15 -8
  51. package/dist-client/pages/activity-instance/activity-instance-start-page.js +130 -239
  52. package/dist-client/pages/activity-instance/activity-instance-start-page.js.map +1 -1
  53. package/dist-client/pages/activity-instance/activity-instance-view.d.ts +2 -2
  54. package/dist-client/pages/activity-instance/activity-instance-view.js +109 -118
  55. package/dist-client/pages/activity-instance/activity-instance-view.js.map +1 -1
  56. package/dist-client/pages/activity-thread/activity-thread-page.d.ts +15 -6
  57. package/dist-client/pages/activity-thread/activity-thread-page.js +128 -131
  58. package/dist-client/pages/activity-thread/activity-thread-page.js.map +1 -1
  59. package/dist-client/pages/activity-thread/activity-thread-view-page.d.ts +6 -6
  60. package/dist-client/pages/activity-thread/activity-thread-view-page.js +28 -53
  61. package/dist-client/pages/activity-thread/activity-thread-view-page.js.map +1 -1
  62. package/dist-client/pages/todo/approval-done-list-page.d.ts +3 -3
  63. package/dist-client/pages/todo/approval-done-list-page.js +5 -14
  64. package/dist-client/pages/todo/approval-done-list-page.js.map +1 -1
  65. package/dist-client/pages/todo/approval-pending-list-page.d.ts +19 -9
  66. package/dist-client/pages/todo/approval-pending-list-page.js +46 -59
  67. package/dist-client/pages/todo/approval-pending-list-page.js.map +1 -1
  68. package/dist-client/pages/todo/draft-list-page.d.ts +8 -2
  69. package/dist-client/pages/todo/draft-list-page.js +24 -23
  70. package/dist-client/pages/todo/draft-list-page.js.map +1 -1
  71. package/dist-client/pages/todo/pickable-list-page.d.ts +3 -3
  72. package/dist-client/pages/todo/pickable-list-page.js +5 -14
  73. package/dist-client/pages/todo/pickable-list-page.js.map +1 -1
  74. package/dist-client/pages/todo/todo-list-page.d.ts +11 -5
  75. package/dist-client/pages/todo/todo-list-page.js +33 -36
  76. package/dist-client/pages/todo/todo-list-page.js.map +1 -1
  77. package/dist-client/tsconfig.tsbuildinfo +1 -1
  78. package/package.json +16 -14
@@ -9,10 +9,11 @@ import { css, html, nothing } from 'lit';
9
9
  import { unsafeHTML } from 'lit-html/directives/unsafe-html.js';
10
10
  import { customElement, query, state } from 'lit/decorators.js';
11
11
  import { keyed } from 'lit/directives/keyed.js';
12
- import { client } from '@operato/graphql';
12
+ import { client, MutationController, QueryController } from '@operato/graphql';
13
13
  import { i18next, localize } from '@operato/i18n';
14
- import { ranMutation } from '../../components/say-outcome.js';
15
- import { CustomAlert, navigate, PageView } from '@operato/shell';
14
+ import { mutationOutcome } from '../../components/mutation-outcome.js';
15
+ import { ranMutation, sayFailure } from '../../components/say-outcome.js';
16
+ import { CustomAlert, navigate, PageView, DraftController } from '@operato/shell';
16
17
  import { CommonButtonStyles, DocumentPageStyles, ScrollbarStyles } from '@operato/styles';
17
18
  import { provider } from '@operato/board/board-provider.js';
18
19
  import { ActivityFieldsStyles, inputSpecOf, outputSpecOf, renderGiven } from '../../components/activity-fields.js';
@@ -105,18 +106,51 @@ export const ActivityThreadStatus = {
105
106
  let ActivityThreadPage = class ActivityThreadPage extends localize(i18next)(PageView) {
106
107
  constructor() {
107
108
  super(...arguments);
108
- /**
109
- * 조회를 마쳤나 — **「아직 안 읽었다」와 「없다」는 다르다.**
110
- *
111
- * 전에는 값이 없으면 곧바로 「업무활동 정보가 없습니다」를 그렸다. 그런데 이 화면은 열리자마자
112
- * 조회를 시작하므로, 응답이 오기 전까지 **없다고 단언하는 화면**이 보인다. 목록에서 줄을 눌러
113
- * 들어온 사람은 방금 본 건이 없다는 말을 먼저 읽는다.
114
- *
115
- * 조회가 끝난 뒤에만 그 말을 한다. 그 전에는 아무 말도 하지 않는다.
109
+ /** The thread the address names. */
110
+ this.threadId = '';
111
+ /* The thread shown, read for the id the address names (ADR-0190). */
112
+ this.thread = new QueryController(this, gql `
113
+ query activityThread($id: String!) {
114
+ activityThread(id: $id) ${ActivityThreadFetchResult}
115
+ }
116
+ `, { variables: () => (this.threadId ? { id: this.threadId } : undefined) });
117
+ /* What is written here over the thread read; another thread drops it (ADR-0190 decision 2). */
118
+ this.draft = new DraftController(this, {
119
+ read: () => this.activityThread,
120
+ key: () => this.threadId
121
+ });
122
+ /*
123
+ * The changes made here: each reads what it changed again once done. This screen says its own failure
124
+ * (sayFailure), so the GraphQL link stays quiet about it (ADR-0190).
116
125
  */
117
- this.loaded = false;
118
- /** Why the task could not be read - ox-page-state says it, with retry (ADR-0060 decision 8). */
119
- this.loadError = null;
126
+ this.start = new MutationController(this, gql `
127
+ mutation ($id: String!, $output: Object) {
128
+ startActivityThread(id: $id, output: $output) {
129
+ id
130
+ }
131
+ }
132
+ `, { refetch: () => [this.thread], showsError: true });
133
+ this.restart = new MutationController(this, gql `
134
+ mutation ($id: String!, $output: Object) {
135
+ restartActivityThread(id: $id, output: $output) {
136
+ id
137
+ }
138
+ }
139
+ `, { refetch: () => [this.thread], showsError: true });
140
+ this.save = new MutationController(this, gql `
141
+ mutation ($id: String!, $save: ActivityThreadSave!) {
142
+ saveActivityThread(id: $id, save: $save) {
143
+ id
144
+ }
145
+ }
146
+ `, { refetch: () => [this.thread], context: { hasUpload: true }, showsError: true });
147
+ this.finish = new MutationController(this, gql `
148
+ mutation ($id: String!, $output: Object, $reason: String) {
149
+ submitActivityThread(id: $id, output: $output, reason: $reason) {
150
+ id
151
+ }
152
+ }
153
+ `, { refetch: () => [this.thread], context: { hasUpload: true }, showsError: true });
120
154
  }
121
155
  static { this.styles = [
122
156
  /* The frame owns the page shell and the reading column (ADR-0060 decision 8). */
@@ -162,6 +196,25 @@ let ActivityThreadPage = class ActivityThreadPage extends localize(i18next)(Page
162
196
  }
163
197
  `
164
198
  ]; }
199
+ get activityThread() {
200
+ return this.thread.data?.activityThread;
201
+ }
202
+ /**
203
+ * 조회를 마쳤나 — **「아직 안 읽었다」와 「없다」는 다르다.**
204
+ *
205
+ * 전에는 값이 없으면 곧바로 「업무활동 정보가 없습니다」를 그렸다. 그런데 이 화면은 열리자마자
206
+ * 조회를 시작하므로, 응답이 오기 전까지 **없다고 단언하는 화면**이 보인다. 목록에서 줄을 눌러
207
+ * 들어온 사람은 방금 본 건이 없다는 말을 먼저 읽는다.
208
+ *
209
+ * 조회가 끝난 뒤에만 그 말을 한다. 그 전에는 아무 말도 하지 않는다.
210
+ */
211
+ get loaded() {
212
+ return this.thread.data !== undefined;
213
+ }
214
+ /** Why the task could not be read - ox-page-state says it, with retry (ADR-0060 decision 8). */
215
+ get loadError() {
216
+ return this.thread.error ?? null;
217
+ }
165
218
  get context() {
166
219
  const state = this.activityThread?.state;
167
220
  const { restartable, abortable, sourceResubmission } = followupActions(this.activityThread);
@@ -223,7 +276,7 @@ let ActivityThreadPage = class ActivityThreadPage extends localize(i18next)(Page
223
276
  <ox-page-state
224
277
  .loading=${!this.loaded && !this.loadError}
225
278
  .error=${this.loadError}
226
- @retry=${() => this.lastId && this.fetchActivityThread(this.lastId)}
279
+ @retry=${() => this.thread.refetch()}
227
280
  >${!activityThread
228
281
  ? this.loaded
229
282
  ? html `<div empty>
@@ -322,8 +375,9 @@ let ActivityThreadPage = class ActivityThreadPage extends localize(i18next)(Page
322
375
  if (!this.activityThread) {
323
376
  return html ``;
324
377
  }
325
- var { output, activityInstance } = this.activityThread || {};
378
+ var { activityInstance } = this.activityThread || {};
326
379
  var { input } = activityInstance || {};
380
+ var output = this.draft.value('output');
327
381
  const model = activityInstance?.activity?.model;
328
382
  const inputSpec = inputSpecOf(model);
329
383
  const outputSpec = outputSpecOf(model);
@@ -372,7 +426,7 @@ let ActivityThreadPage = class ActivityThreadPage extends localize(i18next)(Page
372
426
  data-name="output"
373
427
  .props=${outputSpec}
374
428
  .value=${output}
375
- @property-change=${e => (this.activityThread.output = e.currentTarget.value)}
429
+ @property-change=${e => this.draft.set('output', e.currentTarget.value)}
376
430
  ></ox-properties-dynamic-view>
377
431
  </section>
378
432
  `
@@ -383,8 +437,9 @@ let ActivityThreadPage = class ActivityThreadPage extends localize(i18next)(Page
383
437
  if (!this.activityThread) {
384
438
  return html ``;
385
439
  }
386
- const { output, activityInstance } = this.activityThread;
440
+ const { activityInstance } = this.activityThread;
387
441
  const { uiSource: boardId, input } = activityInstance || {};
442
+ const output = this.draft.value('output');
388
443
  if (!this.board || this.board.id !== boardId) {
389
444
  this.board = { id: boardId };
390
445
  }
@@ -408,17 +463,20 @@ let ActivityThreadPage = class ActivityThreadPage extends localize(i18next)(Page
408
463
  if (!this.activityThread) {
409
464
  return html ``;
410
465
  }
411
- const { output, activityInstance } = this.activityThread;
466
+ /* Made once per answer: what is written in it redraws the page, and a new element would drop the typing. */
467
+ if (this.custom && this.custom.for === this.activityThread) {
468
+ return this.custom.element;
469
+ }
470
+ const { activityInstance } = this.activityThread;
412
471
  const { uiSource: tagName, input } = activityInstance || {};
413
472
  const element = document.createElement(tagName);
414
473
  element.id = 'custom-content';
415
474
  element.activityId = activityInstance.activity.id;
416
475
  element.input = input;
417
- element.output = output;
476
+ element.output = this.draft.value('output');
418
477
  element.activityThread = this.activityThread;
419
- element.addEventListener('change', (e) => {
420
- this.activityThread.output = e.detail;
421
- });
478
+ element.addEventListener('change', (e) => this.draft.set('output', e.detail));
479
+ this.custom = { for: this.activityThread, element };
422
480
  return element;
423
481
  }
424
482
  getOutputFromBoard() {
@@ -429,119 +487,61 @@ let ActivityThreadPage = class ActivityThreadPage extends localize(i18next)(Page
429
487
  return output;
430
488
  }, {});
431
489
  }
432
- updated(changes) {
433
- if (changes.has('activityThread')) {
434
- this.updateContext();
435
- }
436
- }
437
490
  async pageUpdated(changes, lifecycle, changedBefore) {
438
491
  if (this.active && lifecycle.resourceId) {
439
- this.fetchActivityThread(lifecycle.resourceId);
492
+ this.threadId = lifecycle.resourceId;
440
493
  }
441
494
  }
442
- async fetchActivityThread(id) {
443
- this.lastId = id;
444
- this.loadError = null;
445
- let response;
446
- try {
447
- response = await client.query({
448
- query: gql `
449
- query activityThread($id: String!) { activityThread(id: $id) ${ActivityThreadFetchResult}
450
- }
451
- `,
452
- variables: { id }
453
- });
454
- }
455
- catch (error) {
456
- this.loadError = error;
457
- return;
458
- }
459
- if (response.errors?.length || !response.data) {
460
- this.loadError = response.errors?.length
461
- ? response.errors
462
- : new Error(i18next.t('error.activity-thread not found', { activityThread: id }));
463
- return;
464
- }
465
- this.activityThread = response.data.activityThread;
466
- this.loaded = true;
467
- this.updateContext();
495
+ /** What this task's output is to be: the board's values, or what was written over the thread read. */
496
+ outputToSend() {
497
+ return this.activityThread.activityInstance?.uiType === 'board' ? this.getOutputFromBoard() : this.draft.value('output');
468
498
  }
499
+ /*
500
+ * Each change sends what is written now and reads the thread again once it went through; its answer is not kept
501
+ * (ADR-0190 decision 2). The edits sent are cleared then, and a failure keeps them.
502
+ */
469
503
  async _startActivityThread() {
470
- var { id, output, reason, activityInstance } = this.activityThread;
471
- var { uiType } = activityInstance;
472
- if (uiType === 'board') {
473
- output = this.getOutputFromBoard();
474
- }
475
- const outcome = await ranMutation(() => client.mutate({
476
- mutation: gql `
477
- mutation ($id: String!, $output: Object) { startActivityThread(id: $id, output: $output) ${ActivityThreadFetchResult}
478
- }
479
- `,
480
- variables: { id, output }
481
- }));
482
- if (outcome.ok) {
483
- this.activityThread = outcome.data.startActivityThread;
484
- document.dispatchEvent(new CustomEvent('notify', { detail: { message: i18next.t('text.task_is_started_successfully') } }));
504
+ const { id } = this.activityThread;
505
+ const output = this.outputToSend();
506
+ const done = await this.draft.submit(() => this.start.run({ id, output }));
507
+ if (!done) {
508
+ sayFailure(mutationOutcome(this.start.error));
509
+ return;
485
510
  }
511
+ document.dispatchEvent(new CustomEvent('notify', { detail: { message: i18next.t('text.task_is_started_successfully') } }));
486
512
  }
487
513
  async _restartActivityThread() {
488
- var { id, output, activityInstance } = this.activityThread;
489
- var { uiType } = activityInstance;
490
- if (uiType === 'board') {
491
- output = this.getOutputFromBoard();
492
- }
493
- const outcome = await ranMutation(() => client.mutate({
494
- mutation: gql `
495
- mutation ($id: String!, $output: Object) { restartActivityThread(id: $id, output: $output) ${ActivityThreadFetchResult}
496
- }
497
- `,
498
- variables: { id, output }
499
- }));
500
- if (outcome.ok) {
501
- this.activityThread = outcome.data.restartActivityThread;
502
- document.dispatchEvent(new CustomEvent('notify', { detail: { message: i18next.t('text.task_is_restarted_successfully') } }));
514
+ const { id } = this.activityThread;
515
+ const output = this.outputToSend();
516
+ const done = await this.draft.submit(() => this.restart.run({ id, output }));
517
+ if (!done) {
518
+ sayFailure(mutationOutcome(this.restart.error));
519
+ return;
503
520
  }
521
+ document.dispatchEvent(new CustomEvent('notify', { detail: { message: i18next.t('text.task_is_restarted_successfully') } }));
504
522
  }
505
523
  async _delegateActivityThread() {
506
524
  throw 'not implemented yet';
507
525
  }
508
526
  async _saveActivityThread() {
509
- var { id, output, reason, activityInstance } = this.activityThread;
510
- var { uiType } = activityInstance || {};
511
- if (uiType === 'board') {
512
- output = this.getOutputFromBoard();
513
- }
514
- const outcome = await ranMutation(() => client.mutate({
515
- mutation: gql `
516
- mutation ($id: String!, $save: ActivityThreadSave!) { saveActivityThread(id: $id, save: $save) ${ActivityThreadFetchResult}
517
- }
518
- `,
519
- variables: { id, save: { output } },
520
- context: { hasUpload: true }
521
- }));
522
- if (outcome.ok) {
523
- this.activityThread = outcome.data.saveActivityThread;
524
- document.dispatchEvent(new CustomEvent('notify', { detail: { message: i18next.t('text.task_is_saved_successfully') } }));
527
+ const { id } = this.activityThread;
528
+ const output = this.outputToSend();
529
+ const done = await this.draft.submit(() => this.save.run({ id, save: { output } }));
530
+ if (!done) {
531
+ sayFailure(mutationOutcome(this.save.error));
532
+ return;
525
533
  }
534
+ document.dispatchEvent(new CustomEvent('notify', { detail: { message: i18next.t('text.task_is_saved_successfully') } }));
526
535
  }
527
536
  async _submitActivityThread() {
528
- var { id, output, reason, activityInstance } = this.activityThread;
529
- var { uiType } = activityInstance || {};
530
- if (uiType === 'board') {
531
- output = this.getOutputFromBoard();
532
- }
533
- const outcome = await ranMutation(() => client.mutate({
534
- mutation: gql `
535
- mutation ($id: String!, $output: Object, $reason: String) { submitActivityThread(id: $id, output: $output, reason: $reason) ${ActivityThreadFetchResult}
536
- }
537
- `,
538
- variables: { id, output, reason },
539
- context: { hasUpload: true }
540
- }));
541
- if (outcome.ok) {
542
- this.activityThread = outcome.data.submitActivityThread;
543
- document.dispatchEvent(new CustomEvent('notify', { detail: { message: i18next.t('text.task_is_finished_successfully') } }));
537
+ const { id, reason } = this.activityThread;
538
+ const output = this.outputToSend();
539
+ const done = await this.draft.submit(() => this.finish.run({ id, output, reason }));
540
+ if (!done) {
541
+ sayFailure(mutationOutcome(this.finish.error));
542
+ return;
544
543
  }
544
+ document.dispatchEvent(new CustomEvent('notify', { detail: { message: i18next.t('text.task_is_finished_successfully') } }));
545
545
  }
546
546
  async _abortActivityThread() {
547
547
  const answer = await CustomAlert({
@@ -553,16 +553,21 @@ let ActivityThreadPage = class ActivityThreadPage extends localize(i18next)(Page
553
553
  });
554
554
  if (!answer?.value)
555
555
  return;
556
- var { id } = this.activityThread;
556
+ const { id } = this.activityThread;
557
557
  const outcome = await ranMutation(() => client.mutate({
558
558
  mutation: gql `
559
- mutation ($id: String!, $reason: String) { abortActivityThread(id: $id, reason: $reason) ${ActivityThreadFetchResult}
560
- }
561
- `,
559
+ mutation ($id: String!, $reason: String) {
560
+ abortActivityThread(id: $id, reason: $reason) {
561
+ id
562
+ }
563
+ }
564
+ `,
562
565
  variables: { id }
563
566
  }));
564
567
  if (outcome.ok) {
565
- this.activityThread = outcome.data.abortActivityThread;
568
+ /* Nothing more is written on an aborted task: what was typed on it goes with it. */
569
+ this.draft.reset();
570
+ await this.thread.refetch();
566
571
  document.dispatchEvent(new CustomEvent('notify', { detail: { message: i18next.t('text.task_is_aborted_successfully') } }));
567
572
  }
568
573
  }
@@ -570,15 +575,7 @@ let ActivityThreadPage = class ActivityThreadPage extends localize(i18next)(Page
570
575
  __decorate([
571
576
  state(),
572
577
  __metadata("design:type", Object)
573
- ], ActivityThreadPage.prototype, "activityThread", void 0);
574
- __decorate([
575
- state(),
576
- __metadata("design:type", Object)
577
- ], ActivityThreadPage.prototype, "loaded", void 0);
578
- __decorate([
579
- state(),
580
- __metadata("design:type", Object)
581
- ], ActivityThreadPage.prototype, "loadError", void 0);
578
+ ], ActivityThreadPage.prototype, "threadId", void 0);
582
579
  __decorate([
583
580
  state(),
584
581
  __metadata("design:type", Object)
@@ -1 +1 @@
1
- {"version":3,"file":"activity-thread-page.js","sourceRoot":"","sources":["../../../client/pages/activity-thread/activity-thread-page.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/list-state/ox-page-state.js'\nimport '@operato/property-editor/ox-properties-dynamic-view.js'\nimport '@operato/board/ox-board-viewer.js'\nimport '../../components/activity-thread-ribon.js'\nimport '../../components/activity-thread-timeline.js'\n\nimport gql from 'graphql-tag'\nimport { css, html, nothing } from 'lit'\nimport { DirectiveResult } from 'lit-html/directive.js'\nimport { unsafeHTML } from 'lit-html/directives/unsafe-html.js'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { keyed } from 'lit/directives/keyed.js'\nimport { client } from '@operato/graphql'\nimport { i18next, localize } from '@operato/i18n'\nimport { ranMutation } from '../../components/say-outcome.js'\nimport { CustomAlert, navigate, PageView } from '@operato/shell'\nimport { CommonButtonStyles, DocumentPageStyles, ScrollbarStyles } from '@operato/styles'\nimport { provider } from '@operato/board/board-provider.js'\n\nimport { ActivityFieldsStyles, inputSpecOf, outputSpecOf, renderGiven } from '../../components/activity-fields.js'\nimport { DecisionContentStyles, DecisionKeysFields, renderDecision } from '../../components/decision-content.js'\nimport { followupActions, sourceAddress } from '../../../shared/task-followup.js'\nimport { drawsAnything, submittableIn, threadSectionsOf, ThreadSections } from './thread-sections.js'\n\nconst ActivityThreadFetchResult = `\\\n{ id\n state\n dueAt\n assignedAt\n assignee { id\n name\n }\n updatedAt\n output\n round\n activityApprovals { round\n order\n approver { id name\n }\n judgment\n participation\n comment\n createdAt\n updatedAt\n terminatedAt\n }\n activityThreadHistories { transaction\n reason\n updater { id name\n }\n updatedAt\n state\n output\n }\n activityInstance { id\n name\n description\n state\n rejectionIsFinal\n activity { id\n rejectionIsFinal\n ${DecisionKeysFields}\n model { name\n description\n active\n tag\n inout\n type\n unit\n options\n quantifier\n spec\n hidden\n }\n }\n approvalLine { type\n value\n participation\n notifyAfter\n approver { id\n name\n description\n controlNo\n }\n }\n thumbnail\n input\n output\n uiType\n uiSource\n dueAt\n terminatedAt\n terminator { name\n email\n }\n createdAt\n }\n}`\n\nexport const ActivityThreadStatus = {\n Unassigned: 'unassigned',\n Assigned: 'assigned',\n Started: 'started',\n Delegated: 'delegated',\n Rejected: 'rejected',\n Ended: 'ended',\n Aborted: 'aborted'\n}\n\n@customElement('activity-thread-page')\nexport class ActivityThreadPage extends localize(i18next)(PageView) {\n static styles = [\n /* The frame owns the page shell and the reading column (ADR-0060 decision 8). */\n DocumentPageStyles,\n ScrollbarStyles,\n ActivityFieldsStyles,\n DecisionContentStyles,\n css`\n :host {\n color: var(--ui-ink, #17242c);\n font-size: var(--ui-t-body, 13px);\n }\n\n /* 카드가 담아 주므로 안에 들어오는 화면은 자기 면과 여백을 갖지 않는다. */\n /*\n * 줄어들지 않는다 — 줄어들면 본문이 잘린다.\n *\n * flex 항목인데 크기를 안 정해 두면 기본이 flex: 0 1 auto 다. **1 이 줄어든다는 뜻이다** —\n * 세로가 모자라면 브라우저가 이 칸부터 줄이는데, 여기엔 카드 모서리를 따라 자르려고\n * overflow: hidden 이 걸려 있어서 줄어든 만큼이 **스크롤도 없이 사라진다.**\n *\n * 완료 조회에서 실측했다(1400x620): 칸이 242px 로 줄고 내용은 362px 이라 「업무 내용」 절이\n * 대부분 잘렸고, 잘린 자리 바로 아래에서 타임라인이 시작하니 타임라인이 본문을 덮은 것처럼\n * 보였다. 세로가 넉넉하면 줄일 일이 없어 안 드러난다.\n *\n * 안에 오는 것은 문서다. 높이를 정해 주어야 하는 것은 board 뿐이고 board 는 이 칸을 거치지\n * 않는다(activityContent 참조). 문서는 제 높이로 서고, 모자라면 페이지 전체가 스크롤한다 —\n * :host 의 overflow: auto 가 그 자리다.\n */\n section[hosted] {\n flex: none;\n padding: 0;\n overflow: hidden;\n }\n\n ox-board-viewer {\n width: 100%;\n height: 100%;\n }\n\n activity-thread-timeline {\n margin: var(--spacing-large, 16px);\n }\n `\n ]\n\n @state() activityThread: any\n /**\n * 조회를 마쳤나 — **「아직 안 읽었다」와 「없다」는 다르다.**\n *\n * 전에는 값이 없으면 곧바로 「업무활동 정보가 없습니다」를 그렸다. 그런데 이 화면은 열리자마자\n * 조회를 시작하므로, 응답이 오기 전까지 **없다고 단언하는 화면**이 보인다. 목록에서 줄을 눌러\n * 들어온 사람은 방금 본 건이 없다는 말을 먼저 읽는다.\n *\n * 조회가 끝난 뒤에만 그 말을 한다. 그 전에는 아무 말도 하지 않는다.\n */\n @state() loaded = false\n /** Why the task could not be read - ox-page-state says it, with retry (ADR-0060 decision 8). */\n @state() loadError: unknown = null\n private lastId?: string\n\n @state() board: any\n\n get context() {\n const state = this.activityThread?.state\n\n const { restartable, abortable, sourceResubmission } = followupActions(this.activityThread)\n const savable = submittableIn(state) && !sourceResubmission\n const submittable = savable\n // const delegatable = savable\n\n return {\n /*\n * 이 화면이 어떤 틀인가 — 동작 줄이 이것을 읽고 자기 오른쪽 끝을 내용에 맞춘다\n * (ADR-0060 결정 9 보탬). 안 적으면 창 폭이고, 그것은 작업면의 모양이다.\n */\n frame: 'document',\n title: this.lifecycle?.params?.['title'] || i18next.t('title.activity'),\n help: 'worklist/activity-thread-page',\n /*\n * 이 화면은 메뉴에 없다 — 「할 일」에서 줄을 눌러 들어온다. 그래서 왼쪽 메뉴가 가리킬\n * 항목이 없고, 표시가 사라져 들어온 사람이 자기가 어디에 있는지 잃는다.\n *\n * 어느 목록에서 열리는지는 이 화면이 안다. 그것을 적어 둔다.\n */\n menu: this.lifecycle?.params?.['box'] === 'draft-list' ? 'draft-list' : 'todo-list',\n actions: [\n savable && {\n title: i18next.t('button.save'),\n action: this._saveActivityThread.bind(this),\n ...CommonButtonStyles.save\n },\n\n submittable && {\n title: i18next.t('button.submit'),\n action: this._submitActivityThread.bind(this),\n ...CommonButtonStyles.submit\n },\n\n // delegatable && { // title: i18next.t('button.delegate'),\n // action: this._delegateActivityThread.bind(this),\n // ...CommonButtonStyles.save\n // },\n\n abortable && {\n title: i18next.t('button.abort'),\n action: this._abortActivityThread.bind(this),\n ...CommonButtonStyles.cancel\n },\n\n restartable && {\n title: i18next.t(this.lifecycle?.params?.['box'] === 'draft-list' ? 'button.revise-request' : 'button.restart'),\n action: this._restartActivityThread.bind(this),\n ...CommonButtonStyles.save\n }\n /*\n * 나가기는 동작 줄에 두지 않는다 (ADR-0060 결정 9 보탬 판정 2). 탭의 × 가 이미 하는 일이고,\n * 같은 곳으로 가는 문을 둘 두면 어느 쪽이 무엇을 하는지 사람이 눌러 봐야 안다.\n */\n ].filter(Boolean /* truthy only */)\n // activityThread: this.activityThread\n }\n }\n\n render() {\n const activityThread = this.activityThread\n\n /* Reading and failing both drew nothing at all, so a failure looked like an empty screen. */\n return html`<div class=\"page\">\n <ox-page-state\n .loading=${!this.loaded && !this.loadError}\n .error=${this.loadError}\n @retry=${() => this.lastId && this.fetchActivityThread(this.lastId)}\n >${\n !activityThread\n ? this.loaded\n ? html`<div empty>\n <span class=\"title\">${i18next.t('text.no activity thread info')}</span>\n <span class=\"why\">${i18next.t('text.no-activity-thread-why')}</span>\n </div>`\n : nothing\n : this.renderThread(activityThread)\n }</ox-page-state\n >\n </div>`\n }\n\n private renderThread(activityThread: any) {\n return html`\n <activity-thread-ribon .activityThread=${activityThread}></activity-thread-ribon>\n ${sourceAddress(activityThread.activityInstance?.input?.sourceHref)\n ? html`<p><a href=${sourceAddress(activityThread.activityInstance.input.sourceHref)!}\n @click=${(event: MouseEvent) => {\n if (event.button || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return\n event.preventDefault()\n navigate(sourceAddress(activityThread.activityInstance.input.sourceHref)!)\n }}>${i18next.t('button.task-open-source')}</a>\n </p>`\n : nothing}\n ${(activityThread.state === 'rejected' && !followupActions(activityThread).restartable) || followupActions(activityThread).sourceResubmission\n ? html`<p>${i18next.t('text.task-source-resubmit')}</p>` : nothing}\n ${this.activityContent()}\n <!--\n 위에 그린 것이 하나도 없으면 편다 — 그때 확인할 것은 타임라인뿐인데, 접혀 있으면 볼 것이\n 아무것도 없는 화면이 된다.\n -->\n <activity-thread-timeline\n .activityThread=${activityThread}\n ?open=${!drawsAnything(this.sections())}\n short-form\n ></activity-thread-timeline>\n `\n }\n\n /** 타임라인 위에 무엇을 그리나 — 규칙은 thread-sections 에 있다. */\n sections(): ThreadSections {\n const model = this.activityThread?.activityInstance?.activity?.model\n\n return threadSectionsOf({\n decision: this.decision() !== nothing,\n given: inputSpecOf(model).length,\n written: outputSpecOf(model).length,\n state: this.activityThread?.state\n })\n }\n\n /** 액티비티가 선언한 결재 내용 — 결재 화면과 같은 그리기다. */\n decision() {\n const activityInstance = this.activityThread?.activityInstance\n\n return renderDecision(activityInstance?.activity?.decisionKeys, activityInstance?.input)\n }\n\n activityContent() {\n switch (this.activityThread?.activityInstance?.uiType) {\n case 'template':\n return this.hostedContent(this.templateContent())\n case 'generated':\n return this.generatedContent()\n /* board 는 전체 화면을 쓰는 캔버스라 카드에 담지 않는다(hostedContent 머리말). */\n case 'board':\n return this.boardContent()\n case 'custom-element':\n return this.hostedContent(this.customElementContent())\n case 'page':\n case 'external':\n return html``\n default:\n return this.generatedContent()\n }\n }\n\n /**\n * 화면 종류가 달라도 **같은 자리에 같은 모양으로 놓인다.**\n *\n * worklist 는 네 가지로 내용을 그린다(generated · custom-element · template · board). 그중\n * generated 만 절 카드 안에 있었고 나머지 셋은 면 위에 맨몸으로 놓였다. 그래서 같은 결재 화면이\n * 액티비티에 따라 카드였다가 아니었다가 했다 — 아래의 타임라인 · 의견은 늘 카드라 위계도 어긋났다.\n *\n * board 는 뺀다. 전체 폭 · 전체 높이를 쓰는 캔버스라 카드 안에 넣으면 여백이 두 겹이 되고 크기가\n * 어긋난다.\n *\n * 카드는 여백을 두지 않는다(padding: 0). 안에 들어오는 것이 자기 조판을 갖고 있고, 두 겹으로\n * 주면 안쪽 내용이 카드 가운데로 밀린다.\n */\n hostedContent(content: unknown) {\n return html`<section hosted>${content}</section>`\n }\n\n templateContent() {\n if (!this.activityThread) {\n return html``\n }\n\n const { uiSource: template } = this.activityThread?.activityInstance\n return unsafeHTML(template)\n }\n\n generatedContent(): DirectiveResult {\n if (!this.activityThread) {\n return html``\n }\n\n var { output, activityInstance } = this.activityThread || {}\n var { input } = activityInstance || {}\n\n const model = activityInstance?.activity?.model\n const inputSpec = inputSpecOf(model)\n const outputSpec = outputSpecOf(model)\n\n if (!output) {\n output = inputSpec\n .filter(item => item.inout === 'inout')\n .reduce((output, item) => {\n output[item.tag] = input[item.tag]\n return output\n }, {})\n }\n\n /*\n * **빈 절은 그리지 않는다.**\n *\n * 처분 승인 액티비티에는 `out` 항목이 하나도 없다. 그런데도 화면이 「Output」 상자를 그려서,\n * 무엇을 적어야 하는지 없는데 적는 자리처럼 보였다. 항목이 없으면 그 절이 없는 것이다.\n *\n * 아무것도 없고 제출할 차례면 그 사실을 말한다 — 상태 ribbon 과 제출 버튼만 남은 화면은\n * 사용자에게 「덜 뜬 화면」으로 읽힌다. 제출한 뒤에는 말하지 않는다(thread-sections).\n */\n const sections = this.sections()\n\n if (sections.emptyNote) {\n return keyed(\n this.activityThread?.id,\n html`<section empty>\n <span class=\"title\">${i18next.t('text.no-activity-fields')}</span>\n <span class=\"why\">${i18next.t('text.no-activity-fields-why')}</span>\n </section>`\n )\n }\n\n if (!drawsAnything(sections)) {\n return nothing\n }\n\n return keyed(\n this.activityThread?.id,\n html`\n ${sections.decision ? this.decision() : ''}\n ${\n sections.given\n ? html`\n <section readonly>\n <h2>${i18next.t('label.activity-input')}</h2>\n ${renderGiven(inputSpec, input)}\n </section>\n `\n : ''\n }\n ${\n sections.written\n ? html`\n <section>\n <h2>${i18next.t('field.artifact')}</h2>\n <ox-properties-dynamic-view\n data-name=\"output\"\n .props=${outputSpec}\n .value=${output}\n @property-change=${e => (this.activityThread.output = e.currentTarget.value)}\n ></ox-properties-dynamic-view>\n </section>\n `\n : ''\n }\n `\n )\n }\n\n boardContent(): DirectiveResult {\n if (!this.activityThread) {\n return html``\n }\n\n const { output, activityInstance } = this.activityThread\n const { uiSource: boardId, input } = activityInstance || {}\n\n if (!this.board || this.board.id !== boardId) {\n this.board = { id: boardId }\n }\n\n /* \n ox-board-viewer에서 provider에 의해 공급되는 board가 각 id별로 instance를 하나씩 밖에 가지지 않으므로,\n 동일한 id의 보드를 다른 page에 뺏기는 경우가 있다.\n 따라서, Page가 active될 때마다 타임스탬프를 refresh key로 설정하였다.\n */\n return keyed(\n this.activityThread.id,\n html`\n <ox-board-viewer\n style=\"background-color: white;\"\n .board=${this.board}\n .provider=${provider}\n .values=${{ ...input, ...output }}\n hide-fullscreen\n hide-navigation\n ></ox-board-viewer>\n `\n )\n }\n\n customElementContent() {\n if (!this.activityThread) {\n return html``\n }\n\n const { output, activityInstance } = this.activityThread\n const { uiSource: tagName, input } = activityInstance || {}\n\n const element = document.createElement(tagName)\n element.id = 'custom-content'\n element.activityId = activityInstance.activity.id\n element.input = input\n element.output = output\n element.activityThread = this.activityThread\n\n element.addEventListener('change', (e: CustomEvent) => {\n this.activityThread.output = e.detail\n })\n\n return element\n }\n\n @query('ox-board-viewer') oxBoardViewer: any\n\n getOutputFromBoard() {\n const outputSpec = outputSpecOf(this.activityThread?.activityInstance?.activity?.model)\n const data = this.oxBoardViewer.getSceneValues()\n\n return outputSpec.reduce((output, spec) => {\n output[spec.name] = data[spec.name]\n return output\n }, {})\n }\n\n updated(changes) {\n if (changes.has('activityThread')) {\n this.updateContext()\n }\n }\n\n async pageUpdated(changes, lifecycle, changedBefore) {\n if (this.active && lifecycle.resourceId) {\n this.fetchActivityThread(lifecycle.resourceId)\n }\n }\n\n async fetchActivityThread(id) {\n this.lastId = id\n this.loadError = null\n\n let response: any\n try {\n response = await client.query({\n query: gql`\n query activityThread($id: String!) { activityThread(id: $id) ${ActivityThreadFetchResult}\n }\n `,\n variables: { id }\n })\n } catch (error) {\n this.loadError = error\n return\n }\n\n if (response.errors?.length || !response.data) {\n this.loadError = response.errors?.length\n ? response.errors\n : new Error(i18next.t('error.activity-thread not found', { activityThread: id }))\n return\n }\n\n this.activityThread = response.data.activityThread\n this.loaded = true\n\n this.updateContext()\n }\n\n async _startActivityThread() {\n var { id, output, reason, activityInstance } = this.activityThread\n var { uiType } = activityInstance\n\n if (uiType === 'board') {\n output = this.getOutputFromBoard()\n }\n\n const outcome = await ranMutation(() =>\n client.mutate({\n mutation: gql`\n mutation ($id: String!, $output: Object) { startActivityThread(id: $id, output: $output) ${ActivityThreadFetchResult}\n }\n `,\n variables: { id, output }\n })\n )\n\n if (outcome.ok) {\n this.activityThread = outcome.data.startActivityThread\n\n document.dispatchEvent(\n new CustomEvent('notify', { detail: { message: i18next.t('text.task_is_started_successfully') } })\n )\n }\n }\n\n async _restartActivityThread() {\n var { id, output, activityInstance } = this.activityThread\n var { uiType } = activityInstance\n\n if (uiType === 'board') {\n output = this.getOutputFromBoard()\n }\n\n const outcome = await ranMutation(() =>\n client.mutate({\n mutation: gql`\n mutation ($id: String!, $output: Object) { restartActivityThread(id: $id, output: $output) ${ActivityThreadFetchResult}\n }\n `,\n variables: { id, output }\n })\n )\n\n if (outcome.ok) {\n this.activityThread = outcome.data.restartActivityThread\n\n document.dispatchEvent(\n new CustomEvent('notify', { detail: { message: i18next.t('text.task_is_restarted_successfully') } })\n )\n }\n }\n\n async _delegateActivityThread() {\n throw 'not implemented yet'\n }\n\n async _saveActivityThread() {\n var { id, output, reason, activityInstance } = this.activityThread\n var { uiType } = activityInstance || {}\n\n if (uiType === 'board') {\n output = this.getOutputFromBoard()\n }\n\n const outcome = await ranMutation(() =>\n client.mutate({\n mutation: gql`\n mutation ($id: String!, $save: ActivityThreadSave!) { saveActivityThread(id: $id, save: $save) ${ActivityThreadFetchResult}\n }\n `,\n variables: { id, save: { output } },\n context: { hasUpload: true }\n })\n )\n\n if (outcome.ok) {\n this.activityThread = outcome.data.saveActivityThread\n\n document.dispatchEvent(\n new CustomEvent('notify', { detail: { message: i18next.t('text.task_is_saved_successfully') } })\n )\n }\n }\n\n async _submitActivityThread() {\n var { id, output, reason, activityInstance } = this.activityThread\n var { uiType } = activityInstance || {}\n\n if (uiType === 'board') {\n output = this.getOutputFromBoard()\n }\n\n const outcome = await ranMutation(() =>\n client.mutate({\n mutation: gql`\n mutation ($id: String!, $output: Object, $reason: String) { submitActivityThread(id: $id, output: $output, reason: $reason) ${ActivityThreadFetchResult}\n }\n `,\n variables: { id, output, reason },\n context: { hasUpload: true }\n })\n )\n\n if (outcome.ok) {\n this.activityThread = outcome.data.submitActivityThread\n\n document.dispatchEvent(\n new CustomEvent('notify', { detail: { message: i18next.t('text.task_is_finished_successfully') } })\n )\n }\n }\n\n async _abortActivityThread() {\n const answer = await CustomAlert({\n type: 'warning',\n title: i18next.t('button.abort'),\n text: i18next.t('text.task-abort-keeps-history'),\n confirmButton: { text: i18next.t('button.abort') },\n cancelButton: { text: i18next.t('button.cancel') }\n })\n if (!answer?.value) return\n var { id } = this.activityThread\n\n const outcome = await ranMutation(() =>\n client.mutate({\n mutation: gql`\n mutation ($id: String!, $reason: String) { abortActivityThread(id: $id, reason: $reason) ${ActivityThreadFetchResult}\n }\n `,\n variables: { id }\n })\n )\n\n if (outcome.ok) {\n this.activityThread = outcome.data.abortActivityThread\n\n document.dispatchEvent(\n new CustomEvent('notify', { detail: { message: i18next.t('text.task_is_aborted_successfully') } })\n )\n }\n }\n}\n"]}
1
+ {"version":3,"file":"activity-thread-page.js","sourceRoot":"","sources":["../../../client/pages/activity-thread/activity-thread-page.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/list-state/ox-page-state.js'\nimport '@operato/property-editor/ox-properties-dynamic-view.js'\nimport '@operato/board/ox-board-viewer.js'\nimport '../../components/activity-thread-ribon.js'\nimport '../../components/activity-thread-timeline.js'\n\nimport gql from 'graphql-tag'\nimport { css, html, nothing } from 'lit'\nimport { DirectiveResult } from 'lit-html/directive.js'\nimport { unsafeHTML } from 'lit-html/directives/unsafe-html.js'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { keyed } from 'lit/directives/keyed.js'\nimport { client, MutationController, QueryController } from '@operato/graphql'\nimport { i18next, localize } from '@operato/i18n'\nimport { mutationOutcome } from '../../components/mutation-outcome.js'\nimport { ranMutation, sayFailure } from '../../components/say-outcome.js'\nimport { CustomAlert, navigate, PageView, DraftController } from '@operato/shell'\nimport { CommonButtonStyles, DocumentPageStyles, ScrollbarStyles } from '@operato/styles'\nimport { provider } from '@operato/board/board-provider.js'\n\nimport { ActivityFieldsStyles, inputSpecOf, outputSpecOf, renderGiven } from '../../components/activity-fields.js'\nimport { DecisionContentStyles, DecisionKeysFields, renderDecision } from '../../components/decision-content.js'\nimport { followupActions, sourceAddress } from '../../../shared/task-followup.js'\nimport { drawsAnything, submittableIn, threadSectionsOf, ThreadSections } from './thread-sections.js'\n\nconst ActivityThreadFetchResult = `\\\n{ id\n state\n dueAt\n assignedAt\n assignee { id\n name\n }\n updatedAt\n output\n round\n activityApprovals { round\n order\n approver { id name\n }\n judgment\n participation\n comment\n createdAt\n updatedAt\n terminatedAt\n }\n activityThreadHistories { transaction\n reason\n updater { id name\n }\n updatedAt\n state\n output\n }\n activityInstance { id\n name\n description\n state\n rejectionIsFinal\n activity { id\n rejectionIsFinal\n ${DecisionKeysFields}\n model { name\n description\n active\n tag\n inout\n type\n unit\n options\n quantifier\n spec\n hidden\n }\n }\n approvalLine { type\n value\n participation\n notifyAfter\n approver { id\n name\n description\n controlNo\n }\n }\n thumbnail\n input\n output\n uiType\n uiSource\n dueAt\n terminatedAt\n terminator { name\n email\n }\n createdAt\n }\n}`\n\nexport const ActivityThreadStatus = {\n Unassigned: 'unassigned',\n Assigned: 'assigned',\n Started: 'started',\n Delegated: 'delegated',\n Rejected: 'rejected',\n Ended: 'ended',\n Aborted: 'aborted'\n}\n\n@customElement('activity-thread-page')\nexport class ActivityThreadPage extends localize(i18next)(PageView) {\n static styles = [\n /* The frame owns the page shell and the reading column (ADR-0060 decision 8). */\n DocumentPageStyles,\n ScrollbarStyles,\n ActivityFieldsStyles,\n DecisionContentStyles,\n css`\n :host {\n color: var(--ui-ink, #17242c);\n font-size: var(--ui-t-body, 13px);\n }\n\n /* 카드가 담아 주므로 안에 들어오는 화면은 자기 면과 여백을 갖지 않는다. */\n /*\n * 줄어들지 않는다 — 줄어들면 본문이 잘린다.\n *\n * flex 항목인데 크기를 안 정해 두면 기본이 flex: 0 1 auto 다. **1 이 줄어든다는 뜻이다** —\n * 세로가 모자라면 브라우저가 이 칸부터 줄이는데, 여기엔 카드 모서리를 따라 자르려고\n * overflow: hidden 이 걸려 있어서 줄어든 만큼이 **스크롤도 없이 사라진다.**\n *\n * 완료 조회에서 실측했다(1400x620): 칸이 242px 로 줄고 내용은 362px 이라 「업무 내용」 절이\n * 대부분 잘렸고, 잘린 자리 바로 아래에서 타임라인이 시작하니 타임라인이 본문을 덮은 것처럼\n * 보였다. 세로가 넉넉하면 줄일 일이 없어 안 드러난다.\n *\n * 안에 오는 것은 문서다. 높이를 정해 주어야 하는 것은 board 뿐이고 board 는 이 칸을 거치지\n * 않는다(activityContent 참조). 문서는 제 높이로 서고, 모자라면 페이지 전체가 스크롤한다 —\n * :host 의 overflow: auto 가 그 자리다.\n */\n section[hosted] {\n flex: none;\n padding: 0;\n overflow: hidden;\n }\n\n ox-board-viewer {\n width: 100%;\n height: 100%;\n }\n\n activity-thread-timeline {\n margin: var(--spacing-large, 16px);\n }\n `\n ]\n\n /** The thread the address names. */\n @state() private threadId = ''\n\n /* The thread shown, read for the id the address names (ADR-0190). */\n private thread = new QueryController(\n this,\n gql`\n query activityThread($id: String!) {\n activityThread(id: $id) ${ActivityThreadFetchResult}\n }\n `,\n { variables: () => (this.threadId ? { id: this.threadId } : undefined) }\n )\n\n /* What is written here over the thread read; another thread drops it (ADR-0190 decision 2). */\n private draft = new DraftController<{ output: any }>(this, {\n read: () => this.activityThread,\n key: () => this.threadId\n })\n\n /*\n * The changes made here: each reads what it changed again once done. This screen says its own failure\n * (sayFailure), so the GraphQL link stays quiet about it (ADR-0190).\n */\n private start = new MutationController(\n this,\n gql`\n mutation ($id: String!, $output: Object) {\n startActivityThread(id: $id, output: $output) {\n id\n }\n }\n `,\n { refetch: () => [this.thread], showsError: true }\n )\n\n private restart = new MutationController(\n this,\n gql`\n mutation ($id: String!, $output: Object) {\n restartActivityThread(id: $id, output: $output) {\n id\n }\n }\n `,\n { refetch: () => [this.thread], showsError: true }\n )\n\n private save = new MutationController(\n this,\n gql`\n mutation ($id: String!, $save: ActivityThreadSave!) {\n saveActivityThread(id: $id, save: $save) {\n id\n }\n }\n `,\n { refetch: () => [this.thread], context: { hasUpload: true }, showsError: true }\n )\n\n private finish = new MutationController(\n this,\n gql`\n mutation ($id: String!, $output: Object, $reason: String) {\n submitActivityThread(id: $id, output: $output, reason: $reason) {\n id\n }\n }\n `,\n { refetch: () => [this.thread], context: { hasUpload: true }, showsError: true }\n )\n\n get activityThread(): any {\n return this.thread.data?.activityThread\n }\n\n /**\n * 조회를 마쳤나 — **「아직 안 읽었다」와 「없다」는 다르다.**\n *\n * 전에는 값이 없으면 곧바로 「업무활동 정보가 없습니다」를 그렸다. 그런데 이 화면은 열리자마자\n * 조회를 시작하므로, 응답이 오기 전까지 **없다고 단언하는 화면**이 보인다. 목록에서 줄을 눌러\n * 들어온 사람은 방금 본 건이 없다는 말을 먼저 읽는다.\n *\n * 조회가 끝난 뒤에만 그 말을 한다. 그 전에는 아무 말도 하지 않는다.\n */\n get loaded(): boolean {\n return this.thread.data !== undefined\n }\n\n /** Why the task could not be read - ox-page-state says it, with retry (ADR-0060 decision 8). */\n get loadError(): unknown {\n return this.thread.error ?? null\n }\n\n /** The custom element and the thread read it was made for: another answer makes it again. */\n private custom?: { for: any; element: any }\n\n @state() board: any\n\n get context() {\n const state = this.activityThread?.state\n\n const { restartable, abortable, sourceResubmission } = followupActions(this.activityThread)\n const savable = submittableIn(state) && !sourceResubmission\n const submittable = savable\n // const delegatable = savable\n\n return {\n /*\n * 이 화면이 어떤 틀인가 — 동작 줄이 이것을 읽고 자기 오른쪽 끝을 내용에 맞춘다\n * (ADR-0060 결정 9 보탬). 안 적으면 창 폭이고, 그것은 작업면의 모양이다.\n */\n frame: 'document',\n title: this.lifecycle?.params?.['title'] || i18next.t('title.activity'),\n help: 'worklist/activity-thread-page',\n /*\n * 이 화면은 메뉴에 없다 — 「할 일」에서 줄을 눌러 들어온다. 그래서 왼쪽 메뉴가 가리킬\n * 항목이 없고, 표시가 사라져 들어온 사람이 자기가 어디에 있는지 잃는다.\n *\n * 어느 목록에서 열리는지는 이 화면이 안다. 그것을 적어 둔다.\n */\n menu: this.lifecycle?.params?.['box'] === 'draft-list' ? 'draft-list' : 'todo-list',\n actions: [\n savable && {\n title: i18next.t('button.save'),\n action: this._saveActivityThread.bind(this),\n ...CommonButtonStyles.save\n },\n\n submittable && {\n title: i18next.t('button.submit'),\n action: this._submitActivityThread.bind(this),\n ...CommonButtonStyles.submit\n },\n\n // delegatable && { // title: i18next.t('button.delegate'),\n // action: this._delegateActivityThread.bind(this),\n // ...CommonButtonStyles.save\n // },\n\n abortable && {\n title: i18next.t('button.abort'),\n action: this._abortActivityThread.bind(this),\n ...CommonButtonStyles.cancel\n },\n\n restartable && {\n title: i18next.t(this.lifecycle?.params?.['box'] === 'draft-list' ? 'button.revise-request' : 'button.restart'),\n action: this._restartActivityThread.bind(this),\n ...CommonButtonStyles.save\n }\n /*\n * 나가기는 동작 줄에 두지 않는다 (ADR-0060 결정 9 보탬 판정 2). 탭의 × 가 이미 하는 일이고,\n * 같은 곳으로 가는 문을 둘 두면 어느 쪽이 무엇을 하는지 사람이 눌러 봐야 안다.\n */\n ].filter(Boolean /* truthy only */)\n // activityThread: this.activityThread\n }\n }\n\n render() {\n const activityThread = this.activityThread\n\n /* Reading and failing both drew nothing at all, so a failure looked like an empty screen. */\n return html`<div class=\"page\">\n <ox-page-state\n .loading=${!this.loaded && !this.loadError}\n .error=${this.loadError}\n @retry=${() => this.thread.refetch()}\n >${\n !activityThread\n ? this.loaded\n ? html`<div empty>\n <span class=\"title\">${i18next.t('text.no activity thread info')}</span>\n <span class=\"why\">${i18next.t('text.no-activity-thread-why')}</span>\n </div>`\n : nothing\n : this.renderThread(activityThread)\n }</ox-page-state\n >\n </div>`\n }\n\n private renderThread(activityThread: any) {\n return html`\n <activity-thread-ribon .activityThread=${activityThread}></activity-thread-ribon>\n ${sourceAddress(activityThread.activityInstance?.input?.sourceHref)\n ? html`<p><a href=${sourceAddress(activityThread.activityInstance.input.sourceHref)!}\n @click=${(event: MouseEvent) => {\n if (event.button || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return\n event.preventDefault()\n navigate(sourceAddress(activityThread.activityInstance.input.sourceHref)!)\n }}>${i18next.t('button.task-open-source')}</a>\n </p>`\n : nothing}\n ${(activityThread.state === 'rejected' && !followupActions(activityThread).restartable) || followupActions(activityThread).sourceResubmission\n ? html`<p>${i18next.t('text.task-source-resubmit')}</p>` : nothing}\n ${this.activityContent()}\n <!--\n 위에 그린 것이 하나도 없으면 편다 — 그때 확인할 것은 타임라인뿐인데, 접혀 있으면 볼 것이\n 아무것도 없는 화면이 된다.\n -->\n <activity-thread-timeline\n .activityThread=${activityThread}\n ?open=${!drawsAnything(this.sections())}\n short-form\n ></activity-thread-timeline>\n `\n }\n\n /** 타임라인 위에 무엇을 그리나 — 규칙은 thread-sections 에 있다. */\n sections(): ThreadSections {\n const model = this.activityThread?.activityInstance?.activity?.model\n\n return threadSectionsOf({\n decision: this.decision() !== nothing,\n given: inputSpecOf(model).length,\n written: outputSpecOf(model).length,\n state: this.activityThread?.state\n })\n }\n\n /** 액티비티가 선언한 결재 내용 — 결재 화면과 같은 그리기다. */\n decision() {\n const activityInstance = this.activityThread?.activityInstance\n\n return renderDecision(activityInstance?.activity?.decisionKeys, activityInstance?.input)\n }\n\n activityContent() {\n switch (this.activityThread?.activityInstance?.uiType) {\n case 'template':\n return this.hostedContent(this.templateContent())\n case 'generated':\n return this.generatedContent()\n /* board 는 전체 화면을 쓰는 캔버스라 카드에 담지 않는다(hostedContent 머리말). */\n case 'board':\n return this.boardContent()\n case 'custom-element':\n return this.hostedContent(this.customElementContent())\n case 'page':\n case 'external':\n return html``\n default:\n return this.generatedContent()\n }\n }\n\n /**\n * 화면 종류가 달라도 **같은 자리에 같은 모양으로 놓인다.**\n *\n * worklist 는 네 가지로 내용을 그린다(generated · custom-element · template · board). 그중\n * generated 만 절 카드 안에 있었고 나머지 셋은 면 위에 맨몸으로 놓였다. 그래서 같은 결재 화면이\n * 액티비티에 따라 카드였다가 아니었다가 했다 — 아래의 타임라인 · 의견은 늘 카드라 위계도 어긋났다.\n *\n * board 는 뺀다. 전체 폭 · 전체 높이를 쓰는 캔버스라 카드 안에 넣으면 여백이 두 겹이 되고 크기가\n * 어긋난다.\n *\n * 카드는 여백을 두지 않는다(padding: 0). 안에 들어오는 것이 자기 조판을 갖고 있고, 두 겹으로\n * 주면 안쪽 내용이 카드 가운데로 밀린다.\n */\n hostedContent(content: unknown) {\n return html`<section hosted>${content}</section>`\n }\n\n templateContent() {\n if (!this.activityThread) {\n return html``\n }\n\n const { uiSource: template } = this.activityThread?.activityInstance\n return unsafeHTML(template)\n }\n\n generatedContent(): DirectiveResult {\n if (!this.activityThread) {\n return html``\n }\n\n var { activityInstance } = this.activityThread || {}\n var { input } = activityInstance || {}\n var output = this.draft.value('output')\n\n const model = activityInstance?.activity?.model\n const inputSpec = inputSpecOf(model)\n const outputSpec = outputSpecOf(model)\n\n if (!output) {\n output = inputSpec\n .filter(item => item.inout === 'inout')\n .reduce((output, item) => {\n output[item.tag] = input[item.tag]\n return output\n }, {})\n }\n\n /*\n * **빈 절은 그리지 않는다.**\n *\n * 처분 승인 액티비티에는 `out` 항목이 하나도 없다. 그런데도 화면이 「Output」 상자를 그려서,\n * 무엇을 적어야 하는지 없는데 적는 자리처럼 보였다. 항목이 없으면 그 절이 없는 것이다.\n *\n * 아무것도 없고 제출할 차례면 그 사실을 말한다 — 상태 ribbon 과 제출 버튼만 남은 화면은\n * 사용자에게 「덜 뜬 화면」으로 읽힌다. 제출한 뒤에는 말하지 않는다(thread-sections).\n */\n const sections = this.sections()\n\n if (sections.emptyNote) {\n return keyed(\n this.activityThread?.id,\n html`<section empty>\n <span class=\"title\">${i18next.t('text.no-activity-fields')}</span>\n <span class=\"why\">${i18next.t('text.no-activity-fields-why')}</span>\n </section>`\n )\n }\n\n if (!drawsAnything(sections)) {\n return nothing\n }\n\n return keyed(\n this.activityThread?.id,\n html`\n ${sections.decision ? this.decision() : ''}\n ${\n sections.given\n ? html`\n <section readonly>\n <h2>${i18next.t('label.activity-input')}</h2>\n ${renderGiven(inputSpec, input)}\n </section>\n `\n : ''\n }\n ${\n sections.written\n ? html`\n <section>\n <h2>${i18next.t('field.artifact')}</h2>\n <ox-properties-dynamic-view\n data-name=\"output\"\n .props=${outputSpec}\n .value=${output}\n @property-change=${e => this.draft.set('output', e.currentTarget.value)}\n ></ox-properties-dynamic-view>\n </section>\n `\n : ''\n }\n `\n )\n }\n\n boardContent(): DirectiveResult {\n if (!this.activityThread) {\n return html``\n }\n\n const { activityInstance } = this.activityThread\n const { uiSource: boardId, input } = activityInstance || {}\n const output = this.draft.value('output')\n\n if (!this.board || this.board.id !== boardId) {\n this.board = { id: boardId }\n }\n\n /* \n ox-board-viewer에서 provider에 의해 공급되는 board가 각 id별로 instance를 하나씩 밖에 가지지 않으므로,\n 동일한 id의 보드를 다른 page에 뺏기는 경우가 있다.\n 따라서, Page가 active될 때마다 타임스탬프를 refresh key로 설정하였다.\n */\n return keyed(\n this.activityThread.id,\n html`\n <ox-board-viewer\n style=\"background-color: white;\"\n .board=${this.board}\n .provider=${provider}\n .values=${{ ...input, ...output }}\n hide-fullscreen\n hide-navigation\n ></ox-board-viewer>\n `\n )\n }\n\n customElementContent() {\n if (!this.activityThread) {\n return html``\n }\n\n /* Made once per answer: what is written in it redraws the page, and a new element would drop the typing. */\n if (this.custom && this.custom.for === this.activityThread) {\n return this.custom.element\n }\n\n const { activityInstance } = this.activityThread\n const { uiSource: tagName, input } = activityInstance || {}\n\n const element = document.createElement(tagName)\n element.id = 'custom-content'\n element.activityId = activityInstance.activity.id\n element.input = input\n element.output = this.draft.value('output')\n element.activityThread = this.activityThread\n\n element.addEventListener('change', (e: CustomEvent) => this.draft.set('output', e.detail))\n\n this.custom = { for: this.activityThread, element }\n return element\n }\n\n @query('ox-board-viewer') oxBoardViewer: any\n\n getOutputFromBoard() {\n const outputSpec = outputSpecOf(this.activityThread?.activityInstance?.activity?.model)\n const data = this.oxBoardViewer.getSceneValues()\n\n return outputSpec.reduce((output, spec) => {\n output[spec.name] = data[spec.name]\n return output\n }, {})\n }\n\n async pageUpdated(changes, lifecycle, changedBefore) {\n if (this.active && lifecycle.resourceId) {\n this.threadId = lifecycle.resourceId\n }\n }\n\n /** What this task's output is to be: the board's values, or what was written over the thread read. */\n private outputToSend() {\n return this.activityThread.activityInstance?.uiType === 'board' ? this.getOutputFromBoard() : this.draft.value('output')\n }\n\n /*\n * Each change sends what is written now and reads the thread again once it went through; its answer is not kept\n * (ADR-0190 decision 2). The edits sent are cleared then, and a failure keeps them.\n */\n async _startActivityThread() {\n const { id } = this.activityThread\n const output = this.outputToSend()\n\n const done = await this.draft.submit(() => this.start.run({ id, output }))\n\n if (!done) {\n sayFailure(mutationOutcome(this.start.error))\n return\n }\n\n document.dispatchEvent(\n new CustomEvent('notify', { detail: { message: i18next.t('text.task_is_started_successfully') } })\n )\n }\n\n async _restartActivityThread() {\n const { id } = this.activityThread\n const output = this.outputToSend()\n\n const done = await this.draft.submit(() => this.restart.run({ id, output }))\n\n if (!done) {\n sayFailure(mutationOutcome(this.restart.error))\n return\n }\n\n document.dispatchEvent(\n new CustomEvent('notify', { detail: { message: i18next.t('text.task_is_restarted_successfully') } })\n )\n }\n\n async _delegateActivityThread() {\n throw 'not implemented yet'\n }\n\n async _saveActivityThread() {\n const { id } = this.activityThread\n const output = this.outputToSend()\n\n const done = await this.draft.submit(() => this.save.run({ id, save: { output } }))\n\n if (!done) {\n sayFailure(mutationOutcome(this.save.error))\n return\n }\n\n document.dispatchEvent(\n new CustomEvent('notify', { detail: { message: i18next.t('text.task_is_saved_successfully') } })\n )\n }\n\n async _submitActivityThread() {\n const { id, reason } = this.activityThread\n const output = this.outputToSend()\n\n const done = await this.draft.submit(() => this.finish.run({ id, output, reason }))\n\n if (!done) {\n sayFailure(mutationOutcome(this.finish.error))\n return\n }\n\n document.dispatchEvent(\n new CustomEvent('notify', { detail: { message: i18next.t('text.task_is_finished_successfully') } })\n )\n }\n\n async _abortActivityThread() {\n const answer = await CustomAlert({\n type: 'warning',\n title: i18next.t('button.abort'),\n text: i18next.t('text.task-abort-keeps-history'),\n confirmButton: { text: i18next.t('button.abort') },\n cancelButton: { text: i18next.t('button.cancel') }\n })\n if (!answer?.value) return\n const { id } = this.activityThread\n\n const outcome = await ranMutation(() =>\n client.mutate({\n mutation: gql`\n mutation ($id: String!, $reason: String) {\n abortActivityThread(id: $id, reason: $reason) {\n id\n }\n }\n `,\n variables: { id }\n })\n )\n\n if (outcome.ok) {\n /* Nothing more is written on an aborted task: what was typed on it goes with it. */\n this.draft.reset()\n await this.thread.refetch()\n\n document.dispatchEvent(\n new CustomEvent('notify', { detail: { message: i18next.t('text.task_is_aborted_successfully') } })\n )\n }\n }\n}\n"]}
@@ -17,17 +17,19 @@ export declare const ActivityThreadStatus: {
17
17
  declare const ActivityThreadViewPage_base: (new (...args: any[]) => import("lit").LitElement) & typeof PageView;
18
18
  export declare class ActivityThreadViewPage extends ActivityThreadViewPage_base {
19
19
  static styles: import("lit").CSSResult[];
20
- activityThread: any;
20
+ /** The thread the address names. */
21
+ private threadId;
22
+ private thread;
23
+ get activityThread(): any;
21
24
  /**
22
25
  * 조회를 마쳤나 — **「아직 안 읽었다」와 「없다」는 다르다.**
23
26
  *
24
27
  * 목록에서 줄을 눌러 들어온 사람이 방금 본 건이 없다는 말을 먼저 읽지 않게, 조회가 끝난 뒤에만
25
28
  * 그 말을 한다.
26
29
  */
27
- loaded: boolean;
30
+ get loaded(): boolean;
28
31
  /** Why the task could not be read - ox-page-state says it, with retry (ADR-0060 decision 8). */
29
- loadError: unknown;
30
- private lastId?;
32
+ get loadError(): unknown;
31
33
  board: any;
32
34
  get context(): {
33
35
  frame: string;
@@ -49,8 +51,6 @@ export declare class ActivityThreadViewPage extends ActivityThreadViewPage_base
49
51
  generatedContent(): DirectiveResult;
50
52
  boardContent(): DirectiveResult;
51
53
  customElementContent(): any;
52
- updated(changes: any): void;
53
54
  pageUpdated(changes: any, lifecycle: any, changedBefore: any): Promise<void>;
54
- fetchActivityThread(id: any): Promise<void>;
55
55
  }
56
56
  export {};