@things-factory/kpi 9.0.13 → 9.0.14

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 (118) hide show
  1. package/client/pages/kpi/kpi-grade-editor.ts +294 -0
  2. package/client/pages/kpi/kpi-list-page.ts +69 -1
  3. package/client/pages/kpi/kpi-overview.ts +5 -11
  4. package/client/pages/kpi-dashboard/kpi-dashboard.ts +43 -15
  5. package/client/pages/kpi-dashboard/kpi-performance-summary.ts +17 -10
  6. package/client/pages/kpi-value/kpi-value-manual-entry-form.ts +1 -0
  7. package/client/route.ts +0 -4
  8. package/dist-client/pages/kpi/kpi-grade-editor.d.ts +35 -0
  9. package/dist-client/pages/kpi/kpi-grade-editor.js +278 -0
  10. package/dist-client/pages/kpi/kpi-grade-editor.js.map +1 -0
  11. package/dist-client/pages/kpi/kpi-list-page.d.ts +4 -0
  12. package/dist-client/pages/kpi/kpi-list-page.js +64 -1
  13. package/dist-client/pages/kpi/kpi-list-page.js.map +1 -1
  14. package/dist-client/pages/kpi/kpi-overview.js +3 -11
  15. package/dist-client/pages/kpi/kpi-overview.js.map +1 -1
  16. package/dist-client/pages/kpi-dashboard/kpi-dashboard.js +44 -12
  17. package/dist-client/pages/kpi-dashboard/kpi-dashboard.js.map +1 -1
  18. package/dist-client/pages/kpi-dashboard/kpi-performance-summary.js +17 -10
  19. package/dist-client/pages/kpi-dashboard/kpi-performance-summary.js.map +1 -1
  20. package/dist-client/pages/kpi-value/kpi-value-manual-entry-form.js +1 -0
  21. package/dist-client/pages/kpi-value/kpi-value-manual-entry-form.js.map +1 -1
  22. package/dist-client/route.d.ts +1 -1
  23. package/dist-client/route.js +0 -3
  24. package/dist-client/route.js.map +1 -1
  25. package/dist-client/tsconfig.tsbuildinfo +1 -1
  26. package/dist-server/index.d.ts +0 -1
  27. package/dist-server/index.js +0 -1
  28. package/dist-server/index.js.map +1 -1
  29. package/dist-server/service/index.d.ts +2 -4
  30. package/dist-server/service/index.js +0 -5
  31. package/dist-server/service/index.js.map +1 -1
  32. package/dist-server/service/kpi/aggregate-kpi.js +4 -0
  33. package/dist-server/service/kpi/aggregate-kpi.js.map +1 -1
  34. package/dist-server/service/kpi/kpi-grade.types.d.ts +21 -0
  35. package/dist-server/service/kpi/kpi-grade.types.js +3 -0
  36. package/dist-server/service/kpi/kpi-grade.types.js.map +1 -0
  37. package/dist-server/service/kpi/kpi-history.d.ts +2 -0
  38. package/dist-server/service/kpi/kpi-history.js +8 -0
  39. package/dist-server/service/kpi/kpi-history.js.map +1 -1
  40. package/dist-server/service/kpi/kpi-query.d.ts +0 -2
  41. package/dist-server/service/kpi/kpi-query.js +0 -11
  42. package/dist-server/service/kpi/kpi-query.js.map +1 -1
  43. package/dist-server/service/kpi/kpi-type.d.ts +3 -0
  44. package/dist-server/service/kpi/kpi-type.js +14 -0
  45. package/dist-server/service/kpi/kpi-type.js.map +1 -1
  46. package/dist-server/service/kpi/kpi.d.ts +2 -2
  47. package/dist-server/service/kpi/kpi.js +5 -3
  48. package/dist-server/service/kpi/kpi.js.map +1 -1
  49. package/dist-server/service/kpi-alert/kpi-alert-query.js +13 -13
  50. package/dist-server/service/kpi-alert/kpi-alert-query.js.map +1 -1
  51. package/dist-server/service/kpi-value/kpi-value-grade.service.d.ts +34 -0
  52. package/dist-server/service/kpi-value/kpi-value-grade.service.js +117 -0
  53. package/dist-server/service/kpi-value/kpi-value-grade.service.js.map +1 -0
  54. package/dist-server/service/kpi-value/kpi-value-mutation.d.ts +1 -0
  55. package/dist-server/service/kpi-value/kpi-value-mutation.js +15 -0
  56. package/dist-server/service/kpi-value/kpi-value-mutation.js.map +1 -1
  57. package/dist-server/service/kpi-value/kpi-value-query.d.ts +2 -0
  58. package/dist-server/service/kpi-value/kpi-value-query.js +12 -0
  59. package/dist-server/service/kpi-value/kpi-value-query.js.map +1 -1
  60. package/dist-server/tsconfig.tsbuildinfo +1 -1
  61. package/package.json +3 -3
  62. package/server/index.ts +0 -1
  63. package/server/service/index.ts +0 -5
  64. package/server/service/kpi/aggregate-kpi.ts +6 -0
  65. package/server/service/kpi/kpi-grade.types.ts +27 -0
  66. package/server/service/kpi/kpi-history.ts +9 -1
  67. package/server/service/kpi/kpi-query.ts +0 -6
  68. package/server/service/kpi/kpi-type.ts +13 -0
  69. package/server/service/kpi/kpi.ts +8 -4
  70. package/server/service/kpi-alert/kpi-alert-query.ts +13 -14
  71. package/server/service/kpi-value/kpi-value-grade.service.ts +127 -0
  72. package/server/service/kpi-value/kpi-value-mutation.ts +9 -0
  73. package/server/service/kpi-value/kpi-value-query.ts +7 -0
  74. package/things-factory.config.js +0 -1
  75. package/client/pages/kpi-grade/kpi-grade-importer.ts +0 -90
  76. package/client/pages/kpi-grade/kpi-grade-list-page.ts +0 -405
  77. package/dist-client/pages/kpi-grade/kpi-grade-importer.d.ts +0 -23
  78. package/dist-client/pages/kpi-grade/kpi-grade-importer.js +0 -92
  79. package/dist-client/pages/kpi-grade/kpi-grade-importer.js.map +0 -1
  80. package/dist-client/pages/kpi-grade/kpi-grade-list-page.d.ts +0 -66
  81. package/dist-client/pages/kpi-grade/kpi-grade-list-page.js +0 -387
  82. package/dist-client/pages/kpi-grade/kpi-grade-list-page.js.map +0 -1
  83. package/dist-server/migrations/1752188906708-SeedKpiCategory.d.ts +0 -5
  84. package/dist-server/migrations/1752188906708-SeedKpiCategory.js +0 -56
  85. package/dist-server/migrations/1752188906708-SeedKpiCategory.js.map +0 -1
  86. package/dist-server/migrations/1752190849681-SeedKpi.d.ts +0 -5
  87. package/dist-server/migrations/1752190849681-SeedKpi.js +0 -107
  88. package/dist-server/migrations/1752190849681-SeedKpi.js.map +0 -1
  89. package/dist-server/migrations/1752191090459-SeedKpiGrade.d.ts +0 -5
  90. package/dist-server/migrations/1752191090459-SeedKpiGrade.js +0 -271
  91. package/dist-server/migrations/1752191090459-SeedKpiGrade.js.map +0 -1
  92. package/dist-server/migrations/index.d.ts +0 -1
  93. package/dist-server/migrations/index.js +0 -12
  94. package/dist-server/migrations/index.js.map +0 -1
  95. package/dist-server/service/kpi-grade/index.d.ts +0 -6
  96. package/dist-server/service/kpi-grade/index.js +0 -10
  97. package/dist-server/service/kpi-grade/index.js.map +0 -1
  98. package/dist-server/service/kpi-grade/kpi-grade-mutation.d.ts +0 -10
  99. package/dist-server/service/kpi-grade/kpi-grade-mutation.js +0 -151
  100. package/dist-server/service/kpi-grade/kpi-grade-mutation.js.map +0 -1
  101. package/dist-server/service/kpi-grade/kpi-grade-query.d.ts +0 -13
  102. package/dist-server/service/kpi-grade/kpi-grade-query.js +0 -92
  103. package/dist-server/service/kpi-grade/kpi-grade-query.js.map +0 -1
  104. package/dist-server/service/kpi-grade/kpi-grade-type.d.ts +0 -29
  105. package/dist-server/service/kpi-grade/kpi-grade-type.js +0 -113
  106. package/dist-server/service/kpi-grade/kpi-grade-type.js.map +0 -1
  107. package/dist-server/service/kpi-grade/kpi-grade.d.ts +0 -24
  108. package/dist-server/service/kpi-grade/kpi-grade.js +0 -117
  109. package/dist-server/service/kpi-grade/kpi-grade.js.map +0 -1
  110. package/server/migrations/1752188906708-SeedKpiCategory.ts +0 -61
  111. package/server/migrations/1752190849681-SeedKpi.ts +0 -112
  112. package/server/migrations/1752191090459-SeedKpiGrade.ts +0 -270
  113. package/server/migrations/index.ts +0 -9
  114. package/server/service/kpi-grade/index.ts +0 -7
  115. package/server/service/kpi-grade/kpi-grade-mutation.ts +0 -146
  116. package/server/service/kpi-grade/kpi-grade-query.ts +0 -58
  117. package/server/service/kpi-grade/kpi-grade-type.ts +0 -82
  118. package/server/service/kpi-grade/kpi-grade.ts +0 -101
