@things-factory/worklist-client 6.0.24

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 (142) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/assets/images/gangsters-512x512.png +0 -0
  3. package/client/bootstrap.ts +1 -0
  4. package/client/index.ts +0 -0
  5. package/client/pages/work-center/work-center-importer.ts +97 -0
  6. package/client/pages/work-center/work-center-list-page.ts +332 -0
  7. package/client/pages/work-center/work-center-page.ts +95 -0
  8. package/client/route.ts +7 -0
  9. package/client/tsconfig.json +11 -0
  10. package/dist-client/bootstrap.d.ts +1 -0
  11. package/dist-client/bootstrap.js +2 -0
  12. package/dist-client/bootstrap.js.map +1 -0
  13. package/dist-client/index.d.ts +0 -0
  14. package/dist-client/index.js +2 -0
  15. package/dist-client/index.js.map +1 -0
  16. package/dist-client/pages/work-center/work-center-importer.d.ts +22 -0
  17. package/dist-client/pages/work-center/work-center-importer.js +100 -0
  18. package/dist-client/pages/work-center/work-center-importer.js.map +1 -0
  19. package/dist-client/pages/work-center/work-center-list-page.d.ts +62 -0
  20. package/dist-client/pages/work-center/work-center-list-page.js +317 -0
  21. package/dist-client/pages/work-center/work-center-list-page.js.map +1 -0
  22. package/dist-client/pages/work-center/work-center-page.d.ts +26 -0
  23. package/dist-client/pages/work-center/work-center-page.js +92 -0
  24. package/dist-client/pages/work-center/work-center-page.js.map +1 -0
  25. package/dist-client/route.d.ts +1 -0
  26. package/dist-client/route.js +8 -0
  27. package/dist-client/route.js.map +1 -0
  28. package/dist-client/tsconfig.tsbuildinfo +1 -0
  29. package/dist-server/controllers/activity-registry.js +17 -0
  30. package/dist-server/controllers/activity-registry.js.map +1 -0
  31. package/dist-server/controllers/graphql-client.js +60 -0
  32. package/dist-server/controllers/graphql-client.js.map +1 -0
  33. package/dist-server/controllers/index.js +8 -0
  34. package/dist-server/controllers/index.js.map +1 -0
  35. package/dist-server/controllers/webhooks/decorators.js +17 -0
  36. package/dist-server/controllers/webhooks/decorators.js.map +1 -0
  37. package/dist-server/controllers/webhooks/index.js +48 -0
  38. package/dist-server/controllers/webhooks/index.js.map +1 -0
  39. package/dist-server/controllers/work-center/connect-work-center.js +17 -0
  40. package/dist-server/controllers/work-center/connect-work-center.js.map +1 -0
  41. package/dist-server/controllers/work-center/get-work-center.js +13 -0
  42. package/dist-server/controllers/work-center/get-work-center.js.map +1 -0
  43. package/dist-server/controllers/work-center/index.js +6 -0
  44. package/dist-server/controllers/work-center/index.js.map +1 -0
  45. package/dist-server/controllers/worklist-api/assign-activity-thread.js +6 -0
  46. package/dist-server/controllers/worklist-api/assign-activity-thread.js.map +1 -0
  47. package/dist-server/controllers/worklist-api/draft-activity-instance.js +6 -0
  48. package/dist-server/controllers/worklist-api/draft-activity-instance.js.map +1 -0
  49. package/dist-server/controllers/worklist-api/get-activity-list.js +6 -0
  50. package/dist-server/controllers/worklist-api/get-activity-list.js.map +1 -0
  51. package/dist-server/controllers/worklist-api/get-activity.js +6 -0
  52. package/dist-server/controllers/worklist-api/get-activity.js.map +1 -0
  53. package/dist-server/controllers/worklist-api/get-todo-list.js +6 -0
  54. package/dist-server/controllers/worklist-api/get-todo-list.js.map +1 -0
  55. package/dist-server/controllers/worklist-api/index.js +11 -0
  56. package/dist-server/controllers/worklist-api/index.js.map +1 -0
  57. package/dist-server/controllers/worklist-api/register-activity.js +6 -0
  58. package/dist-server/controllers/worklist-api/register-activity.js.map +1 -0
  59. package/dist-server/controllers/worklist-api/unregister-activity.js +6 -0
  60. package/dist-server/controllers/worklist-api/unregister-activity.js.map +1 -0
  61. package/dist-server/controllers/worklist-api/update-activity.js +6 -0
  62. package/dist-server/controllers/worklist-api/update-activity.js.map +1 -0
  63. package/dist-server/index.js +8 -0
  64. package/dist-server/index.js.map +1 -0
  65. package/dist-server/middlewares/index.js +8 -0
  66. package/dist-server/middlewares/index.js.map +1 -0
  67. package/dist-server/migrations/index.js +12 -0
  68. package/dist-server/migrations/index.js.map +1 -0
  69. package/dist-server/routes.js +42 -0
  70. package/dist-server/routes.js.map +1 -0
  71. package/dist-server/service/activity/activity-model-type.js +138 -0
  72. package/dist-server/service/activity/activity-model-type.js.map +1 -0
  73. package/dist-server/service/activity/activity-mutation.js +105 -0
  74. package/dist-server/service/activity/activity-mutation.js.map +1 -0
  75. package/dist-server/service/activity/activity-query.js +87 -0
  76. package/dist-server/service/activity/activity-query.js.map +1 -0
  77. package/dist-server/service/activity/activity-type.js +199 -0
  78. package/dist-server/service/activity/activity-type.js.map +1 -0
  79. package/dist-server/service/activity/activity.js +170 -0
  80. package/dist-server/service/activity/activity.js.map +1 -0
  81. package/dist-server/service/activity/index.js +9 -0
  82. package/dist-server/service/activity/index.js.map +1 -0
  83. package/dist-server/service/index.js +28 -0
  84. package/dist-server/service/index.js.map +1 -0
  85. package/dist-server/service/work-center/event-subscriber.js +21 -0
  86. package/dist-server/service/work-center/event-subscriber.js.map +1 -0
  87. package/dist-server/service/work-center/index.js +12 -0
  88. package/dist-server/service/work-center/index.js.map +1 -0
  89. package/dist-server/service/work-center/work-center-history.js +123 -0
  90. package/dist-server/service/work-center/work-center-history.js.map +1 -0
  91. package/dist-server/service/work-center/work-center-mutation.js +168 -0
  92. package/dist-server/service/work-center/work-center-mutation.js.map +1 -0
  93. package/dist-server/service/work-center/work-center-query.js +97 -0
  94. package/dist-server/service/work-center/work-center-query.js.map +1 -0
  95. package/dist-server/service/work-center/work-center-type.js +86 -0
  96. package/dist-server/service/work-center/work-center-type.js.map +1 -0
  97. package/dist-server/service/work-center/work-center.js +86 -0
  98. package/dist-server/service/work-center/work-center.js.map +1 -0
  99. package/dist-server/tsconfig.tsbuildinfo +1 -0
  100. package/helps/worklist-webhook/work-center.md +160 -0
  101. package/package.json +36 -0
  102. package/server/controllers/activity-registry.ts +17 -0
  103. package/server/controllers/graphql-client.ts +68 -0
  104. package/server/controllers/index.ts +4 -0
  105. package/server/controllers/webhooks/decorators.ts +18 -0
  106. package/server/controllers/webhooks/index.ts +30 -0
  107. package/server/controllers/work-center/connect-work-center.ts +15 -0
  108. package/server/controllers/work-center/get-work-center.ts +9 -0
  109. package/server/controllers/work-center/index.ts +2 -0
  110. package/server/controllers/worklist-api/assign-activity-thread.ts +3 -0
  111. package/server/controllers/worklist-api/draft-activity-instance.ts +3 -0
  112. package/server/controllers/worklist-api/get-activity-list.ts +3 -0
  113. package/server/controllers/worklist-api/get-activity.ts +3 -0
  114. package/server/controllers/worklist-api/get-todo-list.ts +4 -0
  115. package/server/controllers/worklist-api/index.ts +7 -0
  116. package/server/controllers/worklist-api/register-activity.ts +3 -0
  117. package/server/controllers/worklist-api/unregister-activity.ts +3 -0
  118. package/server/controllers/worklist-api/update-activity.ts +3 -0
  119. package/server/index.ts +5 -0
  120. package/server/middlewares/index.ts +3 -0
  121. package/server/migrations/index.ts +9 -0
  122. package/server/routes.ts +46 -0
  123. package/server/service/activity/activity-model-type.ts +106 -0
  124. package/server/service/activity/activity-mutation.ts +85 -0
  125. package/server/service/activity/activity-query.ts +61 -0
  126. package/server/service/activity/activity-type.ts +146 -0
  127. package/server/service/activity/activity.ts +135 -0
  128. package/server/service/activity/index.ts +6 -0
  129. package/server/service/index.ts +36 -0
  130. package/server/service/work-center/event-subscriber.ts +17 -0
  131. package/server/service/work-center/index.ts +9 -0
  132. package/server/service/work-center/work-center-history.ts +110 -0
  133. package/server/service/work-center/work-center-mutation.ts +198 -0
  134. package/server/service/work-center/work-center-query.ts +62 -0
  135. package/server/service/work-center/work-center-type.ts +61 -0
  136. package/server/service/work-center/work-center.ts +76 -0
  137. package/server/tsconfig.json +10 -0
  138. package/things-factory.config.js +11 -0
  139. package/translations/en.json +1 -0
  140. package/translations/ko.json +1 -0
  141. package/translations/ms.json +1 -0
  142. package/translations/zh.json +1 -0
