@things-factory/i18n-base 7.0.1-alpha.77 → 7.0.1-alpha.82

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 (36) hide show
  1. package/client/page/terminology-page.ts +131 -83
  2. package/client/route.ts +1 -1
  3. package/dist-client/page/terminology-page.d.ts +14 -5
  4. package/dist-client/page/terminology-page.js +126 -78
  5. package/dist-client/page/terminology-page.js.map +1 -1
  6. package/dist-client/route.js +1 -1
  7. package/dist-client/route.js.map +1 -1
  8. package/dist-client/tsconfig.tsbuildinfo +1 -1
  9. package/dist-server/service/index.js.map +1 -1
  10. package/dist-server/service/terminology/index.js +1 -2
  11. package/dist-server/service/terminology/index.js.map +1 -1
  12. package/dist-server/service/terminology/terminology-mutation.js +26 -3
  13. package/dist-server/service/terminology/terminology-mutation.js.map +1 -1
  14. package/dist-server/service/terminology/terminology-query.js +21 -0
  15. package/dist-server/service/terminology/terminology-query.js.map +1 -1
  16. package/dist-server/service/terminology/terminology-type.js +3 -3
  17. package/dist-server/service/terminology/terminology-type.js.map +1 -1
  18. package/dist-server/service/terminology/terminology.js +20 -3
  19. package/dist-server/service/terminology/terminology.js.map +1 -1
  20. package/dist-server/tsconfig.tsbuildinfo +1 -1
  21. package/package.json +3 -2
  22. package/server/service/index.ts +5 -1
  23. package/server/service/terminology/index.ts +1 -2
  24. package/server/service/terminology/terminology-mutation.ts +48 -6
  25. package/server/service/terminology/terminology-query.ts +11 -0
  26. package/server/service/terminology/terminology-type.ts +6 -6
  27. package/server/service/terminology/terminology.ts +30 -8
  28. package/things-factory.config.js +9 -1
  29. package/translations/en.json +7 -0
  30. package/translations/ja.json +7 -0
  31. package/translations/ko.json +7 -0
  32. package/translations/ms.json +7 -0
  33. package/translations/zh.json +7 -0
  34. package/dist-server/service/terminology/event-subscriber.js +0 -40
  35. package/dist-server/service/terminology/event-subscriber.js.map +0 -1
  36. package/server/service/terminology/event-subscriber.ts +0 -41
@@ -6,11 +6,12 @@ import '@operato/input/ox-input-select-buttons.js';
6
6
  import { css, html } from 'lit';
7
7
  import { customElement, query, state } from 'lit/decorators.js';
8
8
  import { connect } from 'pwa-helpers/connect-mixin.js';
9
- import { store, PageView } from '@operato/shell';
9
+ import gql from 'graphql-tag';
10
+ import { store, CustomAlert, PageView } from '@operato/shell';
11
+ import { client } from '@operato/graphql';
10
12
  import { DataGrist } from '@operato/data-grist';
11
13
  import { i18next, localize } from '@operato/i18n';
12
14
  import { CommonHeaderStyles, ScrollbarStyles } from '@operato/styles';
13
- import { OxPrompt } from '@operato/popup/ox-prompt.js';
14
15
  import { isMobileDevice } from '@operato/utils';