@@ -1,405 +0,0 @@
1
- import '@material/web/icon/icon.js'
2
- import '@material/web/button/elevated-button.js'
3
- import '@operato/data-grist/ox-grist.js'
4
- import '@operato/data-grist/ox-filters-form.js'
5
- import '@operato/data-grist/ox-record-creator.js'
6
-
7
- import { CommonButtonStyles, CommonHeaderStyles, CommonGristStyles, ScrollbarStyles } from '@operato/styles'
8
- import { PageView, store } from '@operato/shell'
9
- import { css, html } from 'lit'
10
- import { customElement, property, query } from 'lit/decorators.js'
11
- import { ScopedElementsMixin } from '@open-wc/scoped-elements'
12
- import { ColumnConfig, DataGrist, FetchOption } from '@operato/data-grist'
13
- import { client } from '@operato/graphql'
14
- import { i18next, localize } from '@operato/i18n'
15
- import { notify, openPopup } from '@operato/layout'
16
- import { OxPopup, OxPrompt } from '@operato/popup'
17
- import { isMobileDevice } from '@operato/utils'
18
-
19
- import { connect } from 'pwa-helpers/connect-mixin'
20
- import gql from 'graphql-tag'
21
-
22
- import { KpiGradeImporter } from './kpi-grade-importer'
23
-
24
- @customElement('kpi-grade-list-page')
25
- export class KpiGradeListPage extends connect(store)(localize(i18next)(ScopedElementsMixin(PageView))) {
26
- static styles = [
27
- ScrollbarStyles,
28
- CommonGristStyles,
29
- CommonHeaderStyles,
30
- css`
31
- :host {
32
- display: flex;
33
-
34
- width: 100%;
35
-
36
- --grid-record-emphasized-background-color: #8b0000;
37
- --grid-record-emphasized-color: #ff6b6b;
38
- }
39
-
40
- ox-grist {
41
- overflow-y: auto;
42
- flex: 1;
43
- }
44
-
45
- ox-filters-form {
46
- flex: 1;
47
- }
48
- `
49
- ]
50
-
51
- static get scopedElements() {
52
- return {
53
- 'kpi-grade-importer': KpiGradeImporter
54
- }
55
- }
56
-
57
- @property({ type: Object }) gristConfig: any
58
- @property({ type: String }) mode: 'CARD' | 'GRID' | 'LIST' = isMobileDevice() ? 'CARD' : 'GRID'
59
-
60
- @query('ox-grist') private grist!: DataGrist
61
-
62
- get context() {
63
- return {
64
- title: i18next.t('title.kpi grade list'),
65
- search: {
66
- handler: (search: string) => {
67
- this.grist.searchText = search
68
- },
69
- value: this.grist.searchText
70
- },
71
- filter: {
72
- handler: () => {
73
- this.grist.toggleHeadroom()
74
- }
75
- },
76
- help: 'kpi/kpi-grade',
77
- actions: [
78
- {
79
- title: i18next.t('button.save'),
80
- action: this._updateKpiGrade.bind(this),
81
- ...CommonButtonStyles.save
82
- },
83
- {
84
- title: i18next.t('button.delete'),
85
- action: this._deleteKpiGrade.bind(this),
86
- ...CommonButtonStyles.delete
87
- }
88
- ],
89
- exportable: {
90
- name: i18next.t('title.kpi grade list'),
91
- data: this.exportHandler.bind(this)
92
- },
93
- importable: {
94
- handler: this.importHandler.bind(this)
95
- }
96
- }
97
- }
98
-
99
- render() {
100
- const mode = this.mode || (isMobileDevice() ? 'CARD' : 'GRID')
101
-
102
- return html`
103
- <ox-grist .mode=${mode} .config=${this.gristConfig} .fetchHandler=${this.fetchHandler.bind(this)}>
104
- <div slot="headroom" class="header">
105
- <div class="filters">
106
- <ox-filters-form autofocus without-search></ox-filters-form>
107
-
108
- <div id="modes">
109
- <md-icon @click=${() => (this.mode = 'GRID')} ?active=${mode == 'GRID'}>grid_on</md-icon>
110
- <md-icon @click=${() => (this.mode = 'LIST')} ?active=${mode == 'LIST'}>format_list_bulleted</md-icon>
111
- <md-icon @click=${() => (this.mode = 'CARD')} ?active=${mode == 'CARD'}>apps</md-icon>
112
- </div>
113
-
114
- <ox-record-creator id="add" .callback=${this.creationCallback.bind(this)}>
115
- <button>
116
- <md-icon>add</md-icon>
117
- </button>
118
- </ox-record-creator>
119
- </div>
120
- </div>
121
- </ox-grist>
122
- `
123
- }
124
-
125
- async pageInitialized(lifecycle: any) {
126
- this.gristConfig = {
127
- list: {
128
- fields: [
129
- 'kpi',
130
- 'version',
131
- 'name',
132
- 'description',
133
- 'minValue',
134
- 'maxValue',
135
- 'score',
136
- 'color',
137
- 'active',
138
- 'createdAt',
139
- 'updatedAt',
140
- 'creator',
141
- 'updater'
142
- ],
143
- details: [
144
- 'kpi',
145
- 'version',
146
- 'name',
147
- 'description',
148
- 'minValue',
149
- 'maxValue',
150
- 'score',
151
- 'color',
152
- 'active',
153
- 'createdAt',
154
- 'updatedAt',
155
- 'creator',
156
- 'updater'
157
- ]
158
- },
159
- columns: [
160
- { type: 'gutter', gutterName: 'sequence' },
161
- { type: 'gutter', gutterName: 'row-selector', multiple: true },
162
- {
163
- type: 'resource-object',
164
- name: 'kpi',
165
- label: true,
166
- header: 'KPI',
167
- record: {
168
- editable: true,
169
- options: {
170
- title: i18next.t('title.lookup kpi'),
171
- queryName: 'kpis'
172
- }
173
- },
174
- width: 200
175
- },
176
- { type: 'number', name: 'version', header: '버전', record: { editable: true }, width: 80 },
177
- { type: 'string', name: 'name', header: '등급명', record: { editable: true }, width: 120 },
178
- { type: 'string', name: 'description', header: '설명', record: { editable: true }, width: 200 },
179
- { type: 'number', name: 'minValue', header: '최소값', record: { editable: true }, width: 100 },
180
- { type: 'number', name: 'maxValue', header: '최대값', record: { editable: true }, width: 100 },
181
- { type: 'number', name: 'score', header: '점수', record: { editable: true }, width: 80 },
182
- { type: 'string', name: 'color', header: '색상', record: { editable: true }, width: 80 },
183
- { type: 'checkbox', name: 'active', label: true, header: '활성', record: { editable: true }, width: 60 },
184
- { type: 'datetime', name: 'createdAt', header: '생성일', record: { editable: false }, width: 180 },
185
- { type: 'datetime', name: 'updatedAt', header: '수정일', record: { editable: false }, width: 180 },
186
- {
187
- type: 'resource-object',
188
- name: 'creator',
189
- header: '생성자',
190
- record: { editable: false },
191
- width: 120
192
- },
193
- {
194
- type: 'resource-object',
195
- name: 'updater',
196
- header: '수정자',
197
- record: { editable: false },
198
- width: 120
199
- }
200
- ],
201
- rows: {
202
- appendable: false,
203
- selectable: {
204
- multiple: true
205
- }
206
- },
207
- sorters: [{ name: 'name' }]
208
- }
209
- }
210
-
211
- async pageUpdated(changes: any, lifecycle: any) {
212
- if (this.active) {
213
- // do something here when this page just became as active
214
- }
215
- }
216
-
217
- async fetchHandler({ page = 1, limit = 100, sortings = [], filters = [] }: FetchOption) {
218
- const response = await client.query({
219
- query: gql`
220
- query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) {
221
- responses: kpiGrades(filters: $filters, pagination: $pagination, sortings: $sortings) {
222
- items {
223
- id
224
- name
225
- description
226
- active
227
- kpi {
228
- id
229
- name
230
- }
231
- version
232
- updater {
233
- id
234
- name
235
- }
236
- updatedAt
237
- creator {
238
- id
239
- name
240
- }
241
- createdAt
242
- }
243
- total
244
- }
245
- }
246
- `,
247
- variables: {
248
- filters,
249
- pagination: { page, limit },
250
- sortings
251
- }
252
- })
253
-
254
- return {
255
- total: response.data.responses.total || 0,
256
- records: response.data.responses.items || []
257
- }
258
- }
259
-
260
- async _deleteKpiGrade() {
261
- if (
262
- await OxPrompt.open({
263
- title: i18next.t('text.are_you_sure'),
264
- text: i18next.t('text.sure_to_x', { x: i18next.t('text.delete') }),
265
- confirmButton: { text: i18next.t('button.confirm') },
266
- cancelButton: { text: i18next.t('button.cancel') }
267
- })
268
- ) {
269
- const ids = this.grist.selected.map(record => record.id)
270
- if (ids && ids.length > 0) {
271
- const response = await client.mutate({
272
- mutation: gql`
273
- mutation ($ids: [String!]!) {
274
- deleteKpiGrades(ids: $ids)
275
- }
276
- `,
277
- variables: {
278
- ids
279
- }
280
- })
281
-
282
- if (!response.errors) {
283
- this.grist.fetch()
284
- notify({
285
- message: i18next.t('text.info_x_successfully', { x: i18next.t('text.delete') })
286
- })
287
- }
288
- }
289
- }
290
- }
291
-
292
- async _updateKpiGrade() {
293
- let patches = this.grist.dirtyRecords
294
- if (patches && patches.length) {
295
- patches = patches.map(patch => {
296
- let patchField: any = patch.id ? { id: patch.id } : {}
297
- const dirtyFields = patch.__dirtyfields__
298
- for (let key in dirtyFields) {
299
- patchField[key] = dirtyFields[key].after
300
- }
301
- patchField.cuFlag = patch.__dirty__
302
-
303
- return patchField
304
- })
305
-
306
- const response = await client.mutate({
307
- mutation: gql`
308
- mutation ($patches: [KpiGradePatch!]!) {
309
- updateMultipleKpiGrade(patches: $patches) {
310
- name
311
- }
312
- }
313
- `,
314
- variables: {
315
- patches
316
- }
317
- })
318
-
319
- if (!response.errors) {
320
- this.grist.fetch()
321
- }
322
- }
323
- }
324
-
325
- async creationCallback(kpiGrade) {
326
- try {
327
- const response = await client.query({
328
- query: gql`
329
- mutation ($kpiGrade: NewKpiGrade!) {
330
- createKpiGrade(kpiGrade: $kpiGrade) {
331
- id
332
- }
333
- }
334
- `,
335
- variables: {
336
- kpiGrade
337
- },
338
- context: {
339
- hasUpload: true
340
- }
341
- })
342
-
343
- if (!response.errors) {
344
- this.grist.fetch()
345
- document.dispatchEvent(
346
- new CustomEvent('notify', {
347
- detail: {
348
- message: i18next.t('text.data_created_successfully')
349
- }
350
- })
351
- )
352
- }
353
-
354
- return true
355
- } catch (ex) {
356
- console.error(ex)
357
- document.dispatchEvent(
358
- new CustomEvent('notify', {
359
- detail: {
360
- type: 'error',
361
- message: i18next.t('text.error')
362
- }
363
- })
364
- )
365
- return false
366
- }
367
- }
368
-
369
- async exportHandler() {
370
- const exportTargets = this.grist.selected.length ? this.grist.selected : this.grist.dirtyData.records
371
- const targetFieldSet = new Set(['id', 'name', 'description', 'active'])
372
-
373
- return exportTargets.map(kpiGrade => {
374
- let tempObj = {}
375
- for (const field of targetFieldSet) {
376
- tempObj[field] = kpiGrade[field]
377
- }
378
-
379
- return tempObj
380
- })
381
- }
382
-
383
- async importHandler(records) {
384
- const popup = openPopup(
385
- html`
386
- <kpi-grade-importer
387
- .kpiGrades=${records}
388
- @imported=${() => {
389
- history.back()
390
- this.grist.fetch()
391
- }}
392
- ></kpi-grade-importer>
393
- `,
394
- {
395
- backdrop: true,
396
- size: 'large',
397
- title: i18next.t('title.import kpi-grade')
398
- }
399
- )
400
-
401
- popup.onclosed = () => {
402
- this.grist.fetch()
403
- }
404
- }
405
- }
@@ -1,23 +0,0 @@
1
- import '@material/web/icon/icon.js';
2
- import '@operato/data-grist';
3
- import { LitElement } from 'lit';
4
- export declare class KpiGradeImporter extends LitElement {
5
- static styles: import("lit").CSSResult[];
6
- kpiGrades: any[];
7
- columns: {
8
- list: {
9
- fields: string[];
10
- };
11
- pagination: {
12
- infinite: boolean;
13
- };
14
- columns: {
15
- type: string;
16
- name: string;
17
- header: string;
18
- width: number;
19
- }[];
20
- };
21
- render(): import("lit-html").TemplateResult<1>;
22
- save(): Promise<void>;
23
- }
@@ -1,92 +0,0 @@
1
- import { __decorate, __metadata } from "tslib";
2
- import '@material/web/icon/icon.js';
3
- import '@operato/data-grist';
4
- import gql from 'graphql-tag';
5
- import { css, html, LitElement } from 'lit';
6
- import { property } from 'lit/decorators.js';
7
- import { client } from '@operato/graphql';
8
- import { i18next } from '@operato/i18n';
9
- import { isMobileDevice } from '@operato/utils';
10
- import { ButtonContainerStyles } from '@operato/styles';
11
- export class KpiGradeImporter extends LitElement {
12
- constructor() {
13
- super(...arguments);
14
- this.kpiGrades = [];
15
- this.columns = {
16
- list: { fields: ['name', 'description'] },
17
- pagination: { infinite: true },
18
- columns: [
19
- {
20
- type: 'string',
21
- name: 'name',
22
- header: i18next.t('field.name'),
23
- width: 150
24
- },
25
- {
26
- type: 'string',
27
- name: 'description',
28
- header: i18next.t('field.description'),
29
- width: 200
30
- },
31
- {
32
- type: 'checkbox',
33
- name: 'active',
34
- header: i18next.t('field.active'),
35
- width: 60
36
- }
37
- ]
38
- };
39
- }
40
- static { this.styles = [
41
- ButtonContainerStyles,
42
- css `
43
- :host {
44
- display: flex;
45
- flex-direction: column;
46
-
47
- background-color: #fff;
48
- }
49
-
50
- ox-grist {
51
- flex: 1;
52
- }
53
- `
54
- ]; }
55
- render() {
56
- return html `
57
- <ox-grist
58
- .mode=${isMobileDevice() ? 'LIST' : 'GRID'}
59
- .config=${this.columns}
60
- .data=${{
61
- records: this.kpiGrades
62
- }}
63
- ></ox-grist>
64
-
65
- <div class="button-container">
66
- <button @click="${this.save.bind(this)}"><md-icon>save</md-icon>${i18next.t('button.save')}</button>
67
- </div>
68
- `;
69
- }
70
- async save() {
71
- const response = await client.mutate({
72
- mutation: gql `
73
- mutation importKpiGrades($kpiGrades: [KpiGradePatch!]!) {
74
- importKpiGrades(kpiGrades: $kpiGrades)
75
- }
76
- `,
77
- variables: { kpiGrades: this.kpiGrades }
78
- });
79
- if (response.errors?.length)
80
- return;
81
- this.dispatchEvent(new CustomEvent('imported'));
82
- }
83
- }
84
- __decorate([
85
- property({ type: Array }),
86
- __metadata("design:type", Array)
87
- ], KpiGradeImporter.prototype, "kpiGrades", void 0);
88
- __decorate([
89
- property({ type: Object }),
90
- __metadata("design:type", Object)
91
- ], KpiGradeImporter.prototype, "columns", void 0);
92
- //# sourceMappingURL=kpi-grade-importer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"kpi-grade-importer.js","sourceRoot":"","sources":["../../../client/pages/kpi-grade/kpi-grade-importer.ts"],"names":[],"mappings":";AAAA,OAAO,4BAA4B,CAAA;AACnC,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;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AAEvD,MAAM,OAAO,gBAAiB,SAAQ,UAAU;IAAhD;;QAiB6B,cAAS,GAAU,EAAE,CAAA;QACpB,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;aA3EQ,WAAM,GAAG;QACd,qBAAqB;QACrB,GAAG,CAAA;;;;;;;;;;;KAWF;KACF,AAdY,CAcZ;IA6BD,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,SAAS;SAE3B;;;;0BAIkB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,4BAA4B,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC;;KAE7F,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,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;SACzC,CAAC,CAAA;QAEF,IAAI,QAAQ,CAAC,MAAM,EAAE,MAAM;YAAE,OAAM;QAEnC,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,CAAC,CAAA;IACjD,CAAC;;AA1D0B;IAA1B,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;;mDAAsB;AACpB;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;iDAuB1B","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@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'\nimport { ButtonContainerStyles } from '@operato/styles'\n\nexport class KpiGradeImporter extends LitElement {\n static styles = [\n ButtonContainerStyles,\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 ]\n\n @property({ type: Array }) kpiGrades: 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.kpiGrades \n }\n }\n ></ox-grist>\n\n <div class=\"button-container\">\n <button @click=\"${this.save.bind(this)}\"><md-icon>save</md-icon>${i18next.t('button.save')}</button>\n </div>\n `\n }\n\n async save() {\n const response = await client.mutate({\n mutation: gql`\n mutation importKpiGrades($kpiGrades: [KpiGradePatch!]!) {\n importKpiGrades(kpiGrades: $kpiGrades)\n }\n `,\n variables: { kpiGrades: this.kpiGrades }\n })\n\n if (response.errors?.length) return\n\n this.dispatchEvent(new CustomEvent('imported'))\n }\n}\n\n"]}
@@ -1,66 +0,0 @@
1
- import '@material/web/icon/icon.js';
2
- import '@material/web/button/elevated-button.js';
3
- import '@operato/data-grist/ox-grist.js';
4
- import '@operato/data-grist/ox-filters-form.js';
5
- import '@operato/data-grist/ox-record-creator.js';
6
- import { PageView } from '@operato/shell';
7
- import { FetchOption } from '@operato/data-grist';
8
- import { KpiGradeImporter } from './kpi-grade-importer';
9
- declare const KpiGradeListPage_base: (new (...args: any[]) => {
10
- _storeUnsubscribe: import("redux").Unsubscribe;
11
- connectedCallback(): void;
12
- disconnectedCallback(): void;
13
- stateChanged(_state: unknown): void;
14
- readonly isConnected: boolean;
15
- }) & (new (...args: any[]) => import("lit").LitElement) & typeof PageView & import("@open-wc/dedupe-mixin").Constructor<import("@open-wc/scoped-elements/types/src/types").ScopedElementsHost>;
16
- export declare class KpiGradeListPage extends KpiGradeListPage_base {
17
- static styles: import("lit").CSSResult[];
18
- static get scopedElements(): {
19
- 'kpi-grade-importer': typeof KpiGradeImporter;
20
- };
21
- gristConfig: any;
22
- mode: 'CARD' | 'GRID' | 'LIST';
23
- private grist;
24
- get context(): {
25
- title: string;
26
- search: {
27
- handler: (search: string) => void;
28
- value: string;
29
- };
30
- filter: {
31
- handler: () => void;
32
- };
33
- help: string;
34
- actions: {
35
- icon: string;
36
- emphasis: {
37
- raised: boolean;
38
- outlined: boolean;
39
- dense: boolean;
40
- danger: boolean;
41
- };
42
- title: string;
43
- action: () => Promise<void>;
44
- }[];
45
- exportable: {
46
- name: string;
47
- data: () => Promise<{}[]>;
48
- };
49
- importable: {
50
- handler: (records: any) => Promise<void>;
51
- };
52
- };
53
- render(): import("lit-html").TemplateResult<1>;
54
- pageInitialized(lifecycle: any): Promise<void>;
55
- pageUpdated(changes: any, lifecycle: any): Promise<void>;
56
- fetchHandler({ page, limit, sortings, filters }: FetchOption): Promise<{
57
- total: any;
58
- records: any;
59
- }>;
60
- _deleteKpiGrade(): Promise<void>;
61
- _updateKpiGrade(): Promise<void>;
62
- creationCallback(kpiGrade: any): Promise<boolean>;
63
- exportHandler(): Promise<{}[]>;
64
- importHandler(records: any): Promise<void>;
65
- }
66
- export {};