@things-factory/worklist 10.1.6 โ†’ 10.1.8

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 (87) hide show
  1. package/dist-client/components/activity-instance-preview.js +5 -4
  2. package/dist-client/components/activity-instance-preview.js.map +1 -1
  3. package/dist-client/components/activity-starter-form.js +14 -10
  4. package/dist-client/components/activity-starter-form.js.map +1 -1
  5. package/dist-client/components/decision-slots.d.ts +38 -9
  6. package/dist-client/components/decision-slots.js +24 -10
  7. package/dist-client/components/decision-slots.js.map +1 -1
  8. package/dist-client/components/mutation-outcome.d.ts +57 -0
  9. package/dist-client/components/mutation-outcome.js +78 -0
  10. package/dist-client/components/mutation-outcome.js.map +1 -0
  11. package/dist-client/components/say-outcome.d.ts +25 -0
  12. package/dist-client/components/say-outcome.js +51 -0
  13. package/dist-client/components/say-outcome.js.map +1 -0
  14. package/dist-client/pages/activity/activity-list-page.js +28 -12
  15. package/dist-client/pages/activity/activity-list-page.js.map +1 -1
  16. package/dist-client/pages/activity/activity-model-item-list.js +4 -3
  17. package/dist-client/pages/activity/activity-model-item-list.js.map +1 -1
  18. package/dist-client/pages/activity/activity-page.d.ts +2 -2
  19. package/dist-client/pages/activity/activity-page.js +25 -21
  20. package/dist-client/pages/activity/activity-page.js.map +1 -1
  21. package/dist-client/pages/activity-approval/activity-approval-importer.js +4 -3
  22. package/dist-client/pages/activity-approval/activity-approval-importer.js.map +1 -1
  23. package/dist-client/pages/activity-approval/activity-approval-list-page.js +8 -9
  24. package/dist-client/pages/activity-approval/activity-approval-list-page.js.map +1 -1
  25. package/dist-client/pages/activity-approval/activity-approval-page.d.ts +2 -0
  26. package/dist-client/pages/activity-approval/activity-approval-page.js +76 -28
  27. package/dist-client/pages/activity-approval/activity-approval-page.js.map +1 -1
  28. package/dist-client/pages/activity-instance/activity-instance-start-page.js +24 -18
  29. package/dist-client/pages/activity-instance/activity-instance-start-page.js.map +1 -1
  30. package/dist-client/pages/activity-instance/activity-instance-view.js +1 -0
  31. package/dist-client/pages/activity-instance/activity-instance-view.js.map +1 -1
  32. package/dist-client/pages/activity-stats/activity-stats-importer.js +4 -3
  33. package/dist-client/pages/activity-stats/activity-stats-importer.js.map +1 -1
  34. package/dist-client/pages/activity-stats/activity-stats-list-page.js +8 -9
  35. package/dist-client/pages/activity-stats/activity-stats-list-page.js.map +1 -1
  36. package/dist-client/pages/activity-template/activity-template-importer.js +4 -3
  37. package/dist-client/pages/activity-template/activity-template-importer.js.map +1 -1
  38. package/dist-client/pages/activity-template/activity-template-list-page.js +8 -9
  39. package/dist-client/pages/activity-template/activity-template-list-page.js.map +1 -1
  40. package/dist-client/pages/activity-template/activity-template-model-item-list.js +4 -3
  41. package/dist-client/pages/activity-template/activity-template-model-item-list.js.map +1 -1
  42. package/dist-client/pages/activity-thread/activity-thread-importer.js +4 -3
  43. package/dist-client/pages/activity-thread/activity-thread-importer.js.map +1 -1
  44. package/dist-client/pages/activity-thread/activity-thread-list-page.js +8 -9
  45. package/dist-client/pages/activity-thread/activity-thread-list-page.js.map +1 -1
  46. package/dist-client/pages/activity-thread/activity-thread-page.js +22 -20
  47. package/dist-client/pages/activity-thread/activity-thread-page.js.map +1 -1
  48. package/dist-client/pages/activity-thread/activity-thread-view-page.js +1 -0
  49. package/dist-client/pages/activity-thread/activity-thread-view-page.js.map +1 -1
  50. package/dist-client/pages/todo/approval-pending-list-page.d.ts +6 -6
  51. package/dist-client/pages/todo/approval-pending-list-page.js +78 -55
  52. package/dist-client/pages/todo/approval-pending-list-page.js.map +1 -1
  53. package/dist-client/pages/todo/draft-list-page.js +1 -0
  54. package/dist-client/pages/todo/draft-list-page.js.map +1 -1
  55. package/dist-client/route.d.ts +1 -1
  56. package/dist-client/tsconfig.tsbuildinfo +1 -1
  57. package/dist-server/controllers/activity-installation/installable-to-activity.d.ts +14 -1
  58. package/dist-server/controllers/activity-installation/installable-to-activity.js +14 -1
  59. package/dist-server/controllers/activity-installation/installable-to-activity.js.map +1 -1
  60. package/dist-server/controllers/activity-instance/draft.js +3 -0
  61. package/dist-server/controllers/activity-instance/draft.js.map +1 -1
  62. package/dist-server/controllers/activity-instance/entitlement.d.ts +25 -0
  63. package/dist-server/controllers/activity-instance/entitlement.js +108 -0
  64. package/dist-server/controllers/activity-instance/entitlement.js.map +1 -0
  65. package/dist-server/controllers/activity-instance/issue.js +10 -0
  66. package/dist-server/controllers/activity-instance/issue.js.map +1 -1
  67. package/dist-server/controllers/activity-instance/pick.js +8 -0
  68. package/dist-server/controllers/activity-instance/pick.js.map +1 -1
  69. package/dist-server/service/activity/index.d.ts +1 -1
  70. package/dist-server/service/activity-approval/activity-approval-query.d.ts +9 -2
  71. package/dist-server/service/activity-approval/activity-approval-query.js +42 -2
  72. package/dist-server/service/activity-approval/activity-approval-query.js.map +1 -1
  73. package/dist-server/service/activity-instance/activity-instance-mutation.js +20 -9
  74. package/dist-server/service/activity-instance/activity-instance-mutation.js.map +1 -1
  75. package/dist-server/service/activity-instance/activity-instance-query.js +25 -2
  76. package/dist-server/service/activity-instance/activity-instance-query.js.map +1 -1
  77. package/dist-server/service/activity-instance/index.d.ts +1 -1
  78. package/dist-server/service/activity-template/index.d.ts +1 -1
  79. package/dist-server/service/activity-thread/index.d.ts +1 -1
  80. package/dist-server/service/index.d.ts +3 -3
  81. package/dist-server/tsconfig.tsbuildinfo +1 -1
  82. package/package.json +11 -11
  83. package/translations/en.json +12 -0
  84. package/translations/ja.json +12 -0
  85. package/translations/ko.json +12 -0
  86. package/translations/ms.json +12 -0
  87. package/translations/zh.json +12 -0
