@things-factory/worklist 10.1.37 β†’ 10.1.39

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 (113) hide show
  1. package/dist-client/components/activity-instance-preview.js +2 -13
  2. package/dist-client/components/activity-instance-preview.js.map +1 -1
  3. package/dist-client/components/activity-thread-timeline.d.ts +2 -2
  4. package/dist-client/components/can-pick.d.ts +15 -0
  5. package/dist-client/components/can-pick.js +16 -0
  6. package/dist-client/components/can-pick.js.map +1 -0
  7. package/dist-client/pages/activity-catalog/activity-detail-page.d.ts +23 -2
  8. package/dist-client/pages/activity-catalog/activity-detail-page.js +69 -10
  9. package/dist-client/pages/activity-catalog/activity-detail-page.js.map +1 -1
  10. package/dist-client/pages/activity-catalog/activity-panels.d.ts +28 -0
  11. package/dist-client/pages/activity-catalog/activity-panels.js +19 -0
  12. package/dist-client/pages/activity-catalog/activity-panels.js.map +1 -1
  13. package/dist-client/pages/activity-instance/activity-instance-start-page.d.ts +1 -0
  14. package/dist-client/pages/activity-instance/activity-instance-start-page.js +33 -1
  15. package/dist-client/pages/activity-instance/activity-instance-start-page.js.map +1 -1
  16. package/dist-client/pages/activity-instance/discard-offer.d.ts +11 -0
  17. package/dist-client/pages/activity-instance/discard-offer.js +11 -0
  18. package/dist-client/pages/activity-instance/discard-offer.js.map +1 -0
  19. package/dist-client/pages/activity-thread/activity-thread-view.d.ts +1 -1
  20. package/dist-client/pages/todo/approval-done-list-page.d.ts +5 -1
  21. package/dist-client/pages/todo/approval-done-list-page.js +8 -1
  22. package/dist-client/pages/todo/approval-done-list-page.js.map +1 -1
  23. package/dist-client/pages/todo/approval-pending-list-page.d.ts +5 -1
  24. package/dist-client/pages/todo/approval-pending-list-page.js +8 -1
  25. package/dist-client/pages/todo/approval-pending-list-page.js.map +1 -1
  26. package/dist-client/pages/todo/done-list-page.d.ts +5 -1
  27. package/dist-client/pages/todo/done-list-page.js +8 -1
  28. package/dist-client/pages/todo/done-list-page.js.map +1 -1
  29. package/dist-client/pages/todo/draft-list-page.d.ts +5 -1
  30. package/dist-client/pages/todo/draft-list-page.js +18 -12
  31. package/dist-client/pages/todo/draft-list-page.js.map +1 -1
  32. package/dist-client/pages/todo/list-thumbnail.d.ts +25 -0
  33. package/dist-client/pages/todo/list-thumbnail.js +25 -0
  34. package/dist-client/pages/todo/list-thumbnail.js.map +1 -0
  35. package/dist-client/pages/todo/todo-list-page.d.ts +5 -1
  36. package/dist-client/pages/todo/todo-list-page.js +8 -1
  37. package/dist-client/pages/todo/todo-list-page.js.map +1 -1
  38. package/dist-client/pages/work-door/door-links.d.ts +30 -0
  39. package/dist-client/pages/work-door/door-links.js +30 -0
  40. package/dist-client/pages/work-door/door-links.js.map +1 -0
  41. package/dist-client/pages/work-door/work-doors-page.js +15 -5
  42. package/dist-client/pages/work-door/work-doors-page.js.map +1 -1
  43. package/dist-client/route.d.ts +1 -1
  44. package/dist-client/tsconfig.tsbuildinfo +1 -1
  45. package/dist-server/controllers/activity-approval/delegate.js +27 -2
  46. package/dist-server/controllers/activity-approval/delegate.js.map +1 -1
  47. package/dist-server/controllers/activity-approval/delegation.d.ts +31 -0
  48. package/dist-server/controllers/activity-approval/delegation.js +31 -0
  49. package/dist-server/controllers/activity-approval/delegation.js.map +1 -0
  50. package/dist-server/controllers/activity-instance/discard-draft.d.ts +22 -0
  51. package/dist-server/controllers/activity-instance/discard-draft.js +54 -0
  52. package/dist-server/controllers/activity-instance/discard-draft.js.map +1 -0
  53. package/dist-server/controllers/activity-read/assert-may-read.d.ts +15 -0
  54. package/dist-server/controllers/activity-read/assert-may-read.js +99 -0
  55. package/dist-server/controllers/activity-read/assert-may-read.js.map +1 -0
  56. package/dist-server/controllers/activity-read/participates.d.ts +41 -0
  57. package/dist-server/controllers/activity-read/participates.js +42 -0
  58. package/dist-server/controllers/activity-read/participates.js.map +1 -0
  59. package/dist-server/controllers/activity-thread/delegate.js +23 -1
  60. package/dist-server/controllers/activity-thread/delegate.js.map +1 -1
  61. package/dist-server/service/activity/activity-mutation.js +1 -0
  62. package/dist-server/service/activity/activity-mutation.js.map +1 -1
  63. package/dist-server/service/activity-approval/activity-approval-query.js +7 -1
  64. package/dist-server/service/activity-approval/activity-approval-query.js.map +1 -1
  65. package/dist-server/service/activity-approval/activity-approval-subscription.js +2 -11
  66. package/dist-server/service/activity-approval/activity-approval-subscription.js.map +1 -1
  67. package/dist-server/service/activity-instance/activity-instance-mutation.js +12 -20
  68. package/dist-server/service/activity-instance/activity-instance-mutation.js.map +1 -1
  69. package/dist-server/service/activity-instance/activity-instance-query.js +9 -2
  70. package/dist-server/service/activity-instance/activity-instance-query.js.map +1 -1
  71. package/dist-server/service/activity-instance/activity-instance-subscription.js +4 -12
  72. package/dist-server/service/activity-instance/activity-instance-subscription.js.map +1 -1
  73. package/dist-server/service/activity-instance/index.d.ts +1 -2
  74. package/dist-server/service/activity-instance/index.js +1 -2
  75. package/dist-server/service/activity-instance/index.js.map +1 -1
  76. package/dist-server/service/activity-template/activity-template-mutation.js +6 -0
  77. package/dist-server/service/activity-template/activity-template-mutation.js.map +1 -1
  78. package/dist-server/service/activity-thread/activity-thread-mutation.d.ts +0 -3
  79. package/dist-server/service/activity-thread/activity-thread-mutation.js +0 -19
  80. package/dist-server/service/activity-thread/activity-thread-mutation.js.map +1 -1
  81. package/dist-server/service/activity-thread/activity-thread-query.js +7 -1
  82. package/dist-server/service/activity-thread/activity-thread-query.js.map +1 -1
  83. package/dist-server/service/activity-thread/activity-thread-subscription.js +2 -8
  84. package/dist-server/service/activity-thread/activity-thread-subscription.js.map +1 -1
  85. package/dist-server/service/index.d.ts +2 -2
  86. package/dist-server/service/subscription/subscription-filters.d.ts +36 -0
  87. package/dist-server/service/subscription/subscription-filters.js +41 -0
  88. package/dist-server/service/subscription/subscription-filters.js.map +1 -0
  89. package/dist-server/service/work-door/work-door-declaration.d.ts +15 -0
  90. package/dist-server/service/work-door/work-door-declaration.js +18 -0
  91. package/dist-server/service/work-door/work-door-declaration.js.map +1 -1
  92. package/dist-server/service/work-door/work-door-resolver.d.ts +3 -0
  93. package/dist-server/service/work-door/work-door-resolver.js +21 -1
  94. package/dist-server/service/work-door/work-door-resolver.js.map +1 -1
  95. package/dist-server/tsconfig.tsbuildinfo +1 -1
  96. package/package.json +10 -10
  97. package/tests/delegate-approval.test.ts +112 -0
  98. package/tests/discard-draft.test.ts +145 -0
  99. package/tests/may-read-case.test.ts +166 -0
  100. package/tests/open-doors.test.ts +274 -0
  101. package/tests/published-shape.test.ts +85 -0
  102. package/tests/work-door-not-used-refuse.test.ts +110 -0
  103. package/translations/en.json +15 -2
  104. package/translations/ja.json +15 -2
  105. package/translations/ko.json +15 -2
  106. package/translations/ms.json +15 -2
  107. package/translations/zh.json +15 -2
  108. package/dist-server/service/activity-instance/activity-instance-history-query.d.ts +0 -12
  109. package/dist-server/service/activity-instance/activity-instance-history-query.js +0 -79
  110. package/dist-server/service/activity-instance/activity-instance-history-query.js.map +0 -1
  111. package/dist-server/service/activity-instance/activity-instance-history-type.d.ts +0 -5
  112. package/dist-server/service/activity-instance/activity-instance-history-type.js +0 -21
  113. package/dist-server/service/activity-instance/activity-instance-history-type.js.map +0 -1
@@ -10,6 +10,7 @@ import { client } from '@operato/graphql';
10
10
  import { importantChip, importantFilters } from '../../chip-filters.js';
11
11
  import { i18next, localize } from '@operato/i18n';
12
12
  import { navigate, PageView } from '@operato/shell';
13
+ import { listWithThumbnail } from './list-thumbnail.js';
13
14
  import { CommonHeaderStyles, ScrollbarStyles, WorkSurfacePageStyles } from '@operato/styles';
14
15
  import { adjustFilters, isMobileDevice } from '@operato/utils';
15
16
  import { ActivityThreadStatus } from '../../types/activity-thread.js';
@@ -286,7 +287,13 @@ let DoneListPage = class DoneListPage extends localize(i18next)(PageView) {
286
287
  this.grist?.fetch();
287
288
  }
288
289
  }
