@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.
- package/dist-client/components/activity-instance-preview.js +5 -4
- package/dist-client/components/activity-instance-preview.js.map +1 -1
- package/dist-client/components/activity-starter-form.js +14 -10
- package/dist-client/components/activity-starter-form.js.map +1 -1
- package/dist-client/components/decision-slots.d.ts +38 -9
- package/dist-client/components/decision-slots.js +24 -10
- package/dist-client/components/decision-slots.js.map +1 -1
- package/dist-client/components/mutation-outcome.d.ts +57 -0
- package/dist-client/components/mutation-outcome.js +78 -0
- package/dist-client/components/mutation-outcome.js.map +1 -0
- package/dist-client/components/say-outcome.d.ts +25 -0
- package/dist-client/components/say-outcome.js +51 -0
- package/dist-client/components/say-outcome.js.map +1 -0
- package/dist-client/pages/activity/activity-list-page.js +28 -12
- package/dist-client/pages/activity/activity-list-page.js.map +1 -1
- package/dist-client/pages/activity/activity-model-item-list.js +4 -3
- package/dist-client/pages/activity/activity-model-item-list.js.map +1 -1
- package/dist-client/pages/activity/activity-page.d.ts +2 -2
- package/dist-client/pages/activity/activity-page.js +25 -21
- package/dist-client/pages/activity/activity-page.js.map +1 -1
- package/dist-client/pages/activity-approval/activity-approval-importer.js +4 -3
- package/dist-client/pages/activity-approval/activity-approval-importer.js.map +1 -1
- package/dist-client/pages/activity-approval/activity-approval-list-page.js +8 -9
- package/dist-client/pages/activity-approval/activity-approval-list-page.js.map +1 -1
- package/dist-client/pages/activity-approval/activity-approval-page.d.ts +2 -0
- package/dist-client/pages/activity-approval/activity-approval-page.js +76 -28
- package/dist-client/pages/activity-approval/activity-approval-page.js.map +1 -1
- package/dist-client/pages/activity-instance/activity-instance-start-page.js +24 -18
- package/dist-client/pages/activity-instance/activity-instance-start-page.js.map +1 -1
- package/dist-client/pages/activity-instance/activity-instance-view.js +1 -0
- package/dist-client/pages/activity-instance/activity-instance-view.js.map +1 -1
- package/dist-client/pages/activity-stats/activity-stats-importer.js +4 -3
- package/dist-client/pages/activity-stats/activity-stats-importer.js.map +1 -1
- package/dist-client/pages/activity-stats/activity-stats-list-page.js +8 -9
- package/dist-client/pages/activity-stats/activity-stats-list-page.js.map +1 -1
- package/dist-client/pages/activity-template/activity-template-importer.js +4 -3
- package/dist-client/pages/activity-template/activity-template-importer.js.map +1 -1
- package/dist-client/pages/activity-template/activity-template-list-page.js +8 -9
- package/dist-client/pages/activity-template/activity-template-list-page.js.map +1 -1
- package/dist-client/pages/activity-template/activity-template-model-item-list.js +4 -3
- package/dist-client/pages/activity-template/activity-template-model-item-list.js.map +1 -1
- package/dist-client/pages/activity-thread/activity-thread-importer.js +4 -3
- package/dist-client/pages/activity-thread/activity-thread-importer.js.map +1 -1
- package/dist-client/pages/activity-thread/activity-thread-list-page.js +8 -9
- package/dist-client/pages/activity-thread/activity-thread-list-page.js.map +1 -1
- package/dist-client/pages/activity-thread/activity-thread-page.js +22 -20
- package/dist-client/pages/activity-thread/activity-thread-page.js.map +1 -1
- package/dist-client/pages/activity-thread/activity-thread-view-page.js +1 -0
- package/dist-client/pages/activity-thread/activity-thread-view-page.js.map +1 -1
- package/dist-client/pages/todo/approval-pending-list-page.d.ts +6 -6
- package/dist-client/pages/todo/approval-pending-list-page.js +78 -55
- package/dist-client/pages/todo/approval-pending-list-page.js.map +1 -1
- package/dist-client/pages/todo/draft-list-page.js +1 -0
- package/dist-client/pages/todo/draft-list-page.js.map +1 -1
- package/dist-client/route.d.ts +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-server/controllers/activity-installation/installable-to-activity.d.ts +14 -1
- package/dist-server/controllers/activity-installation/installable-to-activity.js +14 -1
- package/dist-server/controllers/activity-installation/installable-to-activity.js.map +1 -1
- package/dist-server/controllers/activity-instance/draft.js +3 -0
- package/dist-server/controllers/activity-instance/draft.js.map +1 -1
- package/dist-server/controllers/activity-instance/entitlement.d.ts +25 -0
- package/dist-server/controllers/activity-instance/entitlement.js +108 -0
- package/dist-server/controllers/activity-instance/entitlement.js.map +1 -0
- package/dist-server/controllers/activity-instance/issue.js +10 -0
- package/dist-server/controllers/activity-instance/issue.js.map +1 -1
- package/dist-server/controllers/activity-instance/pick.js +8 -0
- package/dist-server/controllers/activity-instance/pick.js.map +1 -1
- package/dist-server/service/activity/index.d.ts +1 -1
- package/dist-server/service/activity-approval/activity-approval-query.d.ts +9 -2
- package/dist-server/service/activity-approval/activity-approval-query.js +42 -2
- package/dist-server/service/activity-approval/activity-approval-query.js.map +1 -1
- package/dist-server/service/activity-instance/activity-instance-mutation.js +20 -9
- package/dist-server/service/activity-instance/activity-instance-mutation.js.map +1 -1
- package/dist-server/service/activity-instance/activity-instance-query.js +25 -2
- package/dist-server/service/activity-instance/activity-instance-query.js.map +1 -1
- package/dist-server/service/activity-instance/index.d.ts +1 -1
- package/dist-server/service/activity-template/index.d.ts +1 -1
- package/dist-server/service/activity-thread/index.d.ts +1 -1
- package/dist-server/service/index.d.ts +3 -3
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +11 -11
- package/translations/en.json +12 -0
- package/translations/ja.json +12 -0
- package/translations/ko.json +12 -0
- package/translations/ms.json +12 -0
- 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]
|
|
233
|
-
?
|
|
234
|
-
:
|
|
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'
|
|
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
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
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
|
|
317
|
-
|
|
318
|
-
|
|
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 =
|
|
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
|
-
|
|
352
|
-
|
|
353
|
-
|
|
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
|
-
*
|
|
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
|
-
/* ๋ณด๊ณ ์๋ ๋ฌถ์์ ์๋ ์ด ์กฐํ๊ฐ ์๋ ค ์ค๋ค.
|
|
670
|
-
|
|
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"]}
|