@@ -1 +1 @@
1
- {"version":3,"file":"activity-thread-view-page.js","sourceRoot":"","sources":["../../../client/pages/activity-thread/activity-thread-view-page.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/board/ox-board-viewer.js'\nimport '../../components/activity-thread-ribon.js'\nimport '../../components/activity-thread-timeline.js'\nimport './activity-thread-view.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 { PageView } from '@operato/shell'\nimport { ScrollbarStyles, CommonButtonStyles } from '@operato/styles'\nimport { provider } from '@things-factory/board-ui/dist-client/board-provider.js'\n\nimport { ActivityFieldsStyles } from '../../components/activity-fields.js'\n\nconst ActivityThreadFetchResult = `\\\n{ id\n state\n dueAt\n assignedAt\n startedAt\n terminatedAt\n assignee { id\n name\n }\n output\n round\n activityApprovals { round\n order\n approver { name\n }\n judgment\n comment\n createdAt\n updatedAt\n terminatedAt\n }\n activityThreadHistories { transaction\n reason\n updater { name\n }\n updatedAt\n state\n output\n }\n activityInstance { id\n name\n description\n state\n activity { id\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 approver { id\n name\n description\n controlNo\n }\n }\n thumbnail\n input\n output\n viewType\n viewSource\n dueAt\n terminatedAt\n terminator { name\n email\n }\n createdAt\n }\n}`\n\nexport const ActivityThreadStatus = { 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-view-page')\nexport class ActivityThreadViewPage extends localize(i18next)(PageView) { static styles = [\n ScrollbarStyles,\n ActivityFieldsStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n\n width: 100%;\n overflow: auto;\n background: var(--ui-bg, #f0f2f4);\n color: var(--ui-ink, #17242c);\n font-size: var(--ui-t-body, 13px);\n }\n\n /* ์นด๋“œ๊ฐ€ ๋‹ด์•„ ์ฃผ๋ฏ€๋กœ ์•ˆ์— ๋“ค์–ด์˜ค๋Š” ํ™”๋ฉด์€ ์ž๊ธฐ ๋ฉด๊ณผ ์—ฌ๋ฐฑ์„ ๊ฐ–์ง€ ์•Š๋Š”๋‹ค. */\n /*\n * โ”€โ”€ ์ค„์–ด๋“ค์ง€ ์•Š๋Š”๋‹ค โ€” ์ค„์–ด๋“ค๋ฉด ๋ณธ๋ฌธ์ด ์ž˜๋ฆฐ๋‹ค (2026-09-07) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n * ์ด ์นธ์€ flex ํ•ญ๋ชฉ์ธ๋ฐ ํฌ๊ธฐ๋ฅผ ์•ˆ ์ •ํ•ด ๋‘์–ด ๊ธฐ๋ณธ๊ฐ’ flex: 0 1 auto ๋กœ ์žˆ์—ˆ๋‹ค. **1 ์ด\n * ์ค„์–ด๋“ ๋‹ค๋Š” ๋œป์ด๋‹ค** โ€” ์„ธ๋กœ๊ฐ€ ๋ชจ์ž๋ผ๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ด ์นธ๋ถ€ํ„ฐ ์ค„์ธ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์—ฌ๊ธฐ์—”\n * overflow: hidden ์ด ๊ฑธ๋ ค ์žˆ์–ด์„œ(์นด๋“œ ๋ชจ์„œ๋ฆฌ๋ฅผ ๋”ฐ๋ผ ์ž๋ฅด๋ ค๊ณ ) ์ค„์–ด๋“  ๋งŒํผ์ด **์Šคํฌ๋กค๋„\n * ์—†์ด ์‚ฌ๋ผ์ง„๋‹ค.**\n *\n * ์‹ค์ธก(1400x620): ์ด ์นธ์ด 242px ๋กœ ์ค„์—ˆ๋Š”๋ฐ ์•ˆ์˜ ๋‚ด์šฉ์€ 362px ์ด์—ˆ๋‹ค. ใ€Œ์—…๋ฌด ๋‚ด์šฉใ€ ์ ˆ์ด\n * 276~464 ์— ์žˆ์–ด ๋Œ€๋ถ€๋ถ„์ด ์ž˜๋ ธ๊ณ , ์ž˜๋ฆฐ ์ž๋ฆฌ ๋ฐ”๋กœ ์•„๋ž˜์—์„œ ํƒ€์ž„๋ผ์ธ์ด ์‹œ์ž‘ํ•˜๋‹ˆ **ํƒ€์ž„๋ผ์ธ์ด\n * ๋ณธ๋ฌธ์„ ๋ฎ์€ ๊ฒƒ์ฒ˜๋Ÿผ** ๋ณด์˜€๋‹ค. ์„ธ๋กœ๊ฐ€ ๋„‰๋„‰ํ•œ ํ™”๋ฉด์—์„œ๋Š” ์ค„์ผ ์ผ์ด ์—†์–ด ๋“œ๋Ÿฌ๋‚˜์ง€ ์•Š์•˜๋‹ค.\n *\n * ์•ˆ์— ์˜ค๋Š” ๊ฒƒ์€ ์…‹ ๋‹ค ๋ฌธ์„œ๋‹ค(template ยท custom-element ยท ์ƒ์„ฑ๋œ ์ ˆ ์นด๋“œ๋“ค). ๋†’์ด๋ฅผ ์ •ํ•ด\n * ์ฃผ์–ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ board ๋ฟ์ด๊ณ  board ๋Š” ์ด ์นธ์„ ๊ฑฐ์น˜์ง€ ์•Š๋Š”๋‹ค(activityContent ์ฐธ์กฐ).\n * ๋ฌธ์„œ๋Š” ์ œ ๋†’์ด๋กœ ์„œ๊ณ , ํ™”๋ฉด์ด ๋ชจ์ž๋ผ๋ฉด **ํŽ˜์ด์ง€ ์ „์ฒด๊ฐ€ ์Šคํฌ๋กคํ•œ๋‹ค** โ€” :host ์˜\n * overflow: auto ๊ฐ€ ์ด๋ฏธ ๊ทธ ์ž๋ฆฌ๋‹ค.\n */\n section[hosted] {\n flex: none;\n padding: 0;\n overflow: hidden;\n }\n\n /*\n * ๋๋‚œ ์—…๋ฌด๋ฅผ ์ฝ๋Š” ํ™”๋ฉด์€ ์ ˆ์ด ์—ฌ๋Ÿฟ์ด๋ผ(๊ธฐ๋ณธ ์ •๋ณด ยท ์—…๋ฌด ์ •๋ณด ยท ์ˆ˜ํ–‰ ๊ฒฐ๊ณผ) ์นด๋“œ๋ฅผ ํ•œ ๊ฒน ๋”\n * ๋‘๋ฅด์ง€ ์•Š๋Š”๋‹ค. ์ ˆ๋“ค์ด ๊ณง ์นด๋“œ๋‹ค.\n */\n section[hosted][plain] {\n margin: 0;\n background: none;\n border: none;\n border-radius: 0;\n }\n\n ox-board-viewer {\n width: 100%;\n height: 100%;\n }\n\n /*\n * ์—ฌ๋ฐฑ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค โ€” **์•ˆ์— ๋“  ์ ˆ๋“ค์ด ์ด๋ฏธ ์ž๊ธฐ ์—ฌ๋ฐฑ์„ ๊ฐ–๋Š”๋‹ค.**\n *\n * ์—ฌ๊ธฐ์— padding ์„ ๋‘๋ฉด ๋‘ ๊ฒน์ด ๋œ๋‹ค. ์‹ค์ธก์œผ๋กœ ํ™•์ธํ–ˆ๋‹ค: ์•ˆ์ชฝ ์ ˆ์˜ ์™ผ์ชฝ์ด 233px,\n * ํƒ€์ž„๋ผ์ธ์ด 221px ์ด์—ˆ๋‹ค(--spacing-large ๋Š” ์ด ์•ฑ์—์„œ 12px ์ด๋‹ค). ํ•œ ํ™”๋ฉด์—์„œ ์นด๋“œ๋งˆ๋‹ค\n * ์™ผ์ชฝ ๊ธฐ์ค€์„ ์ด ๋‹ฌ๋ž๋‹ค.\n */\n activity-thread-view {\n display: block;\n }\n\n activity-thread-timeline {\n margin: var(--spacing-large, 16px);\n }\n\n #custom-content {\n flex: 1;\n }\n\n @media print {\n :host {\n display: block;\n overflow: visible;\n }\n }\n `\n ]\n\n @state() activityThread: any\n\n /**\n * ์กฐํšŒ๋ฅผ ๋งˆ์ณค๋‚˜ โ€” **ใ€Œ์•„์ง ์•ˆ ์ฝ์—ˆ๋‹คใ€์™€ ใ€Œ์—†๋‹คใ€๋Š” ๋‹ค๋ฅด๋‹ค.**\n *\n * ๋ชฉ๋ก์—์„œ ์ค„์„ ๋ˆŒ๋Ÿฌ ๋“ค์–ด์˜จ ์‚ฌ๋žŒ์ด ๋ฐฉ๊ธˆ ๋ณธ ๊ฑด์ด ์—†๋‹ค๋Š” ๋ง์„ ๋จผ์ € ์ฝ์ง€ ์•Š๊ฒŒ, ์กฐํšŒ๊ฐ€ ๋๋‚œ ๋’ค์—๋งŒ\n * ๊ทธ ๋ง์„ ํ•œ๋‹ค.\n */\n @state() loaded = false\n @state() board: any\n\n get context() { return { title: this.lifecycle?.params?.['title'] || i18next.t('title.activity'),\n help: 'worklist/activity-thread-view-page',\n /*\n * ์ด ํ™”๋ฉด์€ ๋ฉ”๋‰ด์— ์—†๋‹ค โ€” ใ€Œ์™„๋ฃŒใ€์—์„œ ์ค„์„ ๋ˆŒ๋Ÿฌ ๋“ค์–ด์˜จ๋‹ค. ๊ทธ๋ž˜์„œ ์™ผ์ชฝ ๋ฉ”๋‰ด๊ฐ€ ๊ฐ€๋ฆฌํ‚ฌ\n * ํ•ญ๋ชฉ์ด ์—†๊ณ , ํ‘œ์‹œ๊ฐ€ ์‚ฌ๋ผ์ ธ ๋“ค์–ด์˜จ ์‚ฌ๋žŒ์ด ์ž๊ธฐ๊ฐ€ ์–ด๋””์— ์žˆ๋Š”์ง€ ์žƒ๋Š”๋‹ค.\n *\n * ์–ด๋А ๋ชฉ๋ก์—์„œ ์—ด๋ฆฌ๋Š”์ง€๋Š” ์ด ํ™”๋ฉด์ด ์•ˆ๋‹ค. ๊ทธ๊ฒƒ์„ ์ ์–ด ๋‘”๋‹ค.\n */\n menu: 'done-list',\n actions: [\n { title: i18next.t('button.close'),\n action: () => { history.back()\n },\n ...CommonButtonStyles.back\n }\n ]\n // activityThread: this.activityThread\n }\n }\n\n render() { const activityThread = this.activityThread\n\n if (!activityThread) {\n return 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 }\n\n return html`\n <activity-thread-ribon .activityThread=${activityThread}></activity-thread-ribon>\n ${this.activityContent()}\n <!--\n ์—ฌ๊ธฐ์„œ๋Š” ํŽธ๋‹ค โ€” ๋๋‚œ ์—…๋ฌด๋ฅผ ๋ณด๋Ÿฌ ์˜จ ํ™”๋ฉด์ด๋ผ ใ€Œ์–ด๋–ป๊ฒŒ ์—ฌ๊ธฐ๊นŒ์ง€ ์™”๋‚˜ใ€๊ฐ€ ๊ณง ๋ณธ๋ฌธ์ด๋‹ค.\n -->\n <activity-thread-timeline .activityThread=${activityThread} open short-form></activity-thread-timeline>\n `\n }\n\n activityContent() { switch (this.activityThread?.activityInstance?.viewType) { case 'template':\n return this.hostedContent(this.templateContent())\n case 'generated':\n return this.generatedContent()\n /* board ๋Š” ์ „์ฒด ํ™”๋ฉด์„ ์“ฐ๋Š” ์บ”๋ฒ„์Šค๋ผ ์นด๋“œ์— ๋‹ด์ง€ ์•Š๋Š”๋‹ค. */\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 * ํ™”๋ฉด ์ข…๋ฅ˜๊ฐ€ ๋‹ฌ๋ผ๋„ ๊ฐ™์€ ์ž๋ฆฌ์— ๊ฐ™์€ ๋ชจ์–‘์œผ๋กœ ๋†“์ธ๋‹ค(activity-approval-page ์˜ ๊ฐ™์€ ์ด๋ฆ„ ์ฐธ์กฐ).\n *\n * plain ์€ ์•ˆ์— ๋“ค์–ด์˜ค๋Š” ๊ฒƒ์ด ์ด๋ฏธ ์ ˆ ์นด๋“œ ์—ฌ๋Ÿฟ์„ ๊ฐ–๊ณ  ์žˆ์„ ๋•Œ๋‹ค โ€” ์นด๋“œ๋ฅผ ๋‘ ๊ฒน ๋‘๋ฅด์ง€ ์•Š๋Š”๋‹ค.\n */\n hostedContent(content: unknown, plain = false) {\n return html`<section hosted ?plain=${plain}>${content}</section>`\n }\n\n templateContent() { if (!this.activityThread) { return html``\n }\n\n const { viewSource: template } = this.activityThread?.activityInstance\n return unsafeHTML(template)\n }\n\n generatedContent(): DirectiveResult { if (!this.activityThread) { return html``\n }\n\n /*\n * id ๊ฐ€ ์•„๋‹ˆ๋ผ **๊ฐ’์„ ๋„˜๊ธด๋‹ค.** ์ „์—๋Š” id ๋งŒ ์ฃผ๊ณ  ๊ทธ์ชฝ์ด ์Šค์Šค๋กœ ๋‹ค์‹œ ์กฐํšŒํ–ˆ๋‹ค โ€” ์ด ํ™”๋ฉด์ด ์ด๋ฏธ\n * ๊ฐ™์€ ๊ฑด์„ ์กฐํšŒํ•œ ๋’ค๋ผ์„œ ํ•œ ๋ฒˆ ์—ด๋ฉด ๊ฐ™์€ ์งˆ์˜๊ฐ€ ๋‘ ๋ฒˆ ๋‚˜๊ฐ”๋‹ค.\n */\n return keyed(\n this.activityThread.id,\n this.hostedContent(\n html`<activity-thread-view .activityThread=${this.activityThread}></activity-thread-view>`,\n true\n )\n )\n }\n\n boardContent(): DirectiveResult { if (!this.activityThread) { return html``\n }\n\n const { output, activityInstance } = this.activityThread\n const { viewSource: boardId, input } = activityInstance || {}\n\n if (!this.board || this.board.id !== boardId) { this.board = { id: boardId\n }\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() { if (!this.activityThread) { return html``\n }\n\n const { output, activityInstance } = this.activityThread\n const { viewSource: tagName, input } = activityInstance || {}\n\n const element = document.createElement(tagName)\n element.id = 'custom-content'\n element.input = input\n element.output = output\n element.addEventListener('change', (e: CustomEvent) => { this.activityThread.output = e.detail\n })\n\n return element\n }\n\n updated(changes) { if (changes.has('activityThread')) { this.updateContext()\n }\n }\n\n async pageUpdated(changes, lifecycle, changedBefore) { if (this.active) { this.fetchActivityThread(lifecycle.resourceId)\n }\n }\n\n async fetchActivityThread(id) { const response = await client.query({ query: gql`\n query activityThread($id: String!) { activityThread(id: $id) ${ActivityThreadFetchResult}\n }\n `,\n variables: { id\n }\n })\n\n this.activityThread = response.data.activityThread\n this.loaded = true\n\n this.updateContext()\n }\n}\n"]}
1
+ {"version":3,"file":"activity-thread-view-page.js","sourceRoot":"","sources":["../../../client/pages/activity-thread/activity-thread-view-page.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/board/ox-board-viewer.js'\nimport '../../components/activity-thread-ribon.js'\nimport '../../components/activity-thread-timeline.js'\nimport './activity-thread-view.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 { PageView } from '@operato/shell'\nimport { ScrollbarStyles, CommonButtonStyles } from '@operato/styles'\nimport { provider } from '@things-factory/board-ui/dist-client/board-provider.js'\n\nimport { ActivityFieldsStyles } from '../../components/activity-fields.js'\n\nconst ActivityThreadFetchResult = `\\\n{ id\n state\n dueAt\n assignedAt\n startedAt\n terminatedAt\n assignee { id\n name\n }\n output\n round\n activityApprovals { round\n order\n approver { name\n }\n judgment\n comment\n createdAt\n updatedAt\n terminatedAt\n }\n activityThreadHistories { transaction\n reason\n updater { name\n }\n updatedAt\n state\n output\n }\n activityInstance { id\n name\n description\n state\n activity { id\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 approver { id\n name\n description\n controlNo\n }\n }\n thumbnail\n input\n output\n viewType\n viewSource\n dueAt\n terminatedAt\n terminator { name\n email\n }\n createdAt\n }\n}`\n\nexport const ActivityThreadStatus = { 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-view-page')\nexport class ActivityThreadViewPage extends localize(i18next)(PageView) { static styles = [\n ScrollbarStyles,\n ActivityFieldsStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n\n width: 100%;\n overflow: auto;\n background: var(--ui-bg, #f0f2f4);\n color: var(--ui-ink, #17242c);\n font-size: var(--ui-t-body, 13px);\n }\n\n /* ์นด๋“œ๊ฐ€ ๋‹ด์•„ ์ฃผ๋ฏ€๋กœ ์•ˆ์— ๋“ค์–ด์˜ค๋Š” ํ™”๋ฉด์€ ์ž๊ธฐ ๋ฉด๊ณผ ์—ฌ๋ฐฑ์„ ๊ฐ–์ง€ ์•Š๋Š”๋‹ค. */\n /*\n * โ”€โ”€ ์ค„์–ด๋“ค์ง€ ์•Š๋Š”๋‹ค โ€” ์ค„์–ด๋“ค๋ฉด ๋ณธ๋ฌธ์ด ์ž˜๋ฆฐ๋‹ค (2026-09-07) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n * ์ด ์นธ์€ flex ํ•ญ๋ชฉ์ธ๋ฐ ํฌ๊ธฐ๋ฅผ ์•ˆ ์ •ํ•ด ๋‘์–ด ๊ธฐ๋ณธ๊ฐ’ flex: 0 1 auto ๋กœ ์žˆ์—ˆ๋‹ค. **1 ์ด\n * ์ค„์–ด๋“ ๋‹ค๋Š” ๋œป์ด๋‹ค** โ€” ์„ธ๋กœ๊ฐ€ ๋ชจ์ž๋ผ๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ด ์นธ๋ถ€ํ„ฐ ์ค„์ธ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์—ฌ๊ธฐ์—”\n * overflow: hidden ์ด ๊ฑธ๋ ค ์žˆ์–ด์„œ(์นด๋“œ ๋ชจ์„œ๋ฆฌ๋ฅผ ๋”ฐ๋ผ ์ž๋ฅด๋ ค๊ณ ) ์ค„์–ด๋“  ๋งŒํผ์ด **์Šคํฌ๋กค๋„\n * ์—†์ด ์‚ฌ๋ผ์ง„๋‹ค.**\n *\n * ์‹ค์ธก(1400x620): ์ด ์นธ์ด 242px ๋กœ ์ค„์—ˆ๋Š”๋ฐ ์•ˆ์˜ ๋‚ด์šฉ์€ 362px ์ด์—ˆ๋‹ค. ใ€Œ์—…๋ฌด ๋‚ด์šฉใ€ ์ ˆ์ด\n * 276~464 ์— ์žˆ์–ด ๋Œ€๋ถ€๋ถ„์ด ์ž˜๋ ธ๊ณ , ์ž˜๋ฆฐ ์ž๋ฆฌ ๋ฐ”๋กœ ์•„๋ž˜์—์„œ ํƒ€์ž„๋ผ์ธ์ด ์‹œ์ž‘ํ•˜๋‹ˆ **ํƒ€์ž„๋ผ์ธ์ด\n * ๋ณธ๋ฌธ์„ ๋ฎ์€ ๊ฒƒ์ฒ˜๋Ÿผ** ๋ณด์˜€๋‹ค. ์„ธ๋กœ๊ฐ€ ๋„‰๋„‰ํ•œ ํ™”๋ฉด์—์„œ๋Š” ์ค„์ผ ์ผ์ด ์—†์–ด ๋“œ๋Ÿฌ๋‚˜์ง€ ์•Š์•˜๋‹ค.\n *\n * ์•ˆ์— ์˜ค๋Š” ๊ฒƒ์€ ์…‹ ๋‹ค ๋ฌธ์„œ๋‹ค(template ยท custom-element ยท ์ƒ์„ฑ๋œ ์ ˆ ์นด๋“œ๋“ค). ๋†’์ด๋ฅผ ์ •ํ•ด\n * ์ฃผ์–ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ board ๋ฟ์ด๊ณ  board ๋Š” ์ด ์นธ์„ ๊ฑฐ์น˜์ง€ ์•Š๋Š”๋‹ค(activityContent ์ฐธ์กฐ).\n * ๋ฌธ์„œ๋Š” ์ œ ๋†’์ด๋กœ ์„œ๊ณ , ํ™”๋ฉด์ด ๋ชจ์ž๋ผ๋ฉด **ํŽ˜์ด์ง€ ์ „์ฒด๊ฐ€ ์Šคํฌ๋กคํ•œ๋‹ค** โ€” :host ์˜\n * overflow: auto ๊ฐ€ ์ด๋ฏธ ๊ทธ ์ž๋ฆฌ๋‹ค.\n */\n section[hosted] {\n flex: none;\n padding: 0;\n overflow: hidden;\n }\n\n /*\n * ๋๋‚œ ์—…๋ฌด๋ฅผ ์ฝ๋Š” ํ™”๋ฉด์€ ์ ˆ์ด ์—ฌ๋Ÿฟ์ด๋ผ(๊ธฐ๋ณธ ์ •๋ณด ยท ์—…๋ฌด ์ •๋ณด ยท ์ˆ˜ํ–‰ ๊ฒฐ๊ณผ) ์นด๋“œ๋ฅผ ํ•œ ๊ฒน ๋”\n * ๋‘๋ฅด์ง€ ์•Š๋Š”๋‹ค. ์ ˆ๋“ค์ด ๊ณง ์นด๋“œ๋‹ค.\n */\n section[hosted][plain] {\n margin: 0;\n background: none;\n border: none;\n border-radius: 0;\n }\n\n ox-board-viewer {\n width: 100%;\n height: 100%;\n }\n\n /*\n * ์—ฌ๋ฐฑ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค โ€” **์•ˆ์— ๋“  ์ ˆ๋“ค์ด ์ด๋ฏธ ์ž๊ธฐ ์—ฌ๋ฐฑ์„ ๊ฐ–๋Š”๋‹ค.**\n *\n * ์—ฌ๊ธฐ์— padding ์„ ๋‘๋ฉด ๋‘ ๊ฒน์ด ๋œ๋‹ค. ์‹ค์ธก์œผ๋กœ ํ™•์ธํ–ˆ๋‹ค: ์•ˆ์ชฝ ์ ˆ์˜ ์™ผ์ชฝ์ด 233px,\n * ํƒ€์ž„๋ผ์ธ์ด 221px ์ด์—ˆ๋‹ค(--spacing-large ๋Š” ์ด ์•ฑ์—์„œ 12px ์ด๋‹ค). ํ•œ ํ™”๋ฉด์—์„œ ์นด๋“œ๋งˆ๋‹ค\n * ์™ผ์ชฝ ๊ธฐ์ค€์„ ์ด ๋‹ฌ๋ž๋‹ค.\n */\n activity-thread-view {\n display: block;\n }\n\n activity-thread-timeline {\n margin: var(--spacing-large, 16px);\n }\n\n #custom-content {\n flex: 1;\n }\n\n @media print {\n :host {\n display: block;\n overflow: visible;\n }\n }\n `\n ]\n\n @state() activityThread: any\n\n /**\n * ์กฐํšŒ๋ฅผ ๋งˆ์ณค๋‚˜ โ€” **ใ€Œ์•„์ง ์•ˆ ์ฝ์—ˆ๋‹คใ€์™€ ใ€Œ์—†๋‹คใ€๋Š” ๋‹ค๋ฅด๋‹ค.**\n *\n * ๋ชฉ๋ก์—์„œ ์ค„์„ ๋ˆŒ๋Ÿฌ ๋“ค์–ด์˜จ ์‚ฌ๋žŒ์ด ๋ฐฉ๊ธˆ ๋ณธ ๊ฑด์ด ์—†๋‹ค๋Š” ๋ง์„ ๋จผ์ € ์ฝ์ง€ ์•Š๊ฒŒ, ์กฐํšŒ๊ฐ€ ๋๋‚œ ๋’ค์—๋งŒ\n * ๊ทธ ๋ง์„ ํ•œ๋‹ค.\n */\n @state() loaded = false\n @state() board: any\n\n get context() { return { title: this.lifecycle?.params?.['title'] || i18next.t('title.activity'),\n help: 'worklist/activity-thread-view-page',\n /*\n * ์ด ํ™”๋ฉด์€ ๋ฉ”๋‰ด์— ์—†๋‹ค โ€” ใ€Œ์™„๋ฃŒใ€์—์„œ ์ค„์„ ๋ˆŒ๋Ÿฌ ๋“ค์–ด์˜จ๋‹ค. ๊ทธ๋ž˜์„œ ์™ผ์ชฝ ๋ฉ”๋‰ด๊ฐ€ ๊ฐ€๋ฆฌํ‚ฌ\n * ํ•ญ๋ชฉ์ด ์—†๊ณ , ํ‘œ์‹œ๊ฐ€ ์‚ฌ๋ผ์ ธ ๋“ค์–ด์˜จ ์‚ฌ๋žŒ์ด ์ž๊ธฐ๊ฐ€ ์–ด๋””์— ์žˆ๋Š”์ง€ ์žƒ๋Š”๋‹ค.\n *\n * ์–ด๋А ๋ชฉ๋ก์—์„œ ์—ด๋ฆฌ๋Š”์ง€๋Š” ์ด ํ™”๋ฉด์ด ์•ˆ๋‹ค. ๊ทธ๊ฒƒ์„ ์ ์–ด ๋‘”๋‹ค.\n */\n menu: 'done-list',\n actions: [\n { title: i18next.t('button.close'),\n action: () => { history.back()\n },\n ...CommonButtonStyles.back\n }\n ]\n // activityThread: this.activityThread\n }\n }\n\n render() { const activityThread = this.activityThread\n\n if (!activityThread) {\n return 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 }\n\n return html`\n <activity-thread-ribon .activityThread=${activityThread}></activity-thread-ribon>\n ${this.activityContent()}\n <!--\n ์—ฌ๊ธฐ์„œ๋Š” ํŽธ๋‹ค โ€” ๋๋‚œ ์—…๋ฌด๋ฅผ ๋ณด๋Ÿฌ ์˜จ ํ™”๋ฉด์ด๋ผ ใ€Œ์–ด๋–ป๊ฒŒ ์—ฌ๊ธฐ๊นŒ์ง€ ์™”๋‚˜ใ€๊ฐ€ ๊ณง ๋ณธ๋ฌธ์ด๋‹ค.\n -->\n <activity-thread-timeline .activityThread=${activityThread} open short-form></activity-thread-timeline>\n `\n }\n\n activityContent() { switch (this.activityThread?.activityInstance?.viewType) { case 'template':\n return this.hostedContent(this.templateContent())\n case 'generated':\n return this.generatedContent()\n /* board ๋Š” ์ „์ฒด ํ™”๋ฉด์„ ์“ฐ๋Š” ์บ”๋ฒ„์Šค๋ผ ์นด๋“œ์— ๋‹ด์ง€ ์•Š๋Š”๋‹ค. */\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 * ํ™”๋ฉด ์ข…๋ฅ˜๊ฐ€ ๋‹ฌ๋ผ๋„ ๊ฐ™์€ ์ž๋ฆฌ์— ๊ฐ™์€ ๋ชจ์–‘์œผ๋กœ ๋†“์ธ๋‹ค(activity-approval-page ์˜ ๊ฐ™์€ ์ด๋ฆ„ ์ฐธ์กฐ).\n *\n * plain ์€ ์•ˆ์— ๋“ค์–ด์˜ค๋Š” ๊ฒƒ์ด ์ด๋ฏธ ์ ˆ ์นด๋“œ ์—ฌ๋Ÿฟ์„ ๊ฐ–๊ณ  ์žˆ์„ ๋•Œ๋‹ค โ€” ์นด๋“œ๋ฅผ ๋‘ ๊ฒน ๋‘๋ฅด์ง€ ์•Š๋Š”๋‹ค.\n */\n hostedContent(content: unknown, plain = false) {\n return html`<section hosted ?plain=${plain}>${content}</section>`\n }\n\n templateContent() { if (!this.activityThread) { return html``\n }\n\n const { viewSource: template } = this.activityThread?.activityInstance\n return unsafeHTML(template)\n }\n\n generatedContent(): DirectiveResult { if (!this.activityThread) { return html``\n }\n\n /*\n * id ๊ฐ€ ์•„๋‹ˆ๋ผ **๊ฐ’์„ ๋„˜๊ธด๋‹ค.** ์ „์—๋Š” id ๋งŒ ์ฃผ๊ณ  ๊ทธ์ชฝ์ด ์Šค์Šค๋กœ ๋‹ค์‹œ ์กฐํšŒํ–ˆ๋‹ค โ€” ์ด ํ™”๋ฉด์ด ์ด๋ฏธ\n * ๊ฐ™์€ ๊ฑด์„ ์กฐํšŒํ•œ ๋’ค๋ผ์„œ ํ•œ ๋ฒˆ ์—ด๋ฉด ๊ฐ™์€ ์งˆ์˜๊ฐ€ ๋‘ ๋ฒˆ ๋‚˜๊ฐ”๋‹ค.\n */\n return keyed(\n this.activityThread.id,\n this.hostedContent(\n html`<activity-thread-view .activityThread=${this.activityThread}></activity-thread-view>`,\n true\n )\n )\n }\n\n boardContent(): DirectiveResult { if (!this.activityThread) { return html``\n }\n\n const { output, activityInstance } = this.activityThread\n const { viewSource: boardId, input } = activityInstance || {}\n\n if (!this.board || this.board.id !== boardId) { this.board = { id: boardId\n }\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() { if (!this.activityThread) { return html``\n }\n\n const { output, activityInstance } = this.activityThread\n const { viewSource: tagName, input } = activityInstance || {}\n\n const element = document.createElement(tagName)\n element.id = 'custom-content'\n element.input = input\n element.output = output\n element.addEventListener('change', (e: CustomEvent) => { this.activityThread.output = e.detail\n })\n\n return element\n }\n\n updated(changes) { if (changes.has('activityThread')) { this.updateContext()\n }\n }\n\n async pageUpdated(changes, lifecycle, changedBefore) { if (this.active) { this.fetchActivityThread(lifecycle.resourceId)\n }\n }\n\n async fetchActivityThread(id) { const response = await client.query({ query: gql`\n query activityThread($id: String!) { activityThread(id: $id) ${ActivityThreadFetchResult}\n }\n `,\n variables: { id\n }\n })\n\n this.activityThread = response.data.activityThread\n this.loaded = true\n\n this.updateContext()\n }\n}\n"]}
@@ -16,23 +16,23 @@ export declare class ApprovalPendingListPage extends ApprovalPendingListPage_bas
16
16
  /**
17
17
  * ์ง€๊ธˆ ์–ด๋А ๋ฌถ์Œ์„ ๋ณด๊ณ  ์žˆ๋‚˜.
18
18
  *
19
- * โ”€โ”€ ์™œ ํ•œ ํ™”๋ฉด์— ๋‘ ๋ฌถ์Œ์ธ๊ฐ€ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
19
+ * โ”€โ”€ ์™œ ํ•œ ํ™”๋ฉด์— ์„ธ ๋ฌถ์Œ์ธ๊ฐ€ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
20
20
  * ์ฐธ์กฐ๋ฅผ ๋ณ„๋„ ํ™”๋ฉด์œผ๋กœ ๋งŒ๋“ค๋ฉด **์•„๋ฌด๋„ ์—ด์ง€ ์•Š๋Š”๋‹ค.** ์ฐธ์กฐ๋Š” ์•ˆ ๋ด๋„ ์•„๋ฌด ์ผ์ด ์•ˆ ์ผ์–ด๋‚˜๋ฏ€๋กœ,
21
21
  * ์•„์นจ์— ์—…๋ฌด ์•ฑ์„ ์—ด๋ฉด ใ€Œ์Šน์ธ ๋Œ€๊ธฐใ€๋ฅผ ๋ณด์ง€ ใ€Œ์ฐธ์กฐใ€๋ฅผ ๋”ฐ๋กœ ์—ด์ง€ ์•Š๋Š”๋‹ค. ์ฐธ์กฐ๋ฅผ ๋งŒ๋“  ์ด์œ ๊ฐ€ ์˜๊ฒฌ์„
22
22
  * ๋“ฃ๋Š” ๊ฒƒ์ธ๋ฐ ์•ˆ ์—ฌ๋Š” ํ™”๋ฉด์— ๋„ฃ์œผ๋ฉด ์˜๊ฒฌ์ด ์•ˆ ์˜จ๋‹ค.
23
23
  *
24
- * ๊ทธ๋ž˜์„œ ํ•œ ํ™”๋ฉด์— ๋‘๊ณ , **๋‘ ์ˆ˜๋ฅผ ํ•จ๊ป˜ ๋ณด์ธ๋‹ค.** ํ•œ ๊ณณ๋งŒ ์—ด๋ฉด ๋‘˜ ๋‹ค ๋ˆˆ์— ๋“ ๋‹ค.
24
+ * ๊ทธ๋ž˜์„œ ํ•œ ํ™”๋ฉด์— ๋‘๊ณ , ์™„๋ฃŒ ์ด๋ ฅ๋„ ๊ฐ™์€ ์ž๋ฆฌ์—์„œ ๋‹ค์‹œ ์ฐพ์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.
25
25
  *
26
26
  * โ”€โ”€ ๊ทธ๋ ‡๋‹ค๊ณ  ํ•œ ๋ชฉ๋ก์— ์„ž์ง€ ์•Š๋Š”๋‹ค โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
27
- * ๋‘ ๋ฌถ์Œ์˜ ๋ฌผ์Œ์ด ๋‹ค๋ฅด๋‹ค โ€” ใ€Œ๋‚ด๊ฐ€ ๊ฒฐ์ •ํ•  ๊ฒƒใ€๊ณผ ใ€Œ๋‚ด๊ฐ€ ์•Œ์•„์•ผ ํ•  ๊ฒƒใ€. ์„ž์œผ๋ฉด ์ฐธ์กฐ๊ฐ€ ใ€Œ๋‚ด๊ฐ€ ์Šน์ธํ•ด์•ผ
28
- * ํ•˜๋‚˜ใ€๋กœ ์ฝํžˆ๊ณ , ๋ฐฐ์ง€์— 12๊ฐ€ ๋œจ๋Š”๋ฐ ๊ฒฐ์ •ํ•  ๊ฒƒ์€ 3๊ฑด์ด ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๊ทธ ์ˆ˜๋ฅผ ์•ˆ ๋ฏฟ๊ฒŒ ๋œ๋‹ค.
27
+ * ์„ธ ๋ฌถ์Œ์˜ ๋ฌผ์Œ์ด ๋‹ค๋ฅด๋‹ค โ€” ใ€Œ๋‚ด๊ฐ€ ๊ฒฐ์ •ํ•  ๊ฒƒใ€, ใ€Œ๋‚ด๊ฐ€ ์•Œ์•„์•ผ ํ•  ๊ฒƒใ€, ใ€Œ๋๋‚œ ์ฐธ์กฐ ์ด๋ ฅใ€. ์„ž์œผ๋ฉด
28
+ * ์ฐธ์กฐ๊ฐ€ ใ€Œ๋‚ด๊ฐ€ ์Šน์ธํ•ด์•ผ ํ•˜๋‚˜ใ€๋กœ ์ฝํžˆ๊ณ , ๋ฐฐ์ง€์— 12๊ฐ€ ๋œจ๋Š”๋ฐ ๊ฒฐ์ •ํ•  ๊ฒƒ์€ 3๊ฑด์ด ๋œ๋‹ค.
29
29
  *
30
30
  * โ”€โ”€ ์ฃผ์†Œ๊ฐ€ ์ฃผ์ธ์ด๋‹ค โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
31
31
  * `.../approval-pending-list/reference` ๋กœ ๋ถ™์—ฌ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ๋Œ€์ƒ์ด ๋ฐ”๋€Œ๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ํ•„ํ„ฐ์™€ ๋‹ฌ๋ฆฌ
32
32
  * ์ฃผ์†Œ์— ๋‹ด๋Š”๋‹ค.
33
33
  */