15
16
  let TerminologyPage = class TerminologyPage extends connect(store)(localize(i18next)(PageView)) {
16
17
  constructor() {
@@ -20,7 +21,7 @@ let TerminologyPage = class TerminologyPage extends connect(store)(localize(i18n
20
21
  get context() {
21
22
  var _a;
22
23
  return {
23
- title: i18next.t('menu.Terminology'),
24
+ title: i18next.t('title.terminology'),
24
25
  search: {
25
26
  handler: (search) => {
26
27
  this.grist.searchText = search;
@@ -35,9 +36,9 @@ let TerminologyPage = class TerminologyPage extends connect(store)(localize(i18n
35
36
  help: 'mfg-warehouse/term-page',
36
37
  actions: [
37
38
  {
38
- title: i18next.t('button.delete'),
39
- action: this.delete.bind(this),
40
- icon: 'delete'
39
+ title: i18next.t('button.clear-cache'),
40
+ action: this.clearCache.bind(this),
41
+ icon: 'ink_eraser'
41
42
  },
42
43
  {
43
44
  title: i18next.t('button.save'),
@@ -45,9 +46,12 @@ let TerminologyPage = class TerminologyPage extends connect(store)(localize(i18n
45
46
  icon: 'save'
46
47
  },
47
48
  {
48
- title: i18next.t('button.print'),
49
- action: this.print.bind(this),
50
- icon: 'print'
49
+ title: i18next.t('button.delete'),
50
+ action: this.delete.bind(this),
51
+ icon: 'delete',
52
+ emphasis: {
53
+ danger: true
54
+ }
51
55
  }
52
56
  ],
53
57
  exportable: {
@@ -82,18 +86,10 @@ let TerminologyPage = class TerminologyPage extends connect(store)(localize(i18n
82
86
  return html `
83
87
  <ox-grist .mode=${mode} .config=${this.gristConfig} .fetchHandler=${this.fetchHandler.bind(this)}>
84
88
  <div slot="headroom" class="header">
85
- <div class="title">${i18next.t('title.Terminology')}</div>
89
+ <div class="title">${i18next.t('title.terminology')}</div>
86
90
 
87
91
  <div class="filters">
88
- <ox-input-select-buttons
89
- .value=${this.state}
90
- .options=${this.getFilterStatus()}
91
- @change=${(e) => {
92
- var _a;
93
- this.state = (_a = e.currentTarget) === null || _a === void 0 ? void 0 : _a.value;
94
- this.grist.fetch();
95
- }}
96
- ></ox-input-select-buttons>
92
+ <ox-filters-form autofocus without-search></ox-filters-form>
97
93
  </div>
98
94
 
99
95
  <ox-context-page-toolbar class="actions" .context=${this.context}></ox-context-page-toolbar>
@@ -113,14 +109,14 @@ let TerminologyPage = class TerminologyPage extends connect(store)(localize(i18n
113
109
  {
114
110
  type: 'string',
115
111
  name: 'id',
116
- header: i18next.t('label.id'),
112
+ header: i18next.t('field.id'),
117
113
  hidden: true,
118
114
  width: 0
119
115
  },
120
116
  {
121
117
  type: 'string',
122
118
  name: 'name',
123
- header: i18next.t('label.name'),
119
+ header: i18next.t('field.name'),
124
120
  record: {
125
121
  editable: true
126
122
  },
@@ -129,43 +125,48 @@ let TerminologyPage = class TerminologyPage extends connect(store)(localize(i18n
129
125
  width: 150
130
126
  },
131
127
  {
132
- type: 'string',
128
+ type: 'select',
133
129
  name: 'locale',
134
- header: i18next.t('label.locale'),
130
+ header: i18next.t('field.locale'),
135
131
  record: {
136
- editable: true
132
+ editable: true,
133
+ options: [{ display: '', value: '' }, ...this.getFilterStatus()]
137
134
  },
138
- width: 200
135
+ width: 200,
136
+ filter: {
137
+ type: 'select-buttons',
138
+ operator: 'in'
139
+ }
139
140
  },
140
141
  {
141
142
  type: 'select',
142
143
  name: 'category',
143
144
  label: true,
144
- header: i18next.t('label.category'),
145
+ header: i18next.t('field.category'),
145
146
  record: {
146
- editable: false,
147
- options: [{ display: '', value: '' }, ...this.getFilterStatus()]
147
+ editable: true,
148
+ options: ['', 'button', 'field', 'label', 'menu', 'text', 'title']
148
149
  },
149
150
  width: 100,
150
- filter: true,
151
+ filter: 'in',
151
152
  imex: true
152
153
  },
153
154
  {
154
155
  type: 'string',
155
156
  name: 'display',
156
157
  label: true,
157
- header: i18next.t('label.display'),
158
+ header: i18next.t('field.display'),
158
159
  record: {
159
160
  editable: true
160
161
  },
161
- filter: true,
162
+ filter: 'search',
162
163
  sortable: true,
163
164
  width: 250
164
165
  },
165
166
  {
166
167
  type: 'resource-object',
167
168
  name: 'updater',
168
- header: i18next.t('label.updater'),
169
+ header: i18next.t('field.updater'),
169
170
  record: {
170
171
  editable: false
171
172
  },
@@ -175,7 +176,7 @@ let TerminologyPage = class TerminologyPage extends connect(store)(localize(i18n
175
176
  {
176
177
  type: 'datetime',
177
178
  name: 'updatedAt',
178
- header: i18next.t('label.updated_at'),
179
+ header: i18next.t('field.updated_at'),
179
180
  record: {
180
181
  editable: false
181
182
  },
@@ -184,7 +185,7 @@ let TerminologyPage = class TerminologyPage extends connect(store)(localize(i18n
184
185
  }
185
186
  ],
186
187
  rows: {
187
- appendable: false,
188
+ appendable: true,
188
189
  selectable: {
189
190
  multiple: true
190
191
  }
@@ -221,12 +222,41 @@ let TerminologyPage = class TerminologyPage extends connect(store)(localize(i18n
221
222
  }
222
223
  }
223
224
  async fetchHandler({ page = 1, limit = 100, sortings = [], filters = [] }) {
224
- let url = 'terminologies';
225
- let selectFields = 'id,name,locale,category,display,created_at,updated_at,creator,updater';
226
- let result = null; // await ServiceUtil.searchByPagination(url, filters, sortings, page, limit, selectFields)
225
+ const response = await client.query({
226
+ query: gql `
227
+ query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) {
228
+ terminologies(filters: $filters, pagination: $pagination, sortings: $sortings) {
229
+ items {
230
+ id
231
+ name
232
+ locale
233
+ category
234
+ display
235
+ creator {
236
+ id
237
+ name
238
+ }
239
+ createdAt
240
+ updater {
241
+ id
242
+ name
243
+ }
244
+ updatedAt
245
+ }
246
+
247
+ total
248
+ }
249
+ }
250
+ `,
251
+ variables: {
252
+ filters,
253
+ pagination: { page, limit },
254
+ sortings
255
+ }
256
+ });
227
257
  return {
228
- total: result ? result.total : 0,
229
- records: result ? result.items : []
258
+ total: response.data.terminologies.total || 0,
259
+ records: response.data.terminologies.items || []
230
260
  };
231
261
  }
232
262
  exportHandler() {
@@ -265,60 +295,78 @@ let TerminologyPage = class TerminologyPage extends connect(store)(localize(i18n
265
295
  async delete() {
266
296
  const selectedRecords = this.grist.selected;
267
297
  if (!selectedRecords || selectedRecords.length == 0) {
268
- // showToast('info', i18next.t('text.NOTHING_SELECTED'))
298
+ this.showToast(i18next.t('text.NOTHING_SELECTED'));
269
299
  }
270
300
  else {
271
- const answer = null; // await showAlertPopup('button.delete', 'text.are_you_sure', 'question', 'delete', 'cancel')
272
- if (answer) {
273
- let patches = selectedRecords.map(record => {
274
- record['cud_flag_'] = 'd';
275
- return record;
276
- });
277
- return null; // await ServiceUtil.deleteMultiple('terminologies/update_multiple', patches)
301
+ const answer = await CustomAlert({
302
+ type: 'question',
303
+ title: i18next.t('button.delete'),
304
+ text: i18next.t('text.are_you_sure'),
305
+ confirmButton: { text: i18next.t('button.delete') },
306
+ cancelButton: { text: i18next.t('button.cancel') }
307
+ });
308
+ if (!answer) {
309
+ return;
278
310
  }
311
+ let ids = selectedRecords.map(record => record.id);
312
+ const response = await client.mutate({
313
+ mutation: gql `
314
+ mutation ($ids: [String!]!) {
315
+ deleteTerminologies(ids: $ids)
316
+ }
317
+ `,
318
+ variables: {
319
+ ids
320
+ }
321
+ });
322
+ this.grist.fetch();
323
+ return response.data.deleteTerminologies;
324
+ }
325
+ }
326
+ async clearCache() {
327
+ const response = await client.mutate({
328
+ mutation: gql `
329
+ mutation {
330
+ clearTranslationsCache
331
+ }
332
+ `
333
+ });
334
+ if (!response.errors) {
335
+ this.showToast(i18next.t('text.nothing_selected'));
279
336
  }
280
337
  }
281
338
  async save() {
282
339
  let changedRecords = this.grist.dirtyRecords;
283
340
  if (!changedRecords || changedRecords.length == 0) {
284
- // showToast('info', i18next.t('text.NOTHING_CHANGED'))
341
+ this.showToast(i18next.t('text.nothing_changed'));
285
342
  }
286
343
  else {
287
- let metaFields = [
288
- 'creator',
289
- 'updater',
290
- 'createdAt',
291
- 'updatedAt',
292
- '__dirty__',
293
- '__dirtyfields__',
294
- '__origin__',
295
- '__seq__',
296
- '__selected__'
297
- ];
298
- let patches = changedRecords.map(record => {
299
- let patchData = record.id ? { id: record.id } : {};
300
- for (let key in record) {
301
- if (!metaFields.includes(key)) {
302
- patchData[key] = record[key];
303
- }
344
+ const patches = changedRecords.map(patch => {
345
+ const patchField = patch.id ? { id: patch.id } : {};
346
+ const dirtyFields = patch.__dirtyfields__;
347
+ for (let key in dirtyFields) {
348
+ patchField[key] = dirtyFields[key].after;
349
+ }
350
+ patchField.cuFlag = patch.__dirty__;
351
+ return patchField;
352
+ });
353
+ const response = await client.mutate({
354
+ mutation: gql `
355
+ mutation ($patches: [TerminologyPatch!]!) {
356
+ updateMultipleTerminologies(patches: $patches) {
357
+ id
358
+ }
359
+ }
360
+ `,
361
+ variables: {
362
+ patches
304
363
  }
305
- patchData['cud_flag_'] = record['__dirty__'] == 'M' ? 'u' : 'c';
306
- return patchData;
307
364
  });
308
- //await ServiceUtil.updateMultiple('terminologies/update_multiple', patches)
309
365
  this.grist.fetch();
310
366
  }
311
367
  }
312
- print() {
313
- const selected = this.grist.selected;
314
- const ids = selected.map(record => record.id).join('|');
315
- /* TODO Implement the desired functionality */
316
- OxPrompt.open({
317
- type: 'success',
318
- title: i18next.t('text.completed'),
319
- text: i18next.t('text.printed_successfully'),
320
- confirmButton: { text: i18next.t('button.confirm') }
321
- });
368
+ showToast(message) {
369
+ document.dispatchEvent(new CustomEvent('notify', { detail: { message } }));
322
370
  }
323
371
  };
324
372
  TerminologyPage.styles = [
@@ -1 +1 @@
1
- {"version":3,"file":"terminology-page.js","sourceRoot":"","sources":["../../client/page/terminology-page.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\n\nimport '@operato/data-grist'\nimport '@operato/context/ox-context-page-toolbar.js'\nimport '@operato/input/ox-input-select-buttons.js'\n\nimport { PropertyValues, css, html } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { connect } from 'pwa-helpers/connect-mixin.js'\nimport gql from 'graphql-tag'\n\nimport { store, PageView } from '@operato/shell'\nimport { client } from '@operato/graphql'\nimport { DataGrist, FetchOption, GristRecord } from '@operato/data-grist'\nimport { i18next, localize } from '@operato/i18n'\nimport { openPopup } from '@operato/layout'\nimport { CommonHeaderStyles, ScrollbarStyles } from '@operato/styles'\nimport { OxPrompt } from '@operato/popup/ox-prompt.js'\nimport { isMobileDevice } from '@operato/utils'\n\n@customElement('terminology-page')\nexport class TerminologyPage extends connect(store)(localize(i18next)(PageView)) {\n static styles = [\n ScrollbarStyles,\n CommonHeaderStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n\n overflow: hidden;\n\n --grid-header-padding: 2px 0 2px 9px;\n }\n\n ox-grist {\n overflow-y: auto;\n flex: 1;\n }\n `\n ]\n\n @state() private gristConfig: any\n @state() private mode: 'CARD' | 'GRID' | 'LIST' = isMobileDevice() ? 'CARD' : 'GRID'\n @state() private state?: string[]\n\n @query('ox-grist') private grist!: DataGrist\n\n get context() {\n return {\n title: i18next.t('menu.Terminology'),\n search: {\n handler: (search: string) => {\n this.grist.searchText = search\n },\n value: this.grist?.searchText || ''\n },\n filter: {\n handler: () => {\n this.grist.toggleHeadroom()\n }\n },\n help: 'mfg-warehouse/term-page',\n actions: [\n {\n title: i18next.t('button.delete'),\n action: this.delete.bind(this),\n icon: 'delete'\n },\n {\n title: i18next.t('button.save'),\n action: this.save.bind(this),\n icon: 'save'\n },\n {\n title: i18next.t('button.print'),\n action: this.print.bind(this),\n icon: 'print'\n }\n ],\n exportable: {\n name: i18next.t('button.export'),\n data: this.exportHandler.bind(this)\n },\n toolbar: false\n }\n }\n\n getFilterStatus() {\n return [\n {\n display: '한국어',\n value: 'ko-KR'\n },\n {\n display: 'English',\n value: 'en-US'\n },\n {\n display: '中文',\n value: 'zh-CN'\n },\n {\n display: '日本語',\n value: 'ja-JP'\n }\n ]\n }\n\n render() {\n const mode = this.mode || (isMobileDevice() ? 'LIST' : 'GRID')\n\n return html`\n <ox-grist .mode=${mode} .config=${this.gristConfig} .fetchHandler=${this.fetchHandler.bind(this)}>\n <div slot=\"headroom\" class=\"header\">\n <div class=\"title\">${i18next.t('title.Terminology')}</div>\n\n <div class=\"filters\">\n <ox-input-select-buttons\n .value=${this.state}\n .options=${this.getFilterStatus()}\n @change=${(e: CustomEvent) => {\n this.state = (e.currentTarget as any)?.value\n this.grist.fetch()\n }}\n ></ox-input-select-buttons>\n </div>\n\n <ox-context-page-toolbar class=\"actions\" .context=${this.context}></ox-context-page-toolbar>\n </div>\n </ox-grist>\n `\n }\n\n async pageInitialized(lifecycle) {\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: 'id',\n header: i18next.t('label.id'),\n hidden: true,\n width: 0\n },\n {\n type: 'string',\n name: 'name',\n header: i18next.t('label.name'),\n record: {\n editable: true\n },\n filter: 'search',\n sortable: true,\n width: 150\n },\n {\n type: 'string',\n name: 'locale',\n header: i18next.t('label.locale'),\n record: {\n editable: true\n },\n width: 200\n },\n {\n type: 'select',\n name: 'category',\n label: true,\n header: i18next.t('label.category'),\n record: {\n editable: false,\n options: [{ display: '', value: '' }, ...this.getFilterStatus()]\n },\n width: 100,\n filter: true,\n imex: true\n },\n {\n type: 'string',\n name: 'display',\n label: true,\n header: i18next.t('label.display'),\n record: {\n editable: true\n },\n filter: true,\n sortable: true,\n width: 250\n },\n {\n type: 'resource-object',\n name: 'updater',\n header: i18next.t('label.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('label.updated_at'),\n record: {\n editable: false\n },\n sortable: true,\n width: 180\n }\n ],\n rows: {\n appendable: false,\n selectable: {\n multiple: true\n }\n /*handlers: {\n click: (columns, data, column, record, rowIndex) => {\n // TODO Implement the desired sub-view(like item-view) and use it in the popup content after importing\n const popup = openPopup(html` \n <item-view item-id=${record.id} style=\"background-color: white;\">\n </item-view> \n `, {\n backdrop: true,\n size: 'large',\n title: i18next.t('text.item view')\n })\n popup.onclosed = () => {\n this.grist.fetch()\n }\n }\n }*/\n },\n sorters: [\n {\n name: 'name',\n desc: true\n }\n ]\n }\n\n await this.updateComplete\n\n this.grist.fetch()\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 let url = 'terminologies'\n let selectFields = 'id,name,locale,category,display,created_at,updated_at,creator,updater'\n let result = null as any // await ServiceUtil.searchByPagination(url, filters, sortings, page, limit, selectFields)\n\n return {\n total: result ? result.total : 0,\n records: result ? result.items : []\n }\n }\n\n exportHandler() {\n let records = [] as GristRecord\n if (this.grist.selected && this.grist.selected.length > 0) {\n records = this.grist.selected\n } else {\n records = this.grist.data.records\n }\n\n var headerSetting = this.grist.compiledConfig.columns\n .filter(column => column.type !== 'gutter' && column.record !== undefined && column.imex !== undefined)\n .map(column => {\n return column.imex === true\n ? {\n header: column.header.renderer(column),\n key: column.name,\n width: column.width,\n type: column.type\n }\n : column.imex\n })\n\n var data = records.map(item => {\n return {\n id: item.id,\n ...this.gristConfig.columns\n .filter(column => column.type !== 'gutter' && column.record !== undefined && column.imex !== undefined)\n .reduce((record, column) => {\n const key = column.imex === true ? column.name : column.imex.key\n record[key] = key\n .split('.')\n .reduce((obj, key) => (obj && obj[key] !== 'undefined' ? obj[key] : undefined), item)\n return record\n }, {})\n }\n })\n\n return { header: headerSetting, data: data }\n }\n\n async delete() {\n const selectedRecords = this.grist.selected\n\n if (!selectedRecords || selectedRecords.length == 0) {\n // showToast('info', i18next.t('text.NOTHING_SELECTED'))\n } else {\n const answer = null // await showAlertPopup('button.delete', 'text.are_you_sure', 'question', 'delete', 'cancel')\n\n if (answer) {\n let patches = selectedRecords.map(record => {\n record['cud_flag_'] = 'd'\n return record\n })\n\n return null // await ServiceUtil.deleteMultiple('terminologies/update_multiple', patches)\n }\n }\n }\n\n async save() {\n let changedRecords = this.grist.dirtyRecords\n\n if (!changedRecords || changedRecords.length == 0) {\n // showToast('info', i18next.t('text.NOTHING_CHANGED'))\n } else {\n let metaFields = [\n 'creator',\n 'updater',\n 'createdAt',\n 'updatedAt',\n '__dirty__',\n '__dirtyfields__',\n '__origin__',\n '__seq__',\n '__selected__'\n ]\n\n let patches = changedRecords.map(record => {\n let patchData = record.id ? { id: record.id } : {}\n\n for (let key in record) {\n if (!metaFields.includes(key)) {\n patchData[key] = record[key]\n }\n }\n\n patchData['cud_flag_'] = record['__dirty__'] == 'M' ? 'u' : 'c'\n return patchData\n })\n\n //await ServiceUtil.updateMultiple('terminologies/update_multiple', patches)\n this.grist.fetch()\n }\n }\n\n print() {\n const selected = this.grist.selected\n const ids = selected.map(record => record.id).join('|')\n\n /* TODO Implement the desired functionality */\n\n OxPrompt.open({\n type: 'success',\n title: i18next.t('text.completed'),\n text: i18next.t('text.printed_successfully'),\n confirmButton: { text: i18next.t('button.confirm') }\n })\n }\n}\n"]}
1
+ {"version":3,"file":"terminology-page.js","sourceRoot":"","sources":["../../client/page/terminology-page.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\n\nimport '@operato/data-grist'\nimport '@operato/context/ox-context-page-toolbar.js'\nimport '@operato/input/ox-input-select-buttons.js'\n\nimport { css, html } from 'lit'\nimport { customElement, query, state } from 'lit/decorators.js'\nimport { connect } from 'pwa-helpers/connect-mixin.js'\nimport gql from 'graphql-tag'\n\nimport { store, CustomAlert, PageView } from '@operato/shell'\nimport { client } from '@operato/graphql'\nimport { DataGrist, FetchOption, GristRecord } from '@operato/data-grist'\nimport { i18next, localize } from '@operato/i18n'\nimport { CommonHeaderStyles, ScrollbarStyles } from '@operato/styles'\nimport { isMobileDevice } from '@operato/utils'\n\n@customElement('terminology-page')\nexport class TerminologyPage extends connect(store)(localize(i18next)(PageView)) {\n static styles = [\n ScrollbarStyles,\n CommonHeaderStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n\n overflow: hidden;\n\n --grid-header-padding: 2px 0 2px 9px;\n }\n\n ox-grist {\n overflow-y: auto;\n flex: 1;\n }\n `\n ]\n\n @state() private gristConfig: any\n @state() private mode: 'CARD' | 'GRID' | 'LIST' = isMobileDevice() ? 'CARD' : 'GRID'\n @state() private state?: string[]\n\n @query('ox-grist') private grist!: DataGrist\n\n get context() {\n return {\n title: i18next.t('title.terminology'),\n search: {\n handler: (search: string) => {\n this.grist.searchText = search\n },\n value: this.grist?.searchText || ''\n },\n filter: {\n handler: () => {\n this.grist.toggleHeadroom()\n }\n },\n help: 'mfg-warehouse/term-page',\n actions: [\n {\n title: i18next.t('button.clear-cache'),\n action: this.clearCache.bind(this),\n icon: 'ink_eraser'\n },\n {\n title: i18next.t('button.save'),\n action: this.save.bind(this),\n icon: 'save'\n },\n {\n title: i18next.t('button.delete'),\n action: this.delete.bind(this),\n icon: 'delete',\n emphasis: {\n danger: true\n }\n }\n ],\n exportable: {\n name: i18next.t('button.export'),\n data: this.exportHandler.bind(this)\n },\n toolbar: false\n }\n }\n\n getFilterStatus() {\n return [\n {\n display: '한국어',\n value: 'ko-KR'\n },\n {\n display: 'English',\n value: 'en-US'\n },\n {\n display: '中文',\n value: 'zh-CN'\n },\n {\n display: '日本語',\n value: 'ja-JP'\n }\n ]\n }\n\n render() {\n const mode = this.mode || (isMobileDevice() ? 'LIST' : 'GRID')\n\n return html`\n <ox-grist .mode=${mode} .config=${this.gristConfig} .fetchHandler=${this.fetchHandler.bind(this)}>\n <div slot=\"headroom\" class=\"header\">\n <div class=\"title\">${i18next.t('title.terminology')}</div>\n\n <div class=\"filters\">\n <ox-filters-form 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 </ox-grist>\n `\n }\n\n async pageInitialized(lifecycle) {\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: 'id',\n header: i18next.t('field.id'),\n hidden: true,\n width: 0\n },\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: 'select',\n name: 'locale',\n header: i18next.t('field.locale'),\n record: {\n editable: true,\n options: [{ display: '', value: '' }, ...this.getFilterStatus()]\n },\n width: 200,\n filter: {\n type: 'select-buttons',\n operator: 'in'\n }\n },\n {\n type: 'select',\n name: 'category',\n label: true,\n header: i18next.t('field.category'),\n record: {\n editable: true,\n options: ['', 'button', 'field', 'label', 'menu', 'text', 'title']\n },\n width: 100,\n filter: 'in',\n imex: true\n },\n {\n type: 'string',\n name: 'display',\n label: true,\n header: i18next.t('field.display'),\n record: {\n editable: true\n },\n filter: 'search',\n sortable: true,\n width: 250\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 appendable: true,\n selectable: {\n multiple: true\n }\n /*handlers: {\n click: (columns, data, column, record, rowIndex) => {\n // TODO Implement the desired sub-view(like item-view) and use it in the popup content after importing\n const popup = openPopup(html` \n <item-view item-id=${record.id} style=\"background-color: white;\">\n </item-view> \n `, {\n backdrop: true,\n size: 'large',\n title: i18next.t('text.item view')\n })\n popup.onclosed = () => {\n this.grist.fetch()\n }\n }\n }*/\n },\n sorters: [\n {\n name: 'name',\n desc: true\n }\n ]\n }\n\n await this.updateComplete\n\n this.grist.fetch()\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 terminologies(filters: $filters, pagination: $pagination, sortings: $sortings) {\n items {\n id\n name\n locale\n category\n display\n creator {\n id\n name\n }\n createdAt\n updater {\n id\n name\n }\n updatedAt\n }\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.terminologies.total || 0,\n records: response.data.terminologies.items || []\n }\n }\n\n exportHandler() {\n let records = [] as GristRecord\n if (this.grist.selected && this.grist.selected.length > 0) {\n records = this.grist.selected\n } else {\n records = this.grist.data.records\n }\n\n var headerSetting = this.grist.compiledConfig.columns\n .filter(column => column.type !== 'gutter' && column.record !== undefined && column.imex !== undefined)\n .map(column => {\n return column.imex === true\n ? {\n header: column.header.renderer(column),\n key: column.name,\n width: column.width,\n type: column.type\n }\n : column.imex\n })\n\n var data = records.map(item => {\n return {\n id: item.id,\n ...this.gristConfig.columns\n .filter(column => column.type !== 'gutter' && column.record !== undefined && column.imex !== undefined)\n .reduce((record, column) => {\n const key = column.imex === true ? column.name : column.imex.key\n record[key] = key\n .split('.')\n .reduce((obj, key) => (obj && obj[key] !== 'undefined' ? obj[key] : undefined), item)\n return record\n }, {})\n }\n })\n\n return { header: headerSetting, data: data }\n }\n\n async delete() {\n const selectedRecords = this.grist.selected\n\n if (!selectedRecords || selectedRecords.length == 0) {\n this.showToast(i18next.t('text.NOTHING_SELECTED'))\n } else {\n const answer = await CustomAlert({\n type: 'question',\n title: i18next.t('button.delete'),\n text: i18next.t('text.are_you_sure'),\n confirmButton: { text: i18next.t('button.delete') },\n cancelButton: { text: i18next.t('button.cancel') }\n })\n\n if (!answer) {\n return\n }\n\n let ids = selectedRecords.map(record => record.id)\n\n const response = await client.mutate({\n mutation: gql`\n mutation ($ids: [String!]!) {\n deleteTerminologies(ids: $ids)\n }\n `,\n variables: {\n ids\n }\n })\n\n this.grist.fetch()\n\n return response.data.deleteTerminologies\n }\n }\n\n async clearCache() {\n const response = await client.mutate({\n mutation: gql`\n mutation {\n clearTranslationsCache\n }\n `\n })\n\n if (!response.errors) {\n this.showToast(i18next.t('text.nothing_selected'))\n }\n }\n\n async save() {\n let changedRecords = this.grist.dirtyRecords\n\n if (!changedRecords || changedRecords.length == 0) {\n this.showToast(i18next.t('text.nothing_changed'))\n } else {\n const patches = changedRecords.map(patch => {\n const 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: [TerminologyPatch!]!) {\n updateMultipleTerminologies(patches: $patches) {\n id\n }\n }\n `,\n variables: {\n patches\n }\n })\n\n this.grist.fetch()\n }\n }\n\n showToast(message: string) {\n document.dispatchEvent(new CustomEvent('notify', { detail: { message } }))\n }\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  export default function route(page) {
2
2
  switch (page) {
3
- case 'terminology':
3
+ case 'terminology-page':
4
4
  import('./page/terminology-page.js');
5
5
  return page;
6
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"route.js","sourceRoot":"","sources":["../client/route.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,IAAI;IAChC,QAAQ,IAAI,EAAE;QACZ,KAAK,aAAa;YAChB,MAAM,CAAC,4BAA4B,CAAC,CAAA;YACpC,OAAO,IAAI,CAAA;KACd;AACH,CAAC","sourcesContent":["export default function route(page) {\n switch (page) {\n case 'terminology':\n import('./page/terminology-page.js')\n return page\n }\n}\n"]}
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../client/route.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,IAAI;IAChC,QAAQ,IAAI,EAAE;QACZ,KAAK,kBAAkB;YACrB,MAAM,CAAC,4BAA4B,CAAC,CAAA;YACpC,OAAO,IAAI,CAAA;KACd;AACH,CAAC","sourcesContent":["export default function route(page) {\n switch (page) {\n case 'terminology-page':\n import('./page/terminology-page.js')\n return page\n }\n}\n"]}