@@ -0,0 +1,100 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import '@operato/data-grist';
3
+ import gql from 'graphql-tag';
4
+ import { css, html, LitElement } from 'lit';
5
+ import { property } from 'lit/decorators.js';
6
+ import { client } from '@operato/graphql';
7
+ import { i18next } from '@operato/i18n';
8
+ import { isMobileDevice } from '@operato/utils';
9
+ export class WorkCenterImporter extends LitElement {
10
+ constructor() {
11
+ super(...arguments);
12
+ this.workCenters = [];
13
+ this.columns = {
14
+ list: { fields: ['name', 'description'] },
15
+ pagination: { infinite: true },
16
+ columns: [
17
+ {
18
+ type: 'string',
19
+ name: 'name',
20
+ header: i18next.t('field.name'),
21
+ width: 150
22
+ },
23
+ {
24
+ type: 'string',
25
+ name: 'description',
26
+ header: i18next.t('field.description'),
27
+ width: 200
28
+ },
29
+ {
30
+ type: 'checkbox',
31
+ name: 'active',
32
+ header: i18next.t('field.active'),
33
+ width: 60
34
+ }
35
+ ]
36
+ };
37
+ }
38
+ render() {
39
+ return html `
40
+ <ox-grist
41
+ .mode=${isMobileDevice() ? 'LIST' : 'GRID'}
42
+ .config=${this.columns}
43
+ .data=${{
44
+ records: this.workCenters
45
+ }}
46
+ ></ox-grist>
47
+
48
+ <div class="button-container">
49
+ <mwc-button raised @click="${this.save.bind(this)}">${i18next.t('button.save')}</mwc-button>
50
+ </div>
51
+ `;
52
+ }
53
+ async save() {
54
+ var _a;
55
+ const response = await client.mutate({
56
+ mutation: gql `
57
+ mutation importWorkCenters($workCenters: [WorkCenterPatch!]!) {
58
+ importWorkCenters(workCenters: $workCenters)
59
+ }
60
+ `,
61
+ variables: { workCenters: this.workCenters }
62
+ });
63
+ if ((_a = response.errors) === null || _a === void 0 ? void 0 : _a.length)
64
+ return;
65
+ this.dispatchEvent(new CustomEvent('imported'));
66
+ }
67
+ }
68
+ WorkCenterImporter.styles = [
69
+ css `
70
+ :host {
71
+ display: flex;
72
+ flex-direction: column;
73
+
74
+ background-color: #fff;
75
+ }
76
+
77
+ ox-grist {
78
+ flex: 1;
79
+ }
80
+
81
+ .button-container {
82
+ display: flex;
83
+ margin-left: auto;
84
+ padding: var(--padding-default);
85
+ }
86
+
87
+ mwc-button {
88
+ margin-left: var(--margin-default);
89
+ }
90
+ `
91
+ ];
92
+ __decorate([
93
+ property({ type: Array }),
94
+ __metadata("design:type", Array)
95
+ ], WorkCenterImporter.prototype, "workCenters", void 0);
96
+ __decorate([
97
+ property({ type: Object }),
98
+ __metadata("design:type", Object)
99
+ ], WorkCenterImporter.prototype, "columns", void 0);
100
+ //# sourceMappingURL=work-center-importer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"work-center-importer.js","sourceRoot":"","sources":["../../../client/pages/work-center/work-center-importer.ts"],"names":[],"mappings":";AAAA,OAAO,qBAAqB,CAAA;AAE5B,OAAO,GAAG,MAAM,aAAa,CAAA;AAC7B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAE5C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAE/C,MAAM,OAAO,kBAAmB,SAAQ,UAAU;IAAlD;;QA0B6B,gBAAW,GAAU,EAAE,CAAA;QACtB,YAAO,GAAG;YACpC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE;YACzC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC9B,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,MAAM;oBACZ,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC;oBAC/B,KAAK,EAAE,GAAG;iBACX;gBACD;oBACE,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,aAAa;oBACnB,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC;oBACtC,KAAK,EAAE,GAAG;iBACX;gBACD;oBACE,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,QAAQ;oBACd,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC;oBACjC,KAAK,EAAE,EAAE;iBACV;aACF;SACF,CAAA;IAmCH,CAAC;IAhCC,MAAM;QACJ,OAAO,IAAI,CAAA;;gBAEC,cAAc,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;kBAChC,IAAI,CAAC,OAAO;gBAEpB;YACE,OAAO,EAAE,IAAI,CAAC,WAAW;SAE7B;;;;qCAI6B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC;;KAEjF,CAAA;IACH,CAAC;IAED,KAAK,CAAC,IAAI;;QACR,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;YACnC,QAAQ,EAAE,GAAG,CAAA;;;;OAIZ;YACD,SAAS,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;SAC7C,CAAC,CAAA;QAEF,IAAI,MAAA,QAAQ,CAAC,MAAM,0CAAE,MAAM;YAAE,OAAM;QAEnC,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,CAAC,CAAA;IACjD,CAAC;;AAnFM,yBAAM,GAAG;IACd,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;KAqBF;CACF,CAAA;AAED;IAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;;uDAAwB;AAClD;IAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;mDAuB1B","sourcesContent":["import '@operato/data-grist'\n\nimport gql from 'graphql-tag'\nimport { css, html, LitElement } from 'lit'\nimport { property } from 'lit/decorators.js'\n\nimport { client } from '@operato/graphql'\nimport { i18next } from '@operato/i18n'\nimport { isMobileDevice } from '@operato/utils'\n\nexport class WorkCenterImporter extends LitElement {\n static styles = [\n css`\n :host {\n display: flex;\n flex-direction: column;\n\n background-color: #fff;\n }\n\n ox-grist {\n flex: 1;\n }\n\n .button-container {\n display: flex;\n margin-left: auto;\n padding: var(--padding-default);\n }\n\n mwc-button {\n margin-left: var(--margin-default);\n }\n `\n ]\n\n @property({ type: Array }) workCenters: any[] = []\n @property({ type: Object }) columns = {\n list: { fields: ['name', 'description'] },\n pagination: { infinite: true },\n columns: [\n {\n type: 'string',\n name: 'name',\n header: i18next.t('field.name'),\n width: 150\n },\n {\n type: 'string',\n name: 'description',\n header: i18next.t('field.description'),\n width: 200\n },\n {\n type: 'checkbox',\n name: 'active',\n header: i18next.t('field.active'),\n width: 60\n }\n ]\n }\n\n\n render() {\n return html`\n <ox-grist\n .mode=${isMobileDevice() ? 'LIST' : 'GRID'}\n .config=${this.columns}\n .data=${\n { \n records: this.workCenters \n }\n }\n ></ox-grist>\n\n <div class=\"button-container\">\n <mwc-button raised @click=\"${this.save.bind(this)}\">${i18next.t('button.save')}</mwc-button>\n </div>\n `\n }\n\n async save() {\n const response = await client.mutate({\n mutation: gql`\n mutation importWorkCenters($workCenters: [WorkCenterPatch!]!) {\n importWorkCenters(workCenters: $workCenters)\n }\n `,\n variables: { workCenters: this.workCenters }\n })\n\n if (response.errors?.length) return\n\n this.dispatchEvent(new CustomEvent('imported'))\n }\n}\n\n"]}
@@ -0,0 +1,62 @@
1
+ import '@operato/data-grist';
2
+ import { PageView } from '@operato/shell';
3
+ import { FetchOption } from '@operato/data-grist';
4
+ import { WorkCenterImporter } from './work-center-importer';
5
+ declare const WorkCenterListPage_base: (new (...args: any[]) => {
6
+ _storeUnsubscribe: import("redux").Unsubscribe;
7
+ connectedCallback(): void;
8
+ disconnectedCallback(): void;
9
+ stateChanged(_state: unknown): void;
10
+ readonly isConnected: boolean;
11
+ }) & (new (...args: any[]) => import("lit").LitElement) & typeof PageView & import("@open-wc/dedupe-mixin").Constructor<import("@open-wc/scoped-elements/types/src/types").ScopedElementsHost>;
12
+ export declare class WorkCenterListPage extends WorkCenterListPage_base {
13
+ static styles: import("lit").CSSResult[];
14
+ static get scopedElements(): {
15
+ 'work-center-importer': typeof WorkCenterImporter;
16
+ };
17
+ gristConfig: any;
18
+ mode: 'CARD' | 'GRID' | 'LIST';
19
+ private grist;
20
+ private sortersControl;
21
+ get context(): {
22
+ search: {
23
+ handler: (search: string) => void;
24
+ placeholder: string;
25
+ value: string;
26
+ };
27
+ filter: {
28
+ handler: () => void;
29
+ };
30
+ help: string;
31
+ actions: {
32
+ icon: string;
33
+ emphasis: {
34
+ raised: boolean;
35
+ outlined: boolean;
36
+ dense: boolean;
37
+ danger: boolean;
38
+ };
39
+ title: string;
40
+ action: () => Promise<void>;
41
+ }[];
42
+ exportable: {
43
+ name: string;
44
+ data: () => Promise<{}[]>;
45
+ };
46
+ importable: {
47
+ handler: (records: any) => Promise<void>;
48
+ };
49
+ };
50
+ render(): import("lit-html").TemplateResult<1>;
51
+ pageInitialized(lifecycle: any): Promise<void>;
52
+ pageUpdated(changes: any, lifecycle: any): Promise<void>;
53
+ fetchHandler({ page, limit, sortings, filters }: FetchOption): Promise<{
54
+ total: any;
55
+ records: any;
56
+ }>;
57
+ _deleteWorkCenter(): Promise<void>;
58
+ _updateWorkCenter(): Promise<void>;
59
+ exportHandler(): Promise<{}[]>;
60
+ importHandler(records: any): Promise<void>;
61
+ }
62
+ export {};
@@ -0,0 +1,317 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import '@operato/data-grist';
3
+ import { CommonButtonStyles, CommonGristStyles, ScrollbarStyles } from '@operato/styles';
4
+ import { PageView, store } from '@operato/shell';
5
+ import { css, html } from 'lit';
6
+ import { customElement, property, query } from 'lit/decorators.js';
7
+ import { ScopedElementsMixin } from '@open-wc/scoped-elements';
8
+ import { DataGrist } from '@operato/data-grist';
9
+ import { client } from '@operato/graphql';
10
+ import { i18next, localize } from '@operato/i18n';
11
+ import { notify, openPopup } from '@operato/layout';
12
+ import { OxPopup } from '@operato/popup';
13
+ import { isMobileDevice } from '@operato/utils';
14
+ import { connect } from 'pwa-helpers/connect-mixin';
15
+ import gql from 'graphql-tag';
16
+ import { WorkCenterImporter } from './work-center-importer';
17
+ let WorkCenterListPage = class WorkCenterListPage extends connect(store)(localize(i18next)(ScopedElementsMixin(PageView))) {
18
+ constructor() {
19
+ super(...arguments);
20
+ this.mode = isMobileDevice() ? 'CARD' : 'GRID';
21
+ }
22
+ static get scopedElements() {
23
+ return {
24
+ 'work-center-importer': WorkCenterImporter
25
+ };
26
+ }
27
+ get context() {
28
+ return {
29
+ search: {
30
+ handler: (search) => {
31
+ this.grist.searchText = search;
32
+ },
33
+ placeholder: i18next.t('title.work-center list'),
34
+ value: this.grist.searchText
35
+ },
36
+ filter: {
37
+ handler: () => {
38
+ this.grist.toggleHeadroom();
39
+ }
40
+ },
41
+ help: 'worklist-client/work-center',
42
+ actions: [
43
+ Object.assign({ title: i18next.t('button.save'), action: this._updateWorkCenter.bind(this) }, CommonButtonStyles.save),
44
+ Object.assign({ title: i18next.t('button.delete'), action: this._deleteWorkCenter.bind(this) }, CommonButtonStyles.delete)
45
+ ],
46
+ exportable: {
47
+ name: i18next.t('title.work-center list'),
48
+ data: this.exportHandler.bind(this)
49
+ },
50
+ importable: {
51
+ handler: this.importHandler.bind(this)
52
+ }
53
+ };
54
+ }
55
+ render() {
56
+ const mode = this.mode || (isMobileDevice() ? 'CARD' : 'GRID');
57
+ return html `
58
+ <ox-grist .mode=${mode} .config=${this.gristConfig} .fetchHandler=${this.fetchHandler.bind(this)}>
59
+ <div slot="headroom">
60
+ <div id="filters">
61
+ <ox-filters-form autofocus></ox-filters-form>
62
+ </div>
63
+
64
+ <div id="sorters">
65
+ Sort
66
+ <mwc-icon
67
+ @click=${e => {
68
+ const target = e.currentTarget;
69
+ this.sortersControl.open({
70
+ right: 0,
71
+ top: target.offsetTop + target.offsetHeight
72
+ });
73
+ }}
74
+ >expand_more</mwc-icon
75
+ >
76
+ <ox-popup id="sorter-control">
77
+ <ox-sorters-control> </ox-sorters-control>
78
+ </ox-popup>
79
+ </div>
80
+
81
+ <div id="modes">
82
+ <mwc-icon @click=${() => (this.mode = 'GRID')} ?active=${mode == 'GRID'}>grid_on</mwc-icon>
83
+ <mwc-icon @click=${() => (this.mode = 'LIST')} ?active=${mode == 'LIST'}>format_list_bulleted</mwc-icon>
84
+ <mwc-icon @click=${() => (this.mode = 'CARD')} ?active=${mode == 'CARD'}>apps</mwc-icon>
85
+ </div>
86
+ </div>
87
+ </ox-grist>
88
+ `;
89
+ }
90
+ async pageInitialized(lifecycle) {
91
+ this.gristConfig = {
92
+ list: {
93
+ fields: ['name', 'description'],
94
+ details: ['active', 'updatedAt']
95
+ },
96
+ columns: [
97
+ { type: 'gutter', gutterName: 'sequence' },
98
+ { type: 'gutter', gutterName: 'row-selector', multiple: true },
99
+ {
100
+ type: 'string',
101
+ name: 'name',
102
+ header: i18next.t('field.name'),
103
+ record: {
104
+ editable: true
105
+ },
106
+ filter: 'search',
107
+ sortable: true,
108
+ width: 150
109
+ },
110
+ {
111
+ type: 'string',
112
+ name: 'description',
113
+ header: i18next.t('field.description'),
114
+ record: {
115
+ editable: true
116
+ },
117
+ filter: 'search',
118
+ width: 200
119
+ },
120
+ {
121
+ type: 'checkbox',
122
+ name: 'active',
123
+ label: true,
124
+ header: i18next.t('field.active'),
125
+ record: {
126
+ editable: true
127
+ },
128
+ filter: true,
129
+ sortable: true,
130
+ width: 60
131
+ },
132
+ {
133
+ type: 'resource-object',
134
+ name: 'updater',
135
+ header: i18next.t('field.updater'),
136
+ record: {
137
+ editable: false
138
+ },
139
+ sortable: true,
140
+ width: 120
141
+ },
142
+ {
143
+ type: 'datetime',
144
+ name: 'updatedAt',
145
+ header: i18next.t('field.updated_at'),
146
+ record: {
147
+ editable: false
148
+ },
149
+ sortable: true,
150
+ width: 180
151
+ }
152
+ ],
153
+ rows: {
154
+ selectable: {
155
+ multiple: true
156
+ }
157
+ },
158
+ sorters: [
159
+ {
160
+ name: 'name'
161
+ }
162
+ ]
163
+ };
164
+ }
165
+ async pageUpdated(changes, lifecycle) {
166
+ if (this.active) {
167
+ // do something here when this page just became as active
168
+ }
169
+ }
170
+ async fetchHandler({ page = 1, limit = 100, sortings = [], filters = [] }) {
171
+ const response = await client.query({
172
+ query: gql `
173
+ query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) {
174
+ responses: workCenters(filters: $filters, pagination: $pagination, sortings: $sortings) {
175
+ items {
176
+ id
177
+ name
178
+ description
179
+ active
180
+ updater {
181
+ id
182
+ name
183
+ }
184
+ updatedAt
185
+ }
186
+ total
187
+ }
188
+ }
189
+ `,
190
+ variables: {
191
+ filters,
192
+ pagination: { page, limit },
193
+ sortings
194
+ }
195
+ });
196
+ return {
197
+ total: response.data.responses.total || 0,
198
+ records: response.data.responses.items || []
199
+ };
200
+ }
201
+ async _deleteWorkCenter() {
202
+ if (confirm(i18next.t('text.sure_to_x', { x: i18next.t('text.delete') }))) {
203
+ const ids = this.grist.selected.map(record => record.id);
204
+ if (ids && ids.length > 0) {
205
+ const response = await client.mutate({
206
+ mutation: gql `
207
+ mutation ($ids: [String!]!) {
208
+ deleteWorkCenters(ids: $ids)
209
+ }
210
+ `,
211
+ variables: {
212
+ ids
213
+ }
214
+ });
215
+ if (!response.errors) {
216
+ this.grist.fetch();
217
+ notify({
218
+ message: i18next.t('text.info_x_successfully', { x: i18next.t('text.delete') })
219
+ });
220
+ }
221
+ }
222
+ }
223
+ }
224
+ async _updateWorkCenter() {
225
+ let patches = this.grist.dirtyRecords;
226
+ if (patches && patches.length) {
227
+ patches = patches.map(patch => {
228
+ let patchField = patch.id ? { id: patch.id } : {};
229
+ const dirtyFields = patch.__dirtyfields__;
230
+ for (let key in dirtyFields) {
231
+ patchField[key] = dirtyFields[key].after;
232
+ }
233
+ patchField.cuFlag = patch.__dirty__;
234
+ return patchField;
235
+ });
236
+ const response = await client.mutate({
237
+ mutation: gql `
238
+ mutation ($patches: [WorkCenterPatch!]!) {
239
+ updateMultipleWorkCenter(patches: $patches) {
240
+ name
241
+ }
242
+ }
243
+ `,
244
+ variables: {
245
+ patches
246
+ }
247
+ });
248
+ if (!response.errors) {
249
+ this.grist.fetch();
250
+ }
251
+ }
252
+ }
253
+ async exportHandler() {
254
+ const exportTargets = this.grist.selected.length ? this.grist.selected : this.grist.dirtyData.records;
255
+ const targetFieldSet = new Set(['id', 'name', 'description', 'active']);
256
+ return exportTargets.map(workCenter => {
257
+ let tempObj = {};
258
+ for (const field of targetFieldSet) {
259
+ tempObj[field] = workCenter[field];
260
+ }
261
+ return tempObj;
262
+ });
263
+ }
264
+ async importHandler(records) {
265
+ const popup = openPopup(html `
266
+ <work-center-importer
267
+ .workCenters=${records}
268
+ @imported=${() => {
269
+ history.back();
270
+ this.grist.fetch();
271
+ }}
272
+ ></work-center-importer>
273
+ `, {
274
+ backdrop: true,
275
+ size: 'large',
276
+ title: i18next.t('title.import work-center')
277
+ });
278
+ popup.onclosed = () => {
279
+ this.grist.fetch();
280
+ };
281
+ }
282
+ };
283
+ WorkCenterListPage.styles = [
284
+ ScrollbarStyles,
285
+ CommonGristStyles,
286
+ css `
287
+ :host {
288
+ display: flex;
289
+
290
+ width: 100%;
291
+
292
+ --grid-record-emphasized-background-color: red;
293
+ --grid-record-emphasized-color: yellow;
294
+ }
295
+ `
296
+ ];
297
+ __decorate([
298
+ property({ type: Object }),
299
+ __metadata("design:type", Object)
300
+ ], WorkCenterListPage.prototype, "gristConfig", void 0);
301
+ __decorate([
302
+ property({ type: String }),
303
+ __metadata("design:type", String)
304
+ ], WorkCenterListPage.prototype, "mode", void 0);
305
+ __decorate([
306
+ query('ox-grist'),
307
+ __metadata("design:type", DataGrist)
308
+ ], WorkCenterListPage.prototype, "grist", void 0);
309
+ __decorate([
310
+ query('#sorter-control'),
311
+ __metadata("design:type", OxPopup)
312
+ ], WorkCenterListPage.prototype, "sortersControl", void 0);
313
+ WorkCenterListPage = __decorate([
314
+ customElement('work-center-list-page')
315
+ ], WorkCenterListPage);
316
+ export { WorkCenterListPage };
317
+ //# sourceMappingURL=work-center-list-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"work-center-list-page.js","sourceRoot":"","sources":["../../../client/pages/work-center/work-center-list-page.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/data-grist'\n\nimport { CommonButtonStyles, CommonGristStyles, ScrollbarStyles } from '@operato/styles'\nimport { PageView, store } from '@operato/shell'\nimport { css, html } from 'lit'\nimport { customElement, property, query } from 'lit/decorators.js'\nimport { ScopedElementsMixin } from '@open-wc/scoped-elements'\nimport { ColumnConfig, DataGrist, FetchOption, SortersControl } from '@operato/data-grist'\nimport { client } from '@operato/graphql'\nimport { i18next, localize } from '@operato/i18n'\nimport { notify, openPopup } from '@operato/layout'\nimport { OxPopup } from '@operato/popup'\nimport { isMobileDevice } from '@operato/utils'\n\nimport { connect } from 'pwa-helpers/connect-mixin'\nimport gql from 'graphql-tag'\n\nimport { WorkCenterImporter } from './work-center-importer'\n\n@customElement('work-center-list-page')\nexport class WorkCenterListPage extends connect(store)(localize(i18next)(ScopedElementsMixin(PageView))) {\n static styles = [\n ScrollbarStyles,\n CommonGristStyles,\n css`\n :host {\n display: flex;\n\n width: 100%;\n\n --grid-record-emphasized-background-color: red;\n --grid-record-emphasized-color: yellow;\n }\n `\n ]\n\n static get scopedElements() {\n return {\n 'work-center-importer': WorkCenterImporter\n }\n }\n\n @property({ type: Object }) gristConfig: any\n @property({ type: String }) mode: 'CARD' | 'GRID' | 'LIST' = isMobileDevice() ? 'CARD' : 'GRID'\n\n @query('ox-grist') private grist!: DataGrist\n @query('#sorter-control') private sortersControl!: OxPopup\n\n get context() {\n return {\n search: {\n handler: (search: string) => {\n this.grist.searchText = search\n },\n placeholder: i18next.t('title.work-center list'),\n value: this.grist.searchText\n },\n filter: {\n handler: () => {\n this.grist.toggleHeadroom()\n }\n },\n help: 'worklist-client/work-center',\n actions: [\n {\n title: i18next.t('button.save'),\n action: this._updateWorkCenter.bind(this),\n ...CommonButtonStyles.save\n },\n {\n title: i18next.t('button.delete'),\n action: this._deleteWorkCenter.bind(this),\n ...CommonButtonStyles.delete\n }\n ],\n exportable: {\n name: i18next.t('title.work-center list'),\n data: this.exportHandler.bind(this)\n },\n importable: {\n handler: this.importHandler.bind(this)\n }\n }\n }\n\n render() {\n const mode = this.mode || (isMobileDevice() ? 'CARD' : 'GRID')\n\n return html`\n <ox-grist .mode=${mode} .config=${this.gristConfig} .fetchHandler=${this.fetchHandler.bind(this)}>\n <div slot=\"headroom\">\n <div id=\"filters\">\n <ox-filters-form autofocus></ox-filters-form>\n </div>\n\n <div id=\"sorters\">\n Sort\n <mwc-icon\n @click=${e => {\n const target = e.currentTarget\n this.sortersControl.open({\n right: 0,\n top: target.offsetTop + target.offsetHeight\n })\n }}\n >expand_more</mwc-icon\n >\n <ox-popup id=\"sorter-control\">\n <ox-sorters-control> </ox-sorters-control>\n </ox-popup>\n </div>\n\n <div id=\"modes\">\n <mwc-icon @click=${() => (this.mode = 'GRID')} ?active=${mode == 'GRID'}>grid_on</mwc-icon>\n <mwc-icon @click=${() => (this.mode = 'LIST')} ?active=${mode == 'LIST'}>format_list_bulleted</mwc-icon>\n <mwc-icon @click=${() => (this.mode = 'CARD')} ?active=${mode == 'CARD'}>apps</mwc-icon>\n </div>\n </div>\n </ox-grist>\n `\n }\n\n async pageInitialized(lifecycle: any) {\n this.gristConfig = {\n list: {\n fields: ['name', 'description'],\n details: ['active', 'updatedAt']\n },\n columns: [\n { type: 'gutter', gutterName: 'sequence' },\n { type: 'gutter', gutterName: 'row-selector', multiple: true },\n {\n type: 'string',\n name: 'name',\n header: i18next.t('field.name'),\n record: {\n editable: true\n },\n filter: 'search',\n sortable: true,\n width: 150\n },\n {\n type: 'string',\n name: 'description',\n header: i18next.t('field.description'),\n record: {\n editable: true\n },\n filter: 'search',\n width: 200\n },\n {\n type: 'checkbox',\n name: 'active',\n label: true,\n header: i18next.t('field.active'),\n record: {\n editable: true\n },\n filter: true,\n sortable: true,\n width: 60\n },\n {\n type: 'resource-object',\n name: 'updater',\n header: i18next.t('field.updater'),\n record: {\n editable: false\n },\n sortable: true,\n width: 120\n },\n {\n type: 'datetime',\n name: 'updatedAt',\n header: i18next.t('field.updated_at'),\n record: {\n editable: false\n },\n sortable: true,\n width: 180\n }\n ],\n rows: {\n selectable: {\n multiple: true\n }\n },\n sorters: [\n {\n name: 'name'\n }\n ]\n }\n }\n\n async pageUpdated(changes: any, lifecycle: any) {\n if (this.active) {\n // do something here when this page just became as active\n }\n }\n\n async fetchHandler({ page = 1, limit = 100, sortings = [], filters = [] }: FetchOption) {\n const response = await client.query({\n query: gql`\n query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) {\n responses: workCenters(filters: $filters, pagination: $pagination, sortings: $sortings) {\n items {\n id\n name\n description\n active\n updater {\n id\n name\n }\n updatedAt\n }\n total\n }\n }\n `,\n variables: {\n filters,\n pagination: { page, limit },\n sortings\n }\n })\n\n return {\n total: response.data.responses.total || 0,\n records: response.data.responses.items || []\n }\n }\n\n async _deleteWorkCenter() {\n if (confirm(i18next.t('text.sure_to_x', { x: i18next.t('text.delete') }))) {\n const ids = this.grist.selected.map(record => record.id)\n if (ids && ids.length > 0) {\n const response = await client.mutate({\n mutation: gql`\n mutation ($ids: [String!]!) {\n deleteWorkCenters(ids: $ids)\n }\n `,\n variables: {\n ids\n }\n })\n\n if (!response.errors) {\n this.grist.fetch()\n notify({\n message: i18next.t('text.info_x_successfully', { x: i18next.t('text.delete') })\n })\n }\n }\n }\n }\n\n async _updateWorkCenter() {\n let patches = this.grist.dirtyRecords\n if (patches && patches.length) {\n patches = patches.map(patch => {\n let patchField: any = patch.id ? { id: patch.id } : {}\n const dirtyFields = patch.__dirtyfields__\n for (let key in dirtyFields) {\n patchField[key] = dirtyFields[key].after\n }\n patchField.cuFlag = patch.__dirty__\n\n return patchField\n })\n\n const response = await client.mutate({\n mutation: gql`\n mutation ($patches: [WorkCenterPatch!]!) {\n updateMultipleWorkCenter(patches: $patches) {\n name\n }\n }\n `,\n variables: {\n patches\n }\n })\n\n if (!response.errors) {\n this.grist.fetch()\n }\n }\n }\n\n async exportHandler() {\n const exportTargets = this.grist.selected.length ? this.grist.selected : this.grist.dirtyData.records\n const targetFieldSet = new Set(['id', 'name', 'description', 'active'])\n\n return exportTargets.map(workCenter => {\n let tempObj = {}\n for (const field of targetFieldSet) {\n tempObj[field] = workCenter[field]\n }\n\n return tempObj\n })\n }\n\n async importHandler(records) {\n const popup = openPopup(\n html`\n <work-center-importer\n .workCenters=${records}\n @imported=${() => {\n history.back()\n this.grist.fetch()\n }}\n ></work-center-importer>\n `,\n {\n backdrop: true,\n size: 'large',\n title: i18next.t('title.import work-center')\n }\n )\n\n popup.onclosed = () => {\n this.grist.fetch()\n }\n }\n}\n"]}
@@ -0,0 +1,26 @@
1
+ import { PropertyValues } from 'lit';
2
+ import { PageView } from '@operato/shell';
3
+ declare const WorkCenterPage_base: (new (...args: any[]) => {
4
+ _storeUnsubscribe: import("redux").Unsubscribe;
5
+ connectedCallback(): void;
6
+ disconnectedCallback(): void;
7
+ stateChanged(_state: unknown): void;
8
+ readonly isConnected: boolean;
9
+ }) & typeof PageView;
10
+ /**
11
+ * 이 페이지는 Operato-Gangsters에 대한 설정 및 관리, 대시보드 페이지이다.
12
+ * - 연결 상태를 확인한다.
13
+ * - 클라이언트들에 의해서 등록된 Activity들을 확인한다. (예를 들면, 회의록 작성, CVR 작성, 견적서 작성 등)
14
+ * - 기본 대시보드를 제공한다. (Activity 처리 월별 추이, 현재 액티비티 상태별 현황, TOP 5s, Organization 현황)
15
+ * - 관리 기능..
16
+ */
17
+ export declare class WorkCenterPage extends WorkCenterPage_base {
18
+ static styles: import("lit").CSSResult[];
19
+ render(): import("lit-html").TemplateResult<1>;
20
+ updated(changes: PropertyValues<this>): void;
21
+ stateChanged(state: any): void;
22
+ pageInitialized(lifecycle: any): void;
23
+ pageUpdated(changes: any, lifecycle: any, before: any): void;
24
+ pageDisposed(lifecycle: any): void;
25
+ }
26
+ export {};
@@ -0,0 +1,92 @@
1
+ import { __decorate } from "tslib";
2
+ import { html, css } from 'lit';
3
+ import { customElement } from 'lit/decorators.js';
4
+ import { connect } from 'pwa-helpers/connect-mixin.js';
5
+ import { store, PageView } from '@operato/shell';
6
+ const logo = new URL('/assets/images/gangsters-512x512.png', import.meta.url).href;
7
+ /**
8
+ * 이 페이지는 Operato-Gangsters에 대한 설정 및 관리, 대시보드 페이지이다.
9
+ * - 연결 상태를 확인한다.
10
+ * - 클라이언트들에 의해서 등록된 Activity들을 확인한다. (예를 들면, 회의록 작성, CVR 작성, 견적서 작성 등)
11
+ * - 기본 대시보드를 제공한다. (Activity 처리 월별 추이, 현재 액티비티 상태별 현황, TOP 5s, Organization 현황)
12
+ * - 관리 기능..
13
+ */
14
+ let WorkCenterPage = class WorkCenterPage extends connect(store)(PageView) {
15
+ render() {
16
+ return html ` <img src=${logo} /> `;
17
+ }
18
+ updated(changes) { }
19
+ stateChanged(state) { }
20
+ /*
21
+ * page lifecycle
22
+ *
23
+ * - pageInitialized(lifecycle)
24
+ * - pageUpdated(changes, lifecycle, changedBefore)
25
+ * - pageDisposed(lifecycle)
26
+ *
27
+ * lifecycle value has
28
+ * - active : this page is activated
29
+ * - page : first path of href
30
+ * - resourceId : second path of href
31
+ * - params : search params object of href
32
+ * - initialized : initialized state of this page
33
+ *
34
+ * you can update lifecycle values, or add custom values
35
+ * by calling this.pageUpdate({ ...values }, force)
36
+ * If lifecycle values changed by this.pageUpdate(...),
37
+ * this.pageUpdated(...) will be called back right after.
38
+ * If you want to invoke this.pageUpdated(...) callback,
39
+ * set force argument to true.
40
+ *
41
+ * you can re-initialize this page
42
+ * by calling this.pageReset().
43
+ * this.pageInitialized(...) followed by this.pageDisposed(...) will be invoked
44
+ * by calling this.pageReset().
45
+ *
46
+ * you can invoke this.pageDisposed()
47
+ * by calling this.pageDispose()
48
+ */
49
+ pageInitialized(lifecycle) {
50
+ /*
51
+ * This page is initialized.
52
+ * It's right time to configure of this page.
53
+ *
54
+ * - called before when this page activated first
55
+ * - called when i18next resource is updated (loaded, changed, ..)
56
+ * - called right after this.pageReset()
57
+ */
58
+ }
59
+ pageUpdated(changes, lifecycle, before) {
60
+ if (this.active) {
61
+ /*
62
+ * this page is activated
63
+ */
64
+ }
65
+ else {
66
+ /* this page is deactivated */
67
+ }
68
+ }
69
+ pageDisposed(lifecycle) {
70
+ /*
71
+ * This page is disposed.
72
+ * It's right time to release system resources.
73
+ *
74
+ * - called just before (re)pageInitialized
75
+ * - called right after when i18next resource updated (loaded, changed, ..)
76
+ * - called right after this.pageReset()
77
+ * - called right after this.pageDispose()
78
+ */
79
+ }
80
+ };
81
+ WorkCenterPage.styles = [
82
+ css `
83
+ :host {
84
+ display: block;
85
+ }
86
+ `
87
+ ];
88
+ WorkCenterPage = __decorate([
89
+ customElement('work-center-page')
90
+ ], WorkCenterPage);
91
+ export { WorkCenterPage };
92
+ //# sourceMappingURL=work-center-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"work-center-page.js","sourceRoot":"","sources":["../../../client/pages/work-center/work-center-page.ts"],"names":[],"mappings":";AAAA,OAAO,EAAkB,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAY,MAAM,mBAAmB,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AACtD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEhD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,sCAAsC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAA;AAElF;;;;;;GAMG;AAEI,IAAM,cAAc,GAApB,MAAM,cAAe,SAAQ,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC;IAS1D,MAAM;QACJ,OAAO,IAAI,CAAA,aAAa,IAAI,MAAM,CAAA;IACpC,CAAC;IAED,OAAO,CAAC,OAA6B,IAAG,CAAC;IAEzC,YAAY,CAAC,KAAU,IAAG,CAAC;IAE3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IAEH,eAAe,CAAC,SAAc;QAC5B;;;;;;;WAOG;IACL,CAAC;IAED,WAAW,CAAC,OAAY,EAAE,SAAc,EAAE,MAAW;QACnD,IAAI,IAAI,CAAC,MAAM,EAAE;YACf;;eAEG;SACJ;aAAM;YACL,8BAA8B;SAC/B;IACH,CAAC;IAED,YAAY,CAAC,SAAc;QACzB;;;;;;;;WAQG;IACL,CAAC;;AA7EM,qBAAM,GAAG;IACd,GAAG,CAAA;;;;KAIF;CACF,CAAA;AAPU,cAAc;IAD1B,aAAa,CAAC,kBAAkB,CAAC;GACrB,cAAc,CA+E1B;SA/EY,cAAc","sourcesContent":["import { PropertyValues, html, css } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { connect } from 'pwa-helpers/connect-mixin.js'\nimport { store, PageView } from '@operato/shell'\n\nconst logo = new URL('/assets/images/gangsters-512x512.png', import.meta.url).href\n\n/**\n * 이 페이지는 Operato-Gangsters에 대한 설정 및 관리, 대시보드 페이지이다.\n * - 연결 상태를 확인한다.\n * - 클라이언트들에 의해서 등록된 Activity들을 확인한다. (예를 들면, 회의록 작성, CVR 작성, 견적서 작성 등)\n * - 기본 대시보드를 제공한다. (Activity 처리 월별 추이, 현재 액티비티 상태별 현황, TOP 5s, Organization 현황)\n * - 관리 기능..\n */\n@customElement('work-center-page')\nexport class WorkCenterPage extends connect(store)(PageView) {\n static styles = [\n css`\n :host {\n display: block;\n }\n `\n ]\n\n render() {\n return html` <img src=${logo} /> `\n }\n\n updated(changes: PropertyValues<this>) {}\n\n stateChanged(state: any) {}\n\n /*\n * page lifecycle\n *\n * - pageInitialized(lifecycle)\n * - pageUpdated(changes, lifecycle, changedBefore)\n * - pageDisposed(lifecycle)\n *\n * lifecycle value has\n * - active : this page is activated\n * - page : first path of href\n * - resourceId : second path of href\n * - params : search params object of href\n * - initialized : initialized state of this page\n *\n * you can update lifecycle values, or add custom values\n * by calling this.pageUpdate({ ...values }, force)\n * If lifecycle values changed by this.pageUpdate(...),\n * this.pageUpdated(...) will be called back right after.\n * If you want to invoke this.pageUpdated(...) callback,\n * set force argument to true.\n *\n * you can re-initialize this page\n * by calling this.pageReset().\n * this.pageInitialized(...) followed by this.pageDisposed(...) will be invoked\n * by calling this.pageReset().\n *\n * you can invoke this.pageDisposed()\n * by calling this.pageDispose()\n */\n\n pageInitialized(lifecycle: any) {\n /*\n * This page is initialized.\n * It's right time to configure of this page.\n *\n * - called before when this page activated first\n * - called when i18next resource is updated (loaded, changed, ..)\n * - called right after this.pageReset()\n */\n }\n\n pageUpdated(changes: any, lifecycle: any, before: any) {\n if (this.active) {\n /*\n * this page is activated\n */\n } else {\n /* this page is deactivated */\n }\n }\n\n pageDisposed(lifecycle: any) {\n /*\n * This page is disposed.\n * It's right time to release system resources.\n *\n * - called just before (re)pageInitialized\n * - called right after when i18next resource updated (loaded, changed, ..)\n * - called right after this.pageReset()\n * - called right after this.pageDispose()\n */\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ export default function route(page: string): "work-center-list" | undefined;
@@ -0,0 +1,8 @@
1
+ export default function route(page) {
2
+ switch (page) {
3
+ case 'work-center-list':
4
+ import('./pages/work-center/work-center-list-page');
5
+ return page;
6
+ }
7
+ }
8
+ //# sourceMappingURL=route.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../client/route.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,IAAY;IACxC,QAAQ,IAAI,EAAE;QACZ,KAAK,kBAAkB;YACrB,MAAM,CAAC,2CAA2C,CAAC,CAAA;YACnD,OAAO,IAAI,CAAA;KACd;AACH,CAAC","sourcesContent":["export default function route(page: string) {\n switch (page) {\n case 'work-center-list':\n import('./pages/work-center/work-center-list-page')\n return page\n }\n}\n"]}