34
34
  private group;
35
- /** ๋‘ ๋ฌถ์Œ์˜ ๊ฑด์ˆ˜. ํƒญ์— ํ•จ๊ป˜ ์ ๋Š”๋‹ค โ€” ์•ˆ ๋ˆŒ๋Ÿฌ๋„ ์–ผ๋งˆ๋‚˜ ์žˆ๋Š”์ง€ ๋ณด์—ฌ์•ผ ํ•œ๋‹ค. */
35
+ /** ์„ธ ๋ฌถ์Œ์˜ ๊ฑด์ˆ˜. ํƒญ์— ํ•จ๊ป˜ ์ ๋Š”๋‹ค โ€” ์•ˆ ๋ˆŒ๋Ÿฌ๋„ ์–ผ๋งˆ๋‚˜ ์žˆ๋Š”์ง€ ๋ณด์—ฌ์•ผ ํ•œ๋‹ค. */
36
36
  private counts;
37
37
  mode: 'GRID' | 'LIST' | 'CARD';
38
38
  grist: DataGrist;
@@ -57,7 +57,7 @@ export declare class ApprovalPendingListPage extends ApprovalPendingListPage_bas
57
57
  /**
58
58
  * ์•ˆ ๋ณด๊ณ  ์žˆ๋Š” ๋ฌถ์Œ์˜ ๊ฑด์ˆ˜๋ฅผ ๋”ฐ๋กœ ์„ผ๋‹ค โ€” ํ•œ ์ค„๋งŒ ๋ฐ›์•„ `total` ์„ ์ฝ๋Š”๋‹ค.
59
59
  *
60
- * ๋ณด๊ณ  ์žˆ๋Š” ์ชฝ์˜ ์ˆ˜๋Š” ๋ชฉ๋ก ์กฐํšŒ๊ฐ€ ์ด๋ฏธ ์•Œ๋ ค ์ค€๋‹ค(fetchHandler). ๊ทธ๋ž˜์„œ ์—ฌ๊ธฐ์„œ๋Š” ๋ฐ˜๋Œ€์ชฝ๋งŒ ๋ฌป๋Š”๋‹ค.
60
+ * ๋ณด๊ณ  ์žˆ๋Š” ์ชฝ์˜ ์ˆ˜๋Š” ๋ชฉ๋ก ์กฐํšŒ๊ฐ€ ์ด๋ฏธ ์•Œ๋ ค ์ค€๋‹ค(fetchHandler). ๊ทธ๋ž˜์„œ ์—ฌ๊ธฐ์„œ๋Š” ๋‚˜๋จธ์ง€ ๋‘˜๋งŒ ๋ฌป๋Š”๋‹ค.
61
61
  */
62
62
  private countOther;
63
63
  pageInitialized(lifecycle: any): Promise<void>;
@@ -24,23 +24,23 @@ let ApprovalPendingListPage = class ApprovalPendingListPage extends p13n(localiz
24
24
  /**
25
25
  * ์ง€๊ธˆ ์–ด๋А ๋ฌถ์Œ์„ ๋ณด๊ณ  ์žˆ๋‚˜.
26
26
  *
27
- * โ”€โ”€ ์™œ ํ•œ ํ™”๋ฉด์— ๋‘ ๋ฌถ์Œ์ธ๊ฐ€ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
27
+ * โ”€โ”€ ์™œ ํ•œ ํ™”๋ฉด์— ์„ธ ๋ฌถ์Œ์ธ๊ฐ€ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
28
28
  * ์ฐธ์กฐ๋ฅผ ๋ณ„๋„ ํ™”๋ฉด์œผ๋กœ ๋งŒ๋“ค๋ฉด **์•„๋ฌด๋„ ์—ด์ง€ ์•Š๋Š”๋‹ค.** ์ฐธ์กฐ๋Š” ์•ˆ ๋ด๋„ ์•„๋ฌด ์ผ์ด ์•ˆ ์ผ์–ด๋‚˜๋ฏ€๋กœ,
29
29
  * ์•„์นจ์— ์—…๋ฌด ์•ฑ์„ ์—ด๋ฉด ใ€Œ์Šน์ธ ๋Œ€๊ธฐใ€๋ฅผ ๋ณด์ง€ ใ€Œ์ฐธ์กฐใ€๋ฅผ ๋”ฐ๋กœ ์—ด์ง€ ์•Š๋Š”๋‹ค. ์ฐธ์กฐ๋ฅผ ๋งŒ๋“  ์ด์œ ๊ฐ€ ์˜๊ฒฌ์„
30
30
  * ๋“ฃ๋Š” ๊ฒƒ์ธ๋ฐ ์•ˆ ์—ฌ๋Š” ํ™”๋ฉด์— ๋„ฃ์œผ๋ฉด ์˜๊ฒฌ์ด ์•ˆ ์˜จ๋‹ค.
31
31
  *
32
- * ๊ทธ๋ž˜์„œ ํ•œ ํ™”๋ฉด์— ๋‘๊ณ , **๋‘ ์ˆ˜๋ฅผ ํ•จ๊ป˜ ๋ณด์ธ๋‹ค.** ํ•œ ๊ณณ๋งŒ ์—ด๋ฉด ๋‘˜ ๋‹ค ๋ˆˆ์— ๋“ ๋‹ค.
32
+ * ๊ทธ๋ž˜์„œ ํ•œ ํ™”๋ฉด์— ๋‘๊ณ , ์™„๋ฃŒ ์ด๋ ฅ๋„ ๊ฐ™์€ ์ž๋ฆฌ์—์„œ ๋‹ค์‹œ ์ฐพ์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.
33
33
  *
34
34
  * โ”€โ”€ ๊ทธ๋ ‡๋‹ค๊ณ  ํ•œ ๋ชฉ๋ก์— ์„ž์ง€ ์•Š๋Š”๋‹ค โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
35
- * ๋‘ ๋ฌถ์Œ์˜ ๋ฌผ์Œ์ด ๋‹ค๋ฅด๋‹ค โ€” ใ€Œ๋‚ด๊ฐ€ ๊ฒฐ์ •ํ•  ๊ฒƒใ€๊ณผ ใ€Œ๋‚ด๊ฐ€ ์•Œ์•„์•ผ ํ•  ๊ฒƒใ€. ์„ž์œผ๋ฉด ์ฐธ์กฐ๊ฐ€ ใ€Œ๋‚ด๊ฐ€ ์Šน์ธํ•ด์•ผ
36
- * ํ•˜๋‚˜ใ€๋กœ ์ฝํžˆ๊ณ , ๋ฐฐ์ง€์— 12๊ฐ€ ๋œจ๋Š”๋ฐ ๊ฒฐ์ •ํ•  ๊ฒƒ์€ 3๊ฑด์ด ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๊ทธ ์ˆ˜๋ฅผ ์•ˆ ๋ฏฟ๊ฒŒ ๋œ๋‹ค.
35
+ * ์„ธ ๋ฌถ์Œ์˜ ๋ฌผ์Œ์ด ๋‹ค๋ฅด๋‹ค โ€” ใ€Œ๋‚ด๊ฐ€ ๊ฒฐ์ •ํ•  ๊ฒƒใ€, ใ€Œ๋‚ด๊ฐ€ ์•Œ์•„์•ผ ํ•  ๊ฒƒใ€, ใ€Œ๋๋‚œ ์ฐธ์กฐ ์ด๋ ฅใ€. ์„ž์œผ๋ฉด
36
+ * ์ฐธ์กฐ๊ฐ€ ใ€Œ๋‚ด๊ฐ€ ์Šน์ธํ•ด์•ผ ํ•˜๋‚˜ใ€๋กœ ์ฝํžˆ๊ณ , ๋ฐฐ์ง€์— 12๊ฐ€ ๋œจ๋Š”๋ฐ ๊ฒฐ์ •ํ•  ๊ฒƒ์€ 3๊ฑด์ด ๋œ๋‹ค.
37
37
  *
38
38
  * โ”€โ”€ ์ฃผ์†Œ๊ฐ€ ์ฃผ์ธ์ด๋‹ค โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
39
39
  * `.../approval-pending-list/reference` ๋กœ ๋ถ™์—ฌ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ๋Œ€์ƒ์ด ๋ฐ”๋€Œ๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ํ•„ํ„ฐ์™€ ๋‹ฌ๋ฆฌ
40
40
  * ์ฃผ์†Œ์— ๋‹ด๋Š”๋‹ค.
41
41
  */
42
42
  this.group = 'approval';
43
- /** ๋‘ ๋ฌถ์Œ์˜ ๊ฑด์ˆ˜. ํƒญ์— ํ•จ๊ป˜ ์ ๋Š”๋‹ค โ€” ์•ˆ ๋ˆŒ๋Ÿฌ๋„ ์–ผ๋งˆ๋‚˜ ์žˆ๋Š”์ง€ ๋ณด์—ฌ์•ผ ํ•œ๋‹ค. */
43
+ /** ์„ธ ๋ฌถ์Œ์˜ ๊ฑด์ˆ˜. ํƒญ์— ํ•จ๊ป˜ ์ ๋Š”๋‹ค โ€” ์•ˆ ๋ˆŒ๋Ÿฌ๋„ ์–ผ๋งˆ๋‚˜ ์žˆ๋Š”์ง€ ๋ณด์—ฌ์•ผ ํ•œ๋‹ค. */
44
44
  this.counts = {};
45
45
  this.mode = isMobileDevice() ? 'CARD' : 'GRID';
46
46
  }
@@ -105,7 +105,7 @@ let ApprovalPendingListPage = class ApprovalPendingListPage extends p13n(localiz
105
105
  }
106
106
 
107
107
  /*
108
- * ๋‘ ๋ฌถ์Œ โ€” ํ‘œ ์œ„. ์ง€๊ธˆ ๋ณด๋Š” ์ชฝ์€ ๋ฐ‘์ค„๊ณผ ๊ตต๊ธฐ๋กœ ๋งํ•˜๊ณ , ์˜†์— ๊ฑด์ˆ˜๋ฅผ ์ ๋Š”๋‹ค.
108
+ * ์„ธ ๋ฌถ์Œ โ€” ํ‘œ ์œ„. ์ง€๊ธˆ ๋ณด๋Š” ์ชฝ์€ ๋ฐ‘์ค„๊ณผ ๊ตต๊ธฐ๋กœ ๋งํ•˜๊ณ , ์˜†์— ๊ฑด์ˆ˜๋ฅผ ์ ๋Š”๋‹ค.
109
109
  *
110
110
  * ๊ฑด์ˆ˜๋ฅผ ์•ˆ ๋ˆŒ๋Ÿฌ๋„ ๋ณด์ด๊ฒŒ ๋‘๋Š” ๊ฒƒ์ด ์š”์ ์ด๋‹ค. ์ฐธ์กฐ์— ๋ช‡ ๊ฑด์ด ์žˆ๋Š”์ง€ ๋ชจ๋ฅด๋ฉด ์—ด์–ด ๋ณผ ์ด์œ ๊ฐ€ ์—†๋‹ค.
111
111
  *
@@ -213,7 +213,7 @@ let ApprovalPendingListPage = class ApprovalPendingListPage extends p13n(localiz
213
213
  const mode = this.mode || (isMobileDevice() ? 'CARD' : 'GRID');
214
214
  return html `
215
215
  <!--
216
- ๋‘ ๋ฌถ์Œ โ€” ํ‘œ **๋ฐ”๊นฅ** ์œ„์— ๋‘”๋‹ค.
216
+ ์„ธ ๋ฌถ์Œ โ€” ํ‘œ **๋ฐ”๊นฅ** ์œ„์— ๋‘”๋‹ค.
217
217
 
218
218
  ํ—ค๋“œ๋ฃธ์— ๋‘๋ฉด ํ•„ํ„ฐ๋ฅผ ์ ‘์„ ๋•Œ ํ•จ๊ป˜ ์‚ฌ๋ผ์ง€๊ณ , ๊ทธ๋Ÿฌ๋ฉด ์ฐธ์กฐ๋กœ ๊ฐ€๋Š” ์œ ์ผํ•œ ๊ธธ์ด ์—†์–ด์ง„๋‹ค.
219
219
  ํ•„ํ„ฐ๋Š” ์ ‘ํ˜€๋„ ๋˜์ง€๋งŒ(ํ’€๋ฉด ์ „์ฒด๊ฐ€ ๋Œ์•„์˜จ๋‹ค) ์ด๊ฒƒ์€ ์ ‘ํžˆ๋ฉด ์•ˆ ๋œ๋‹ค.
@@ -221,7 +221,8 @@ let ApprovalPendingListPage = class ApprovalPendingListPage extends p13n(localiz
221
221
  <div class="groups">
222
222
  ${[
223
223
  ['approval', 'label.group-approval', 'text.group-approval-hint'],
224
- ['reference', 'label.group-reference', 'text.group-reference-hint']
224
+ ['reference', 'label.group-reference', 'text.group-reference-hint'],
225
+ ['completed', 'label.group-completed', 'text.group-completed-hint']
225
226
  ].map(([key, label, hint]) => html `
226
227
  <button
227
228
  ?data-selected=${this.group === key}
@@ -229,9 +230,9 @@ let ApprovalPendingListPage = class ApprovalPendingListPage extends p13n(localiz
229
230
  @click=${() => this.selectGroup(key)}
230
231
  >
231
232
  ${i18next.t(label)}
232
- ${this.counts[key] === undefined
233
- ? ''
234
- : html `<span class="n">${this.counts[key].toLocaleString(i18next.language || undefined)}</span>`}
233
+ ${key !== 'completed' && this.counts[key] !== undefined
234
+ ? html `<span class="n">${this.counts[key].toLocaleString(i18next.language || undefined)}</span>`
235
+ : ''}
235
236
  </button>
236
237
  `)}
237
238
  </div>
@@ -279,7 +280,7 @@ let ApprovalPendingListPage = class ApprovalPendingListPage extends p13n(localiz
279
280
  navigate(group === 'approval' ? `${page}` : `${page}/${group}`);
280
281
  }
281
282
  async syncGroup(key) {
282
- const group = key === 'reference' ? 'reference' : 'approval';
283
+ const group = key === 'reference' || key === 'completed' ? key : 'approval';
283
284
  if (this.group === group && this.gristConfig) {
284
285
  return;
285
286
  }
@@ -289,22 +290,28 @@ let ApprovalPendingListPage = class ApprovalPendingListPage extends p13n(localiz
289
290
  /**
290
291
  * ์•ˆ ๋ณด๊ณ  ์žˆ๋Š” ๋ฌถ์Œ์˜ ๊ฑด์ˆ˜๋ฅผ ๋”ฐ๋กœ ์„ผ๋‹ค โ€” ํ•œ ์ค„๋งŒ ๋ฐ›์•„ `total` ์„ ์ฝ๋Š”๋‹ค.
291
292
  *
292
- * ๋ณด๊ณ  ์žˆ๋Š” ์ชฝ์˜ ์ˆ˜๋Š” ๋ชฉ๋ก ์กฐํšŒ๊ฐ€ ์ด๋ฏธ ์•Œ๋ ค ์ค€๋‹ค(fetchHandler). ๊ทธ๋ž˜์„œ ์—ฌ๊ธฐ์„œ๋Š” ๋ฐ˜๋Œ€์ชฝ๋งŒ ๋ฌป๋Š”๋‹ค.
293
+ * ๋ณด๊ณ  ์žˆ๋Š” ์ชฝ์˜ ์ˆ˜๋Š” ๋ชฉ๋ก ์กฐํšŒ๊ฐ€ ์ด๋ฏธ ์•Œ๋ ค ์ค€๋‹ค(fetchHandler). ๊ทธ๋ž˜์„œ ์—ฌ๊ธฐ์„œ๋Š” ๋‚˜๋จธ์ง€ ๋‘˜๋งŒ ๋ฌป๋Š”๋‹ค.
293
294
  */