289
- async fetchHandler({ page, limit, sortings = [], filters = [] }) {
290
+ /* 읽은 것에 그림이 ν•˜λ‚˜λ„ μ—†μœΌλ©΄ μΉ΄λ“œλ§ˆλ‹€ 빈 κ·Έλ¦Ό 칸을 μ„Έμš°μ§€ μ•ŠλŠ”λ‹€(Β§ list-thumbnail.ts). */
291
+ async fetchHandler(options) {
292
+ const fetched = await this.fetchRows(options);
293
+ this.gristConfig = listWithThumbnail(this.gristConfig, fetched?.records || []);
294
+ return fetched;
295
+ }
296
+ async fetchRows({ page, limit, sortings = [], filters = [] }) {
290
297
  if (this.filters?.includes('important')) {
291
298
  filters = adjustFilters(filters, importantFilters());
292
299
  }
@@ -1 +1 @@
1
- {"version":3,"file":"done-list-page.js","sourceRoot":"","sources":["../../../client/pages/todo/done-list-page.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/data-grist'\nimport '@operato/data-grist/ox-filters-form.js'\nimport '@operato/input/ox-input-select-buttons.js'\n\nimport gql from 'graphql-tag'\nimport { css, html } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { DataGrist, FetchOption, getRenderer } from '@operato/data-grist'\nimport { client } from '@operato/graphql'\nimport { importantChip, importantFilters } from '../../chip-filters.js'\nimport { i18next, localize } from '@operato/i18n'\nimport { navigate, PageView } from '@operato/shell'\nimport { CommonHeaderStyles, ScrollbarStyles, WorkSurfacePageStyles } from '@operato/styles'\nimport { adjustFilters, isMobileDevice } from '@operato/utils'\n\nimport { ActivityThreadStatus } from '../../types/activity-thread.js'\n\nimport { priorityCell, subjectCell } from '../../activity-cells.js'\n\n@customElement('done-list-page')\nexport class DoneListPage extends localize(i18next)(PageView) { static styles = [\n /* The work surface frame for a list screen (ADR-0060 decision 8). */\n WorkSurfacePageStyles,\n ScrollbarStyles,\n CommonHeaderStyles,\n css`\n :host {\n --grid-record-emphasized-background-color: #8b0000;\n --grid-record-emphasized-color: #ff6b6b;\n }\n\n .header { grid-template-areas: 'filters actions';\n }\n\n /*\n * ── ν—€λ“œλ£Έμ˜ μ™Όμͺ½ 기쀀선은 ν‘œμ™€ κ°™λ‹€ ─────────────────────────────────\n * CommonHeaderStyles 의 .filters λŠ” λ°°κ²½κ³Ό λͺ¨μ„œλ¦¬μ™€ 여백을 κ°€μ§„ μ˜μ—­μ΄λ‹€. κ·Έ 배경이\n * --md-sys-color-surface 인데 이 μ œν’ˆμ—μ„œλŠ” 바탕색과 같은 값이라, **보이지 μ•ŠλŠ” μ˜μ—­μ΄\n * 자리만 μ°¨μ§€ν•˜κ³ ** 검색창을 μ—¬λ°±λ§ŒνΌ(12px) μ•ˆμͺ½μœΌλ‘œ λ°€μ—ˆλ‹€.\n *\n * μ‹€μΈ‘: ν‘œ μ™Όμͺ½ 끝 212 Β· ν•„ν„° μ˜μ—­ 212 Β· 검색창 224. ν™”λ©΄μ˜ μ™Όμͺ½ 기쀀선이 λ‘˜μ΄ 됐닀.\n *\n * κ·Έ κ·œμΉ™λ“€μ€ .header μ•ˆμ— μ€‘μ²©λ˜μ–΄ μžˆμ–΄(.header .filters) 밑쀄 μ—†λŠ” .filters λ‘œλŠ” 이길 수\n * μ—†λ‹€ β€” νŠΉμ •λ„κ°€ 0,1,0 λŒ€ 0,2,0 이닀.\n */\n .header .filters {\n padding: 0;\n background: none;\n border-radius: 0;\n gap: 12px;\n }\n\n `\n ]\n\n @property({ type: Object }) gristConfig?: any\n @property({ type: String }) mode: 'GRID' | 'LIST' | 'CARD' = isMobileDevice() ? 'CARD' : 'GRID'\n\n @query('ox-grist') grist!: DataGrist\n\n @state() filters?: string[]\n\n get context() { return { title: i18next.t('title.done list'),\n /*\n * κ²€μƒ‰μ˜ μžλ¦¬λŠ” **κΈ°κΈ°κ°€ μ •ν•œλ‹€.**\n *\n * PC μ—μ„œλŠ” ν™”λ©΄ μ•ˆμœΌλ‘œ λ‚΄λ¦°λ‹€. 상단 바에 두면 κ±°λ₯Έ 쑰건과 κ±ΈλŸ¬μ§„ κ²°κ³Όκ°€ ν™”λ©΄μ˜ μœ„μ•„λž˜ 끝으둜\n * κ°ˆλΌμ§€κ³ , μ§€κΈˆ λ¬΄μ—‡μœΌλ‘œ κ±Έλ €λŠ”μ§€κ°€ λͺ©λ‘ μ˜†μ—μ„œ 보이지 μ•ŠλŠ”λ‹€.\n *\n * 쒁은 ν™”λ©΄μ—μ„œλŠ” 상단 바에 κ·ΈλŒ€λ‘œ λ‘”λ‹€. ν—€λ“œλ£Έμ— 두면 검색창과 ν•„ν„°κ°€ λͺ©λ‘μ„ 그만큼 λ°€μ–΄\n * 내리고, μΉ΄λ“œ 두 μž₯이 ν™”λ©΄ λ°–μœΌλ‘œ λ‚˜κ°„λ‹€. 상단 λ°”λŠ” κ·Έ 자리λ₯Ό 아끼렀고 μžˆλŠ” 것이닀.\n *\n * 이 μ €μž₯μ†Œμ—λŠ” 두 방식이 λ‹€ μžˆλ‹€ β€” ν—€λ“œλ£Έ 50κ³³, 상단 λ°” 51κ³³. μ •ν˜•μΈ 것은 ꡬ쑰\n * (.header / .filters / .filter)이고 κ²€μƒ‰μ˜ μžλ¦¬λŠ” 화면이 μ •ν•œλ‹€.\n */\n /*\n * 검색은 **νŽ˜μ΄μ§€ 제λͺ© μ€„μ˜ 였λ₯Έμͺ½ 끝**에 λ‘”λ‹€ β€” λ‹€λ₯Έ ν™”λ©΄λ“€κ³Ό 같은 μžλ¦¬λ‹€.\n *\n * μ „μ—λŠ” 쒁은 ν™”λ©΄μ—μ„œλ§Œ 여기에 λ„£κ³ , 넓은 ν™”λ©΄μ—μ„œλŠ” ν—€λ“œλ£Έμ˜ ox-filters-form 이 검색을\n * κ·Έλ Έλ‹€. κ·Έλž˜μ„œ 같은 μ•± μ•ˆμ—μ„œ 검색 μƒμžμ˜ μžλ¦¬κ°€ ν™”λ©΄λ§ˆλ‹€ λ‹¬λžλ‹€.\n *\n * ν—€λ“œλ£Έμ—λŠ” μ’νžˆλŠ” 칩만 λ‚¨λŠ”λ‹€. 폼은 without-search 둜 남겨 두어, λ‚˜μ€‘μ— μ–΄λŠ 칸에\n * filter λ₯Ό 달면 κ·Έ UI κ°€ μ €μ ˆλ‘œ 생긴닀(λΉ„λ©΄ 아무것도 그리지 μ•ŠλŠ”λ‹€).\n */\n search: {\n handler: (search: string) => {\n this.grist.searchText = search\n },\n value: this.grist?.searchText || ''\n },\n filter: { handler: () => { this.grist.toggleHeadroom()\n }\n },\n help: 'worklist/done-list-page',\n actions: []\n }\n }\n\n render() { const mode = this.mode || (isMobileDevice() ? 'CARD' : 'GRID')\n\n return html`\n <ox-grist class=\"page-fill\" .mode=${mode} .config=${this.gristConfig} .fetchHandler=${this.fetchHandler.bind(this)}>\n <div slot=\"headroom\" class=\"header\">\n <div class=\"filters\">\n <!-- 쒁은 ν™”λ©΄μ—μ„œλŠ” 상단 λ°”κ°€ 검색을 κ°–λŠ”λ‹€(μœ„ context 주석 μ°Έμ‘°). -->\n <ox-filters-form class=\"filter\" without-search></ox-filters-form>\n <ox-input-select-buttons\n .value=${this.filters}\n .options=${[\n importantChip(),\n { display: i18next.t('label.filter-recent'),\n value: 'recent'\n },\n { display: i18next.t('label.filter-aborted'),\n value: 'aborted'\n }\n ]}\n @change=${(e: CustomEvent) => { this.filters = (e.currentTarget as any)?.value\n this.grist.fetch()\n }}\n ></ox-input-select-buttons>\n <!-- <ox-filters-form class=\"filter\" autofocus without-search></ox-filters-form> -->\n </div>\n\n </div>\n </ox-grist>\n `\n }\n\n async pageInitialized(lifecycle) { this.gristConfig = { list: { thumbnail: 'thumbnail',\n fields: ['name', 'description'],\n details: ['createdAt', 'due']\n },\n columns: [\n { type: 'gutter', gutterName: 'sequence', fixed: true },\n { type: 'string',\n name: 'name',\n fixed: true,\n header: i18next.t('field.wl-subject'),\n record: {\n editable: false,\n renderer: subjectCell()\n },\n filter: 'search',\n sortable: true,\n width: 225\n },\n {\n /*\n * μ„€λͺ…은 제λͺ© μΉΈ μ•ˆμ—μ„œ 두 μ€„λ‘œ 보인닀(activity-cells 의 subjectCell). κ·Έλž˜μ„œ λ”°λ‘œ 보일 칸이\n * ν•„μš”ν•˜μ§€ μ•Šλ‹€.\n *\n * 그런데 **칸을 μ—†μ• λ©΄ μ„€λͺ…μœΌλ‘œ κ²€μƒ‰ν•˜λŠ” κΈ°λŠ₯이 ν•¨κ»˜ 사라진닀.** searchText λŠ”\n * filter: 'search' λ₯Ό μ„ μ–Έν•œ μ»¬λŸΌλ§ˆλ‹€ ν•„ν„°λ₯Ό λ§Œλ“€κ³  hidden 은 보지 μ•ŠλŠ”λ‹€\n * (data-grist.ts 의 set searchText). μ‹€μΈ‘μœΌλ‘œ ν™•μΈν–ˆλ‹€ β€” μ»¬λŸΌμ„ μ—†μ•€ λ’€ μ„€λͺ…μ—λ§Œ μžˆλŠ”\n * λ‚±λ§λ‘œ κ²€μƒ‰ν•˜λ©΄ 0κ±΄μ΄μ—ˆλ‹€.\n *\n * κ·Έλž˜μ„œ 감좘 칸으둜 남겨 κ²€μƒ‰λ§Œ 남긴닀.\n */\n type: 'string',\n name: 'description',\n header: i18next.t('field.description'),\n record: { editable: false },\n filter: 'search',\n hidden: true\n },\n { type: 'resource-object',\n name: 'creator',\n header: i18next.t('field.wl-drafter'),\n record: { editable: false\n },\n sortable: true,\n width: 85\n },\n /*\n * κΈ°ν•œ β€” μ—¬κΈ°μ„œλŠ” **λ‹€λ₯Έ λ‚ μ§œ μ—΄κ³Ό 같이** μ‹œκ°λ§Œ μ λŠ”λ‹€.\n *\n * ν•  일 Β· λ‚΄ κ²°μž¬ν•¨μ€ dueCell 을 μ“΄λ‹€. κ·Έ 셀은 Date.now() λ₯Ό κΈ°μ€€μœΌλ‘œ γ€Œ4일 13μ‹œκ°„ 지남」을\n * λ‚΄κ³  1λΆ„λ§ˆλ‹€ λ‹€μ‹œ μ„Όλ‹€. 아직 μ•ˆ λλ‚œ μΌμ—λŠ” 그게 λ¬ΌμŒμ΄λ‹€ β€” μ§€κΈˆλΆ€ν„° μ–Όλ§ˆ λ‚¨μ•˜λ‚˜.\n *\n * λλ‚œ μΌμ—λŠ” κ·Έ 물음이 μ—†κ³ , κ·ΈλŒ€λ‘œ 두면 **거짓을 λ§ν•œλ‹€.** κΈ°ν•œ μ•ˆμ— 끝낸 건도 였늘 λ‚ μ§œκ°€\n * 흐λ₯΄λ©΄ λΉ¨κ°„ γ€ŒN일 μ§€λ‚¨γ€μœΌλ‘œ 바뀐닀. λλ‚œ 일 λͺ©λ‘μ—μ„œ 타이머가 λ„λŠ” 것도 μ…ˆλ§Œ ν•˜λŠ” 일이닀.\n *\n * 이 μ€„μ—λŠ” λ‚ μ§œκ°€ 넷이닀(κΈ°ν•œ Β· μ‹œμž‘ Β· μ™„λ£Œ Β· 상신일). 그쀑 ν•˜λ‚˜λ§Œ λΉ¨κ°›κ²Œ μ†Œλ¦¬μΉ˜κ³  슀슀둜\n * κ°±μ‹ ν•˜λ˜ 것이 μ–΄κΈ‹λ‚¨μ΄μ—ˆκ³ , κ°’ μžμ²΄λŠ” 남을 μžλ¦¬κ°€ μžˆλ‹€.\n *\n * γ€ŒκΈ°ν•œμ„ μ§€μΌ°λ‚˜γ€λŠ” μ€„λ§ˆλ‹€κ°€ μ•„λ‹ˆλΌ λͺ¨μ•„μ„œ λ³΄λŠ” λ¬ΌμŒμ΄λ‹€ β€” activity-stats 의 μžλ¦¬λ‹€.\n *\n * No renderer either. A custom one (recordedDueCell) stood here first, and its\n * toLocaleString call carried no hour12 option, so grist's datetime columns (hour12: false)\n * and this one printed the same row two ways β€” κΈ°ν•œ as γ€Œμ˜€ν›„ 3:04」 beside μ‹œμž‘ Β· μ™„λ£Œ Β·\n * 상신일 as γ€Œ15:04」. Written as \"like the other date columns\" and drawn unlike them. With\n * no reason to draw this column specially, the shared renderer is the one that decides.\n */\n { type: 'datetime',\n name: 'dueAt',\n header: i18next.t('field.wl-due'),\n record: { editable: false\n },\n sortable: true,\n width: 180\n },\n { type: 'number',\n name: 'priority',\n header: i18next.t('field.wl-priority'),\n record: {\n editable: false,\n align: 'center',\n renderer: priorityCell()\n },\n width: 75\n },\n { type: 'select',\n name: 'state',\n header: i18next.t('field.wl-state'),\n record: { editable: false,\n options: [\n { display: i18next.t('label.activity-state-draft'), value: 'draft' },\n { display: i18next.t('label.activity-state-posted'), value: 'posted' },\n { display: i18next.t('label.activity-state-unassigned'), value: 'unassigned' },\n { display: i18next.t('label.activity-state-assigned'), value: 'assigned' },\n { display: i18next.t('label.activity-state-started'), value: 'started' },\n { display: i18next.t('label.activity-state-pending'), value: 'pending' },\n { display: i18next.t('label.activity-state-escalated'), value: 'escalated' },\n { display: i18next.t('label.activity-state-ended'), value: 'ended' },\n { display: i18next.t('label.activity-state-aborted'), value: 'aborted' }\n ]\n },\n width: 80\n },\n { type: 'datetime',\n name: 'startedAt',\n header: i18next.t('field.wl-started-at'),\n record: { editable: false\n },\n sortable: true,\n width: 180\n },\n { type: 'datetime',\n name: 'terminatedAt',\n header: i18next.t('field.wl-terminated-at'),\n record: { editable: false\n },\n sortable: true,\n width: 180\n },\n { type: 'datetime',\n name: 'createdAt',\n header: i18next.t('field.wl-submitted-at'),\n record: { editable: false\n },\n sortable: true,\n filter: false,\n width: 180\n },\n { type: 'string',\n name: 'viewSource',\n header: i18next.t('field.wl-view-source'),\n record: { editable: false,\n renderer: function (value, column, record, rowIndex, field) { const { viewType, viewSource } = record.activity || {}\n var type = viewType !== 'board' ? 'string' : 'board'\n return getRenderer(type)(viewSource, column, record, rowIndex, field)\n }\n },\n width: 140,\n hidden: true\n },\n { type: 'image',\n name: 'thumbnail',\n header: i18next.t('field.thumbnail'),\n record: { editable: false },\n hidden: true\n }\n ],\n rows: { appendable: false,\n editable: false,\n handlers: { click: (columns, data, column, record, rowIndex) => { this.openActivityThreadViewPage(record)\n }\n }\n },\n sorters: [\n { name: 'terminatedAt',\n desc: true\n }\n ]\n }\n }\n\n async pageUpdated(changes, lifecycle, changedBefore) { if (this.active) { this.grist?.fetch()\n }\n }\n\n async fetchHandler({ page, limit, sortings = [], filters = [] }: FetchOption) { if (this.filters?.includes('important')) { filters = adjustFilters(filters, importantFilters())\n }\n\n if (this.filters?.includes('recent')) { /* 졜근 24μ‹œκ°„ 이내에 μ™„λ£Œν•œ μž‘μ—… */\n const since = new Date(Date.now() - 24 * 3600 * 1000).toISOString().replace('T', ' ')\n filters = adjustFilters(filters, [{ name: 'terminatedAt', operator: 'gte', value: since }])\n }\n\n if (this.filters?.includes('aborted')) { filters = adjustFilters(filters, [{ name: 'state', operator: 'eq', value: ActivityThreadStatus.Aborted }])\n }\n\n const response = await client.query({ query: gql`\n query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) { responses: doneList(filters: $filters, pagination: $pagination, sortings: $sortings) { items { id\n activityInstance { activityId: id\n name\n description\n priority\n input\n refBy\n activityType\n viewType\n viewSource\n thumbnail\n createdAt\n startedAt\n terminatedAt\n updatedAt\n createdAt\n creator { id\n name\n }\n }\n state\n output\n dueAt\n assignedAt\n startedAt\n terminatedAt\n }\n total\n }\n }\n `,\n variables: { filters,\n pagination: { page, limit },\n sortings\n }\n })\n\n return { total: response.data.responses.total || 0,\n records: (response.data.responses.items || []).map(item => { return { ...item.activityInstance,\n id: item.id,\n state: item.state,\n output: item.output,\n dueAt: item.dueAt,\n assignedAt: item.assignedAt,\n startedAt: item.startedAt,\n terminatedAt: item.terminatedAt\n }\n })\n }\n }\n\n openActivityThreadViewPage(activityThread) { navigate(`activity-thread-view/${activityThread.id}?title=${activityThread.name}`)\n }\n}\n"]}
1
+ {"version":3,"file":"done-list-page.js","sourceRoot":"","sources":["../../../client/pages/todo/done-list-page.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/data-grist'\nimport '@operato/data-grist/ox-filters-form.js'\nimport '@operato/input/ox-input-select-buttons.js'\n\nimport gql from 'graphql-tag'\nimport { css, html } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { DataGrist, FetchOption, getRenderer } from '@operato/data-grist'\nimport { client } from '@operato/graphql'\nimport { importantChip, importantFilters } from '../../chip-filters.js'\nimport { i18next, localize } from '@operato/i18n'\nimport { navigate, PageView } from '@operato/shell'\nimport { listWithThumbnail } from './list-thumbnail.js'\nimport { CommonHeaderStyles, ScrollbarStyles, WorkSurfacePageStyles } from '@operato/styles'\nimport { adjustFilters, isMobileDevice } from '@operato/utils'\n\nimport { ActivityThreadStatus } from '../../types/activity-thread.js'\n\nimport { priorityCell, subjectCell } from '../../activity-cells.js'\n\n@customElement('done-list-page')\nexport class DoneListPage extends localize(i18next)(PageView) { static styles = [\n /* The work surface frame for a list screen (ADR-0060 decision 8). */\n WorkSurfacePageStyles,\n ScrollbarStyles,\n CommonHeaderStyles,\n css`\n :host {\n --grid-record-emphasized-background-color: #8b0000;\n --grid-record-emphasized-color: #ff6b6b;\n }\n\n .header { grid-template-areas: 'filters actions';\n }\n\n /*\n * ── ν—€λ“œλ£Έμ˜ μ™Όμͺ½ 기쀀선은 ν‘œμ™€ κ°™λ‹€ ─────────────────────────────────\n * CommonHeaderStyles 의 .filters λŠ” λ°°κ²½κ³Ό λͺ¨μ„œλ¦¬μ™€ 여백을 κ°€μ§„ μ˜μ—­μ΄λ‹€. κ·Έ 배경이\n * --md-sys-color-surface 인데 이 μ œν’ˆμ—μ„œλŠ” 바탕색과 같은 값이라, **보이지 μ•ŠλŠ” μ˜μ—­μ΄\n * 자리만 μ°¨μ§€ν•˜κ³ ** 검색창을 μ—¬λ°±λ§ŒνΌ(12px) μ•ˆμͺ½μœΌλ‘œ λ°€μ—ˆλ‹€.\n *\n * μ‹€μΈ‘: ν‘œ μ™Όμͺ½ 끝 212 Β· ν•„ν„° μ˜μ—­ 212 Β· 검색창 224. ν™”λ©΄μ˜ μ™Όμͺ½ 기쀀선이 λ‘˜μ΄ 됐닀.\n *\n * κ·Έ κ·œμΉ™λ“€μ€ .header μ•ˆμ— μ€‘μ²©λ˜μ–΄ μžˆμ–΄(.header .filters) 밑쀄 μ—†λŠ” .filters λ‘œλŠ” 이길 수\n * μ—†λ‹€ β€” νŠΉμ •λ„κ°€ 0,1,0 λŒ€ 0,2,0 이닀.\n */\n .header .filters {\n padding: 0;\n background: none;\n border-radius: 0;\n gap: 12px;\n }\n\n `\n ]\n\n @property({ type: Object }) gristConfig?: any\n @property({ type: String }) mode: 'GRID' | 'LIST' | 'CARD' = isMobileDevice() ? 'CARD' : 'GRID'\n\n @query('ox-grist') grist!: DataGrist\n\n @state() filters?: string[]\n\n get context() { return { title: i18next.t('title.done list'),\n /*\n * κ²€μƒ‰μ˜ μžλ¦¬λŠ” **κΈ°κΈ°κ°€ μ •ν•œλ‹€.**\n *\n * PC μ—μ„œλŠ” ν™”λ©΄ μ•ˆμœΌλ‘œ λ‚΄λ¦°λ‹€. 상단 바에 두면 κ±°λ₯Έ 쑰건과 κ±ΈλŸ¬μ§„ κ²°κ³Όκ°€ ν™”λ©΄μ˜ μœ„μ•„λž˜ 끝으둜\n * κ°ˆλΌμ§€κ³ , μ§€κΈˆ λ¬΄μ—‡μœΌλ‘œ κ±Έλ €λŠ”μ§€κ°€ λͺ©λ‘ μ˜†μ—μ„œ 보이지 μ•ŠλŠ”λ‹€.\n *\n * 쒁은 ν™”λ©΄μ—μ„œλŠ” 상단 바에 κ·ΈλŒ€λ‘œ λ‘”λ‹€. ν—€λ“œλ£Έμ— 두면 검색창과 ν•„ν„°κ°€ λͺ©λ‘μ„ 그만큼 λ°€μ–΄\n * 내리고, μΉ΄λ“œ 두 μž₯이 ν™”λ©΄ λ°–μœΌλ‘œ λ‚˜κ°„λ‹€. 상단 λ°”λŠ” κ·Έ 자리λ₯Ό 아끼렀고 μžˆλŠ” 것이닀.\n *\n * 이 μ €μž₯μ†Œμ—λŠ” 두 방식이 λ‹€ μžˆλ‹€ β€” ν—€λ“œλ£Έ 50κ³³, 상단 λ°” 51κ³³. μ •ν˜•μΈ 것은 ꡬ쑰\n * (.header / .filters / .filter)이고 κ²€μƒ‰μ˜ μžλ¦¬λŠ” 화면이 μ •ν•œλ‹€.\n */\n /*\n * 검색은 **νŽ˜μ΄μ§€ 제λͺ© μ€„μ˜ 였λ₯Έμͺ½ 끝**에 λ‘”λ‹€ β€” λ‹€λ₯Έ ν™”λ©΄λ“€κ³Ό 같은 μžλ¦¬λ‹€.\n *\n * μ „μ—λŠ” 쒁은 ν™”λ©΄μ—μ„œλ§Œ 여기에 λ„£κ³ , 넓은 ν™”λ©΄μ—μ„œλŠ” ν—€λ“œλ£Έμ˜ ox-filters-form 이 검색을\n * κ·Έλ Έλ‹€. κ·Έλž˜μ„œ 같은 μ•± μ•ˆμ—μ„œ 검색 μƒμžμ˜ μžλ¦¬κ°€ ν™”λ©΄λ§ˆλ‹€ λ‹¬λžλ‹€.\n *\n * ν—€λ“œλ£Έμ—λŠ” μ’νžˆλŠ” 칩만 λ‚¨λŠ”λ‹€. 폼은 without-search 둜 남겨 두어, λ‚˜μ€‘μ— μ–΄λŠ 칸에\n * filter λ₯Ό 달면 κ·Έ UI κ°€ μ €μ ˆλ‘œ 생긴닀(λΉ„λ©΄ 아무것도 그리지 μ•ŠλŠ”λ‹€).\n */\n search: {\n handler: (search: string) => {\n this.grist.searchText = search\n },\n value: this.grist?.searchText || ''\n },\n filter: { handler: () => { this.grist.toggleHeadroom()\n }\n },\n help: 'worklist/done-list-page',\n actions: []\n }\n }\n\n render() { const mode = this.mode || (isMobileDevice() ? 'CARD' : 'GRID')\n\n return html`\n <ox-grist class=\"page-fill\" .mode=${mode} .config=${this.gristConfig} .fetchHandler=${this.fetchHandler.bind(this)}>\n <div slot=\"headroom\" class=\"header\">\n <div class=\"filters\">\n <!-- 쒁은 ν™”λ©΄μ—μ„œλŠ” 상단 λ°”κ°€ 검색을 κ°–λŠ”λ‹€(μœ„ context 주석 μ°Έμ‘°). -->\n <ox-filters-form class=\"filter\" without-search></ox-filters-form>\n <ox-input-select-buttons\n .value=${this.filters}\n .options=${[\n importantChip(),\n { display: i18next.t('label.filter-recent'),\n value: 'recent'\n },\n { display: i18next.t('label.filter-aborted'),\n value: 'aborted'\n }\n ]}\n @change=${(e: CustomEvent) => { this.filters = (e.currentTarget as any)?.value\n this.grist.fetch()\n }}\n ></ox-input-select-buttons>\n <!-- <ox-filters-form class=\"filter\" autofocus without-search></ox-filters-form> -->\n </div>\n\n </div>\n </ox-grist>\n `\n }\n\n async pageInitialized(lifecycle) { this.gristConfig = { list: { thumbnail: 'thumbnail',\n fields: ['name', 'description'],\n details: ['createdAt', 'due']\n },\n columns: [\n { type: 'gutter', gutterName: 'sequence', fixed: true },\n { type: 'string',\n name: 'name',\n fixed: true,\n header: i18next.t('field.wl-subject'),\n record: {\n editable: false,\n renderer: subjectCell()\n },\n filter: 'search',\n sortable: true,\n width: 225\n },\n {\n /*\n * μ„€λͺ…은 제λͺ© μΉΈ μ•ˆμ—μ„œ 두 μ€„λ‘œ 보인닀(activity-cells 의 subjectCell). κ·Έλž˜μ„œ λ”°λ‘œ 보일 칸이\n * ν•„μš”ν•˜μ§€ μ•Šλ‹€.\n *\n * 그런데 **칸을 μ—†μ• λ©΄ μ„€λͺ…μœΌλ‘œ κ²€μƒ‰ν•˜λŠ” κΈ°λŠ₯이 ν•¨κ»˜ 사라진닀.** searchText λŠ”\n * filter: 'search' λ₯Ό μ„ μ–Έν•œ μ»¬λŸΌλ§ˆλ‹€ ν•„ν„°λ₯Ό λ§Œλ“€κ³  hidden 은 보지 μ•ŠλŠ”λ‹€\n * (data-grist.ts 의 set searchText). μ‹€μΈ‘μœΌλ‘œ ν™•μΈν–ˆλ‹€ β€” μ»¬λŸΌμ„ μ—†μ•€ λ’€ μ„€λͺ…μ—λ§Œ μžˆλŠ”\n * λ‚±λ§λ‘œ κ²€μƒ‰ν•˜λ©΄ 0κ±΄μ΄μ—ˆλ‹€.\n *\n * κ·Έλž˜μ„œ 감좘 칸으둜 남겨 κ²€μƒ‰λ§Œ 남긴닀.\n */\n type: 'string',\n name: 'description',\n header: i18next.t('field.description'),\n record: { editable: false },\n filter: 'search',\n hidden: true\n },\n { type: 'resource-object',\n name: 'creator',\n header: i18next.t('field.wl-drafter'),\n record: { editable: false\n },\n sortable: true,\n width: 85\n },\n /*\n * κΈ°ν•œ β€” μ—¬κΈ°μ„œλŠ” **λ‹€λ₯Έ λ‚ μ§œ μ—΄κ³Ό 같이** μ‹œκ°λ§Œ μ λŠ”λ‹€.\n *\n * ν•  일 Β· λ‚΄ κ²°μž¬ν•¨μ€ dueCell 을 μ“΄λ‹€. κ·Έ 셀은 Date.now() λ₯Ό κΈ°μ€€μœΌλ‘œ γ€Œ4일 13μ‹œκ°„ 지남」을\n * λ‚΄κ³  1λΆ„λ§ˆλ‹€ λ‹€μ‹œ μ„Όλ‹€. 아직 μ•ˆ λλ‚œ μΌμ—λŠ” 그게 λ¬ΌμŒμ΄λ‹€ β€” μ§€κΈˆλΆ€ν„° μ–Όλ§ˆ λ‚¨μ•˜λ‚˜.\n *\n * λλ‚œ μΌμ—λŠ” κ·Έ 물음이 μ—†κ³ , κ·ΈλŒ€λ‘œ 두면 **거짓을 λ§ν•œλ‹€.** κΈ°ν•œ μ•ˆμ— 끝낸 건도 였늘 λ‚ μ§œκ°€\n * 흐λ₯΄λ©΄ λΉ¨κ°„ γ€ŒN일 μ§€λ‚¨γ€μœΌλ‘œ 바뀐닀. λλ‚œ 일 λͺ©λ‘μ—μ„œ 타이머가 λ„λŠ” 것도 μ…ˆλ§Œ ν•˜λŠ” 일이닀.\n *\n * 이 μ€„μ—λŠ” λ‚ μ§œκ°€ 넷이닀(κΈ°ν•œ Β· μ‹œμž‘ Β· μ™„λ£Œ Β· 상신일). 그쀑 ν•˜λ‚˜λ§Œ λΉ¨κ°›κ²Œ μ†Œλ¦¬μΉ˜κ³  슀슀둜\n * κ°±μ‹ ν•˜λ˜ 것이 μ–΄κΈ‹λ‚¨μ΄μ—ˆκ³ , κ°’ μžμ²΄λŠ” 남을 μžλ¦¬κ°€ μžˆλ‹€.\n *\n * γ€ŒκΈ°ν•œμ„ μ§€μΌ°λ‚˜γ€λŠ” μ€„λ§ˆλ‹€κ°€ μ•„λ‹ˆλΌ λͺ¨μ•„μ„œ λ³΄λŠ” λ¬ΌμŒμ΄λ‹€ β€” activity-stats 의 μžλ¦¬λ‹€.\n *\n * No renderer either. A custom one (recordedDueCell) stood here first, and its\n * toLocaleString call carried no hour12 option, so grist's datetime columns (hour12: false)\n * and this one printed the same row two ways β€” κΈ°ν•œ as γ€Œμ˜€ν›„ 3:04」 beside μ‹œμž‘ Β· μ™„λ£Œ Β·\n * 상신일 as γ€Œ15:04」. Written as \"like the other date columns\" and drawn unlike them. With\n * no reason to draw this column specially, the shared renderer is the one that decides.\n */\n { type: 'datetime',\n name: 'dueAt',\n header: i18next.t('field.wl-due'),\n record: { editable: false\n },\n sortable: true,\n width: 180\n },\n { type: 'number',\n name: 'priority',\n header: i18next.t('field.wl-priority'),\n record: {\n editable: false,\n align: 'center',\n renderer: priorityCell()\n },\n width: 75\n },\n { type: 'select',\n name: 'state',\n header: i18next.t('field.wl-state'),\n record: { editable: false,\n options: [\n { display: i18next.t('label.activity-state-draft'), value: 'draft' },\n { display: i18next.t('label.activity-state-posted'), value: 'posted' },\n { display: i18next.t('label.activity-state-unassigned'), value: 'unassigned' },\n { display: i18next.t('label.activity-state-assigned'), value: 'assigned' },\n { display: i18next.t('label.activity-state-started'), value: 'started' },\n { display: i18next.t('label.activity-state-pending'), value: 'pending' },\n { display: i18next.t('label.activity-state-escalated'), value: 'escalated' },\n { display: i18next.t('label.activity-state-ended'), value: 'ended' },\n { display: i18next.t('label.activity-state-aborted'), value: 'aborted' }\n ]\n },\n width: 80\n },\n { type: 'datetime',\n name: 'startedAt',\n header: i18next.t('field.wl-started-at'),\n record: { editable: false\n },\n sortable: true,\n width: 180\n },\n { type: 'datetime',\n name: 'terminatedAt',\n header: i18next.t('field.wl-terminated-at'),\n record: { editable: false\n },\n sortable: true,\n width: 180\n },\n { type: 'datetime',\n name: 'createdAt',\n header: i18next.t('field.wl-submitted-at'),\n record: { editable: false\n },\n sortable: true,\n filter: false,\n width: 180\n },\n { type: 'string',\n name: 'viewSource',\n header: i18next.t('field.wl-view-source'),\n record: { editable: false,\n renderer: function (value, column, record, rowIndex, field) { const { viewType, viewSource } = record.activity || {}\n var type = viewType !== 'board' ? 'string' : 'board'\n return getRenderer(type)(viewSource, column, record, rowIndex, field)\n }\n },\n width: 140,\n hidden: true\n },\n { type: 'image',\n name: 'thumbnail',\n header: i18next.t('field.thumbnail'),\n record: { editable: false },\n hidden: true\n }\n ],\n rows: { appendable: false,\n editable: false,\n handlers: { click: (columns, data, column, record, rowIndex) => { this.openActivityThreadViewPage(record)\n }\n }\n },\n sorters: [\n { name: 'terminatedAt',\n desc: true\n }\n ]\n }\n }\n\n async pageUpdated(changes, lifecycle, changedBefore) { if (this.active) { this.grist?.fetch()\n }\n }\n\n /* 읽은 것에 그림이 ν•˜λ‚˜λ„ μ—†μœΌλ©΄ μΉ΄λ“œλ§ˆλ‹€ 빈 κ·Έλ¦Ό 칸을 μ„Έμš°μ§€ μ•ŠλŠ”λ‹€(Β§ list-thumbnail.ts). */\n async fetchHandler(options: FetchOption) {\n const fetched = await this.fetchRows(options)\n\n this.gristConfig = listWithThumbnail(this.gristConfig, fetched?.records || [])\n\n return fetched\n }\n\n async fetchRows({ page, limit, sortings = [], filters = [] }: FetchOption) { if (this.filters?.includes('important')) { filters = adjustFilters(filters, importantFilters())\n }\n\n if (this.filters?.includes('recent')) { /* 졜근 24μ‹œκ°„ 이내에 μ™„λ£Œν•œ μž‘μ—… */\n const since = new Date(Date.now() - 24 * 3600 * 1000).toISOString().replace('T', ' ')\n filters = adjustFilters(filters, [{ name: 'terminatedAt', operator: 'gte', value: since }])\n }\n\n if (this.filters?.includes('aborted')) { filters = adjustFilters(filters, [{ name: 'state', operator: 'eq', value: ActivityThreadStatus.Aborted }])\n }\n\n const response = await client.query({ query: gql`\n query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) { responses: doneList(filters: $filters, pagination: $pagination, sortings: $sortings) { items { id\n activityInstance { activityId: id\n name\n description\n priority\n input\n refBy\n activityType\n viewType\n viewSource\n thumbnail\n createdAt\n startedAt\n terminatedAt\n updatedAt\n createdAt\n creator { id\n name\n }\n }\n state\n output\n dueAt\n assignedAt\n startedAt\n terminatedAt\n }\n total\n }\n }\n `,\n variables: { filters,\n pagination: { page, limit },\n sortings\n }\n })\n\n return { total: response.data.responses.total || 0,\n records: (response.data.responses.items || []).map(item => { return { ...item.activityInstance,\n id: item.id,\n state: item.state,\n output: item.output,\n dueAt: item.dueAt,\n assignedAt: item.assignedAt,\n startedAt: item.startedAt,\n terminatedAt: item.terminatedAt\n }\n })\n }\n }\n\n openActivityThreadViewPage(activityThread) { navigate(`activity-thread-view/${activityThread.id}?title=${activityThread.name}`)\n }\n}\n"]}
@@ -24,7 +24,11 @@ export declare class DraftListPage extends DraftListPage_base {
24
24
  render(): import("lit-html").TemplateResult<1>;
25
25
  pageInitialized(lifecycle: any): Promise<void>;
26
26
  pageUpdated(changes: any, lifecycle: any, changedBefore: any): Promise<void>;
27
- fetchHandler({ page, limit, sortings, filters }: FetchOption): Promise<{
27
+ fetchHandler(options: FetchOption): Promise<{
28
+ total: any;
29
+ records: any;
30
+ }>;
31
+ fetchRows({ page, limit, sortings, filters }: FetchOption): Promise<{
28
32
  total: any;
29
33
  records: any;
30
34
  }>;
@@ -9,9 +9,11 @@ import { DataGrist } from '@operato/data-grist';
9
9
  import { client } from '@operato/graphql';
10
10
  import { i18next, localize } from '@operato/i18n';
11
11
  import { navigate, PageView } from '@operato/shell';
12
+ import { listWithThumbnail } from './list-thumbnail.js';
12
13
  import { CommonHeaderStyles, ScrollbarStyles, WorkSurfacePageStyles } from '@operato/styles';
13
14
  import { isMobileDevice } from '@operato/utils';
14
15
  import { ActivityStartingTypes } from '../../types/types.js';
16
+ import { ActivityInstanceStatus } from '../../types/activity-instance.js';
15
17
  import { subjectCell } from '../../activity-cells.js';
16
18
  const MIN = 60;
17
19
  const HOUR = 60 * MIN;
@@ -145,17 +147,15 @@ let DraftListPage = class DraftListPage extends localize(i18next)(PageView) {
145
147
  name: 'state',
146
148
  header: i18next.t('field.wl-state'),
147
149
  record: { editable: false,
148
- options: [
149
- { display: i18next.t('label.activity-state-draft'), value: 'draft' },
150
- { display: i18next.t('label.activity-state-posted'), value: 'posted' },
151
- { display: i18next.t('label.activity-state-unassigned'), value: 'unassigned' },
152
- { display: i18next.t('label.activity-state-assigned'), value: 'assigned' },
153
- { display: i18next.t('label.activity-state-started'), value: 'started' },
154
- { display: i18next.t('label.activity-state-pending'), value: 'pending' },
155
- { display: i18next.t('label.activity-state-escalated'), value: 'escalated' },
156
- { display: i18next.t('label.activity-state-ended'), value: 'ended' },
157
- { display: i18next.t('label.activity-state-aborted'), value: 'aborted' }
158
- ]
150
+ /*
151
+ * 이 λͺ©λ‘μ€ **μΈμŠ€ν„΄μŠ€**λ₯Ό 보인닀. κ³ λ₯Ό 수 μžˆλŠ” μƒνƒœλ„ μΈμŠ€ν„΄μŠ€μ˜ 것이어야 ν•œλ‹€ β€” μ „μ—λŠ”
152
+ * μŠ€λ ˆλ“œ μƒνƒœ posted Β· escalated κ°€ μ„žμ—¬ μžˆμ—ˆκ³  issued κ°€ λΉ μ Έ μžˆμ—ˆλ‹€. μ„œλ²„λŠ” μΈμŠ€ν„΄μŠ€μ—
153
+ * μ—†λŠ” 이름을 κ±°μ ˆν•˜λ―€λ‘œ κ·Έ λ‘˜μ„ κ³ λ₯΄λ©΄ 였λ₯˜κ°€ 났닀.
154
+ */
155
+ options: Object.values(ActivityInstanceStatus).map(value => ({
156
+ display: i18next.t(`label.activity-state-${value}`),
157
+ value
158
+ }))
159
159
  },
160
160
  width: 85
161
161
  },
@@ -205,7 +205,13 @@ let DraftListPage = class DraftListPage extends localize(i18next)(PageView) {
205
205
  this.grist?.fetch();
206
206
  }
207
207
  }
208
- async fetchHandler({ page, limit, sortings = [], filters = [] }) {
208
+ /* 읽은 것에 그림이 ν•˜λ‚˜λ„ μ—†μœΌλ©΄ μΉ΄λ“œλ§ˆλ‹€ 빈 κ·Έλ¦Ό 칸을 μ„Έμš°μ§€ μ•ŠλŠ”λ‹€(Β§ list-thumbnail.ts). */
209
+ async fetchHandler(options) {
210
+ const fetched = await this.fetchRows(options);
211
+ this.gristConfig = listWithThumbnail(this.gristConfig, fetched?.records || []);
212
+ return fetched;
213
+ }
214
+ async fetchRows({ page, limit, sortings = [], filters = [] }) {
209
215
  const response = await client.query({ query: gql `
210
216
  query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) { responses: draftList(filters: $filters, pagination: $pagination, sortings: $sortings) { items { id
211
217
  name
@@ -1 +1 @@
1
- {"version":3,"file":"draft-list-page.js","sourceRoot":"","sources":["../../../client/pages/todo/draft-list-page.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/data-grist'\nimport '@operato/data-grist/ox-filters-form.js'\nimport '../../components/activity-starter-form.js'\n\nimport gql from 'graphql-tag'\nimport { css, html } from 'lit'\nimport { customElement, property, query } from 'lit/decorators.js'\nimport { DataGrist, FetchOption } from '@operato/data-grist'\nimport { client } from '@operato/graphql'\nimport { i18next, localize } from '@operato/i18n'\nimport { navigate, PageView } from '@operato/shell'\nimport { CommonHeaderStyles, ScrollbarStyles, WorkSurfacePageStyles } from '@operato/styles'\nimport { isMobileDevice } from '@operato/utils'\nimport { OxPopup } from '@operato/popup'\n\nimport { ActivityStartingTypes } from '../../types/types.js'\n\nimport { subjectCell } from '../../activity-cells.js'\n\nconst MIN = 60\nconst HOUR = 60 * MIN\nconst DAY = 24 * HOUR\n\n@customElement('draft-list-page')\nexport class DraftListPage extends localize(i18next)(PageView) { static styles = [\n /* The work surface frame for a list screen (ADR-0060 decision 8). */\n WorkSurfacePageStyles,\n ScrollbarStyles,\n CommonHeaderStyles,\n css`\n :host {\n --grid-record-emphasized-background-color: #8b0000;\n --grid-record-emphasized-color: #ff6b6b;\n }\n\n .header { grid-template-areas: 'filters actions';\n }\n\n /*\n * ── ν—€λ“œλ£Έμ˜ μ™Όμͺ½ 기쀀선은 ν‘œμ™€ κ°™λ‹€ ─────────────────────────────────\n * CommonHeaderStyles 의 .filters λŠ” λ°°κ²½κ³Ό λͺ¨μ„œλ¦¬μ™€ 여백을 κ°€μ§„ μ˜μ—­μ΄λ‹€. κ·Έ 배경이\n * --md-sys-color-surface 인데 이 μ œν’ˆμ—μ„œλŠ” 바탕색과 같은 값이라, **보이지 μ•ŠλŠ” μ˜μ—­μ΄\n * 자리만 μ°¨μ§€ν•˜κ³ ** 검색창을 μ—¬λ°±λ§ŒνΌ(12px) μ•ˆμͺ½μœΌλ‘œ λ°€μ—ˆλ‹€.\n *\n * μ‹€μΈ‘: ν‘œ μ™Όμͺ½ 끝 212 Β· ν•„ν„° μ˜μ—­ 212 Β· 검색창 224. ν™”λ©΄μ˜ μ™Όμͺ½ 기쀀선이 λ‘˜μ΄ 됐닀.\n *\n * κ·Έ κ·œμΉ™λ“€μ€ .header μ•ˆμ— μ€‘μ²©λ˜μ–΄ μžˆμ–΄(.header .filters) 밑쀄 μ—†λŠ” .filters λ‘œλŠ” 이길 수\n * μ—†λ‹€ β€” νŠΉμ •λ„κ°€ 0,1,0 λŒ€ 0,2,0 이닀.\n */\n .header .filters {\n padding: 0;\n background: none;\n border-radius: 0;\n gap: 12px;\n }\n\n `\n ]\n\n @property({ type: Object }) gristConfig?: any\n @property({ type: String }) mode: 'GRID' | 'LIST' | 'CARD' = isMobileDevice() ? 'CARD' : 'GRID'\n\n @query('ox-grist') grist!: DataGrist\n\n get context() { return { title: i18next.t('title.draft list'),\n /*\n * κ²€μƒ‰μ˜ μžλ¦¬λŠ” **κΈ°κΈ°κ°€ μ •ν•œλ‹€.**\n *\n * PC μ—μ„œλŠ” ν™”λ©΄ μ•ˆμœΌλ‘œ λ‚΄λ¦°λ‹€. 상단 바에 두면 κ±°λ₯Έ 쑰건과 κ±ΈλŸ¬μ§„ κ²°κ³Όκ°€ ν™”λ©΄μ˜ μœ„μ•„λž˜ 끝으둜\n * κ°ˆλΌμ§€κ³ , μ§€κΈˆ λ¬΄μ—‡μœΌλ‘œ κ±Έλ €λŠ”μ§€κ°€ λͺ©λ‘ μ˜†μ—μ„œ 보이지 μ•ŠλŠ”λ‹€.\n *\n * 쒁은 ν™”λ©΄μ—μ„œλŠ” 상단 바에 κ·ΈλŒ€λ‘œ λ‘”λ‹€. ν—€λ“œλ£Έμ— 두면 검색창과 ν•„ν„°κ°€ λͺ©λ‘μ„ 그만큼 λ°€μ–΄\n * 내리고, μΉ΄λ“œ 두 μž₯이 ν™”λ©΄ λ°–μœΌλ‘œ λ‚˜κ°„λ‹€. 상단 λ°”λŠ” κ·Έ 자리λ₯Ό 아끼렀고 μžˆλŠ” 것이닀.\n *\n * 이 μ €μž₯μ†Œμ—λŠ” 두 방식이 λ‹€ μžˆλ‹€ β€” ν—€λ“œλ£Έ 50κ³³, 상단 λ°” 51κ³³. μ •ν˜•μΈ 것은 ꡬ쑰\n * (.header / .filters / .filter)이고 κ²€μƒ‰μ˜ μžλ¦¬λŠ” 화면이 μ •ν•œλ‹€.\n */\n /*\n * 검색은 **νŽ˜μ΄μ§€ 제λͺ© μ€„μ˜ 였λ₯Έμͺ½ 끝**에 λ‘”λ‹€ β€” λ‹€λ₯Έ ν™”λ©΄λ“€κ³Ό 같은 μžλ¦¬λ‹€.\n *\n * μ „μ—λŠ” 쒁은 ν™”λ©΄μ—μ„œλ§Œ 여기에 λ„£κ³ , 넓은 ν™”λ©΄μ—μ„œλŠ” ν—€λ“œλ£Έμ˜ ox-filters-form 이 검색을\n * κ·Έλ Έλ‹€. κ·Έλž˜μ„œ 같은 μ•± μ•ˆμ—μ„œ 검색 μƒμžμ˜ μžλ¦¬κ°€ ν™”λ©΄λ§ˆλ‹€ λ‹¬λžλ‹€.\n *\n * ν—€λ“œλ£Έμ—λŠ” μ’νžˆλŠ” 칩만 λ‚¨λŠ”λ‹€. 폼은 without-search 둜 남겨 두어, λ‚˜μ€‘μ— μ–΄λŠ 칸에\n * filter λ₯Ό 달면 κ·Έ UI κ°€ μ €μ ˆλ‘œ 생긴닀(λΉ„λ©΄ 아무것도 그리지 μ•ŠλŠ”λ‹€).\n */\n search: {\n handler: (search: string) => {\n this.grist.searchText = search\n },\n value: this.grist?.searchText || ''\n },\n filter: { handler: () => { this.grist.toggleHeadroom()\n }\n },\n help: 'worklist/draft-list-page',\n actions: []\n }\n }\n\n render() { const mode = this.mode || (isMobileDevice() ? 'CARD' : 'GRID')\n\n return html`\n <ox-grist class=\"page-fill\" .mode=${mode} .config=${this.gristConfig} .fetchHandler=${this.fetchHandler.bind(this)}>\n <div slot=\"headroom\" class=\"header\">\n <div class=\"filters\">\n <!-- 쒁은 ν™”λ©΄μ—μ„œλŠ” 상단 λ°”κ°€ 검색을 κ°–λŠ”λ‹€(μœ„ context 주석 μ°Έμ‘°). -->\n <ox-filters-form class=\"filter\" without-search></ox-filters-form>\n </div>\n </div>\n </ox-grist>\n `\n }\n\n async pageInitialized(lifecycle) { this.gristConfig = { list: { thumbnail: 'thumbnail',\n fields: ['name', 'description'],\n details: ['createdAt', 'due']\n },\n columns: [\n { type: 'gutter', gutterName: 'sequence' },\n { type: 'string',\n name: 'name',\n header: i18next.t('field.wl-subject'),\n record: {\n editable: false,\n renderer: subjectCell()\n },\n filter: 'search',\n sortable: true,\n width: 375\n },\n {\n /*\n * μ„€λͺ…은 제λͺ© μΉΈ μ•ˆμ—μ„œ 두 μ€„λ‘œ 보인닀(activity-cells 의 subjectCell). κ·Έλž˜μ„œ λ”°λ‘œ 보일 칸이\n * ν•„μš”ν•˜μ§€ μ•Šλ‹€.\n *\n * 그런데 **칸을 μ—†μ• λ©΄ μ„€λͺ…μœΌλ‘œ κ²€μƒ‰ν•˜λŠ” κΈ°λŠ₯이 ν•¨κ»˜ 사라진닀.** searchText λŠ”\n * filter: 'search' λ₯Ό μ„ μ–Έν•œ μ»¬λŸΌλ§ˆλ‹€ ν•„ν„°λ₯Ό λ§Œλ“€κ³  hidden 은 보지 μ•ŠλŠ”λ‹€\n * (data-grist.ts 의 set searchText). μ‹€μΈ‘μœΌλ‘œ ν™•μΈν–ˆλ‹€ β€” μ»¬λŸΌμ„ μ—†μ•€ λ’€ μ„€λͺ…μ—λ§Œ μžˆλŠ”\n * λ‚±λ§λ‘œ κ²€μƒ‰ν•˜λ©΄ 0κ±΄μ΄μ—ˆλ‹€.\n *\n * κ·Έλž˜μ„œ 감좘 칸으둜 남겨 κ²€μƒ‰λ§Œ 남긴닀.\n */\n type: 'string',\n name: 'description',\n header: i18next.t('field.description'),\n record: { editable: false },\n filter: 'search',\n hidden: true\n },\n { type: 'select',\n name: 'state',\n header: i18next.t('field.wl-state'),\n record: { editable: false,\n options: [\n { display: i18next.t('label.activity-state-draft'), value: 'draft' },\n { display: i18next.t('label.activity-state-posted'), value: 'posted' },\n { display: i18next.t('label.activity-state-unassigned'), value: 'unassigned' },\n { display: i18next.t('label.activity-state-assigned'), value: 'assigned' },\n { display: i18next.t('label.activity-state-started'), value: 'started' },\n { display: i18next.t('label.activity-state-pending'), value: 'pending' },\n { display: i18next.t('label.activity-state-escalated'), value: 'escalated' },\n { display: i18next.t('label.activity-state-ended'), value: 'ended' },\n { display: i18next.t('label.activity-state-aborted'), value: 'aborted' }\n ]\n },\n width: 85\n },\n { type: 'select',\n name: 'startingType',\n label: true,\n header: i18next.t('field.wl-starting-type'),\n record: { editable: false,\n options: ActivityStartingTypes\n },\n width: 90\n },\n { type: 'datetime',\n name: 'updatedAt',\n header: i18next.t('field.wl-changed-at'),\n record: { editable: false\n },\n sortable: true,\n width: 180\n },\n { type: 'image',\n name: 'thumbnail',\n header: i18next.t('field.thumbnail'),\n record: { editable: false },\n hidden: true\n }\n ],\n rows: { appendable: false,\n editable: false,\n handlers: { click: (columns, data, column, record, rowIndex) => { if (!record.id) { return\n }\n\n this.openActivityInstanceStart(record)\n }\n }\n },\n sorters: [\n { name: 'updatedAt',\n desc: true\n }\n ]\n }\n }\n\n async pageUpdated(changes, lifecycle, changedBefore) { if (this.active) { this.grist?.fetch()\n }\n }\n\n async fetchHandler({ page, limit, sortings = [], filters = [] }: FetchOption) { const response = await client.query({ query: gql`\n query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) { responses: draftList(filters: $filters, pagination: $pagination, sortings: $sortings) { items { id\n name\n description\n priority\n state\n input\n output\n refBy\n activity { id\n startingType\n }\n activityType\n assignees { type\n value\n assignee { id\n name\n description\n controlNo\n }\n }\n approvalLine { type\n value\n participation\n approver { id\n name\n description\n controlNo\n }\n }\n threadsMin\n threadsMax\n uiType\n uiSource\n dueAt\n thumbnail\n updatedAt\n createdAt\n creator { id\n name\n }\n }\n total\n }\n }\n `,\n variables: { filters,\n pagination: { page, limit },\n sortings\n }\n })\n\n return { total: response.data.responses.total || 0,\n records:\n response.data.responses.items.map(item => { item['startingType'] = item.activity?.startingType\n return item\n }) || []\n }\n }\n\n openActivityInstanceStart(activityInstance) { navigate(`activity-instance-start/${activityInstance.id}?title=${activityInstance.name}`)\n }\n}\n"]}
1
+ {"version":3,"file":"draft-list-page.js","sourceRoot":"","sources":["../../../client/pages/todo/draft-list-page.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/data-grist'\nimport '@operato/data-grist/ox-filters-form.js'\nimport '../../components/activity-starter-form.js'\n\nimport gql from 'graphql-tag'\nimport { css, html } from 'lit'\nimport { customElement, property, query } from 'lit/decorators.js'\nimport { DataGrist, FetchOption } from '@operato/data-grist'\nimport { client } from '@operato/graphql'\nimport { i18next, localize } from '@operato/i18n'\nimport { navigate, PageView } from '@operato/shell'\nimport { listWithThumbnail } from './list-thumbnail.js'\nimport { CommonHeaderStyles, ScrollbarStyles, WorkSurfacePageStyles } from '@operato/styles'\nimport { isMobileDevice } from '@operato/utils'\nimport { OxPopup } from '@operato/popup'\n\nimport { ActivityStartingTypes } from '../../types/types.js'\nimport { ActivityInstanceStatus } from '../../types/activity-instance.js'\n\nimport { subjectCell } from '../../activity-cells.js'\n\nconst MIN = 60\nconst HOUR = 60 * MIN\nconst DAY = 24 * HOUR\n\n@customElement('draft-list-page')\nexport class DraftListPage extends localize(i18next)(PageView) { static styles = [\n /* The work surface frame for a list screen (ADR-0060 decision 8). */\n WorkSurfacePageStyles,\n ScrollbarStyles,\n CommonHeaderStyles,\n css`\n :host {\n --grid-record-emphasized-background-color: #8b0000;\n --grid-record-emphasized-color: #ff6b6b;\n }\n\n .header { grid-template-areas: 'filters actions';\n }\n\n /*\n * ── ν—€λ“œλ£Έμ˜ μ™Όμͺ½ 기쀀선은 ν‘œμ™€ κ°™λ‹€ ─────────────────────────────────\n * CommonHeaderStyles 의 .filters λŠ” λ°°κ²½κ³Ό λͺ¨μ„œλ¦¬μ™€ 여백을 κ°€μ§„ μ˜μ—­μ΄λ‹€. κ·Έ 배경이\n * --md-sys-color-surface 인데 이 μ œν’ˆμ—μ„œλŠ” 바탕색과 같은 값이라, **보이지 μ•ŠλŠ” μ˜μ—­μ΄\n * 자리만 μ°¨μ§€ν•˜κ³ ** 검색창을 μ—¬λ°±λ§ŒνΌ(12px) μ•ˆμͺ½μœΌλ‘œ λ°€μ—ˆλ‹€.\n *\n * μ‹€μΈ‘: ν‘œ μ™Όμͺ½ 끝 212 Β· ν•„ν„° μ˜μ—­ 212 Β· 검색창 224. ν™”λ©΄μ˜ μ™Όμͺ½ 기쀀선이 λ‘˜μ΄ 됐닀.\n *\n * κ·Έ κ·œμΉ™λ“€μ€ .header μ•ˆμ— μ€‘μ²©λ˜μ–΄ μžˆμ–΄(.header .filters) 밑쀄 μ—†λŠ” .filters λ‘œλŠ” 이길 수\n * μ—†λ‹€ β€” νŠΉμ •λ„κ°€ 0,1,0 λŒ€ 0,2,0 이닀.\n */\n .header .filters {\n padding: 0;\n background: none;\n border-radius: 0;\n gap: 12px;\n }\n\n `\n ]\n\n @property({ type: Object }) gristConfig?: any\n @property({ type: String }) mode: 'GRID' | 'LIST' | 'CARD' = isMobileDevice() ? 'CARD' : 'GRID'\n\n @query('ox-grist') grist!: DataGrist\n\n get context() { return { title: i18next.t('title.draft list'),\n /*\n * κ²€μƒ‰μ˜ μžλ¦¬λŠ” **κΈ°κΈ°κ°€ μ •ν•œλ‹€.**\n *\n * PC μ—μ„œλŠ” ν™”λ©΄ μ•ˆμœΌλ‘œ λ‚΄λ¦°λ‹€. 상단 바에 두면 κ±°λ₯Έ 쑰건과 κ±ΈλŸ¬μ§„ κ²°κ³Όκ°€ ν™”λ©΄μ˜ μœ„μ•„λž˜ 끝으둜\n * κ°ˆλΌμ§€κ³ , μ§€κΈˆ λ¬΄μ—‡μœΌλ‘œ κ±Έλ €λŠ”μ§€κ°€ λͺ©λ‘ μ˜†μ—μ„œ 보이지 μ•ŠλŠ”λ‹€.\n *\n * 쒁은 ν™”λ©΄μ—μ„œλŠ” 상단 바에 κ·ΈλŒ€λ‘œ λ‘”λ‹€. ν—€λ“œλ£Έμ— 두면 검색창과 ν•„ν„°κ°€ λͺ©λ‘μ„ 그만큼 λ°€μ–΄\n * 내리고, μΉ΄λ“œ 두 μž₯이 ν™”λ©΄ λ°–μœΌλ‘œ λ‚˜κ°„λ‹€. 상단 λ°”λŠ” κ·Έ 자리λ₯Ό 아끼렀고 μžˆλŠ” 것이닀.\n *\n * 이 μ €μž₯μ†Œμ—λŠ” 두 방식이 λ‹€ μžˆλ‹€ β€” ν—€λ“œλ£Έ 50κ³³, 상단 λ°” 51κ³³. μ •ν˜•μΈ 것은 ꡬ쑰\n * (.header / .filters / .filter)이고 κ²€μƒ‰μ˜ μžλ¦¬λŠ” 화면이 μ •ν•œλ‹€.\n */\n /*\n * 검색은 **νŽ˜μ΄μ§€ 제λͺ© μ€„μ˜ 였λ₯Έμͺ½ 끝**에 λ‘”λ‹€ β€” λ‹€λ₯Έ ν™”λ©΄λ“€κ³Ό 같은 μžλ¦¬λ‹€.\n *\n * μ „μ—λŠ” 쒁은 ν™”λ©΄μ—μ„œλ§Œ 여기에 λ„£κ³ , 넓은 ν™”λ©΄μ—μ„œλŠ” ν—€λ“œλ£Έμ˜ ox-filters-form 이 검색을\n * κ·Έλ Έλ‹€. κ·Έλž˜μ„œ 같은 μ•± μ•ˆμ—μ„œ 검색 μƒμžμ˜ μžλ¦¬κ°€ ν™”λ©΄λ§ˆλ‹€ λ‹¬λžλ‹€.\n *\n * ν—€λ“œλ£Έμ—λŠ” μ’νžˆλŠ” 칩만 λ‚¨λŠ”λ‹€. 폼은 without-search 둜 남겨 두어, λ‚˜μ€‘μ— μ–΄λŠ 칸에\n * filter λ₯Ό 달면 κ·Έ UI κ°€ μ €μ ˆλ‘œ 생긴닀(λΉ„λ©΄ 아무것도 그리지 μ•ŠλŠ”λ‹€).\n */\n search: {\n handler: (search: string) => {\n this.grist.searchText = search\n },\n value: this.grist?.searchText || ''\n },\n filter: { handler: () => { this.grist.toggleHeadroom()\n }\n },\n help: 'worklist/draft-list-page',\n actions: []\n }\n }\n\n render() { const mode = this.mode || (isMobileDevice() ? 'CARD' : 'GRID')\n\n return html`\n <ox-grist class=\"page-fill\" .mode=${mode} .config=${this.gristConfig} .fetchHandler=${this.fetchHandler.bind(this)}>\n <div slot=\"headroom\" class=\"header\">\n <div class=\"filters\">\n <!-- 쒁은 ν™”λ©΄μ—μ„œλŠ” 상단 λ°”κ°€ 검색을 κ°–λŠ”λ‹€(μœ„ context 주석 μ°Έμ‘°). -->\n <ox-filters-form class=\"filter\" without-search></ox-filters-form>\n </div>\n </div>\n </ox-grist>\n `\n }\n\n async pageInitialized(lifecycle) { this.gristConfig = { list: { thumbnail: 'thumbnail',\n fields: ['name', 'description'],\n details: ['createdAt', 'due']\n },\n columns: [\n { type: 'gutter', gutterName: 'sequence' },\n { type: 'string',\n name: 'name',\n header: i18next.t('field.wl-subject'),\n record: {\n editable: false,\n renderer: subjectCell()\n },\n filter: 'search',\n sortable: true,\n width: 375\n },\n {\n /*\n * μ„€λͺ…은 제λͺ© μΉΈ μ•ˆμ—μ„œ 두 μ€„λ‘œ 보인닀(activity-cells 의 subjectCell). κ·Έλž˜μ„œ λ”°λ‘œ 보일 칸이\n * ν•„μš”ν•˜μ§€ μ•Šλ‹€.\n *\n * 그런데 **칸을 μ—†μ• λ©΄ μ„€λͺ…μœΌλ‘œ κ²€μƒ‰ν•˜λŠ” κΈ°λŠ₯이 ν•¨κ»˜ 사라진닀.** searchText λŠ”\n * filter: 'search' λ₯Ό μ„ μ–Έν•œ μ»¬λŸΌλ§ˆλ‹€ ν•„ν„°λ₯Ό λ§Œλ“€κ³  hidden 은 보지 μ•ŠλŠ”λ‹€\n * (data-grist.ts 의 set searchText). μ‹€μΈ‘μœΌλ‘œ ν™•μΈν–ˆλ‹€ β€” μ»¬λŸΌμ„ μ—†μ•€ λ’€ μ„€λͺ…μ—λ§Œ μžˆλŠ”\n * λ‚±λ§λ‘œ κ²€μƒ‰ν•˜λ©΄ 0κ±΄μ΄μ—ˆλ‹€.\n *\n * κ·Έλž˜μ„œ 감좘 칸으둜 남겨 κ²€μƒ‰λ§Œ 남긴닀.\n */\n type: 'string',\n name: 'description',\n header: i18next.t('field.description'),\n record: { editable: false },\n filter: 'search',\n hidden: true\n },\n { type: 'select',\n name: 'state',\n header: i18next.t('field.wl-state'),\n record: { editable: false,\n /*\n * 이 λͺ©λ‘μ€ **μΈμŠ€ν„΄μŠ€**λ₯Ό 보인닀. κ³ λ₯Ό 수 μžˆλŠ” μƒνƒœλ„ μΈμŠ€ν„΄μŠ€μ˜ 것이어야 ν•œλ‹€ β€” μ „μ—λŠ”\n * μŠ€λ ˆλ“œ μƒνƒœ posted Β· escalated κ°€ μ„žμ—¬ μžˆμ—ˆκ³  issued κ°€ λΉ μ Έ μžˆμ—ˆλ‹€. μ„œλ²„λŠ” μΈμŠ€ν„΄μŠ€μ—\n * μ—†λŠ” 이름을 κ±°μ ˆν•˜λ―€λ‘œ κ·Έ λ‘˜μ„ κ³ λ₯΄λ©΄ 였λ₯˜κ°€ 났닀.\n */\n options: Object.values(ActivityInstanceStatus).map(value => ({\n display: i18next.t(`label.activity-state-${value}`),\n value\n }))\n },\n width: 85\n },\n { type: 'select',\n name: 'startingType',\n label: true,\n header: i18next.t('field.wl-starting-type'),\n record: { editable: false,\n options: ActivityStartingTypes\n },\n width: 90\n },\n { type: 'datetime',\n name: 'updatedAt',\n header: i18next.t('field.wl-changed-at'),\n record: { editable: false\n },\n sortable: true,\n width: 180\n },\n { type: 'image',\n name: 'thumbnail',\n header: i18next.t('field.thumbnail'),\n record: { editable: false },\n hidden: true\n }\n ],\n rows: { appendable: false,\n editable: false,\n handlers: { click: (columns, data, column, record, rowIndex) => { if (!record.id) { return\n }\n\n this.openActivityInstanceStart(record)\n }\n }\n },\n sorters: [\n { name: 'updatedAt',\n desc: true\n }\n ]\n }\n }\n\n async pageUpdated(changes, lifecycle, changedBefore) { if (this.active) { this.grist?.fetch()\n }\n }\n\n /* 읽은 것에 그림이 ν•˜λ‚˜λ„ μ—†μœΌλ©΄ μΉ΄λ“œλ§ˆλ‹€ 빈 κ·Έλ¦Ό 칸을 μ„Έμš°μ§€ μ•ŠλŠ”λ‹€(Β§ list-thumbnail.ts). */\n async fetchHandler(options: FetchOption) {\n const fetched = await this.fetchRows(options)\n\n this.gristConfig = listWithThumbnail(this.gristConfig, fetched?.records || [])\n\n return fetched\n }\n\n async fetchRows({ page, limit, sortings = [], filters = [] }: FetchOption) { const response = await client.query({ query: gql`\n query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) { responses: draftList(filters: $filters, pagination: $pagination, sortings: $sortings) { items { id\n name\n description\n priority\n state\n input\n output\n refBy\n activity { id\n startingType\n }\n activityType\n assignees { type\n value\n assignee { id\n name\n description\n controlNo\n }\n }\n approvalLine { type\n value\n participation\n approver { id\n name\n description\n controlNo\n }\n }\n threadsMin\n threadsMax\n uiType\n uiSource\n dueAt\n thumbnail\n updatedAt\n createdAt\n creator { id\n name\n }\n }\n total\n }\n }\n `,\n variables: { filters,\n pagination: { page, limit },\n sortings\n }\n })\n\n return { total: response.data.responses.total || 0,\n records:\n response.data.responses.items.map(item => { item['startingType'] = item.activity?.startingType\n return item\n }) || []\n }\n }\n\n openActivityInstanceStart(activityInstance) { navigate(`activity-instance-start/${activityInstance.id}?title=${activityInstance.name}`)\n }\n}\n"]}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Whether a worklist card shows a thumbnail slot - decided by what the list actually read.
3
+ *
4
+ * The thumbnail is the activity definition's picture. Some products give their activities one
5
+ * (dataset, accounting); plant, warehouse and twin give none. The card keeps a slot even when a
6
+ * record has no picture, so that cards in one list line up (data-grist record-card). On a list where
7
+ * no record has a picture, that is an empty 140px block leading every card - in the approver's inbox
8
+ * it pushed what is being approved below the fold on a phone.
9
+ *
10
+ * So the slot is kept when any record on the page has a picture, and dropped when none has.
11
+ */
12
+ type Config = {
13
+ list?: {
14
+ thumbnail?: string;
15
+ } & Record<string, unknown>;
16
+ } & Record<string, unknown>;
17
+ export declare const THUMBNAIL_COLUMN = "thumbnail";
18
+ export declare function anyThumbnail(records: readonly {
19
+ thumbnail?: unknown;
20
+ }[] | undefined): boolean;
21
+ /** The same config object when nothing changes, so the grist is not handed a new config for nothing. */
22
+ export declare function listWithThumbnail<T extends Config | undefined>(config: T, records: readonly {
23
+ thumbnail?: unknown;
24
+ }[]): T;
25
+ export {};
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Whether a worklist card shows a thumbnail slot - decided by what the list actually read.
3
+ *
4
+ * The thumbnail is the activity definition's picture. Some products give their activities one
5
+ * (dataset, accounting); plant, warehouse and twin give none. The card keeps a slot even when a
6
+ * record has no picture, so that cards in one list line up (data-grist record-card). On a list where
7
+ * no record has a picture, that is an empty 140px block leading every card - in the approver's inbox
8
+ * it pushed what is being approved below the fold on a phone.
9
+ *
10
+ * So the slot is kept when any record on the page has a picture, and dropped when none has.
11
+ */
12
+ export const THUMBNAIL_COLUMN = 'thumbnail';
13
+ export function anyThumbnail(records) {
14
+ return (records || []).some(one => typeof one?.thumbnail === 'string' && one.thumbnail !== '');
15
+ }
16
+ /** The same config object when nothing changes, so the grist is not handed a new config for nothing. */
17
+ export function listWithThumbnail(config, records) {
18
+ if (!config?.list)
19
+ return config;
20
+ const wanted = anyThumbnail(records) ? THUMBNAIL_COLUMN : undefined;
21
+ if (config.list.thumbnail === wanted)
22
+ return config;
23
+ return { ...config, list: { ...config.list, thumbnail: wanted } };
24
+ }
25
+ //# sourceMappingURL=list-thumbnail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-thumbnail.js","sourceRoot":"","sources":["../../../client/pages/todo/list-thumbnail.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,MAAM,CAAC,MAAM,gBAAgB,GAAG,WAAW,CAAA;AAE3C,MAAM,UAAU,YAAY,CAAC,OAAuD;IAClF,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,GAAG,EAAE,SAAS,KAAK,QAAQ,IAAI,GAAG,CAAC,SAAS,KAAK,EAAE,CAAC,CAAA;AAChG,CAAC;AAED,wGAAwG;AACxG,MAAM,UAAU,iBAAiB,CAA+B,MAAS,EAAE,OAA2C;IACpH,IAAI,CAAC,MAAM,EAAE,IAAI;QAAE,OAAO,MAAM,CAAA;IAEhC,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAA;IAEnE,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,KAAK,MAAM;QAAE,OAAO,MAAM,CAAA;IAEnD,OAAO,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,EAAO,CAAA;AACxE,CAAC","sourcesContent":["/**\n * Whether a worklist card shows a thumbnail slot - decided by what the list actually read.\n *\n * The thumbnail is the activity definition's picture. Some products give their activities one\n * (dataset, accounting); plant, warehouse and twin give none. The card keeps a slot even when a\n * record has no picture, so that cards in one list line up (data-grist record-card). On a list where\n * no record has a picture, that is an empty 140px block leading every card - in the approver's inbox\n * it pushed what is being approved below the fold on a phone.\n *\n * So the slot is kept when any record on the page has a picture, and dropped when none has.\n */\n\ntype Config = { list?: { thumbnail?: string } & Record<string, unknown> } & Record<string, unknown>\n\nexport const THUMBNAIL_COLUMN = 'thumbnail'\n\nexport function anyThumbnail(records: readonly { thumbnail?: unknown }[] | undefined): boolean {\n return (records || []).some(one => typeof one?.thumbnail === 'string' && one.thumbnail !== '')\n}\n\n/** The same config object when nothing changes, so the grist is not handed a new config for nothing. */\nexport function listWithThumbnail<T extends Config | undefined>(config: T, records: readonly { thumbnail?: unknown }[]): T {\n if (!config?.list) return config\n\n const wanted = anyThumbnail(records) ? THUMBNAIL_COLUMN : undefined\n\n if (config.list.thumbnail === wanted) return config\n\n return { ...config, list: { ...config.list, thumbnail: wanted } } as T\n}\n"]}
@@ -30,7 +30,11 @@ export declare class TodoListPage extends TodoListPage_base {
30
30
  render(): import("lit-html").TemplateResult<1>;
31
31
  pageInitialized(lifecycle: any): Promise<void>;
32
32
  pageUpdated(changes: any, lifecycle: any, changedBefore: any): Promise<void>;
33
- fetchHandler({ page, limit, sortings, filters }: FetchOption): Promise<{
33
+ fetchHandler(options: FetchOption): Promise<{
34
+ total: any;
35
+ records: any;
36
+ }>;
37
+ fetchRows({ page, limit, sortings, filters }: FetchOption): Promise<{
34
38
  total: any;
35
39
  records: any;
36
40
  }>;
@@ -10,6 +10,7 @@ import { client } from '@operato/graphql';
10
10
  import { dueSoonChip, dueSoonFilters, importantChip, importantFilters } from '../../chip-filters.js';
11
11
  import { i18next, localize } from '@operato/i18n';
12
12
  import { navigate, PageView } from '@operato/shell';
13
+ import { listWithThumbnail } from './list-thumbnail.js';
13
14
  import { CommonGristStyles, CommonHeaderStyles, ScrollbarStyles, WorkSurfacePageStyles } from '@operato/styles';
14
15
  import { adjustFilters, isMobileDevice } from '@operato/utils';
15
16
  import { p13n } from '@operato/p13n';
@@ -278,7 +279,13 @@ let TodoListPage = class TodoListPage extends p13n(localize(i18next)(PageView))
278
279
  this.grist?.fetch();
279
280
  }
280
281
  }
281
- async fetchHandler({ page, limit, sortings = [], filters = [] }) {
282
+ /* 읽은 것에 그림이 ν•˜λ‚˜λ„ μ—†μœΌλ©΄ μΉ΄λ“œλ§ˆλ‹€ 빈 κ·Έλ¦Ό 칸을 μ„Έμš°μ§€ μ•ŠλŠ”λ‹€(Β§ list-thumbnail.ts). */
283
+ async fetchHandler(options) {
284
+ const fetched = await this.fetchRows(options);
285
+ this.gristConfig = listWithThumbnail(this.gristConfig, fetched?.records || []);
286
+ return fetched;
287
+ }
288
+ async fetchRows({ page, limit, sortings = [], filters = [] }) {
282
289
  if (this.filters?.includes('important')) {
283
290
  filters = adjustFilters(filters, importantFilters());
284
291
  }
@@ -1 +1 @@
1
- {"version":3,"file":"todo-list-page.js","sourceRoot":"","sources":["../../../client/pages/todo/todo-list-page.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/data-grist'\nimport '@operato/data-grist/ox-filters-form.js'\nimport '@operato/input/ox-input-select-buttons.js'\n\nimport gql from 'graphql-tag'\nimport { css, html } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { asyncReplace } from 'lit/directives/async-replace.js'\nimport { DataGrist, FetchOption, getRenderer } from '@operato/data-grist'\nimport { client } from '@operato/graphql'\nimport { dueSoonChip, dueSoonFilters, importantChip, importantFilters } from '../../chip-filters.js'\nimport { i18next, localize } from '@operato/i18n'\nimport { navigate, PageView } from '@operato/shell'\nimport { CommonGristStyles, CommonHeaderStyles, ScrollbarStyles, WorkSurfacePageStyles } from '@operato/styles'\nimport { adjustFilters, isMobileDevice, sleep } from '@operato/utils'\n\nimport { p13n } from '@operato/p13n'\n\nimport { dueCell, priorityCell, subjectCell } from '../../activity-cells.js'\n\nimport { ActivityThreadStatus } from '../../types/activity-thread.js'\n\nconst MIN = 60\nconst HOUR = 60 * MIN\nconst DAY = 24 * HOUR\n\n@customElement('todo-list-page')\nexport class TodoListPage extends p13n(localize(i18next)(PageView)) {\n static styles = [\n /* The work surface frame for a list screen (ADR-0060 decision 8). */\n WorkSurfacePageStyles,\n ScrollbarStyles,\n CommonGristStyles,\n CommonHeaderStyles,\n css`\n :host {\n --grid-record-emphasized-background-color: #8b0000;\n --grid-record-emphasized-color: #ff6b6b;\n }\n\n /*\n * 제λͺ©μ€ ν—€λ“œλ£Έμ— 두지 μ•ŠλŠ”λ‹€.\n *\n * MDI λ₯Ό 켜면 제λͺ©μ΄ 이미 두 곳에 μžˆλ‹€ β€” 헀더 바와 νƒ­. 여기에 또 두면 ν•œ 화면에 같은 κΈ€μžκ°€\n * 셋이 λœλ‹€. κ·Έλž˜μ„œ ν‘œμ€€ 배치의 title 쀄을 μ“°μ§€ μ•Šκ³  ν•œ μ€„λ‘œ λ‘”λ‹€.\n */\n .header {\n grid-template-areas: 'filters actions';\n }\n\n /*\n * ── ν—€λ“œλ£Έμ˜ μ™Όμͺ½ 기쀀선은 ν‘œμ™€ κ°™λ‹€ ─────────────────────────────────\n * CommonHeaderStyles 의 .filters λŠ” λ°°κ²½κ³Ό λͺ¨μ„œλ¦¬μ™€ 여백을 κ°€μ§„ μ˜μ—­μ΄λ‹€. κ·Έ 배경이\n * --md-sys-color-surface 인데 이 μ œν’ˆμ—μ„œλŠ” 바탕색과 같은 값이라, **보이지 μ•ŠλŠ” μ˜μ—­μ΄\n * 자리만 μ°¨μ§€ν•˜κ³ ** 검색창을 μ—¬λ°±λ§ŒνΌ(12px) μ•ˆμͺ½μœΌλ‘œ λ°€μ—ˆλ‹€.\n *\n * μ‹€μΈ‘: ν‘œ μ™Όμͺ½ 끝 212 Β· ν•„ν„° μ˜μ—­ 212 Β· 검색창 224. ν™”λ©΄μ˜ μ™Όμͺ½ 기쀀선이 λ‘˜μ΄ 됐닀.\n *\n * κ·Έ κ·œμΉ™λ“€μ€ .header μ•ˆμ— μ€‘μ²©λ˜μ–΄ μžˆμ–΄(.header .filters) 밑쀄 μ—†λŠ” .filters λ‘œλŠ” 이길 수\n * μ—†λ‹€ β€” νŠΉμ •λ„κ°€ 0,1,0 λŒ€ 0,2,0 이닀.\n */\n .header .filters {\n padding: 0;\n background: none;\n border-radius: 0;\n gap: 12px;\n }\n\n `\n ]\n\n @property({ type: String }) mode: 'GRID' | 'LIST' | 'CARD' = isMobileDevice() ? 'CARD' : 'GRID'\n\n @query('ox-grist') grist!: DataGrist\n\n @state() gristConfig?: any\n @state() filters?: string[]\n\n get context() {\n return {\n title: i18next.t('title.todo list'),\n /*\n * κ²€μƒ‰μ˜ μžλ¦¬λŠ” **κΈ°κΈ°κ°€ μ •ν•œλ‹€.**\n *\n * PC μ—μ„œλŠ” ν™”λ©΄ μ•ˆμœΌλ‘œ λ‚΄λ¦°λ‹€. 상단 바에 두면 κ±°λ₯Έ 쑰건과 κ±ΈλŸ¬μ§„ κ²°κ³Όκ°€ ν™”λ©΄μ˜ μœ„μ•„λž˜ 끝으둜\n * κ°ˆλΌμ§€κ³ , μ§€κΈˆ λ¬΄μ—‡μœΌλ‘œ κ±Έλ €λŠ”μ§€κ°€ λͺ©λ‘ μ˜†μ—μ„œ 보이지 μ•ŠλŠ”λ‹€.\n *\n * 쒁은 ν™”λ©΄μ—μ„œλŠ” 상단 바에 κ·ΈλŒ€λ‘œ λ‘”λ‹€. ν—€λ“œλ£Έμ— 두면 검색창과 ν•„ν„°κ°€ λͺ©λ‘μ„ 그만큼 λ°€μ–΄\n * 내리고, μΉ΄λ“œ 두 μž₯이 ν™”λ©΄ λ°–μœΌλ‘œ λ‚˜κ°„λ‹€. 상단 λ°”λŠ” κ·Έ 자리λ₯Ό 아끼렀고 μžˆλŠ” 것이닀.\n *\n * 이 μ €μž₯μ†Œμ—λŠ” 두 방식이 λ‹€ μžˆλ‹€ β€” ν—€λ“œλ£Έ 50κ³³, 상단 λ°” 51κ³³. μ •ν˜•μΈ 것은 ꡬ쑰\n * (.header / .filters / .filter)이고 κ²€μƒ‰μ˜ μžλ¦¬λŠ” 화면이 μ •ν•œλ‹€.\n */\n /*\n * 검색은 **νŽ˜μ΄μ§€ 제λͺ© μ€„μ˜ 였λ₯Έμͺ½ 끝**에 λ‘”λ‹€ β€” λ‹€λ₯Έ ν™”λ©΄λ“€κ³Ό 같은 μžλ¦¬λ‹€.\n *\n * μ „μ—λŠ” 쒁은 ν™”λ©΄μ—μ„œλ§Œ 여기에 λ„£κ³ , 넓은 ν™”λ©΄μ—μ„œλŠ” ν—€λ“œλ£Έμ˜ ox-filters-form 이 검색을\n * κ·Έλ Έλ‹€. κ·Έλž˜μ„œ 같은 μ•± μ•ˆμ—μ„œ 검색 μƒμžμ˜ μžλ¦¬κ°€ ν™”λ©΄λ§ˆλ‹€ λ‹¬λžλ‹€.\n *\n * ν—€λ“œλ£Έμ—λŠ” μ’νžˆλŠ” 칩만 λ‚¨λŠ”λ‹€. 폼은 without-search 둜 남겨 두어, λ‚˜μ€‘μ— μ–΄λŠ 칸에\n * filter λ₯Ό 달면 κ·Έ UI κ°€ μ €μ ˆλ‘œ 생긴닀(λΉ„λ©΄ 아무것도 그리지 μ•ŠλŠ”λ‹€).\n */\n search: {\n handler: (search: string) => {\n this.grist.searchText = search\n },\n value: this.grist?.searchText || ''\n },\n filter: {\n handler: () => {\n this.grist.toggleHeadroom()\n }\n },\n help: 'worklist/todo-list-page',\n actions: []\n }\n }\n\n render() {\n const mode = this.mode || (isMobileDevice() ? 'CARD' : 'GRID')\n\n return html`\n <ox-grist class=\"page-fill\"\n .mode=${mode}\n .config=${this.gristConfig}\n .fetchHandler=${this.fetchHandler.bind(this)}\n .personalConfigProvider=${this.getPagePreferenceProvider('ox-grist')!}\n >\n <div slot=\"headroom\" class=\"header\">\n <div class=\"filters\">\n <!-- 쒁은 ν™”λ©΄μ—μ„œλŠ” 상단 λ°”κ°€ 검색을 κ°–λŠ”λ‹€(μœ„ context 주석 μ°Έμ‘°). -->\n <ox-filters-form class=\"filter\" without-search></ox-filters-form>\n <ox-input-select-buttons\n .value=${this.filters}\n .options=${[\n importantChip(),\n dueSoonChip(),\n { display: i18next.t('label.filter-proceeding'), value: 'proceeding' },\n { display: i18next.t('label.filter-pending-approval'), value: 'pending-approval' }\n ]}\n @change=${(e: CustomEvent) => {\n this.filters = (e.currentTarget as any)?.value\n this.grist.fetch()\n }}\n ></ox-input-select-buttons>\n <!-- <ox-filters-form class=\"filter\" autofocus without-search></ox-filters-form> -->\n </div>\n\n </div>\n\n <ox-grist-personalizer slot=\"setting\"></ox-grist-personalizer>\n </ox-grist>\n `\n }\n\n async pageInitialized(lifecycle) {\n this.gristConfig = {\n list: { thumbnail: 'thumbnail', fields: ['name', 'description'], details: ['createdAt', 'due'] },\n columns: [\n { type: 'gutter', gutterName: 'sequence', fixed: true },\n {\n type: 'string',\n name: 'name',\n header: i18next.t('field.wl-subject'),\n fixed: true,\n record: {\n editable: false,\n renderer: subjectCell()\n },\n filter: 'search',\n sortable: true,\n width: 250\n },\n {\n /*\n * μ„€λͺ…은 제λͺ© μΉΈ μ•ˆμ—μ„œ 두 μ€„λ‘œ 보인닀(activity-cells 의 subjectCell). κ·Έλž˜μ„œ λ”°λ‘œ 보일 칸이\n * ν•„μš”ν•˜μ§€ μ•Šλ‹€.\n *\n * 그런데 **칸을 μ—†μ• λ©΄ μ„€λͺ…μœΌλ‘œ κ²€μƒ‰ν•˜λŠ” κΈ°λŠ₯이 ν•¨κ»˜ 사라진닀.** searchText λŠ”\n * filter: 'search' λ₯Ό μ„ μ–Έν•œ μ»¬λŸΌλ§ˆλ‹€ ν•„ν„°λ₯Ό λ§Œλ“€κ³  hidden 은 보지 μ•ŠλŠ”λ‹€\n * (data-grist.ts 의 set searchText). μ‹€μΈ‘μœΌλ‘œ ν™•μΈν–ˆλ‹€ β€” μ»¬λŸΌμ„ μ—†μ•€ λ’€ μ„€λͺ…μ—λ§Œ μžˆλŠ”\n * λ‚±λ§λ‘œ κ²€μƒ‰ν•˜λ©΄ 0κ±΄μ΄μ—ˆλ‹€.\n *\n * κ·Έλž˜μ„œ 감좘 칸으둜 남겨 κ²€μƒ‰λ§Œ 남긴닀.\n */\n type: 'string',\n name: 'description',\n header: i18next.t('field.description'),\n record: { editable: false },\n filter: 'search',\n hidden: true\n },\n {\n type: 'resource-object',\n name: 'creator',\n header: i18next.t('field.wl-drafter'),\n record: { editable: false },\n sortable: true,\n width: 85\n },\n {\n type: 'datetime',\n name: 'dueAt',\n header: i18next.t('field.wl-due'),\n record: {\n editable: false,\n renderer: dueCell(() => this.active)\n },\n sortable: true,\n width: 180\n },\n {\n type: 'number',\n name: 'priority',\n header: i18next.t('field.wl-priority'),\n record: {\n editable: false,\n align: 'center',\n renderer: priorityCell()\n },\n sortable: true,\n width: 70\n },\n {\n type: 'select',\n name: 'state',\n header: i18next.t('field.wl-state'),\n record: {\n editable: false,\n align: 'center',\n options: [\n { display: i18next.t('label.activity-state-unassigned'), value: 'unassigned' },\n { display: i18next.t('label.activity-state-assigned'), value: 'assigned' },\n { display: i18next.t('label.activity-state-started'), value: 'started' },\n { display: i18next.t('label.activity-state-delegated'), value: 'delegated' },\n { display: i18next.t('label.activity-state-submitted'), value: 'submitted' },\n { display: i18next.t('label.activity-state-escalated'), value: 'escalated' },\n { display: i18next.t('label.activity-state-rejected'), value: 'rejected' },\n { display: i18next.t('label.activity-state-ended'), value: 'ended' },\n { display: i18next.t('label.activity-state-aborted'), value: 'aborted' }\n ]\n },\n width: 85\n },\n {\n type: 'datetime',\n name: 'createdAt',\n header: i18next.t('field.wl-submitted-at'),\n record: { editable: false },\n sortable: true,\n filter: false,\n width: 180\n },\n {\n type: 'string',\n name: 'uiSource',\n header: i18next.t('field.wl-view-source'),\n record: {\n editable: false,\n renderer: function (value, column, record, rowIndex, field) {\n const { uiType, uiSource } = record.activity || {}\n var type = uiType !== 'board' ? 'string' : 'board'\n return getRenderer(type)(uiSource, column, record, rowIndex, field)\n }\n },\n width: 140,\n hidden: true\n },\n {\n type: 'image',\n name: 'thumbnail',\n header: i18next.t('field.thumbnail'),\n record: { editable: false },\n hidden: true\n }\n ],\n rows: {\n appendable: false,\n editable: false,\n handlers: {\n click: (columns, data, column, record, rowIndex) => {\n this.openActivityThread(record)\n }\n }\n },\n sorters: [{ name: 'dueAt', desc: false }],\n pagination: { limit: 50, pages: [20, 50, 100, 500] }\n }\n }\n\n async pageUpdated(changes, lifecycle, changedBefore) {\n if (this.active) {\n this.grist?.fetch()\n }\n }\n\n async fetchHandler({ page, limit, sortings = [], filters = [] }: FetchOption) {\n if (this.filters?.includes('important')) {\n filters = adjustFilters(filters, importantFilters())\n }\n\n if (this.filters?.includes('due')) {\n filters = adjustFilters(filters, dueSoonFilters())\n }\n\n if (this.filters?.includes('proceeding')) {\n filters = adjustFilters(filters, [{ name: 'state', operator: 'eq', value: ActivityThreadStatus.Started }])\n }\n\n if (this.filters?.includes('pending-approval')) {\n filters = adjustFilters(filters, [\n {\n name: 'state',\n operator: 'in',\n value: [ActivityThreadStatus.Rejected, ActivityThreadStatus.Submitted, ActivityThreadStatus.Escalated]\n }\n ])\n }\n\n const response = await client.query({\n query: gql`\n query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) {\n responses: todoList(filters: $filters, pagination: $pagination, sortings: $sortings) {\n items {\n id\n activityInstance {\n activityId: id\n name\n description\n priority\n input\n refBy\n activityType\n uiType\n uiSource\n thumbnail\n updatedAt\n createdAt\n creator {\n id\n name\n }\n }\n state\n output\n dueAt\n assignedAt\n }\n total\n }\n }\n `,\n variables: { filters, pagination: { page, limit }, sortings }\n })\n\n return {\n total: response.data.responses.total || 0,\n records: (response.data.responses.items || []).map(item => {\n return {\n id: item.id,\n state: item.state,\n output: item.output,\n dueAt: item.dueAt,\n assignedAt: item.assignedAt,\n ...item.activityInstance\n }\n })\n }\n }\n\n openActivityThread(activityThread) {\n navigate(`activity-thread/${activityThread.id}?title=${activityThread.name}`)\n }\n\n}\n"]}
1
+ {"version":3,"file":"todo-list-page.js","sourceRoot":"","sources":["../../../client/pages/todo/todo-list-page.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/data-grist'\nimport '@operato/data-grist/ox-filters-form.js'\nimport '@operato/input/ox-input-select-buttons.js'\n\nimport gql from 'graphql-tag'\nimport { css, html } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { asyncReplace } from 'lit/directives/async-replace.js'\nimport { DataGrist, FetchOption, getRenderer } from '@operato/data-grist'\nimport { client } from '@operato/graphql'\nimport { dueSoonChip, dueSoonFilters, importantChip, importantFilters } from '../../chip-filters.js'\nimport { i18next, localize } from '@operato/i18n'\nimport { navigate, PageView } from '@operato/shell'\nimport { listWithThumbnail } from './list-thumbnail.js'\nimport { CommonGristStyles, CommonHeaderStyles, ScrollbarStyles, WorkSurfacePageStyles } from '@operato/styles'\nimport { adjustFilters, isMobileDevice, sleep } from '@operato/utils'\n\nimport { p13n } from '@operato/p13n'\n\nimport { dueCell, priorityCell, subjectCell } from '../../activity-cells.js'\n\nimport { ActivityThreadStatus } from '../../types/activity-thread.js'\n\nconst MIN = 60\nconst HOUR = 60 * MIN\nconst DAY = 24 * HOUR\n\n@customElement('todo-list-page')\nexport class TodoListPage extends p13n(localize(i18next)(PageView)) {\n static styles = [\n /* The work surface frame for a list screen (ADR-0060 decision 8). */\n WorkSurfacePageStyles,\n ScrollbarStyles,\n CommonGristStyles,\n CommonHeaderStyles,\n css`\n :host {\n --grid-record-emphasized-background-color: #8b0000;\n --grid-record-emphasized-color: #ff6b6b;\n }\n\n /*\n * 제λͺ©μ€ ν—€λ“œλ£Έμ— 두지 μ•ŠλŠ”λ‹€.\n *\n * MDI λ₯Ό 켜면 제λͺ©μ΄ 이미 두 곳에 μžˆλ‹€ β€” 헀더 바와 νƒ­. 여기에 또 두면 ν•œ 화면에 같은 κΈ€μžκ°€\n * 셋이 λœλ‹€. κ·Έλž˜μ„œ ν‘œμ€€ 배치의 title 쀄을 μ“°μ§€ μ•Šκ³  ν•œ μ€„λ‘œ λ‘”λ‹€.\n */\n .header {\n grid-template-areas: 'filters actions';\n }\n\n /*\n * ── ν—€λ“œλ£Έμ˜ μ™Όμͺ½ 기쀀선은 ν‘œμ™€ κ°™λ‹€ ─────────────────────────────────\n * CommonHeaderStyles 의 .filters λŠ” λ°°κ²½κ³Ό λͺ¨μ„œλ¦¬μ™€ 여백을 κ°€μ§„ μ˜μ—­μ΄λ‹€. κ·Έ 배경이\n * --md-sys-color-surface 인데 이 μ œν’ˆμ—μ„œλŠ” 바탕색과 같은 값이라, **보이지 μ•ŠλŠ” μ˜μ—­μ΄\n * 자리만 μ°¨μ§€ν•˜κ³ ** 검색창을 μ—¬λ°±λ§ŒνΌ(12px) μ•ˆμͺ½μœΌλ‘œ λ°€μ—ˆλ‹€.\n *\n * μ‹€μΈ‘: ν‘œ μ™Όμͺ½ 끝 212 Β· ν•„ν„° μ˜μ—­ 212 Β· 검색창 224. ν™”λ©΄μ˜ μ™Όμͺ½ 기쀀선이 λ‘˜μ΄ 됐닀.\n *\n * κ·Έ κ·œμΉ™λ“€μ€ .header μ•ˆμ— μ€‘μ²©λ˜μ–΄ μžˆμ–΄(.header .filters) 밑쀄 μ—†λŠ” .filters λ‘œλŠ” 이길 수\n * μ—†λ‹€ β€” νŠΉμ •λ„κ°€ 0,1,0 λŒ€ 0,2,0 이닀.\n */\n .header .filters {\n padding: 0;\n background: none;\n border-radius: 0;\n gap: 12px;\n }\n\n `\n ]\n\n @property({ type: String }) mode: 'GRID' | 'LIST' | 'CARD' = isMobileDevice() ? 'CARD' : 'GRID'\n\n @query('ox-grist') grist!: DataGrist\n\n @state() gristConfig?: any\n @state() filters?: string[]\n\n get context() {\n return {\n title: i18next.t('title.todo list'),\n /*\n * κ²€μƒ‰μ˜ μžλ¦¬λŠ” **κΈ°κΈ°κ°€ μ •ν•œλ‹€.**\n *\n * PC μ—μ„œλŠ” ν™”λ©΄ μ•ˆμœΌλ‘œ λ‚΄λ¦°λ‹€. 상단 바에 두면 κ±°λ₯Έ 쑰건과 κ±ΈλŸ¬μ§„ κ²°κ³Όκ°€ ν™”λ©΄μ˜ μœ„μ•„λž˜ 끝으둜\n * κ°ˆλΌμ§€κ³ , μ§€κΈˆ λ¬΄μ—‡μœΌλ‘œ κ±Έλ €λŠ”μ§€κ°€ λͺ©λ‘ μ˜†μ—μ„œ 보이지 μ•ŠλŠ”λ‹€.\n *\n * 쒁은 ν™”λ©΄μ—μ„œλŠ” 상단 바에 κ·ΈλŒ€λ‘œ λ‘”λ‹€. ν—€λ“œλ£Έμ— 두면 검색창과 ν•„ν„°κ°€ λͺ©λ‘μ„ 그만큼 λ°€μ–΄\n * 내리고, μΉ΄λ“œ 두 μž₯이 ν™”λ©΄ λ°–μœΌλ‘œ λ‚˜κ°„λ‹€. 상단 λ°”λŠ” κ·Έ 자리λ₯Ό 아끼렀고 μžˆλŠ” 것이닀.\n *\n * 이 μ €μž₯μ†Œμ—λŠ” 두 방식이 λ‹€ μžˆλ‹€ β€” ν—€λ“œλ£Έ 50κ³³, 상단 λ°” 51κ³³. μ •ν˜•μΈ 것은 ꡬ쑰\n * (.header / .filters / .filter)이고 κ²€μƒ‰μ˜ μžλ¦¬λŠ” 화면이 μ •ν•œλ‹€.\n */\n /*\n * 검색은 **νŽ˜μ΄μ§€ 제λͺ© μ€„μ˜ 였λ₯Έμͺ½ 끝**에 λ‘”λ‹€ β€” λ‹€λ₯Έ ν™”λ©΄λ“€κ³Ό 같은 μžλ¦¬λ‹€.\n *\n * μ „μ—λŠ” 쒁은 ν™”λ©΄μ—μ„œλ§Œ 여기에 λ„£κ³ , 넓은 ν™”λ©΄μ—μ„œλŠ” ν—€λ“œλ£Έμ˜ ox-filters-form 이 검색을\n * κ·Έλ Έλ‹€. κ·Έλž˜μ„œ 같은 μ•± μ•ˆμ—μ„œ 검색 μƒμžμ˜ μžλ¦¬κ°€ ν™”λ©΄λ§ˆλ‹€ λ‹¬λžλ‹€.\n *\n * ν—€λ“œλ£Έμ—λŠ” μ’νžˆλŠ” 칩만 λ‚¨λŠ”λ‹€. 폼은 without-search 둜 남겨 두어, λ‚˜μ€‘μ— μ–΄λŠ 칸에\n * filter λ₯Ό 달면 κ·Έ UI κ°€ μ €μ ˆλ‘œ 생긴닀(λΉ„λ©΄ 아무것도 그리지 μ•ŠλŠ”λ‹€).\n */\n search: {\n handler: (search: string) => {\n this.grist.searchText = search\n },\n value: this.grist?.searchText || ''\n },\n filter: {\n handler: () => {\n this.grist.toggleHeadroom()\n }\n },\n help: 'worklist/todo-list-page',\n actions: []\n }\n }\n\n render() {\n const mode = this.mode || (isMobileDevice() ? 'CARD' : 'GRID')\n\n return html`\n <ox-grist class=\"page-fill\"\n .mode=${mode}\n .config=${this.gristConfig}\n .fetchHandler=${this.fetchHandler.bind(this)}\n .personalConfigProvider=${this.getPagePreferenceProvider('ox-grist')!}\n >\n <div slot=\"headroom\" class=\"header\">\n <div class=\"filters\">\n <!-- 쒁은 ν™”λ©΄μ—μ„œλŠ” 상단 λ°”κ°€ 검색을 κ°–λŠ”λ‹€(μœ„ context 주석 μ°Έμ‘°). -->\n <ox-filters-form class=\"filter\" without-search></ox-filters-form>\n <ox-input-select-buttons\n .value=${this.filters}\n .options=${[\n importantChip(),\n dueSoonChip(),\n { display: i18next.t('label.filter-proceeding'), value: 'proceeding' },\n { display: i18next.t('label.filter-pending-approval'), value: 'pending-approval' }\n ]}\n @change=${(e: CustomEvent) => {\n this.filters = (e.currentTarget as any)?.value\n this.grist.fetch()\n }}\n ></ox-input-select-buttons>\n <!-- <ox-filters-form class=\"filter\" autofocus without-search></ox-filters-form> -->\n </div>\n\n </div>\n\n <ox-grist-personalizer slot=\"setting\"></ox-grist-personalizer>\n </ox-grist>\n `\n }\n\n async pageInitialized(lifecycle) {\n this.gristConfig = {\n list: { thumbnail: 'thumbnail', fields: ['name', 'description'], details: ['createdAt', 'due'] },\n columns: [\n { type: 'gutter', gutterName: 'sequence', fixed: true },\n {\n type: 'string',\n name: 'name',\n header: i18next.t('field.wl-subject'),\n fixed: true,\n record: {\n editable: false,\n renderer: subjectCell()\n },\n filter: 'search',\n sortable: true,\n width: 250\n },\n {\n /*\n * μ„€λͺ…은 제λͺ© μΉΈ μ•ˆμ—μ„œ 두 μ€„λ‘œ 보인닀(activity-cells 의 subjectCell). κ·Έλž˜μ„œ λ”°λ‘œ 보일 칸이\n * ν•„μš”ν•˜μ§€ μ•Šλ‹€.\n *\n * 그런데 **칸을 μ—†μ• λ©΄ μ„€λͺ…μœΌλ‘œ κ²€μƒ‰ν•˜λŠ” κΈ°λŠ₯이 ν•¨κ»˜ 사라진닀.** searchText λŠ”\n * filter: 'search' λ₯Ό μ„ μ–Έν•œ μ»¬λŸΌλ§ˆλ‹€ ν•„ν„°λ₯Ό λ§Œλ“€κ³  hidden 은 보지 μ•ŠλŠ”λ‹€\n * (data-grist.ts 의 set searchText). μ‹€μΈ‘μœΌλ‘œ ν™•μΈν–ˆλ‹€ β€” μ»¬λŸΌμ„ μ—†μ•€ λ’€ μ„€λͺ…μ—λ§Œ μžˆλŠ”\n * λ‚±λ§λ‘œ κ²€μƒ‰ν•˜λ©΄ 0κ±΄μ΄μ—ˆλ‹€.\n *\n * κ·Έλž˜μ„œ 감좘 칸으둜 남겨 κ²€μƒ‰λ§Œ 남긴닀.\n */\n type: 'string',\n name: 'description',\n header: i18next.t('field.description'),\n record: { editable: false },\n filter: 'search',\n hidden: true\n },\n {\n type: 'resource-object',\n name: 'creator',\n header: i18next.t('field.wl-drafter'),\n record: { editable: false },\n sortable: true,\n width: 85\n },\n {\n type: 'datetime',\n name: 'dueAt',\n header: i18next.t('field.wl-due'),\n record: {\n editable: false,\n renderer: dueCell(() => this.active)\n },\n sortable: true,\n width: 180\n },\n {\n type: 'number',\n name: 'priority',\n header: i18next.t('field.wl-priority'),\n record: {\n editable: false,\n align: 'center',\n renderer: priorityCell()\n },\n sortable: true,\n width: 70\n },\n {\n type: 'select',\n name: 'state',\n header: i18next.t('field.wl-state'),\n record: {\n editable: false,\n align: 'center',\n options: [\n { display: i18next.t('label.activity-state-unassigned'), value: 'unassigned' },\n { display: i18next.t('label.activity-state-assigned'), value: 'assigned' },\n { display: i18next.t('label.activity-state-started'), value: 'started' },\n { display: i18next.t('label.activity-state-delegated'), value: 'delegated' },\n { display: i18next.t('label.activity-state-submitted'), value: 'submitted' },\n { display: i18next.t('label.activity-state-escalated'), value: 'escalated' },\n { display: i18next.t('label.activity-state-rejected'), value: 'rejected' },\n { display: i18next.t('label.activity-state-ended'), value: 'ended' },\n { display: i18next.t('label.activity-state-aborted'), value: 'aborted' }\n ]\n },\n width: 85\n },\n {\n type: 'datetime',\n name: 'createdAt',\n header: i18next.t('field.wl-submitted-at'),\n record: { editable: false },\n sortable: true,\n filter: false,\n width: 180\n },\n {\n type: 'string',\n name: 'uiSource',\n header: i18next.t('field.wl-view-source'),\n record: {\n editable: false,\n renderer: function (value, column, record, rowIndex, field) {\n const { uiType, uiSource } = record.activity || {}\n var type = uiType !== 'board' ? 'string' : 'board'\n return getRenderer(type)(uiSource, column, record, rowIndex, field)\n }\n },\n width: 140,\n hidden: true\n },\n {\n type: 'image',\n name: 'thumbnail',\n header: i18next.t('field.thumbnail'),\n record: { editable: false },\n hidden: true\n }\n ],\n rows: {\n appendable: false,\n editable: false,\n handlers: {\n click: (columns, data, column, record, rowIndex) => {\n this.openActivityThread(record)\n }\n }\n },\n sorters: [{ name: 'dueAt', desc: false }],\n pagination: { limit: 50, pages: [20, 50, 100, 500] }\n }\n }\n\n async pageUpdated(changes, lifecycle, changedBefore) {\n if (this.active) {\n this.grist?.fetch()\n }\n }\n\n /* 읽은 것에 그림이 ν•˜λ‚˜λ„ μ—†μœΌλ©΄ μΉ΄λ“œλ§ˆλ‹€ 빈 κ·Έλ¦Ό 칸을 μ„Έμš°μ§€ μ•ŠλŠ”λ‹€(Β§ list-thumbnail.ts). */\n async fetchHandler(options: FetchOption) {\n const fetched = await this.fetchRows(options)\n\n this.gristConfig = listWithThumbnail(this.gristConfig, fetched?.records || [])\n\n return fetched\n }\n\n async fetchRows({ page, limit, sortings = [], filters = [] }: FetchOption) {\n if (this.filters?.includes('important')) {\n filters = adjustFilters(filters, importantFilters())\n }\n\n if (this.filters?.includes('due')) {\n filters = adjustFilters(filters, dueSoonFilters())\n }\n\n if (this.filters?.includes('proceeding')) {\n filters = adjustFilters(filters, [{ name: 'state', operator: 'eq', value: ActivityThreadStatus.Started }])\n }\n\n if (this.filters?.includes('pending-approval')) {\n filters = adjustFilters(filters, [\n {\n name: 'state',\n operator: 'in',\n value: [ActivityThreadStatus.Rejected, ActivityThreadStatus.Submitted, ActivityThreadStatus.Escalated]\n }\n ])\n }\n\n const response = await client.query({\n query: gql`\n query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) {\n responses: todoList(filters: $filters, pagination: $pagination, sortings: $sortings) {\n items {\n id\n activityInstance {\n activityId: id\n name\n description\n priority\n input\n refBy\n activityType\n uiType\n uiSource\n thumbnail\n updatedAt\n createdAt\n creator {\n id\n name\n }\n }\n state\n output\n dueAt\n assignedAt\n }\n total\n }\n }\n `,\n variables: { filters, pagination: { page, limit }, sortings }\n })\n\n return {\n total: response.data.responses.total || 0,\n records: (response.data.responses.items || []).map(item => {\n return {\n id: item.id,\n state: item.state,\n output: item.output,\n dueAt: item.dueAt,\n assignedAt: item.assignedAt,\n ...item.activityInstance\n }\n })\n }\n }\n\n openActivityThread(activityThread) {\n navigate(`activity-thread/${activityThread.id}?title=${activityThread.name}`)\n }\n\n}\n"]}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Where a row of the work-doors screen takes its reader.
3
+ *
4
+ * The approval line of one activity is set on that activity's detail screen, together with whether
5
+ * it is used here and the master change policy that routes to it. This screen used to send people to
6
+ * the definition grid instead - a screen with no menu entry, identifiers, and a double click to open.
7
+ *
8
+ * `WorkDoorType.name` is the activity's name, so it is the key the detail screen takes.
9
+ *
10
+ * A form borrowed from another site is not linked: the row already says it cannot be changed here,
11
+ * and a link would contradict it.
12
+ */
13
+ type DoorLike = {
14
+ name: string;
15
+ standing: string;
16
+ kind?: string;
17
+ from?: string;
18
+ };
19
+ export declare function detailAddress(name: string): string;
20
+ /** The row opens its activity's detail unless the form belongs to another site. */
21
+ export declare function opensDetail(door: DoorLike): boolean;
22
+ /**
23
+ * The doors to name under "set an approval line": approval forms, standing but empty, owned here.
24
+ * An empty assignment form lacks a role, not a line - its row says so and links to the detail.
25
+ *
26
+ * `missing` is left out - that form did not stand at start-up, and the line under it says to read
27
+ * the boot log. Setting a line would not fix it.
28
+ */
29
+ export declare function doorsToSetHere<T extends DoorLike>(doors: readonly T[]): T[];
30
+ export {};
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Where a row of the work-doors screen takes its reader.
3
+ *
4
+ * The approval line of one activity is set on that activity's detail screen, together with whether
5
+ * it is used here and the master change policy that routes to it. This screen used to send people to
6
+ * the definition grid instead - a screen with no menu entry, identifiers, and a double click to open.
7
+ *
8
+ * `WorkDoorType.name` is the activity's name, so it is the key the detail screen takes.
9
+ *
10
+ * A form borrowed from another site is not linked: the row already says it cannot be changed here,
11
+ * and a link would contradict it.
12
+ */
13
+ export function detailAddress(name) {
14
+ return 'activity-detail?name=' + encodeURIComponent(name);
15
+ }
16
+ /** The row opens its activity's detail unless the form belongs to another site. */
17
+ export function opensDetail(door) {
18
+ return !!door.name && !door.from;
19
+ }
20
+ /**
21
+ * The doors to name under "set an approval line": approval forms, standing but empty, owned here.
22
+ * An empty assignment form lacks a role, not a line - its row says so and links to the detail.
23
+ *
24
+ * `missing` is left out - that form did not stand at start-up, and the line under it says to read
25
+ * the boot log. Setting a line would not fix it.
26
+ */
27
+ export function doorsToSetHere(doors) {
28
+ return doors.filter(one => one.kind === 'approval' && one.standing === 'off' && opensDetail(one));
29
+ }
30
+ //# sourceMappingURL=door-links.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"door-links.js","sourceRoot":"","sources":["../../../client/pages/work-door/door-links.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,uBAAuB,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAA;AAC3D,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,WAAW,CAAC,IAAc;IACxC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA;AAClC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAqB,KAAmB;IACpE,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,UAAU,IAAI,GAAG,CAAC,QAAQ,KAAK,KAAK,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,CAAA;AACnG,CAAC","sourcesContent":["/**\n * Where a row of the work-doors screen takes its reader.\n *\n * The approval line of one activity is set on that activity's detail screen, together with whether\n * it is used here and the master change policy that routes to it. This screen used to send people to\n * the definition grid instead - a screen with no menu entry, identifiers, and a double click to open.\n *\n * `WorkDoorType.name` is the activity's name, so it is the key the detail screen takes.\n *\n * A form borrowed from another site is not linked: the row already says it cannot be changed here,\n * and a link would contradict it.\n */\n\ntype DoorLike = { name: string; standing: string; kind?: string; from?: string }\n\nexport function detailAddress(name: string): string {\n return 'activity-detail?name=' + encodeURIComponent(name)\n}\n\n/** The row opens its activity's detail unless the form belongs to another site. */\nexport function opensDetail(door: DoorLike): boolean {\n return !!door.name && !door.from\n}\n\n/**\n * The doors to name under \"set an approval line\": approval forms, standing but empty, owned here.\n * An empty assignment form lacks a role, not a line - its row says so and links to the detail.\n *\n * `missing` is left out - that form did not stand at start-up, and the line under it says to read\n * the boot log. Setting a line would not fix it.\n */\nexport function doorsToSetHere<T extends DoorLike>(doors: readonly T[]): T[] {\n return doors.filter(one => one.kind === 'approval' && one.standing === 'off' && opensDetail(one))\n}\n"]}