294
295
  async countOther() {
295
- const other = this.group === 'approval' ? 'reference' : 'approval';
296
- const query = other === 'approval' ? 'approvalPendingList' : 'approvalReferenceList';
297
- const response = await client.query({
298
- query: gql `
299
- query ($pagination: Pagination) {
300
- responses: ${query}(pagination: $pagination) {
301
- total
302
- }
303
- }
304
- `,
305
- variables: { pagination: { page: 1, limit: 1 } },
306
- fetchPolicy: 'no-cache'
307
- });
296
+ const queries = {
297
+ approval: 'approvalPendingList',
298
+ reference: 'approvalReferenceList'
299
+ };
300
+ const others = Object.keys(queries).filter(group => group !== this.group);
301
+ const results = await Promise.all(others.map(async (group) => ({
302
+ group,
303
+ response: await client.query({
304
+ query: gql `
305
+ query ($pagination: Pagination) {
306
+ responses: ${queries[group]}(pagination: $pagination) {
307
+ total
308
+ }
309
+ }
310
+ `,
311
+ variables: { pagination: { page: 1, limit: 1 } },
312
+ fetchPolicy: 'no-cache'
313
+ })
314
+ })));
308
315
  /*
309
316
  * A count we could not fetch is not zero.
310
317
  *
@@ -313,11 +320,13 @@ let ApprovalPendingListPage = class ApprovalPendingListPage extends p13n(localiz
313
320
  * ใ€Œ0ใ€, which says "nothing is waiting on you". The render already draws nothing when the count
314
321
  * is undefined, so leaving it unknown is both honest and already handled.
315
322
  */
316
- const total = response.errors?.length ? undefined : response.data?.responses?.total;
317
- if (typeof total != 'number') {
318
- return;
323
+ const counts = { ...this.counts };
324
+ for (const { group, response } of results) {
325
+ const total = response.errors?.length ? undefined : response.data?.responses?.total;
326
+ if (typeof total == 'number')
327
+ counts[group] = total;
319
328
  }
320
- this.counts = { ...this.counts, [other]: total };
329
+ this.counts = counts;
321
330
  }
322
331
  async pageInitialized(lifecycle) {
323
332
  /*
@@ -347,11 +356,17 @@ let ApprovalPendingListPage = class ApprovalPendingListPage extends p13n(localiz
347
356
  title: i18next.t('text.no-reference-title'),
348
357
  description: i18next.t('text.no-reference-description')
349
358
  }
350
- : {
351
- icon: 'task_alt',
352
- title: i18next.t('text.no-approval-title'),
353
- description: i18next.t('text.no-approval-description')
354
- },
359
+ : this.group === 'completed'
360
+ ? {
361
+ icon: 'task_alt',
362
+ title: i18next.t('text.no-completed-approval-title'),
363
+ description: i18next.t('text.no-completed-approval-description')
364
+ }
365
+ : {
366
+ icon: 'task_alt',
367
+ title: i18next.t('text.no-approval-title'),
368
+ description: i18next.t('text.no-approval-description')
369
+ },
355
370
  /*
356
371
  * โ”€โ”€ ์Šน์ธ์ž๊ฐ€ ๋จผ์ € ๋ฌป๋Š” ์ˆœ์„œ๋Œ€๋กœ ๋‘”๋‹ค (2026-09-01) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
357
372
  *
@@ -461,7 +476,8 @@ let ApprovalPendingListPage = class ApprovalPendingListPage extends p13n(localiz
461
476
  editable: false,
462
477
  options: [
463
478
  { display: i18next.t('label.activity-state-submitted'), value: 'submitted' },
464
- { display: i18next.t('label.activity-state-escalated'), value: 'escalated' }
479
+ { display: i18next.t('label.activity-state-escalated'), value: 'escalated' },
480
+ { display: i18next.t('label.activity-state-ended'), value: 'ended' }
465
481
  ]
466
482
  },
467
483
  width: 90
@@ -547,23 +563,9 @@ let ApprovalPendingListPage = class ApprovalPendingListPage extends p13n(localiz
547
563
  if (this.group === 'reference') {
548
564
  /*
549
565
  * โ”€โ”€ ๋‚ด ์ฐธ์กฐ๊ฐ€ ์–ด๋–ค ์ƒํƒœ์ธ๊ฐ€ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
550
- * ์ฐธ์กฐ ๋ฌถ์Œ์—๋Š” **๋๋‚œ ๊ฑด๋„ ๋‚˜์˜จ๋‹ค.** ์ฐธ์กฐ๋Š” ๊ฒฐ์žฌ๋ฅผ ๋ง‰์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ฒฐ์žฌ๊ฐ€ ๋๋‚œ ๋’ค์— ์˜๊ฒฌ์ด ๋‹ฌ๋ฆด
551
- * ์ˆ˜ ์žˆ๊ณ , ๊ทธ๋ž˜์„œ ๋ชฉ๋ก์—์„œ ๋๋‚œ ๊ฒƒ์„ ๊ฑธ๋Ÿฌ๋‚ด์ง€ ์•Š๋Š”๋‹ค. ํ™”๋ฉด์ด ๊ทธ๊ฒƒ์„ ๊ตฌ๋ณ„ํ•ด์•ผ ํ•œ๋‹ค โ€” ์•ˆ ๊ทธ๋Ÿฌ๋ฉด
552
- * ์ด๋ฏธ ๋๋‚œ ๊ฑด์„ ์—ด์–ด ์˜๊ฒฌ์„ ์“ฐ๊ณ  ๊ทธ๊ฒƒ์ด ๋ฐ˜์˜๋œ ์ค„๋กœ ์•ˆ๋‹ค.
553
- *
554
- * **์˜๊ฒฌ ์—†์ด ๋๋‚œ ๊ฒƒ์„ ๋นˆ ์นธ์œผ๋กœ ๋‘์ง€ ์•Š๋Š”๋‹ค.** ์นจ๋ฌต์€ ๋™์˜๊ฐ€ ์•„๋‹ˆ๋‹ค. ํ’ˆ์งˆํŒ€์žฅ์ด ์•„๋ฌด ๋ง ์•ˆ
555
- * ํ•˜๊ณ  ๋๋‚ฌ์œผ๋ฉด ใ€Œ๋ฐ˜๋Œ€ํ•˜์ง€ ์•Š์•˜๋‹คใ€๊ฐ€ ์•„๋‹ˆ๋ผ ใ€Œ๋งํ•  ๊ธฐํšŒ์— ๋งํ•˜์ง€ ์•Š์•˜๋‹คใ€๋‹ค. ๋‚˜์ค‘์— ์‚ฌ๊ณ  ์กฐ์‚ฌ์—์„œ
556
- * ๊ทธ ๋‘˜์€ ๋‹ค๋ฅด๋‹ค.
557
- *
558
- * โ”€โ”€ ใ€Œ๊ฒฐ์ • ํ›„ ์˜๊ฒฌใ€์€ commentedAt ์œผ๋กœ ํŒ์ •ํ•œ๋‹ค โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
559
- * ์ฒ˜์Œ์— `updatedAt > terminatedAt` ์œผ๋กœ ์ถ”๋ก ํ•˜๋ ค ํ–ˆ๋‹ค. **๊ทธ ๋ถ€๋“ฑํ˜ธ๋Š” ์–ธ์ œ๋‚˜ ์ฐธ์ด๋‹ค** โ€”
560
- * ๋‹ซ๋Š” ์ฝ”๋“œ๊ฐ€ `terminatedAt: new Date()` ๋ฅผ ์ €์žฅ **์ „์—** ๋งŒ๋“ค๊ณ , `updatedAt` ์€
561
- * `@UpdateDateColumn` ์ด DB ์— ์“ฐ๋Š” ์ˆœ๊ฐ„ ์ฐ๋Š”๋‹ค. ๋‘ ๊ฐ’์ด ๋ช‡ ๋ฐ€๋ฆฌ์ดˆ ์–ด๊ธ‹๋‚˜์„œ, ๋‹ซํžŒ ์ฐธ์กฐ๊ฐ€
562
- * ์ „๋ถ€ ใ€Œ๊ฒฐ์ • ํ›„ ์˜๊ฒฌใ€์œผ๋กœ ๋ณด์˜€์„ ๊ฒƒ์ด๋‹ค.
566
+ * ์ด ๋ฌถ์Œ์€ ์ง„ํ–‰ ์ค‘์ธ ์ฐธ์กฐ๋งŒ ๋ณด์ธ๋‹ค. ๋๋‚œ ๊ฑด์€ ๋ณ„๋„ ใ€Œ์™„๋ฃŒใ€ ํƒญ์—์„œ ๊ฒฐ์žฌ ์ด๋ ฅ๊ณผ ํ•จ๊ป˜ ํ™•์ธํ•œ๋‹ค.
563
567
  *
564
- * ๊ทธ๋ž˜์„œ ์‚ฌ์‹ค์— ์ง‘์„ ์คฌ๋‹ค โ€” `ActivityApproval.commentedAt`(2eaceace25). ์˜๊ฒฌ์„ ์–ธ์ œ ๋งํ–ˆ๋‚˜๋Š”
565
- * ํŒŒ์ƒ์œผ๋กœ ์•Œ ์ˆ˜ ์—†๋Š” ๊ฐ’์ด๋‹ค. **๋นˆ ์˜๊ฒฌ์—๋Š” ์‹œ๊ฐ์„ ์ฐ์ง€ ์•Š๋Š”๋‹ค**(์„œ๋ฒ„ `stampedComment`), ๊ทธ๋ž˜์„œ
566
- * ์‹œ๊ฐ์˜ ์œ ๋ฌด๊ฐ€ ๊ณง ์นจ๋ฌต๊ณผ ๋ฐœ์–ธ์˜ ๊ตฌ๋ณ„์ด๋‹ค.
568
+ * ๋‹ซํž˜ ํ‘œ์‹œ๋Š”, ์ด๋ฏธ ์ฝ์–ด ๋‘” ๋ชฉ๋ก ์‘๋‹ต์ด ์ƒˆ๋กœ๊ณ ์นจ ์ง์ „์— ๋„์ฐฉํ•œ ๊ฒฝ์šฐ๋ฅผ ์œ„ํ•œ ๋ฐฉ์–ด ํ‘œ์‹œ๋‹ค.
567
569
  */
568
570
  this.gristConfig.columns = [
569
571
  ...this.gristConfig.columns,
@@ -603,6 +605,24 @@ let ApprovalPendingListPage = class ApprovalPendingListPage extends p13n(localiz
603
605
  }
604
606
  ];
605
607
  }
608
+ if (this.group === 'completed') {
609
+ this.gristConfig.columns = [
610
+ ...this.gristConfig.columns,
611
+ {
612
+ type: 'select',
613
+ name: 'participation',
614
+ header: i18next.t('field.wl-participation'),
615
+ record: {
616
+ editable: false,
617
+ options: [
618
+ { display: i18next.t('label.participation-approval'), value: 'approval' },
619
+ { display: i18next.t('label.participation-reference'), value: 'reference' }
620
+ ]
621
+ },
622
+ width: 80
623
+ }
624
+ ];
625
+ }
606
626
  }
607
627
  async pageUpdated(changes, lifecycle, changedBefore) {
608
628
  if (lifecycle?.resourceId !== changedBefore?.resourceId) {
@@ -624,11 +644,12 @@ let ApprovalPendingListPage = class ApprovalPendingListPage extends p13n(localiz
624
644
  filters = adjustFilters(filters, [{ name: 'round', operator: 'gte', value: 2 }]);
625
645
  }
626
646
  const response = await client.query({ query: gql `
627
- query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) { responses: ${this.group === 'reference' ? 'approvalReferenceList' : 'approvalPendingList'}(filters: $filters, pagination: $pagination, sortings: $sortings) { items { id
647
+ query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) { responses: ${this.group === 'reference' ? 'approvalReferenceList' : this.group === 'completed' ? 'approvalCompletedList' : 'approvalPendingList'}(filters: $filters, pagination: $pagination, sortings: $sortings) { items { id
628
648
  round
629
649
  comment
630
650
  commentedAt
631
651
  judgment
652
+ participation
632
653
  terminatedAt
633
654
  activityThread { activityInstance { activityId: id
634
655
  name
@@ -666,8 +687,9 @@ let ApprovalPendingListPage = class ApprovalPendingListPage extends p13n(localiz
666
687
  }
667
688
  });
668
689
  const total = response.data.responses.total || 0;
669
- /* ๋ณด๊ณ  ์žˆ๋Š” ๋ฌถ์Œ์˜ ์ˆ˜๋Š” ์ด ์กฐํšŒ๊ฐ€ ์•Œ๋ ค ์ค€๋‹ค. ๋ฐ˜๋Œ€์ชฝ๋งŒ ๋”ฐ๋กœ ์„ผ๋‹ค(countOther). */
670
- this.counts = { ...this.counts, [this.group]: total };
690
+ /* ๋ณด๊ณ  ์žˆ๋Š” ๋ฌถ์Œ์˜ ์ˆ˜๋Š” ์ด ์กฐํšŒ๊ฐ€ ์•Œ๋ ค ์ค€๋‹ค. ๋‚˜๋จธ์ง€ ๋‘˜๋งŒ ๋”ฐ๋กœ ์„ผ๋‹ค(countOther). */
691
+ if (this.group !== 'completed')
692
+ this.counts = { ...this.counts, [this.group]: total };
671
693
  return { total,
672
694
  records: (response.data.responses.items || []).map(item => {
673
695
  let thread = item.activityThread;
@@ -681,6 +703,7 @@ let ApprovalPendingListPage = class ApprovalPendingListPage extends p13n(localiz
681
703
  round: item.round,
682
704
  comment: item.comment,
683
705
  judgment: item.judgment,
706
+ participation: item.participation || 'approval',
684
707
  commentedAt: item.commentedAt,
685
708
  terminatedAt: item.terminatedAt,
686
709
  updatedAt: item.updatedAt
@@ -1 +1 @@
1
- {"version":3,"file":"approval-pending-list-page.js","sourceRoot":"","sources":["../../../client/pages/todo/approval-pending-list-page.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/data-grist'\nimport '@operato/data-grist/ox-filters-form.js'\nimport '@operato/context/ox-context-page-toolbar.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 } from '@operato/styles'\nimport { adjustFilters, isMobileDevice, sleep } from '@operato/utils'\n\nimport { p13n } from '@operato/p13n'\n\nimport { approvalMarks, dueCell, priorityCell, subjectCell } from '../../activity-cells.js'\n\nconst MIN = 60\nconst HOUR = 60 * MIN\nconst DAY = 24 * HOUR\n\n@customElement('approval-pending-list-page')\nexport class ApprovalPendingListPage extends p13n(localize(i18next)(PageView)) { static styles = [\n ScrollbarStyles,\n CommonGristStyles,\n CommonHeaderStyles,\n css`\n /*\n * ์„ธ๋กœ๋กœ ์Œ“๋Š”๋‹ค โ€” ๋ฌถ์Œ ๊ณ ๋ฅด๋Š” ์ค„์ด ํ‘œ **์œ„**์— ์„œ์•ผ ํ•œ๋‹ค.\n *\n * ๋ฐฉํ–ฅ์„ ๋นผ๋ฉด ๊ฐ€๋กœ๋กœ ๋ฐฐ์น˜๋˜์–ด, ๊ทธ ์ค„์ด ํ‘œ ์™ผ์ชฝ์— ์„ธ๋กœ ๋ ๋กœ ์„œ๊ณ  ๋ฒ„ํŠผ ๊ธ€์ž๊ฐ€ ์„ธ๋กœ ๊ฐ€์šด๋ฐ์—\n * ๋– ์„œ ํ‘œ ๋ฐ‘์ฒ˜๋Ÿผ ๋ณด์ธ๋‹ค. ํ‘œ๋„ ๊ทธ ๋ ๋งŒํผ ๋ฐ€๋ ค ์˜ค๋ฅธ์ชฝ ์นธ์ด ์ž˜๋ฆฐ๋‹ค. ์ „์—๋Š” ์ž์‹์ด ox-grist\n * ํ•˜๋‚˜๋ฟ์ด๋ผ ๋ฐฉํ–ฅ์ด ๋“œ๋Ÿฌ๋‚˜์ง€ ์•Š์•˜๋‹ค.\n */\n :host {\n display: flex;\n flex-direction: column;\n\n width: 100%;\n\n --grid-record-emphasized-background-color: #8b0000;\n --grid-record-emphasized-color: #ff6b6b;\n }\n\n ox-grist { overflow-y: auto;\n flex: 1;\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 * ox-filters-form ์€ ํญ 0์œผ๋กœ ๋‚จ์•„ ์ž๋ฆฌ๋ฅผ ์ง€ํ‚ค๊ณ , ๊ทธ ๋’ค์— gap 12px ์ด ๋ถ™์–ด ์นฉ๋“ค์„ ๋ฐ€์–ด๋ƒˆ๋‹ค.\n *\n * ์‹ค์ธก: ํ‘œ ์…€ 212 ยท ํ•„ํ„ฐ ์˜์—ญ 212 ยท ์นฉ 224. ์™ผ์ชฝ ๊ธฐ์ค€์„ ์ด ๋‹ค์‹œ ๋‘˜์ด ๋๋‹ค.\n *\n * ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์Šค์Šค๋กœ [empty] ๋ฅผ ๋‹ฌ์•„ ์ฃผ๋ฏ€๋กœ ๊ทธ๊ฒƒ์œผ๋กœ ์ ‘๋Š”๋‹ค. ํ•„ํ„ฐ๊ฐ€ ์ƒ๊ธฐ๋ฉด ๊ทธ ํ‘œ์‹์ด ์‚ฌ๋ผ์ ธ\n * ๋‹ค์‹œ ๋‚˜์˜จ๋‹ค.\n */\n .header .filters ox-filters-form[empty] {\n display: none;\n }\n\n /*\n * ๋‘ ๋ฌถ์Œ โ€” ํ‘œ ์œ„. ์ง€๊ธˆ ๋ณด๋Š” ์ชฝ์€ ๋ฐ‘์ค„๊ณผ ๊ตต๊ธฐ๋กœ ๋งํ•˜๊ณ , ์˜†์— ๊ฑด์ˆ˜๋ฅผ ์ ๋Š”๋‹ค.\n *\n * ๊ฑด์ˆ˜๋ฅผ ์•ˆ ๋ˆŒ๋Ÿฌ๋„ ๋ณด์ด๊ฒŒ ๋‘๋Š” ๊ฒƒ์ด ์š”์ ์ด๋‹ค. ์ฐธ์กฐ์— ๋ช‡ ๊ฑด์ด ์žˆ๋Š”์ง€ ๋ชจ๋ฅด๋ฉด ์—ด์–ด ๋ณผ ์ด์œ ๊ฐ€ ์—†๋‹ค.\n *\n * โ”€โ”€ ํ•„ํ„ฐ ์นฉ๋ณด๋‹ค ๋ฌด๊ฑฐ์›Œ์•ผ ํ•œ๋‹ค โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n * ์ฒ˜์Œ์— 13px ๋งจ๊ธ€์ž๋กœ ๋‘์—ˆ๋”๋‹ˆ, ๋ฐ”๋กœ ์•„๋ž˜ ใ€Œ์ค‘์š”ยท๋งŒ๊ธฐยท์žฌ์ƒ์‹ ใ€ ์นฉ์ด ํ…Œ๋‘๋ฆฌ๋ฅผ ๊ฐ€์ ธ์„œ ๋” ์„ธ๊ฒŒ\n * ๋ณด์˜€๋‹ค. **๋ณด๋Š” ๋Œ€์ƒ์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด ๋Œ€์ƒ์„ ์ขํžˆ๋Š” ๊ฒƒ๋ณด๋‹ค ์•ฝํ•ด ๋ณด์˜€๋‹ค.** ๊ทธ๋ž˜์„œ ๊ธ€์ž๋ฅผ 14px ๋กœ\n * ์˜ฌ๋ฆฌ๊ณ (์นฉ์€ 13px) ์„ธ๋กœ ์—ฌ๋ฐฑ์„ ๋„“ํ˜€ ์ œ๋ชฉ ๋‹ค์Œ ์ž๋ฆฌ๋ฅผ ์ค€๋‹ค.\n *\n * ์ขŒ์šฐ ์—ฌ๋ฐฑ์€ ํ’ˆ์งˆ ํ™”๋ฉด ํƒญ์—์„œ ๋ฒ ๋ผ์ง€ ์•Š๋Š”๋‹ค โ€” ๊ทธ ํ™”๋ฉด์€ --spacing-large ๋ผ ์ด ํ™”๋ฉด์˜ ์™ผ์ชฝ\n * ๊ธฐ์ค€์„  212px(ํ‘œ ์…€๊ณผ ๊ฐ™์€ ๊ฐ’)์„ ๊นจ๋œจ๋ฆฐ๋‹ค. ๋ฌด๊ฒŒ๋งŒ ๊ฐ™๊ฒŒ ํ•˜๊ณ  ๊ธฐ์ค€์„ ์€ ํ™”๋ฉด์ด ์ •ํ•œ๋‹ค.\n */\n .groups {\n flex: none;\n display: flex;\n gap: var(--spacing-large);\n padding: 0 var(--spacing-medium);\n border-bottom: 1px solid var(--ui-line, #d5dce0);\n }\n\n .groups button {\n border: none;\n background: none;\n padding: var(--spacing-medium) 2px calc(var(--spacing-medium) - 2px);\n border-bottom: 2px solid transparent;\n font: inherit;\n font-size: 14px;\n color: var(--ui-muted, #57676f);\n cursor: pointer;\n }\n\n .groups button:hover:not([data-selected]) {\n color: var(--ui-ink, #17272f);\n }\n\n /*\n * โ”€โ”€ ์ƒ‰์€ ๋ฐ‘์ค„์ด ๋งํ•˜๊ณ , ๊ธ€์ž๋Š” ์ฝํžˆ๋Š” ์ƒ‰์œผ๋กœ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n * ๊ณ ๋ฅธ ํƒญ์˜ ๊ธ€์ž๋ฅผ --ui-accent ๋กœ ๋‘์—ˆ๋Š”๋ฐ, ๊ทธ ํ† ํฐ์ด ๋ธŒ๋žœ๋“œ ์ดˆ๋ก(#0e8a56)์ด ๋˜๋ฉด์„œ 14px\n * ๊ธ€์ž๋กœ๋Š” ์•ˆ ์ฝํžˆ๊ฒŒ ๋๋‹ค.\n *\n * [ํ™•์ธํ•จ] ์ดˆ๋ก #0e8a56 ยท ๋ฐฐ๊ฒฝ rgb(240 242 244) โ†’ ๋Œ€๋น„ 3.91. ๋ณธ๋ฌธ ๊ธ€์ž ๊ธฐ์ค€ 4.5 ๋ฏธ๋‹ฌ์ด๋‹ค.\n * ํฐ ๋ฐ”ํƒ• ๊ธฐ์ค€์œผ๋กœ๋Š” 4.39 ์ธ๋ฐ, **์ด ์•ฑ ๋ฐฐ๊ฒฝ์€ ํฐ์ƒ‰์ด ์•„๋‹ˆ๋ผ** ๋” ๋‚˜์˜๋‹ค.\n *\n * --ui-ink 15.1 ๊ณ ๋ฅธ ํƒญ ๊ธ€์ž\n * --ui-muted 5.52 ์•ˆ ๊ณ ๋ฅธ ํƒญ ๊ธ€์ž\n * --ui-accent 3.91 ๋ฐ‘์ค„ โ€” UI ์š”์†Œ๋Š” 3.0 ๊ธฐ์ค€์ด๋ผ ํ†ต๊ณผํ•œ๋‹ค\n *\n * ๋ฐ‘์ค„์€ ์„ ํƒ์„ ๊ฐ€์žฅ ๊ฐ•ํ•˜๊ฒŒ ํ‘œ์‹œํ•˜๋Š” ์ž๋ฆฌ๋‹ค. ๋ธŒ๋žœ๋“œ์ƒ‰์ด ๊ฑฐ๊ธฐ ๋‚จ์œผ๋ฉด ์žƒ๋Š” ๊ฒƒ์ด ์—†๋‹ค.\n */\n .groups button[data-selected] {\n font-weight: 600;\n color: var(--ui-ink, #17272f);\n border-bottom-color: var(--ui-accent, #262e38);\n }\n\n .groups .n {\n margin-left: 4px;\n color: var(--ui-faint, #8a959c);\n }\n\n .groups button[data-selected] .n {\n color: inherit;\n }\n\n\n `\n ]\n\n @property({ type: Object }) gristConfig?: any\n\n /**\n * ์ง€๊ธˆ ์–ด๋А ๋ฌถ์Œ์„ ๋ณด๊ณ  ์žˆ๋‚˜.\n *\n * โ”€โ”€ ์™œ ํ•œ ํ™”๋ฉด์— ๋‘ ๋ฌถ์Œ์ธ๊ฐ€ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n * ์ฐธ์กฐ๋ฅผ ๋ณ„๋„ ํ™”๋ฉด์œผ๋กœ ๋งŒ๋“ค๋ฉด **์•„๋ฌด๋„ ์—ด์ง€ ์•Š๋Š”๋‹ค.** ์ฐธ์กฐ๋Š” ์•ˆ ๋ด๋„ ์•„๋ฌด ์ผ์ด ์•ˆ ์ผ์–ด๋‚˜๋ฏ€๋กœ,\n * ์•„์นจ์— ์—…๋ฌด ์•ฑ์„ ์—ด๋ฉด ใ€Œ์Šน์ธ ๋Œ€๊ธฐใ€๋ฅผ ๋ณด์ง€ ใ€Œ์ฐธ์กฐใ€๋ฅผ ๋”ฐ๋กœ ์—ด์ง€ ์•Š๋Š”๋‹ค. ์ฐธ์กฐ๋ฅผ ๋งŒ๋“  ์ด์œ ๊ฐ€ ์˜๊ฒฌ์„\n * ๋“ฃ๋Š” ๊ฒƒ์ธ๋ฐ ์•ˆ ์—ฌ๋Š” ํ™”๋ฉด์— ๋„ฃ์œผ๋ฉด ์˜๊ฒฌ์ด ์•ˆ ์˜จ๋‹ค.\n *\n * ๊ทธ๋ž˜์„œ ํ•œ ํ™”๋ฉด์— ๋‘๊ณ , **๋‘ ์ˆ˜๋ฅผ ํ•จ๊ป˜ ๋ณด์ธ๋‹ค.** ํ•œ ๊ณณ๋งŒ ์—ด๋ฉด ๋‘˜ ๋‹ค ๋ˆˆ์— ๋“ ๋‹ค.\n *\n * โ”€โ”€ ๊ทธ๋ ‡๋‹ค๊ณ  ํ•œ ๋ชฉ๋ก์— ์„ž์ง€ ์•Š๋Š”๋‹ค โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n * ๋‘ ๋ฌถ์Œ์˜ ๋ฌผ์Œ์ด ๋‹ค๋ฅด๋‹ค โ€” ใ€Œ๋‚ด๊ฐ€ ๊ฒฐ์ •ํ•  ๊ฒƒใ€๊ณผ ใ€Œ๋‚ด๊ฐ€ ์•Œ์•„์•ผ ํ•  ๊ฒƒใ€. ์„ž์œผ๋ฉด ์ฐธ์กฐ๊ฐ€ ใ€Œ๋‚ด๊ฐ€ ์Šน์ธํ•ด์•ผ\n * ํ•˜๋‚˜ใ€๋กœ ์ฝํžˆ๊ณ , ๋ฐฐ์ง€์— 12๊ฐ€ ๋œจ๋Š”๋ฐ ๊ฒฐ์ •ํ•  ๊ฒƒ์€ 3๊ฑด์ด ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๊ทธ ์ˆ˜๋ฅผ ์•ˆ ๋ฏฟ๊ฒŒ ๋œ๋‹ค.\n *\n * โ”€โ”€ ์ฃผ์†Œ๊ฐ€ ์ฃผ์ธ์ด๋‹ค โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n * `.../approval-pending-list/reference` ๋กœ ๋ถ™์—ฌ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ๋Œ€์ƒ์ด ๋ฐ”๋€Œ๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ํ•„ํ„ฐ์™€ ๋‹ฌ๋ฆฌ\n * ์ฃผ์†Œ์— ๋‹ด๋Š”๋‹ค.\n */\n @state() private group: 'approval' | 'reference' = 'approval'\n\n /** ๋‘ ๋ฌถ์Œ์˜ ๊ฑด์ˆ˜. ํƒญ์— ํ•จ๊ป˜ ์ ๋Š”๋‹ค โ€” ์•ˆ ๋ˆŒ๋Ÿฌ๋„ ์–ผ๋งˆ๋‚˜ ์žˆ๋Š”์ง€ ๋ณด์—ฌ์•ผ ํ•œ๋‹ค. */\n @state() private counts: { approval?: number; reference?: number } = {}\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.approval pending 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/approval-pending-list-page',\n actions: [],\n toolbar: false\n }\n }\n\n render() { const mode = this.mode || (isMobileDevice() ? 'CARD' : 'GRID')\n\n return html`\n <!--\n ๋‘ ๋ฌถ์Œ โ€” ํ‘œ **๋ฐ”๊นฅ** ์œ„์— ๋‘”๋‹ค.\n\n ํ—ค๋“œ๋ฃธ์— ๋‘๋ฉด ํ•„ํ„ฐ๋ฅผ ์ ‘์„ ๋•Œ ํ•จ๊ป˜ ์‚ฌ๋ผ์ง€๊ณ , ๊ทธ๋Ÿฌ๋ฉด ์ฐธ์กฐ๋กœ ๊ฐ€๋Š” ์œ ์ผํ•œ ๊ธธ์ด ์—†์–ด์ง„๋‹ค.\n ํ•„ํ„ฐ๋Š” ์ ‘ํ˜€๋„ ๋˜์ง€๋งŒ(ํ’€๋ฉด ์ „์ฒด๊ฐ€ ๋Œ์•„์˜จ๋‹ค) ์ด๊ฒƒ์€ ์ ‘ํžˆ๋ฉด ์•ˆ ๋œ๋‹ค.\n -->\n <div class=\"groups\">\n ${(\n [\n ['approval', 'label.group-approval', 'text.group-approval-hint'],\n ['reference', 'label.group-reference', 'text.group-reference-hint']\n ] as const\n ).map(\n ([key, label, hint]) => html`\n <button\n ?data-selected=${this.group === key}\n title=${i18next.t(hint)}\n @click=${() => this.selectGroup(key)}\n >\n ${i18next.t(label)}\n ${this.counts[key] === undefined\n ? ''\n : html`<span class=\"n\">${this.counts[key]!.toLocaleString(i18next.language || undefined)}</span>`}\n </button>\n `\n )}\n </div>\n\n <ox-grist\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-resubmitted'),\n value: 'resubmitted'\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 <ox-context-page-toolbar class=\"actions\" .context=${this.context}></ox-context-page-toolbar>\n </div>\n\n <ox-grist-personalizer slot=\"setting\"></ox-grist-personalizer>\n </ox-grist>\n `\n }\n\n /** ์ฃผ์†Œ๋งŒ ๋ฐ”๊พผ๋‹ค โ€” ๋ชฉ๋ก๋„ ์„ค์ •๋„ pageUpdated ๊ฐ€ ํ•œ ๋ฒŒ๋กœ ๋‹ค์‹œ ์„ธ์šด๋‹ค. */\n private selectGroup(group: 'approval' | 'reference') {\n if (this.group === group) {\n return\n }\n\n const page = (this as any).lifecycle?.page\n navigate(group === 'approval' ? `${page}` : `${page}/${group}`)\n }\n\n private async syncGroup(key?: string) {\n const group = key === 'reference' ? 'reference' : 'approval'\n\n if (this.group === group && this.gristConfig) {\n return\n }\n\n this.group = group\n this.applyConfig()\n }\n\n /**\n * ์•ˆ ๋ณด๊ณ  ์žˆ๋Š” ๋ฌถ์Œ์˜ ๊ฑด์ˆ˜๋ฅผ ๋”ฐ๋กœ ์„ผ๋‹ค โ€” ํ•œ ์ค„๋งŒ ๋ฐ›์•„ `total` ์„ ์ฝ๋Š”๋‹ค.\n *\n * ๋ณด๊ณ  ์žˆ๋Š” ์ชฝ์˜ ์ˆ˜๋Š” ๋ชฉ๋ก ์กฐํšŒ๊ฐ€ ์ด๋ฏธ ์•Œ๋ ค ์ค€๋‹ค(fetchHandler). ๊ทธ๋ž˜์„œ ์—ฌ๊ธฐ์„œ๋Š” ๋ฐ˜๋Œ€์ชฝ๋งŒ ๋ฌป๋Š”๋‹ค.\n */\n private async countOther() {\n const other = this.group === 'approval' ? 'reference' : 'approval'\n const query = other === 'approval' ? 'approvalPendingList' : 'approvalReferenceList'\n\n const response = await client.query({\n query: gql`\n query ($pagination: Pagination) {\n responses: ${query}(pagination: $pagination) {\n total\n }\n }\n `,\n variables: { pagination: { page: 1, limit: 1 } },\n fetchPolicy: 'no-cache'\n })\n\n /*\n * A count we could not fetch is not zero.\n *\n * This read `?? 0`, and the client runs with errorPolicy: 'all' โ€” a failed query comes back as\n * a resolved response carrying `errors`, not a rejection. So any failure drew the other tab as\n * ใ€Œ0ใ€, which says \"nothing is waiting on you\". The render already draws nothing when the count\n * is undefined, so leaving it unknown is both honest and already handled.\n */\n const total = response.errors?.length ? undefined : response.data?.responses?.total\n\n if (typeof total != 'number') {\n return\n }\n\n this.counts = { ...this.counts, [other]: total }\n }\n\n async pageInitialized(lifecycle) {\n /*\n * ์ฃผ์†Œ๊ฐ€ ๋ฌถ์Œ์„ ์ •ํ•œ๋‹ค. ์ฃผ์†Œ๋กœ ๋ฐ”๋กœ ๋“ค์–ด์˜จ ๊ฒฝ์šฐ๊ฐ€ ์—ฌ๊ธฐ์„œ ์žกํžŒ๋‹ค โ€” pageUpdated ๊ฐ€ ์ด ํ•จ์ˆ˜๋ณด๋‹ค ๋จผ์ €\n * ์ง€๋‚˜๊ฐ€๋ฏ€๋กœ ๊ทธ๊ฒƒ๋งŒ ๋ฏฟ์œผ๋ฉด `/reference` ๋งํฌ๊ฐ€ ๊ฒฐ์žฌ ๋ฌถ์Œ์„ ๋ณด์—ฌ์ค€๋‹ค.\n */\n await this.syncGroup(lifecycle?.resourceId)\n await this.countOther()\n }\n\n private applyConfig() {\n this.gristConfig = { list: { thumbnail: 'thumbnail',\n fields: ['name', 'description'],\n details: ['createdAt', 'due']\n },\n /*\n * ๋นˆ ํ™”๋ฉด์ด ์ฐธ์กฐ๋ฅผ ๊ฐ€๋ฅด์นœ๋‹ค.\n *\n * ์ฐธ์กฐ๋ฅผ ์ฒ˜์Œ ๋ˆ„๋ฅธ ์‚ฌ๋žŒ์€ ์—ฌ๊ธฐ์„œ ๊ทธ ๊ฐœ๋…์„ ๋งŒ๋‚œ๋‹ค. ๊ธฐ๋ณธ ๋ฌธ์žฅ ใ€Œํ•ด๋‹นํ•˜๋Š” ๊ฒƒ์ด ์—†์Šต๋‹ˆ๋‹คใ€๋Š”\n * ์ฐธ์กฐ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๋งํ•ด ์ฃผ์ง€ ์•Š๋Š”๋‹ค โ€” ๋‚ด๊ฐ€ ๊ฒฐ์ •ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ธ์ง€, ์•ˆ ๋ด๋„ ๋˜๋Š” ๊ฒƒ์ธ์ง€ ๋ชจ๋ฅธ ์ฑ„\n * ํ™”๋ฉด์„ ๋‹ซ๋Š”๋‹ค.\n *\n * ๊ทธ๋ž˜์„œ ์—†์„ ๋•Œ ๊ทธ ๋ฌถ์Œ์ด ๋ฌด์—‡์ธ์ง€ ์ ๋Š”๋‹ค.\n */\n emptyNote:\n this.group === 'reference'\n ? {\n icon: 'visibility',\n title: i18next.t('text.no-reference-title'),\n description: i18next.t('text.no-reference-description')\n }\n : {\n icon: 'task_alt',\n title: i18next.t('text.no-approval-title'),\n description: i18next.t('text.no-approval-description')\n },\n /*\n * โ”€โ”€ ์Šน์ธ์ž๊ฐ€ ๋จผ์ € ๋ฌป๋Š” ์ˆœ์„œ๋Œ€๋กœ ๋‘”๋‹ค (2026-09-01) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n *\n * ์ „์—๋Š” ์•ž์ž๋ฆฌ๋ฅผ ใ€Œ์—ด๊ธฐใ€ ๋ฒ„ํŠผ๊ณผ **๋ชจ๋“  ์ค„์ด ๊ฐ™์€ ๊ฐ’์ธ ์ƒํƒœ ์นธ**์ด ์ฐจ์ง€ํ–ˆ๊ณ , ์Šน์ธ์ž๊ฐ€ ๊ฐ€์žฅ ๋จผ์ €\n * ๋ฌป๋Š” ใ€Œ๋ˆ„๊ฐ€ ์˜ฌ๋ ธ๋‚˜ใ€๋Š” 1200px ๋ฐ–์— ์žˆ์—ˆ๋‹ค. ์‹ค์ธก์œผ๋กœ ์ด๋ฆ„๋ถ€ํ„ฐ ๋‹ด๋‹น๊นŒ์ง€ ํญ ํ•ฉ์ด 1287px ์ด์—ˆ๊ณ \n * ๋ณด์ด๋Š” ํญ์€ 1150px ์ด์—ˆ๋‹ค.\n *\n * ์ˆœ์„œ๋ฅผ ๋ฌผ์Œ์˜ ์ˆœ์„œ๋กœ ๋ฐ”๊พผ๋‹ค โ€” ๋ฌด์—‡์„ ยท ๋ˆ„๊ฐ€ ยท ์–ธ์ œ๊นŒ์ง€ ยท ์–ผ๋งˆ๋‚˜ ๊ธ‰ํ•œ๊ฐ€.\n *\n * โ”€โ”€ ใ€Œ์—ด๊ธฐใ€ ๋ฒ„ํŠผ์„ ์—†์•ค๋‹ค โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n * ์ค„์„ ๋ˆ„๋ฅด๋ฉด ์ด๋ฏธ ์—ด๋ฆฐ๋‹ค(์•„๋ž˜ rows.handlers.click). ๊ฐ™์€ ์ผ์„ ํ•˜๋Š” ๋ฒ„ํŠผ์ด ์ค„๋งˆ๋‹ค 72px ์„\n * ์ฐจ์ง€ํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.\n *\n * ๋‹ค๋งŒ ๊ทธ ๋ฒ„ํŠผ์˜ ์•„์ด์ฝ˜์ด ์‹ ํ˜ธ๋ฅผ ํ•˜๋‚˜ ๋“ค๊ณ  ์žˆ์—ˆ๋‹ค โ€” `comment` ๊ฐ€ ์žˆ์œผ๋ฉด `label`, ์—†์œผ๋ฉด\n * `new_label`. **์Šน์ธ์ž๊ฐ€ ๋ณด๋‹ค๊ฐ€ ๋ฉ”๋ชจ๋ฅผ ๋‚จ๊ธฐ๊ณ  ๋ฏธ๋ค„ ๋‘” ๊ฒƒ**์ด๋ผ๋Š” ๋œป์ด๋‹ค. ๋ฒ„๋ฆฌ์ง€ ์•Š๊ณ  ์ด๋ฆ„ ์˜†์—\n * ๋ง๋กœ ์ ๋Š”๋‹ค. ํƒœ๊ทธ ์•„์ด์ฝ˜ ๋‘ ๊ฐœ๋กœ๋Š” ์•„๋ฌด๋„ ๊ทธ ๋œป์œผ๋กœ ์ฝ์ง€ ์•Š๋Š”๋‹ค.\n *\n * ์—ด๋žŒ ์—ฌ๋ถ€๋Š” ๋‹ด๋Š” ๊ฐ’์ด ์—†๋‹ค โ€” `ActivityApproval` ์— `readAt` ์ด ์—†์–ด์„œ, ์—ด์–ด๋งŒ ๋ณด๊ณ  ๋‚˜๊ฐ€๋ฉด\n * ํ”์ ์ด ๋‚จ์ง€ ์•Š๋Š”๋‹ค. ์ง€๊ธˆ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์€ ใ€Œ๋ฉ”๋ชจ๋ฅผ ๋‚จ๊ฒจ ๋’€๋‚˜ใ€์ด์ง€ ใ€Œ์—ด์–ด ๋ดค๋‚˜ใ€๊ฐ€ ์•„๋‹ˆ๋‹ค.\n */\n columns: [\n { type: 'gutter', gutterName: 'sequence', fixed: true },\n {\n type: 'string',\n name: 'name',\n fixed: true,\n header: i18next.t('field.wl-subject'),\n record: {\n editable: false,\n /*\n * ์ด๋ฆ„๊ณผ ์„ค๋ช…์„ ํ•œ ์นธ์— ๋‘”๋‹ค. ๋‘˜์€ ํ•จ๊ป˜ ์ฝ๋Š” ๊ฒƒ์ธ๋ฐ 275px ์งœ๋ฆฌ ์นธ์œผ๋กœ ๊ฐˆ๋ผ ๋‘๋ฉด ๋ˆˆ์ด\n * ์˜ค๊ฐ€๊ณ , ๊ทธ ์‚ฌ์ด๋ฅผ ์šฐ์„ ์ˆœ์œ„ยท์ฐจ์ˆ˜๊ฐ€ ๊ฐ€๋กœ๋ง‰๊ณ  ์žˆ์—ˆ๋‹ค.\n */\n renderer: subjectCell(approvalMarks)\n },\n filter: 'search',\n sortable: true,\n width: 320\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: 110\n },\n {\n type: 'resource-object',\n name: 'assignee',\n header: i18next.t('field.wl-owner'),\n record: { editable: false },\n width: 110\n },\n {\n /*\n * ๊ธฐํ•œ ํ•œ ์นธ โ€” ๋‚จ์€ ์‹œ๊ฐ„์ด ์œ„, ์ ˆ๋Œ€ ์‹œ๊ฐ์ด ์•„๋ž˜๋‹ค.\n *\n * ์ „์—๋Š” ใ€Œ๋งŒ๊ธฐ ์‹œ๊ฐ„ใ€(180px)๊ณผ ใ€Œ๋‚จ์€ ์‹œ๊ฐ„ใ€(180px)์ด ๋”ฐ๋กœ ์žˆ์—ˆ๋‹ค. ์‚ฌ๋žŒ์ด ๋ฌป๋Š” ๊ฒƒ์€ ใ€Œ์–ผ๋งˆ๋‚˜\n * ๋‚จ์•˜๋‚˜ใ€ ํ•˜๋‚˜์ด๊ณ , ์ ˆ๋Œ€ ์‹œ๊ฐ์€ ๊ทธ๊ฒƒ์„ ํ™•์ธํ•  ๋•Œ๋งŒ ๋ณธ๋‹ค. ๋‘ ์นธ์œผ๋กœ 360px ์„ ์“ธ ์ผ์ด ์•„๋‹ˆ๋‹ค.\n */\n type: 'string',\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: 170\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 width: 80\n },\n {\n type: 'select',\n name: 'state',\n header: i18next.t('field.wl-state'),\n record: {\n editable: false,\n options: [\n { display: i18next.t('label.activity-state-submitted'), value: 'submitted' },\n { display: i18next.t('label.activity-state-escalated'), value: 'escalated' }\n ]\n },\n width: 90\n },\n {\n type: 'number',\n name: 'round',\n header: i18next.t('field.wl-round'),\n record: { editable: false, align: 'right' },\n width: 60\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: 160\n },\n {\n type: 'datetime',\n name: 'updatedAt',\n header: i18next.t('field.wl-changed-at'),\n record: { editable: false },\n sortable: true,\n filter: false,\n width: 160\n },\n {\n type: 'string',\n name: 'viewSource',\n header: i18next.t('field.wl-view-source'),\n record: {\n editable: false,\n renderer: function (value, column, record, rowIndex, field) {\n 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 {\n type: 'image',\n name: 'thumbnail',\n header: i18next.t('field.thumbnail'),\n record: { editable: false },\n hidden: true,\n handlers: {\n click: (columns, data, column, record, rowIndex) => {\n this.openActivityApproval(record)\n }\n }\n }\n ],\n rows: { appendable: false,\n editable: false,\n handlers: { click: (columns, data, column, record, rowIndex) => { this.openActivityApproval(record)\n }\n }\n },\n /*\n * ๊ธ‰ํ•œ ๊ฒƒ๋ถ€ํ„ฐ โ€” ใ€Œํ•  ์ผใ€ ๋ชฉ๋ก๊ณผ ๊ฐ™์€ ์ˆœ์„œ๋‹ค.\n *\n * ์ตœ๊ทผ ๋ณ€๊ฒฝ ๋‚ด๋ฆผ์ฐจ์ˆœ์ด์—ˆ๋‹ค. ๋ฐ›์€ ํŽธ์ง€ํ•จ์œผ๋กœ๋Š” ๋ง์ด ๋˜์ง€๋งŒ ์ด ๋ชฉ๋ก์˜ ๋ฌผ์Œ์€ ใ€Œ๋ฌด์—‡์„ ๋จผ์ €\n * ํŒ๋‹จํ•ด์•ผ ํ•˜๋‚˜ใ€๋‹ค. ๊ทธ ์ •๋ ฌ์—์„œ๋Š” ๋‚˜ํ˜ ์ง€๋‚œ ๊ฑด์ด ๋ชฉ๋ก ์ค‘๊ฐ„์— ๋ฌปํžŒ๋‹ค โ€” ๊ธฐ์•ˆ์ž๊ฐ€ ๋‚˜ํ˜์งธ\n * ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋™์•ˆ.\n *\n * ๋‘ ๋ชฉ๋ก์€ ๊ฐ™์€ ์„ฑ๊ฒฉ์ด๋‹ค(๋‚ด๊ฐ€ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ๊ฒƒ). ์ˆœ์„œ ๊ธฐ์ค€์ด ๋‹ค๋ฅด๋ฉด ํ™”๋ฉด์„ ์˜ฎ๊ธธ ๋•Œ๋งˆ๋‹ค ๋‹ค๋ฅธ\n * ์ˆœ์„œ๋ฅผ ๋ณธ๋‹ค.\n *\n * ๊ธฐํ•œ์ด ์—†๋Š” ๊ฑด์€ ๋’ค๋กœ ๊ฐ„๋‹ค โ€” ์„œ๋ฒ„๊ฐ€ ๊ทธ ์ž๋ฆฌ๋ฅผ ์ •ํ•œ๋‹ค(applyApprovalSortings).\n */\n sorters: [\n { name: 'dueAt',\n desc: false\n }\n ]\n }\n\n if (this.group === 'reference') {\n /*\n * โ”€โ”€ ๋‚ด ์ฐธ์กฐ๊ฐ€ ์–ด๋–ค ์ƒํƒœ์ธ๊ฐ€ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n * ์ฐธ์กฐ ๋ฌถ์Œ์—๋Š” **๋๋‚œ ๊ฑด๋„ ๋‚˜์˜จ๋‹ค.** ์ฐธ์กฐ๋Š” ๊ฒฐ์žฌ๋ฅผ ๋ง‰์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ฒฐ์žฌ๊ฐ€ ๋๋‚œ ๋’ค์— ์˜๊ฒฌ์ด ๋‹ฌ๋ฆด\n * ์ˆ˜ ์žˆ๊ณ , ๊ทธ๋ž˜์„œ ๋ชฉ๋ก์—์„œ ๋๋‚œ ๊ฒƒ์„ ๊ฑธ๋Ÿฌ๋‚ด์ง€ ์•Š๋Š”๋‹ค. ํ™”๋ฉด์ด ๊ทธ๊ฒƒ์„ ๊ตฌ๋ณ„ํ•ด์•ผ ํ•œ๋‹ค โ€” ์•ˆ ๊ทธ๋Ÿฌ๋ฉด\n * ์ด๋ฏธ ๋๋‚œ ๊ฑด์„ ์—ด์–ด ์˜๊ฒฌ์„ ์“ฐ๊ณ  ๊ทธ๊ฒƒ์ด ๋ฐ˜์˜๋œ ์ค„๋กœ ์•ˆ๋‹ค.\n *\n * **์˜๊ฒฌ ์—†์ด ๋๋‚œ ๊ฒƒ์„ ๋นˆ ์นธ์œผ๋กœ ๋‘์ง€ ์•Š๋Š”๋‹ค.** ์นจ๋ฌต์€ ๋™์˜๊ฐ€ ์•„๋‹ˆ๋‹ค. ํ’ˆ์งˆํŒ€์žฅ์ด ์•„๋ฌด ๋ง ์•ˆ\n * ํ•˜๊ณ  ๋๋‚ฌ์œผ๋ฉด ใ€Œ๋ฐ˜๋Œ€ํ•˜์ง€ ์•Š์•˜๋‹คใ€๊ฐ€ ์•„๋‹ˆ๋ผ ใ€Œ๋งํ•  ๊ธฐํšŒ์— ๋งํ•˜์ง€ ์•Š์•˜๋‹คใ€๋‹ค. ๋‚˜์ค‘์— ์‚ฌ๊ณ  ์กฐ์‚ฌ์—์„œ\n * ๊ทธ ๋‘˜์€ ๋‹ค๋ฅด๋‹ค.\n *\n * โ”€โ”€ ใ€Œ๊ฒฐ์ • ํ›„ ์˜๊ฒฌใ€์€ commentedAt ์œผ๋กœ ํŒ์ •ํ•œ๋‹ค โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n * ์ฒ˜์Œ์— `updatedAt > terminatedAt` ์œผ๋กœ ์ถ”๋ก ํ•˜๋ ค ํ–ˆ๋‹ค. **๊ทธ ๋ถ€๋“ฑํ˜ธ๋Š” ์–ธ์ œ๋‚˜ ์ฐธ์ด๋‹ค** โ€”\n * ๋‹ซ๋Š” ์ฝ”๋“œ๊ฐ€ `terminatedAt: new Date()` ๋ฅผ ์ €์žฅ **์ „์—** ๋งŒ๋“ค๊ณ , `updatedAt` ์€\n * `@UpdateDateColumn` ์ด DB ์— ์“ฐ๋Š” ์ˆœ๊ฐ„ ์ฐ๋Š”๋‹ค. ๋‘ ๊ฐ’์ด ๋ช‡ ๋ฐ€๋ฆฌ์ดˆ ์–ด๊ธ‹๋‚˜์„œ, ๋‹ซํžŒ ์ฐธ์กฐ๊ฐ€\n * ์ „๋ถ€ ใ€Œ๊ฒฐ์ • ํ›„ ์˜๊ฒฌใ€์œผ๋กœ ๋ณด์˜€์„ ๊ฒƒ์ด๋‹ค.\n *\n * ๊ทธ๋ž˜์„œ ์‚ฌ์‹ค์— ์ง‘์„ ์คฌ๋‹ค โ€” `ActivityApproval.commentedAt`(2eaceace25). ์˜๊ฒฌ์„ ์–ธ์ œ ๋งํ–ˆ๋‚˜๋Š”\n * ํŒŒ์ƒ์œผ๋กœ ์•Œ ์ˆ˜ ์—†๋Š” ๊ฐ’์ด๋‹ค. **๋นˆ ์˜๊ฒฌ์—๋Š” ์‹œ๊ฐ์„ ์ฐ์ง€ ์•Š๋Š”๋‹ค**(์„œ๋ฒ„ `stampedComment`), ๊ทธ๋ž˜์„œ\n * ์‹œ๊ฐ์˜ ์œ ๋ฌด๊ฐ€ ๊ณง ์นจ๋ฌต๊ณผ ๋ฐœ์–ธ์˜ ๊ตฌ๋ณ„์ด๋‹ค.\n */\n this.gristConfig.columns = [\n ...this.gristConfig.columns,\n {\n type: 'string',\n name: 'myReference',\n header: i18next.t('field.my-reference'),\n record: {\n editable: false,\n renderer: (value: any, column: any, record: any) => {\n const closed = record?.judgment === 'closed'\n const comment = (record?.comment || '').trim()\n\n if (!closed) {\n return html`<span class=\"quiet\">${i18next.t('text.reference-open')}</span>`\n }\n\n if (!comment) {\n return html`<span class=\"pill quiet\"\n ><span class=\"dot\"></span>${i18next.t('text.reference-closed-silent')}</span\n >`\n }\n\n /*\n * ์˜๊ฒฌ์€ ์žˆ๋Š”๋ฐ ์‹œ๊ฐ์ด ์—†์œผ๋ฉด **์–ธ์ œ์ธ์ง€ ๋ชจ๋ฅธ๋‹ค** โ€” commentedAt ์ด ์ƒ๊ธฐ๊ธฐ ์ „์— ์ ํžŒ\n * ์ค„์ด๋‹ค. ๋ชจ๋ฅด๋Š” ๊ฒƒ์„ ใ€Œ๊ฒฐ์ • ์ „ใ€์œผ๋กœ๋„ ใ€Œ๊ฒฐ์ • ํ›„ใ€๋กœ๋„ ์ ์ง€ ์•Š๊ณ , ์˜๊ฒฌ๋งŒ ๋ณด์ธ๋‹ค.\n */\n const after =\n record?.commentedAt &&\n record?.terminatedAt &&\n new Date(record.commentedAt).getTime() > new Date(record.terminatedAt).getTime()\n\n return html`\n <span class=\"line\">\n <span>${comment}</span>\n ${after ? html`<span class=\"pill warn\">${i18next.t('text.reference-after-decision')}</span>` : ''}\n </span>\n `\n }\n },\n width: 260\n }\n ]\n }\n }\n\n async pageUpdated(changes, lifecycle, changedBefore) {\n if (lifecycle?.resourceId !== changedBefore?.resourceId) {\n await this.syncGroup(lifecycle?.resourceId)\n await this.countOther()\n }\n\n if (this.active) {\n 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('due')) { filters = adjustFilters(filters, dueSoonFilters())\n }\n\n if (this.filters?.includes('resubmitted')) { filters = adjustFilters(filters, [{ name: 'round', operator: 'gte', value: 2 }])\n }\n\n const response = await client.query({ query: gql`\n query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) { responses: ${this.group === 'reference' ? 'approvalReferenceList' : 'approvalPendingList'}(filters: $filters, pagination: $pagination, sortings: $sortings) { items { id\n round\n comment\n commentedAt\n judgment\n terminatedAt\n activityThread { activityInstance { activityId: id\n name\n description\n priority\n input\n refBy\n activityType\n viewType\n viewSource\n thumbnail\n updatedAt\n createdAt\n creator { id\n name\n }\n }\n state\n output\n dueAt\n assignee { id\n name\n }\n assignedAt\n }\n updatedAt\n }\n total\n }\n }\n `,\n variables: { filters,\n pagination: { page, limit },\n sortings\n }\n })\n\n const total = response.data.responses.total || 0\n /* ๋ณด๊ณ  ์žˆ๋Š” ๋ฌถ์Œ์˜ ์ˆ˜๋Š” ์ด ์กฐํšŒ๊ฐ€ ์•Œ๋ ค ์ค€๋‹ค. ๋ฐ˜๋Œ€์ชฝ๋งŒ ๋”ฐ๋กœ ์„ผ๋‹ค(countOther). */\n this.counts = { ...this.counts, [this.group]: total }\n\n return { total,\n records: (response.data.responses.items || []).map(item => { let thread = item.activityThread\n return { id: item.id,\n state: thread.state,\n ...thread.activityInstance,\n dueAt: thread.dueAt,\n assignee: thread.assignee,\n assignedAt: thread.assignedAt,\n output: thread.output,\n round: item.round,\n comment: item.comment,\n judgment: item.judgment,\n commentedAt: item.commentedAt,\n terminatedAt: item.terminatedAt,\n updatedAt: item.updatedAt\n }\n })\n }\n }\n\n openActivityApproval(activityApproval) { navigate(`activity-approval/${activityApproval.id}?title=${activityApproval.name}`)\n }\n}\n"]}
1
+ {"version":3,"file":"approval-pending-list-page.js","sourceRoot":"","sources":["../../../client/pages/todo/approval-pending-list-page.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/data-grist'\nimport '@operato/data-grist/ox-filters-form.js'\nimport '@operato/context/ox-context-page-toolbar.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 } from '@operato/styles'\nimport { adjustFilters, isMobileDevice, sleep } from '@operato/utils'\n\nimport { p13n } from '@operato/p13n'\n\nimport { approvalMarks, dueCell, priorityCell, subjectCell } from '../../activity-cells.js'\n\nconst MIN = 60\nconst HOUR = 60 * MIN\nconst DAY = 24 * HOUR\n\n@customElement('approval-pending-list-page')\nexport class ApprovalPendingListPage extends p13n(localize(i18next)(PageView)) { static styles = [\n ScrollbarStyles,\n CommonGristStyles,\n CommonHeaderStyles,\n css`\n /*\n * ์„ธ๋กœ๋กœ ์Œ“๋Š”๋‹ค โ€” ๋ฌถ์Œ ๊ณ ๋ฅด๋Š” ์ค„์ด ํ‘œ **์œ„**์— ์„œ์•ผ ํ•œ๋‹ค.\n *\n * ๋ฐฉํ–ฅ์„ ๋นผ๋ฉด ๊ฐ€๋กœ๋กœ ๋ฐฐ์น˜๋˜์–ด, ๊ทธ ์ค„์ด ํ‘œ ์™ผ์ชฝ์— ์„ธ๋กœ ๋ ๋กœ ์„œ๊ณ  ๋ฒ„ํŠผ ๊ธ€์ž๊ฐ€ ์„ธ๋กœ ๊ฐ€์šด๋ฐ์—\n * ๋– ์„œ ํ‘œ ๋ฐ‘์ฒ˜๋Ÿผ ๋ณด์ธ๋‹ค. ํ‘œ๋„ ๊ทธ ๋ ๋งŒํผ ๋ฐ€๋ ค ์˜ค๋ฅธ์ชฝ ์นธ์ด ์ž˜๋ฆฐ๋‹ค. ์ „์—๋Š” ์ž์‹์ด ox-grist\n * ํ•˜๋‚˜๋ฟ์ด๋ผ ๋ฐฉํ–ฅ์ด ๋“œ๋Ÿฌ๋‚˜์ง€ ์•Š์•˜๋‹ค.\n */\n :host {\n display: flex;\n flex-direction: column;\n\n width: 100%;\n\n --grid-record-emphasized-background-color: #8b0000;\n --grid-record-emphasized-color: #ff6b6b;\n }\n\n ox-grist { overflow-y: auto;\n flex: 1;\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 * ox-filters-form ์€ ํญ 0์œผ๋กœ ๋‚จ์•„ ์ž๋ฆฌ๋ฅผ ์ง€ํ‚ค๊ณ , ๊ทธ ๋’ค์— gap 12px ์ด ๋ถ™์–ด ์นฉ๋“ค์„ ๋ฐ€์–ด๋ƒˆ๋‹ค.\n *\n * ์‹ค์ธก: ํ‘œ ์…€ 212 ยท ํ•„ํ„ฐ ์˜์—ญ 212 ยท ์นฉ 224. ์™ผ์ชฝ ๊ธฐ์ค€์„ ์ด ๋‹ค์‹œ ๋‘˜์ด ๋๋‹ค.\n *\n * ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์Šค์Šค๋กœ [empty] ๋ฅผ ๋‹ฌ์•„ ์ฃผ๋ฏ€๋กœ ๊ทธ๊ฒƒ์œผ๋กœ ์ ‘๋Š”๋‹ค. ํ•„ํ„ฐ๊ฐ€ ์ƒ๊ธฐ๋ฉด ๊ทธ ํ‘œ์‹์ด ์‚ฌ๋ผ์ ธ\n * ๋‹ค์‹œ ๋‚˜์˜จ๋‹ค.\n */\n .header .filters ox-filters-form[empty] {\n display: none;\n }\n\n /*\n * ์„ธ ๋ฌถ์Œ โ€” ํ‘œ ์œ„. ์ง€๊ธˆ ๋ณด๋Š” ์ชฝ์€ ๋ฐ‘์ค„๊ณผ ๊ตต๊ธฐ๋กœ ๋งํ•˜๊ณ , ์˜†์— ๊ฑด์ˆ˜๋ฅผ ์ ๋Š”๋‹ค.\n *\n * ๊ฑด์ˆ˜๋ฅผ ์•ˆ ๋ˆŒ๋Ÿฌ๋„ ๋ณด์ด๊ฒŒ ๋‘๋Š” ๊ฒƒ์ด ์š”์ ์ด๋‹ค. ์ฐธ์กฐ์— ๋ช‡ ๊ฑด์ด ์žˆ๋Š”์ง€ ๋ชจ๋ฅด๋ฉด ์—ด์–ด ๋ณผ ์ด์œ ๊ฐ€ ์—†๋‹ค.\n *\n * โ”€โ”€ ํ•„ํ„ฐ ์นฉ๋ณด๋‹ค ๋ฌด๊ฑฐ์›Œ์•ผ ํ•œ๋‹ค โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n * ์ฒ˜์Œ์— 13px ๋งจ๊ธ€์ž๋กœ ๋‘์—ˆ๋”๋‹ˆ, ๋ฐ”๋กœ ์•„๋ž˜ ใ€Œ์ค‘์š”ยท๋งŒ๊ธฐยท์žฌ์ƒ์‹ ใ€ ์นฉ์ด ํ…Œ๋‘๋ฆฌ๋ฅผ ๊ฐ€์ ธ์„œ ๋” ์„ธ๊ฒŒ\n * ๋ณด์˜€๋‹ค. **๋ณด๋Š” ๋Œ€์ƒ์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด ๋Œ€์ƒ์„ ์ขํžˆ๋Š” ๊ฒƒ๋ณด๋‹ค ์•ฝํ•ด ๋ณด์˜€๋‹ค.** ๊ทธ๋ž˜์„œ ๊ธ€์ž๋ฅผ 14px ๋กœ\n * ์˜ฌ๋ฆฌ๊ณ (์นฉ์€ 13px) ์„ธ๋กœ ์—ฌ๋ฐฑ์„ ๋„“ํ˜€ ์ œ๋ชฉ ๋‹ค์Œ ์ž๋ฆฌ๋ฅผ ์ค€๋‹ค.\n *\n * ์ขŒ์šฐ ์—ฌ๋ฐฑ์€ ํ’ˆ์งˆ ํ™”๋ฉด ํƒญ์—์„œ ๋ฒ ๋ผ์ง€ ์•Š๋Š”๋‹ค โ€” ๊ทธ ํ™”๋ฉด์€ --spacing-large ๋ผ ์ด ํ™”๋ฉด์˜ ์™ผ์ชฝ\n * ๊ธฐ์ค€์„  212px(ํ‘œ ์…€๊ณผ ๊ฐ™์€ ๊ฐ’)์„ ๊นจ๋œจ๋ฆฐ๋‹ค. ๋ฌด๊ฒŒ๋งŒ ๊ฐ™๊ฒŒ ํ•˜๊ณ  ๊ธฐ์ค€์„ ์€ ํ™”๋ฉด์ด ์ •ํ•œ๋‹ค.\n */\n .groups {\n flex: none;\n display: flex;\n gap: var(--spacing-large);\n padding: 0 var(--spacing-medium);\n border-bottom: 1px solid var(--ui-line, #d5dce0);\n }\n\n .groups button {\n border: none;\n background: none;\n padding: var(--spacing-medium) 2px calc(var(--spacing-medium) - 2px);\n border-bottom: 2px solid transparent;\n font: inherit;\n font-size: 14px;\n color: var(--ui-muted, #57676f);\n cursor: pointer;\n }\n\n .groups button:hover:not([data-selected]) {\n color: var(--ui-ink, #17272f);\n }\n\n /*\n * โ”€โ”€ ์ƒ‰์€ ๋ฐ‘์ค„์ด ๋งํ•˜๊ณ , ๊ธ€์ž๋Š” ์ฝํžˆ๋Š” ์ƒ‰์œผ๋กœ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n * ๊ณ ๋ฅธ ํƒญ์˜ ๊ธ€์ž๋ฅผ --ui-accent ๋กœ ๋‘์—ˆ๋Š”๋ฐ, ๊ทธ ํ† ํฐ์ด ๋ธŒ๋žœ๋“œ ์ดˆ๋ก(#0e8a56)์ด ๋˜๋ฉด์„œ 14px\n * ๊ธ€์ž๋กœ๋Š” ์•ˆ ์ฝํžˆ๊ฒŒ ๋๋‹ค.\n *\n * [ํ™•์ธํ•จ] ์ดˆ๋ก #0e8a56 ยท ๋ฐฐ๊ฒฝ rgb(240 242 244) โ†’ ๋Œ€๋น„ 3.91. ๋ณธ๋ฌธ ๊ธ€์ž ๊ธฐ์ค€ 4.5 ๋ฏธ๋‹ฌ์ด๋‹ค.\n * ํฐ ๋ฐ”ํƒ• ๊ธฐ์ค€์œผ๋กœ๋Š” 4.39 ์ธ๋ฐ, **์ด ์•ฑ ๋ฐฐ๊ฒฝ์€ ํฐ์ƒ‰์ด ์•„๋‹ˆ๋ผ** ๋” ๋‚˜์˜๋‹ค.\n *\n * --ui-ink 15.1 ๊ณ ๋ฅธ ํƒญ ๊ธ€์ž\n * --ui-muted 5.52 ์•ˆ ๊ณ ๋ฅธ ํƒญ ๊ธ€์ž\n * --ui-accent 3.91 ๋ฐ‘์ค„ โ€” UI ์š”์†Œ๋Š” 3.0 ๊ธฐ์ค€์ด๋ผ ํ†ต๊ณผํ•œ๋‹ค\n *\n * ๋ฐ‘์ค„์€ ์„ ํƒ์„ ๊ฐ€์žฅ ๊ฐ•ํ•˜๊ฒŒ ํ‘œ์‹œํ•˜๋Š” ์ž๋ฆฌ๋‹ค. ๋ธŒ๋žœ๋“œ์ƒ‰์ด ๊ฑฐ๊ธฐ ๋‚จ์œผ๋ฉด ์žƒ๋Š” ๊ฒƒ์ด ์—†๋‹ค.\n */\n .groups button[data-selected] {\n font-weight: 600;\n color: var(--ui-ink, #17272f);\n border-bottom-color: var(--ui-accent, #262e38);\n }\n\n .groups .n {\n margin-left: 4px;\n color: var(--ui-faint, #8a959c);\n }\n\n .groups button[data-selected] .n {\n color: inherit;\n }\n\n\n `\n ]\n\n @property({ type: Object }) gristConfig?: any\n\n /**\n * ์ง€๊ธˆ ์–ด๋А ๋ฌถ์Œ์„ ๋ณด๊ณ  ์žˆ๋‚˜.\n *\n * โ”€โ”€ ์™œ ํ•œ ํ™”๋ฉด์— ์„ธ ๋ฌถ์Œ์ธ๊ฐ€ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n * ์ฐธ์กฐ๋ฅผ ๋ณ„๋„ ํ™”๋ฉด์œผ๋กœ ๋งŒ๋“ค๋ฉด **์•„๋ฌด๋„ ์—ด์ง€ ์•Š๋Š”๋‹ค.** ์ฐธ์กฐ๋Š” ์•ˆ ๋ด๋„ ์•„๋ฌด ์ผ์ด ์•ˆ ์ผ์–ด๋‚˜๋ฏ€๋กœ,\n * ์•„์นจ์— ์—…๋ฌด ์•ฑ์„ ์—ด๋ฉด ใ€Œ์Šน์ธ ๋Œ€๊ธฐใ€๋ฅผ ๋ณด์ง€ ใ€Œ์ฐธ์กฐใ€๋ฅผ ๋”ฐ๋กœ ์—ด์ง€ ์•Š๋Š”๋‹ค. ์ฐธ์กฐ๋ฅผ ๋งŒ๋“  ์ด์œ ๊ฐ€ ์˜๊ฒฌ์„\n * ๋“ฃ๋Š” ๊ฒƒ์ธ๋ฐ ์•ˆ ์—ฌ๋Š” ํ™”๋ฉด์— ๋„ฃ์œผ๋ฉด ์˜๊ฒฌ์ด ์•ˆ ์˜จ๋‹ค.\n *\n * ๊ทธ๋ž˜์„œ ํ•œ ํ™”๋ฉด์— ๋‘๊ณ , ์™„๋ฃŒ ์ด๋ ฅ๋„ ๊ฐ™์€ ์ž๋ฆฌ์—์„œ ๋‹ค์‹œ ์ฐพ์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.\n *\n * โ”€โ”€ ๊ทธ๋ ‡๋‹ค๊ณ  ํ•œ ๋ชฉ๋ก์— ์„ž์ง€ ์•Š๋Š”๋‹ค โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n * ์„ธ ๋ฌถ์Œ์˜ ๋ฌผ์Œ์ด ๋‹ค๋ฅด๋‹ค โ€” ใ€Œ๋‚ด๊ฐ€ ๊ฒฐ์ •ํ•  ๊ฒƒใ€, ใ€Œ๋‚ด๊ฐ€ ์•Œ์•„์•ผ ํ•  ๊ฒƒใ€, ใ€Œ๋๋‚œ ์ฐธ์กฐ ์ด๋ ฅใ€. ์„ž์œผ๋ฉด\n * ์ฐธ์กฐ๊ฐ€ ใ€Œ๋‚ด๊ฐ€ ์Šน์ธํ•ด์•ผ ํ•˜๋‚˜ใ€๋กœ ์ฝํžˆ๊ณ , ๋ฐฐ์ง€์— 12๊ฐ€ ๋œจ๋Š”๋ฐ ๊ฒฐ์ •ํ•  ๊ฒƒ์€ 3๊ฑด์ด ๋œ๋‹ค.\n *\n * โ”€โ”€ ์ฃผ์†Œ๊ฐ€ ์ฃผ์ธ์ด๋‹ค โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n * `.../approval-pending-list/reference` ๋กœ ๋ถ™์—ฌ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ๋Œ€์ƒ์ด ๋ฐ”๋€Œ๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ํ•„ํ„ฐ์™€ ๋‹ฌ๋ฆฌ\n * ์ฃผ์†Œ์— ๋‹ด๋Š”๋‹ค.\n */\n @state() private group: 'approval' | 'reference' | 'completed' = 'approval'\n\n /** ์„ธ ๋ฌถ์Œ์˜ ๊ฑด์ˆ˜. ํƒญ์— ํ•จ๊ป˜ ์ ๋Š”๋‹ค โ€” ์•ˆ ๋ˆŒ๋Ÿฌ๋„ ์–ผ๋งˆ๋‚˜ ์žˆ๋Š”์ง€ ๋ณด์—ฌ์•ผ ํ•œ๋‹ค. */\n @state() private counts: { approval?: number; reference?: number } = {}\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.approval pending 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/approval-pending-list-page',\n actions: [],\n toolbar: false\n }\n }\n\n render() { const mode = this.mode || (isMobileDevice() ? 'CARD' : 'GRID')\n\n return html`\n <!--\n ์„ธ ๋ฌถ์Œ โ€” ํ‘œ **๋ฐ”๊นฅ** ์œ„์— ๋‘”๋‹ค.\n\n ํ—ค๋“œ๋ฃธ์— ๋‘๋ฉด ํ•„ํ„ฐ๋ฅผ ์ ‘์„ ๋•Œ ํ•จ๊ป˜ ์‚ฌ๋ผ์ง€๊ณ , ๊ทธ๋Ÿฌ๋ฉด ์ฐธ์กฐ๋กœ ๊ฐ€๋Š” ์œ ์ผํ•œ ๊ธธ์ด ์—†์–ด์ง„๋‹ค.\n ํ•„ํ„ฐ๋Š” ์ ‘ํ˜€๋„ ๋˜์ง€๋งŒ(ํ’€๋ฉด ์ „์ฒด๊ฐ€ ๋Œ์•„์˜จ๋‹ค) ์ด๊ฒƒ์€ ์ ‘ํžˆ๋ฉด ์•ˆ ๋œ๋‹ค.\n -->\n <div class=\"groups\">\n ${(\n [\n ['approval', 'label.group-approval', 'text.group-approval-hint'],\n ['reference', 'label.group-reference', 'text.group-reference-hint'],\n ['completed', 'label.group-completed', 'text.group-completed-hint']\n ] as const\n ).map(\n ([key, label, hint]) => html`\n <button\n ?data-selected=${this.group === key}\n title=${i18next.t(hint)}\n @click=${() => this.selectGroup(key)}\n >\n ${i18next.t(label)}\n ${key !== 'completed' && this.counts[key] !== undefined\n ? html`<span class=\"n\">${this.counts[key]!.toLocaleString(i18next.language || undefined)}</span>`\n : ''}\n </button>\n `\n )}\n </div>\n\n <ox-grist\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-resubmitted'),\n value: 'resubmitted'\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 <ox-context-page-toolbar class=\"actions\" .context=${this.context}></ox-context-page-toolbar>\n </div>\n\n <ox-grist-personalizer slot=\"setting\"></ox-grist-personalizer>\n </ox-grist>\n `\n }\n\n /** ์ฃผ์†Œ๋งŒ ๋ฐ”๊พผ๋‹ค โ€” ๋ชฉ๋ก๋„ ์„ค์ •๋„ pageUpdated ๊ฐ€ ํ•œ ๋ฒŒ๋กœ ๋‹ค์‹œ ์„ธ์šด๋‹ค. */\n private selectGroup(group: 'approval' | 'reference' | 'completed') {\n if (this.group === group) {\n return\n }\n\n const page = (this as any).lifecycle?.page\n navigate(group === 'approval' ? `${page}` : `${page}/${group}`)\n }\n\n private async syncGroup(key?: string) {\n const group = key === 'reference' || key === 'completed' ? key : 'approval'\n\n if (this.group === group && this.gristConfig) {\n return\n }\n\n this.group = group\n this.applyConfig()\n }\n\n /**\n * ์•ˆ ๋ณด๊ณ  ์žˆ๋Š” ๋ฌถ์Œ์˜ ๊ฑด์ˆ˜๋ฅผ ๋”ฐ๋กœ ์„ผ๋‹ค โ€” ํ•œ ์ค„๋งŒ ๋ฐ›์•„ `total` ์„ ์ฝ๋Š”๋‹ค.\n *\n * ๋ณด๊ณ  ์žˆ๋Š” ์ชฝ์˜ ์ˆ˜๋Š” ๋ชฉ๋ก ์กฐํšŒ๊ฐ€ ์ด๋ฏธ ์•Œ๋ ค ์ค€๋‹ค(fetchHandler). ๊ทธ๋ž˜์„œ ์—ฌ๊ธฐ์„œ๋Š” ๋‚˜๋จธ์ง€ ๋‘˜๋งŒ ๋ฌป๋Š”๋‹ค.\n */\n private async countOther() {\n const queries = {\n approval: 'approvalPendingList',\n reference: 'approvalReferenceList'\n } as const\n const others = (Object.keys(queries) as Array<keyof typeof queries>).filter(group => group !== this.group)\n const results = await Promise.all(\n others.map(async group => ({\n group,\n response: await client.query({\n query: gql`\n query ($pagination: Pagination) {\n responses: ${queries[group]}(pagination: $pagination) {\n total\n }\n }\n `,\n variables: { pagination: { page: 1, limit: 1 } },\n fetchPolicy: 'no-cache'\n })\n }))\n )\n\n /*\n * A count we could not fetch is not zero.\n *\n * This read `?? 0`, and the client runs with errorPolicy: 'all' โ€” a failed query comes back as\n * a resolved response carrying `errors`, not a rejection. So any failure drew the other tab as\n * ใ€Œ0ใ€, which says \"nothing is waiting on you\". The render already draws nothing when the count\n * is undefined, so leaving it unknown is both honest and already handled.\n */\n const counts = { ...this.counts }\n for (const { group, response } of results) {\n const total = response.errors?.length ? undefined : response.data?.responses?.total\n if (typeof total == 'number') counts[group] = total\n }\n this.counts = counts\n }\n\n async pageInitialized(lifecycle) {\n /*\n * ์ฃผ์†Œ๊ฐ€ ๋ฌถ์Œ์„ ์ •ํ•œ๋‹ค. ์ฃผ์†Œ๋กœ ๋ฐ”๋กœ ๋“ค์–ด์˜จ ๊ฒฝ์šฐ๊ฐ€ ์—ฌ๊ธฐ์„œ ์žกํžŒ๋‹ค โ€” pageUpdated ๊ฐ€ ์ด ํ•จ์ˆ˜๋ณด๋‹ค ๋จผ์ €\n * ์ง€๋‚˜๊ฐ€๋ฏ€๋กœ ๊ทธ๊ฒƒ๋งŒ ๋ฏฟ์œผ๋ฉด `/reference` ๋งํฌ๊ฐ€ ๊ฒฐ์žฌ ๋ฌถ์Œ์„ ๋ณด์—ฌ์ค€๋‹ค.\n */\n await this.syncGroup(lifecycle?.resourceId)\n await this.countOther()\n }\n\n private applyConfig() {\n this.gristConfig = { list: { thumbnail: 'thumbnail',\n fields: ['name', 'description'],\n details: ['createdAt', 'due']\n },\n /*\n * ๋นˆ ํ™”๋ฉด์ด ์ฐธ์กฐ๋ฅผ ๊ฐ€๋ฅด์นœ๋‹ค.\n *\n * ์ฐธ์กฐ๋ฅผ ์ฒ˜์Œ ๋ˆ„๋ฅธ ์‚ฌ๋žŒ์€ ์—ฌ๊ธฐ์„œ ๊ทธ ๊ฐœ๋…์„ ๋งŒ๋‚œ๋‹ค. ๊ธฐ๋ณธ ๋ฌธ์žฅ ใ€Œํ•ด๋‹นํ•˜๋Š” ๊ฒƒ์ด ์—†์Šต๋‹ˆ๋‹คใ€๋Š”\n * ์ฐธ์กฐ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๋งํ•ด ์ฃผ์ง€ ์•Š๋Š”๋‹ค โ€” ๋‚ด๊ฐ€ ๊ฒฐ์ •ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ธ์ง€, ์•ˆ ๋ด๋„ ๋˜๋Š” ๊ฒƒ์ธ์ง€ ๋ชจ๋ฅธ ์ฑ„\n * ํ™”๋ฉด์„ ๋‹ซ๋Š”๋‹ค.\n *\n * ๊ทธ๋ž˜์„œ ์—†์„ ๋•Œ ๊ทธ ๋ฌถ์Œ์ด ๋ฌด์—‡์ธ์ง€ ์ ๋Š”๋‹ค.\n */\n emptyNote:\n this.group === 'reference'\n ? {\n icon: 'visibility',\n title: i18next.t('text.no-reference-title'),\n description: i18next.t('text.no-reference-description')\n }\n : this.group === 'completed'\n ? {\n icon: 'task_alt',\n title: i18next.t('text.no-completed-approval-title'),\n description: i18next.t('text.no-completed-approval-description')\n }\n : {\n icon: 'task_alt',\n title: i18next.t('text.no-approval-title'),\n description: i18next.t('text.no-approval-description')\n },\n /*\n * โ”€โ”€ ์Šน์ธ์ž๊ฐ€ ๋จผ์ € ๋ฌป๋Š” ์ˆœ์„œ๋Œ€๋กœ ๋‘”๋‹ค (2026-09-01) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n *\n * ์ „์—๋Š” ์•ž์ž๋ฆฌ๋ฅผ ใ€Œ์—ด๊ธฐใ€ ๋ฒ„ํŠผ๊ณผ **๋ชจ๋“  ์ค„์ด ๊ฐ™์€ ๊ฐ’์ธ ์ƒํƒœ ์นธ**์ด ์ฐจ์ง€ํ–ˆ๊ณ , ์Šน์ธ์ž๊ฐ€ ๊ฐ€์žฅ ๋จผ์ €\n * ๋ฌป๋Š” ใ€Œ๋ˆ„๊ฐ€ ์˜ฌ๋ ธ๋‚˜ใ€๋Š” 1200px ๋ฐ–์— ์žˆ์—ˆ๋‹ค. ์‹ค์ธก์œผ๋กœ ์ด๋ฆ„๋ถ€ํ„ฐ ๋‹ด๋‹น๊นŒ์ง€ ํญ ํ•ฉ์ด 1287px ์ด์—ˆ๊ณ \n * ๋ณด์ด๋Š” ํญ์€ 1150px ์ด์—ˆ๋‹ค.\n *\n * ์ˆœ์„œ๋ฅผ ๋ฌผ์Œ์˜ ์ˆœ์„œ๋กœ ๋ฐ”๊พผ๋‹ค โ€” ๋ฌด์—‡์„ ยท ๋ˆ„๊ฐ€ ยท ์–ธ์ œ๊นŒ์ง€ ยท ์–ผ๋งˆ๋‚˜ ๊ธ‰ํ•œ๊ฐ€.\n *\n * โ”€โ”€ ใ€Œ์—ด๊ธฐใ€ ๋ฒ„ํŠผ์„ ์—†์•ค๋‹ค โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n * ์ค„์„ ๋ˆ„๋ฅด๋ฉด ์ด๋ฏธ ์—ด๋ฆฐ๋‹ค(์•„๋ž˜ rows.handlers.click). ๊ฐ™์€ ์ผ์„ ํ•˜๋Š” ๋ฒ„ํŠผ์ด ์ค„๋งˆ๋‹ค 72px ์„\n * ์ฐจ์ง€ํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.\n *\n * ๋‹ค๋งŒ ๊ทธ ๋ฒ„ํŠผ์˜ ์•„์ด์ฝ˜์ด ์‹ ํ˜ธ๋ฅผ ํ•˜๋‚˜ ๋“ค๊ณ  ์žˆ์—ˆ๋‹ค โ€” `comment` ๊ฐ€ ์žˆ์œผ๋ฉด `label`, ์—†์œผ๋ฉด\n * `new_label`. **์Šน์ธ์ž๊ฐ€ ๋ณด๋‹ค๊ฐ€ ๋ฉ”๋ชจ๋ฅผ ๋‚จ๊ธฐ๊ณ  ๋ฏธ๋ค„ ๋‘” ๊ฒƒ**์ด๋ผ๋Š” ๋œป์ด๋‹ค. ๋ฒ„๋ฆฌ์ง€ ์•Š๊ณ  ์ด๋ฆ„ ์˜†์—\n * ๋ง๋กœ ์ ๋Š”๋‹ค. ํƒœ๊ทธ ์•„์ด์ฝ˜ ๋‘ ๊ฐœ๋กœ๋Š” ์•„๋ฌด๋„ ๊ทธ ๋œป์œผ๋กœ ์ฝ์ง€ ์•Š๋Š”๋‹ค.\n *\n * ์—ด๋žŒ ์—ฌ๋ถ€๋Š” ๋‹ด๋Š” ๊ฐ’์ด ์—†๋‹ค โ€” `ActivityApproval` ์— `readAt` ์ด ์—†์–ด์„œ, ์—ด์–ด๋งŒ ๋ณด๊ณ  ๋‚˜๊ฐ€๋ฉด\n * ํ”์ ์ด ๋‚จ์ง€ ์•Š๋Š”๋‹ค. ์ง€๊ธˆ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์€ ใ€Œ๋ฉ”๋ชจ๋ฅผ ๋‚จ๊ฒจ ๋’€๋‚˜ใ€์ด์ง€ ใ€Œ์—ด์–ด ๋ดค๋‚˜ใ€๊ฐ€ ์•„๋‹ˆ๋‹ค.\n */\n columns: [\n { type: 'gutter', gutterName: 'sequence', fixed: true },\n {\n type: 'string',\n name: 'name',\n fixed: true,\n header: i18next.t('field.wl-subject'),\n record: {\n editable: false,\n /*\n * ์ด๋ฆ„๊ณผ ์„ค๋ช…์„ ํ•œ ์นธ์— ๋‘”๋‹ค. ๋‘˜์€ ํ•จ๊ป˜ ์ฝ๋Š” ๊ฒƒ์ธ๋ฐ 275px ์งœ๋ฆฌ ์นธ์œผ๋กœ ๊ฐˆ๋ผ ๋‘๋ฉด ๋ˆˆ์ด\n * ์˜ค๊ฐ€๊ณ , ๊ทธ ์‚ฌ์ด๋ฅผ ์šฐ์„ ์ˆœ์œ„ยท์ฐจ์ˆ˜๊ฐ€ ๊ฐ€๋กœ๋ง‰๊ณ  ์žˆ์—ˆ๋‹ค.\n */\n renderer: subjectCell(approvalMarks)\n },\n filter: 'search',\n sortable: true,\n width: 320\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: 110\n },\n {\n type: 'resource-object',\n name: 'assignee',\n header: i18next.t('field.wl-owner'),\n record: { editable: false },\n width: 110\n },\n {\n /*\n * ๊ธฐํ•œ ํ•œ ์นธ โ€” ๋‚จ์€ ์‹œ๊ฐ„์ด ์œ„, ์ ˆ๋Œ€ ์‹œ๊ฐ์ด ์•„๋ž˜๋‹ค.\n *\n * ์ „์—๋Š” ใ€Œ๋งŒ๊ธฐ ์‹œ๊ฐ„ใ€(180px)๊ณผ ใ€Œ๋‚จ์€ ์‹œ๊ฐ„ใ€(180px)์ด ๋”ฐ๋กœ ์žˆ์—ˆ๋‹ค. ์‚ฌ๋žŒ์ด ๋ฌป๋Š” ๊ฒƒ์€ ใ€Œ์–ผ๋งˆ๋‚˜\n * ๋‚จ์•˜๋‚˜ใ€ ํ•˜๋‚˜์ด๊ณ , ์ ˆ๋Œ€ ์‹œ๊ฐ์€ ๊ทธ๊ฒƒ์„ ํ™•์ธํ•  ๋•Œ๋งŒ ๋ณธ๋‹ค. ๋‘ ์นธ์œผ๋กœ 360px ์„ ์“ธ ์ผ์ด ์•„๋‹ˆ๋‹ค.\n */\n type: 'string',\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: 170\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 width: 80\n },\n {\n type: 'select',\n name: 'state',\n header: i18next.t('field.wl-state'),\n record: {\n editable: false,\n options: [\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-ended'), value: 'ended' }\n ]\n },\n width: 90\n },\n {\n type: 'number',\n name: 'round',\n header: i18next.t('field.wl-round'),\n record: { editable: false, align: 'right' },\n width: 60\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: 160\n },\n {\n type: 'datetime',\n name: 'updatedAt',\n header: i18next.t('field.wl-changed-at'),\n record: { editable: false },\n sortable: true,\n filter: false,\n width: 160\n },\n {\n type: 'string',\n name: 'viewSource',\n header: i18next.t('field.wl-view-source'),\n record: {\n editable: false,\n renderer: function (value, column, record, rowIndex, field) {\n 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 {\n type: 'image',\n name: 'thumbnail',\n header: i18next.t('field.thumbnail'),\n record: { editable: false },\n hidden: true,\n handlers: {\n click: (columns, data, column, record, rowIndex) => {\n this.openActivityApproval(record)\n }\n }\n }\n ],\n rows: { appendable: false,\n editable: false,\n handlers: { click: (columns, data, column, record, rowIndex) => { this.openActivityApproval(record)\n }\n }\n },\n /*\n * ๊ธ‰ํ•œ ๊ฒƒ๋ถ€ํ„ฐ โ€” ใ€Œํ•  ์ผใ€ ๋ชฉ๋ก๊ณผ ๊ฐ™์€ ์ˆœ์„œ๋‹ค.\n *\n * ์ตœ๊ทผ ๋ณ€๊ฒฝ ๋‚ด๋ฆผ์ฐจ์ˆœ์ด์—ˆ๋‹ค. ๋ฐ›์€ ํŽธ์ง€ํ•จ์œผ๋กœ๋Š” ๋ง์ด ๋˜์ง€๋งŒ ์ด ๋ชฉ๋ก์˜ ๋ฌผ์Œ์€ ใ€Œ๋ฌด์—‡์„ ๋จผ์ €\n * ํŒ๋‹จํ•ด์•ผ ํ•˜๋‚˜ใ€๋‹ค. ๊ทธ ์ •๋ ฌ์—์„œ๋Š” ๋‚˜ํ˜ ์ง€๋‚œ ๊ฑด์ด ๋ชฉ๋ก ์ค‘๊ฐ„์— ๋ฌปํžŒ๋‹ค โ€” ๊ธฐ์•ˆ์ž๊ฐ€ ๋‚˜ํ˜์งธ\n * ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋™์•ˆ.\n *\n * ๋‘ ๋ชฉ๋ก์€ ๊ฐ™์€ ์„ฑ๊ฒฉ์ด๋‹ค(๋‚ด๊ฐ€ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ๊ฒƒ). ์ˆœ์„œ ๊ธฐ์ค€์ด ๋‹ค๋ฅด๋ฉด ํ™”๋ฉด์„ ์˜ฎ๊ธธ ๋•Œ๋งˆ๋‹ค ๋‹ค๋ฅธ\n * ์ˆœ์„œ๋ฅผ ๋ณธ๋‹ค.\n *\n * ๊ธฐํ•œ์ด ์—†๋Š” ๊ฑด์€ ๋’ค๋กœ ๊ฐ„๋‹ค โ€” ์„œ๋ฒ„๊ฐ€ ๊ทธ ์ž๋ฆฌ๋ฅผ ์ •ํ•œ๋‹ค(applyApprovalSortings).\n */\n sorters: [\n { name: 'dueAt',\n desc: false\n }\n ]\n }\n\n if (this.group === 'reference') {\n /*\n * โ”€โ”€ ๋‚ด ์ฐธ์กฐ๊ฐ€ ์–ด๋–ค ์ƒํƒœ์ธ๊ฐ€ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€\n * ์ด ๋ฌถ์Œ์€ ์ง„ํ–‰ ์ค‘์ธ ์ฐธ์กฐ๋งŒ ๋ณด์ธ๋‹ค. ๋๋‚œ ๊ฑด์€ ๋ณ„๋„ ใ€Œ์™„๋ฃŒใ€ ํƒญ์—์„œ ๊ฒฐ์žฌ ์ด๋ ฅ๊ณผ ํ•จ๊ป˜ ํ™•์ธํ•œ๋‹ค.\n *\n * ๋‹ซํž˜ ํ‘œ์‹œ๋Š”, ์ด๋ฏธ ์ฝ์–ด ๋‘” ๋ชฉ๋ก ์‘๋‹ต์ด ์ƒˆ๋กœ๊ณ ์นจ ์ง์ „์— ๋„์ฐฉํ•œ ๊ฒฝ์šฐ๋ฅผ ์œ„ํ•œ ๋ฐฉ์–ด ํ‘œ์‹œ๋‹ค.\n */\n this.gristConfig.columns = [\n ...this.gristConfig.columns,\n {\n type: 'string',\n name: 'myReference',\n header: i18next.t('field.my-reference'),\n record: {\n editable: false,\n renderer: (value: any, column: any, record: any) => {\n const closed = record?.judgment === 'closed'\n const comment = (record?.comment || '').trim()\n\n if (!closed) {\n return html`<span class=\"quiet\">${i18next.t('text.reference-open')}</span>`\n }\n\n if (!comment) {\n return html`<span class=\"pill quiet\"\n ><span class=\"dot\"></span>${i18next.t('text.reference-closed-silent')}</span\n >`\n }\n\n /*\n * ์˜๊ฒฌ์€ ์žˆ๋Š”๋ฐ ์‹œ๊ฐ์ด ์—†์œผ๋ฉด **์–ธ์ œ์ธ์ง€ ๋ชจ๋ฅธ๋‹ค** โ€” commentedAt ์ด ์ƒ๊ธฐ๊ธฐ ์ „์— ์ ํžŒ\n * ์ค„์ด๋‹ค. ๋ชจ๋ฅด๋Š” ๊ฒƒ์„ ใ€Œ๊ฒฐ์ • ์ „ใ€์œผ๋กœ๋„ ใ€Œ๊ฒฐ์ • ํ›„ใ€๋กœ๋„ ์ ์ง€ ์•Š๊ณ , ์˜๊ฒฌ๋งŒ ๋ณด์ธ๋‹ค.\n */\n const after =\n record?.commentedAt &&\n record?.terminatedAt &&\n new Date(record.commentedAt).getTime() > new Date(record.terminatedAt).getTime()\n\n return html`\n <span class=\"line\">\n <span>${comment}</span>\n ${after ? html`<span class=\"pill warn\">${i18next.t('text.reference-after-decision')}</span>` : ''}\n </span>\n `\n }\n },\n width: 260\n }\n ]\n }\n\n if (this.group === 'completed') {\n this.gristConfig.columns = [\n ...this.gristConfig.columns,\n {\n type: 'select',\n name: 'participation',\n header: i18next.t('field.wl-participation'),\n record: {\n editable: false,\n options: [\n { display: i18next.t('label.participation-approval'), value: 'approval' },\n { display: i18next.t('label.participation-reference'), value: 'reference' }\n ]\n },\n width: 80\n }\n ]\n }\n }\n\n async pageUpdated(changes, lifecycle, changedBefore) {\n if (lifecycle?.resourceId !== changedBefore?.resourceId) {\n await this.syncGroup(lifecycle?.resourceId)\n await this.countOther()\n }\n\n if (this.active) {\n 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('due')) { filters = adjustFilters(filters, dueSoonFilters())\n }\n\n if (this.filters?.includes('resubmitted')) { filters = adjustFilters(filters, [{ name: 'round', operator: 'gte', value: 2 }])\n }\n\n const response = await client.query({ query: gql`\n query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) { responses: ${this.group === 'reference' ? 'approvalReferenceList' : this.group === 'completed' ? 'approvalCompletedList' : 'approvalPendingList'}(filters: $filters, pagination: $pagination, sortings: $sortings) { items { id\n round\n comment\n commentedAt\n judgment\n participation\n terminatedAt\n activityThread { activityInstance { activityId: id\n name\n description\n priority\n input\n refBy\n activityType\n viewType\n viewSource\n thumbnail\n updatedAt\n createdAt\n creator { id\n name\n }\n }\n state\n output\n dueAt\n assignee { id\n name\n }\n assignedAt\n }\n updatedAt\n }\n total\n }\n }\n `,\n variables: { filters,\n pagination: { page, limit },\n sortings\n }\n })\n\n const total = response.data.responses.total || 0\n /* ๋ณด๊ณ  ์žˆ๋Š” ๋ฌถ์Œ์˜ ์ˆ˜๋Š” ์ด ์กฐํšŒ๊ฐ€ ์•Œ๋ ค ์ค€๋‹ค. ๋‚˜๋จธ์ง€ ๋‘˜๋งŒ ๋”ฐ๋กœ ์„ผ๋‹ค(countOther). */\n if (this.group !== 'completed') this.counts = { ...this.counts, [this.group]: total }\n\n return { total,\n records: (response.data.responses.items || []).map(item => { let thread = item.activityThread\n return { id: item.id,\n state: thread.state,\n ...thread.activityInstance,\n dueAt: thread.dueAt,\n assignee: thread.assignee,\n assignedAt: thread.assignedAt,\n output: thread.output,\n round: item.round,\n comment: item.comment,\n judgment: item.judgment,\n participation: item.participation || 'approval',\n commentedAt: item.commentedAt,\n terminatedAt: item.terminatedAt,\n updatedAt: item.updatedAt\n }\n })\n }\n }\n\n openActivityApproval(activityApproval) { navigate(`activity-approval/${activityApproval.id}?title=${activityApproval.name}`)\n }\n}\n"]}
@@ -234,6 +234,7 @@ let DraftListPage = class DraftListPage extends localize(i18next)(PageView) {
234
234
  }
235
235
  approvalLine { type
236
236
  value
237
+ participation
237
238
  approver { id
238
239
  name
239
240
  description