@things-factory/organization 9.1.19 → 10.0.0-beta.2

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 (28) hide show
  1. package/dist-client/pages/approval-line/common-approval-line-templates-page.d.ts +1 -7
  2. package/dist-client/pages/approval-line/common-approval-line-templates-page.js +69 -128
  3. package/dist-client/pages/approval-line/common-approval-line-templates-page.js.map +1 -1
  4. package/dist-client/pages/approval-line/my-approval-line-templates-page.d.ts +1 -7
  5. package/dist-client/pages/approval-line/my-approval-line-templates-page.js +71 -132
  6. package/dist-client/pages/approval-line/my-approval-line-templates-page.js.map +1 -1
  7. package/dist-client/pages/department/department-list-page.d.ts +1 -7
  8. package/dist-client/pages/department/department-list-page.js +88 -157
  9. package/dist-client/pages/department/department-list-page.js.map +1 -1
  10. package/dist-client/pages/department/department-tree-page.d.ts +1 -7
  11. package/dist-client/pages/department/department-tree-page.js +68 -114
  12. package/dist-client/pages/department/department-tree-page.js.map +1 -1
  13. package/dist-client/pages/employee/employee-list-page.d.ts +0 -6
  14. package/dist-client/pages/employee/employee-list-page.js +124 -234
  15. package/dist-client/pages/employee/employee-list-page.js.map +1 -1
  16. package/dist-client/pages/employee/employees-by-department.d.ts +1 -7
  17. package/dist-client/pages/employee/employees-by-department.js +105 -188
  18. package/dist-client/pages/employee/employees-by-department.js.map +1 -1
  19. package/dist-client/route.d.ts +1 -1
  20. package/dist-client/tsconfig.tsbuildinfo +1 -1
  21. package/dist-server/service/employee/employee-mutation.js +1 -1
  22. package/dist-server/service/employee/employee-mutation.js.map +1 -1
  23. package/dist-server/service/index.d.ts +2 -2
  24. package/dist-server/tsconfig.tsbuildinfo +1 -1
  25. package/package.json +12 -12
  26. package/spec/unit/approval-line.spec.ts +329 -0
  27. package/spec/unit/department.spec.ts +253 -0
  28. package/spec/unit/employee.spec.ts +271 -0
@@ -3,7 +3,7 @@ import '@operato/data-tree';
3
3
  import '@operato/context/ox-context-page-toolbar.js';
4
4
  import '@operato/data-grist/ox-record-creator.js';
5
5
  import { CommonHeaderStyles, ScrollbarStyles } from '@operato/styles';
6
- import { PageView, store } from '@operato/shell';
6
+ import { PageView } from '@operato/shell';
7
7
  import { css, html } from 'lit';
8
8
  import { customElement, property, query, state } from 'lit/decorators.js';
9
9
  import { ScopedElementsMixin } from '@open-wc/scoped-elements';
@@ -13,89 +13,75 @@ import { isMobileDevice } from '@operato/utils';
13
13
  import { DataGrist } from '@operato/data-grist';
14
14
  import { notify } from '@operato/layout';
15
15
  import { OxPrompt } from '@operato/popup/ox-prompt.js';
16
- import { connect } from 'pwa-helpers/connect-mixin';
17
16
  import gql from 'graphql-tag';
18
17
  import { DepartmentImporter } from './department-importer';
19
18
  import { Department } from '../../types/department';
20
19
  const SubDepartmentFragment = gql `
21
- fragment SubDepartmentFragment on Department {
22
- id
20
+ fragment SubDepartmentFragment on Department { id
23
21
  controlNo
24
22
  name
25
23
  description
26
24
 
27
- manager {
28
- id
25
+ manager { id
29
26
  name
30
27
  controlNo
31
28
  photo
32
29
  email
33
- }
30
+ }
34
31
  active
35
32
  picture
36
33
 
37
- updater {
38
- id
34
+ updater { id
39
35
  name
40
- }
36
+ }
41
37
  updatedAt
42
- }
38
+ }
43
39
  `;
44
- let DepartmentListPage = class DepartmentListPage extends connect(store)(localize(i18next)(ScopedElementsMixin(PageView))) {
40
+ let DepartmentListPage = class DepartmentListPage extends localize(i18next)(ScopedElementsMixin(PageView)) {
45
41
  static { this.styles = [
46
42
  ScrollbarStyles,
47
43
  CommonHeaderStyles,
48
44
  css `
49
- :host {
50
- display: flex;
45
+ :host { display: flex;
51
46
 
52
47
  width: 100%;
53
48
 
54
49
  --grid-record-emphasized-background-color: #8b0000;
55
50
  --grid-record-emphasized-color: #ff6b6b;
56
- }
51
+ }
57
52
 
58
- ox-grist {
59
- overflow-y: auto;
53
+ ox-grist { overflow-y: auto;
60
54
  flex: 1;
61
- }
55
+ }
62
56
 
63
- .header {
64
- grid-template-areas: 'filters actions';
65
- }
57
+ .header { grid-template-areas: 'filters actions';
58
+ }
66
59
  `
67
60
  ]; }
68
61
  static get scopedElements() {
69
- return {
70
- 'department-importer': DepartmentImporter
62
+ return { 'department-importer': DepartmentImporter
71
63
  };
72
64
  }
73
65
  get context() {
74
- return {
75
- title: i18next.t('title.department list'),
66
+ return { title: i18next.t('title.department list'),
76
67
  help: 'organization/department',
77
68
  actions: [
78
- {
79
- icon: 'add',
69
+ { icon: 'add',
80
70
  title: i18next.t('button.add'),
81
71
  action: () => this.grist.addRecord()
82
72
  },
83
- // {
84
- // icon: 'add',
73
+ // { // icon: 'add',
85
74
  // title: i18next.t('button.add-sibling-dept'),
86
75
  // action: () => this.grist.addSiblingNodes()
87
76
  // },
88
- {
89
- icon: 'save',
77
+ { icon: 'save',
90
78
  title: i18next.t('button.save'),
91
79
  action: this.save.bind(this)
92
80
  },
93
- {
94
- icon: 'delete',
81
+ { icon: 'delete',
95
82
  title: i18next.t('button.delete'),
96
83
  action: this.delete.bind(this),
97
- emphasis: {
98
- danger: true
84
+ emphasis: { danger: true
99
85
  }
100
86
  }
101
87
  ].filter(Boolean),
@@ -117,122 +103,93 @@ let DepartmentListPage = class DepartmentListPage extends connect(store)(localiz
117
103
  `;
118
104
  }
119
105
  async fetchHandler({ page = 1, limit = 100, sortings = [], filters = [] }) {
120
- const response = await client.query({
121
- query: gql `
122
- query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) {
123
- responses: departmentRoots(filters: $filters, pagination: $pagination, sortings: $sortings) {
124
- total
125
- items {
126
- ...SubDepartmentFragment
127
- children(filters: $filters, sortings: $sortings) {
128
- ...SubDepartmentFragment
129
- children(filters: $filters, sortings: $sortings) {
130
- ...SubDepartmentFragment
131
- children(filters: $filters, sortings: $sortings) {
132
- ...SubDepartmentFragment
133
- children(filters: $filters, sortings: $sortings) {
134
- ...SubDepartmentFragment
135
- children(filters: $filters, sortings: $sortings) {
136
- ...SubDepartmentFragment
137
- children(filters: $filters, sortings: $sortings) {
138
- ...SubDepartmentFragment
139
- children(filters: $filters, sortings: $sortings) {
140
- ...SubDepartmentFragment
141
- }
142
- }
143
- }
144
- }
145
- }
146
- }
147
- }
148
- }
149
- }
150
- }
106
+ const response = await client.query({ query: gql `
107
+ query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) { responses: departmentRoots(filters: $filters, pagination: $pagination, sortings: $sortings) { total
108
+ items { ...SubDepartmentFragment
109
+ children(filters: $filters, sortings: $sortings) { ...SubDepartmentFragment
110
+ children(filters: $filters, sortings: $sortings) { ...SubDepartmentFragment
111
+ children(filters: $filters, sortings: $sortings) { ...SubDepartmentFragment
112
+ children(filters: $filters, sortings: $sortings) { ...SubDepartmentFragment
113
+ children(filters: $filters, sortings: $sortings) { ...SubDepartmentFragment
114
+ children(filters: $filters, sortings: $sortings) { ...SubDepartmentFragment
115
+ children(filters: $filters, sortings: $sortings) { ...SubDepartmentFragment
116
+ }
117
+ }
118
+ }
119
+ }
120
+ }
121
+ }
122
+ }
123
+ }
124
+ }
125
+ }
151
126
 
152
127
  ${SubDepartmentFragment}
153
128
  `,
154
- variables: {
155
- filters,
129
+ variables: { filters,
156
130
  pagination: { page, limit },
157
131
  sortings
158
132
  }
159
133
  });
160
134
  const { items: records, total } = response.data.responses;
161
- return {
162
- total,
135
+ return { total,
163
136
  records
164
137
  };
165
138
  }
166
139
  async pageInitialized(lifecycle) {
167
- this.gristConfig = {
168
- pagination: { pages: [50, 100, 200] },
169
- list: {
170
- thumbnail: 'profile',
140
+ this.gristConfig = { pagination: { pages: [50, 100, 200] },
141
+ list: { thumbnail: 'profile',
171
142
  fields: ['controlNo', 'name'],
172
143
  details: ['email', 'manager', 'updatedAt']
173
144
  },
174
145
  columns: [
175
- {
176
- type: 'gutter',
146
+ { type: 'gutter',
177
147
  gutterName: 'dirty',
178
148
  fixed: true
179
149
  },
180
- {
181
- type: 'tree',
150
+ { type: 'tree',
182
151
  name: 'name',
183
152
  label: true,
184
153
  header: i18next.t('label.name'),
185
- record: {
186
- editable: true,
187
- options: {
188
- selectable: true
154
+ record: { editable: true,
155
+ options: { selectable: true
189
156
  }
190
157
  },
191
158
  filter: 'search',
192
159
  sortable: true,
193
160
  width: 200,
194
161
  fixed: true,
195
- handlers: {
196
- contextmenu: 'contextmenu-tree-mutation'
162
+ handlers: { contextmenu: 'contextmenu-tree-mutation'
197
163
  }
198
164
  },
199
165
  { name: 'id', hidden: true },
200
- {
201
- type: 'string',
166
+ { type: 'string',
202
167
  name: 'controlNo',
203
168
  header: i18next.t('label.control-no'),
204
- record: {
205
- editable: true
169
+ record: { editable: true
206
170
  },
207
171
  filter: 'search',
208
172
  sortable: true,
209
173
  width: 110
210
174
  },
211
- {
212
- type: 'string',
175
+ { type: 'string',
213
176
  name: 'description',
214
177
  header: i18next.t('label.description'),
215
- record: {
216
- editable: true
178
+ record: { editable: true
217
179
  },
218
180
  filter: 'search',
219
181
  sortable: true,
220
182
  width: 110
221
183
  },
222
- {
223
- type: 'resource-object',
184
+ { type: 'resource-object',
224
185
  name: 'manager',
225
186
  header: i18next.t('label.manager'),
226
- record: {
227
- editable: true,
228
- options: {
229
- title: i18next.t('title.employee list'),
187
+ record: { editable: true,
188
+ options: { title: i18next.t('title.employee list'),
230
189
  queryName: 'employees',
231
190
  pagination: { pages: [50, 100, 200] },
232
- basicArgs: {
233
- filters: [
234
- {
235
- name: 'active',
191
+ basicArgs: { filters: [
192
+ { name: 'active',
236
193
  operator: 'eq',
237
194
  value: true
238
195
  }
@@ -241,22 +198,19 @@ let DepartmentListPage = class DepartmentListPage extends connect(store)(localiz
241
198
  list: { fields: ['controlNo', 'name', 'email'] },
242
199
  columns: [
243
200
  { name: 'id', hidden: true },
244
- {
245
- name: 'controlNo',
201
+ { name: 'controlNo',
246
202
  width: 120,
247
203
  header: { renderer: () => i18next.t('field.control-no') },
248
204
  filter: 'search',
249
205
  sortable: true
250
206
  },
251
- {
252
- name: 'name',
207
+ { name: 'name',
253
208
  width: 120,
254
209
  header: { renderer: () => i18next.t('field.name') },
255
210
  filter: 'search',
256
211
  sortable: true
257
212
  },
258
- {
259
- name: 'email',
213
+ { name: 'email',
260
214
  width: 150,
261
215
  header: { renderer: () => i18next.t('label.email') },
262
216
  filter: false,
@@ -271,38 +225,32 @@ let DepartmentListPage = class DepartmentListPage extends connect(store)(localiz
271
225
  sortable: true,
272
226
  width: 120
273
227
  },
274
- {
275
- type: 'checkbox',
228
+ { type: 'checkbox',
276
229
  name: 'active',
277
230
  label: true,
278
231
  header: i18next.t('field.active'),
279
232
  width: 70,
280
- record: {
281
- align: 'center',
233
+ record: { align: 'center',
282
234
  editable: true
283
235
  },
284
236
  filter: true,
285
237
  sortable: true
286
238
  },
287
- {
288
- type: 'resource-object',
239
+ { type: 'resource-object',
289
240
  name: 'updater',
290
241
  header: i18next.t('field.updater'),
291
242
  width: 90,
292
243
  sortable: false
293
244
  },
294
- {
295
- type: 'datetime',
245
+ { type: 'datetime',
296
246
  name: 'updatedAt',
297
247
  header: i18next.t('field.updated_at'),
298
248
  width: 180,
299
249
  sortable: true
300
250
  },
301
- {
302
- type: 'image',
251
+ { type: 'image',
303
252
  name: 'picture',
304
- record: {
305
- renderer: function (value, column, record, rowIndex, field) {
253
+ record: { renderer: function (value, column, record, rowIndex, field) {
306
254
  return html `<ox-pfp-view
307
255
  style="height:90%; width: unset; aspect-ratio: 1 / 1;"
308
256
  .profile=${record.picture}
@@ -313,68 +261,56 @@ let DepartmentListPage = class DepartmentListPage extends connect(store)(localiz
313
261
  hidden: true
314
262
  }
315
263
  ],
316
- rows: {
317
- appendable: false,
318
- selectable: {
319
- multiple: true
264
+ rows: { appendable: false,
265
+ selectable: { multiple: true
320
266
  }
321
267
  },
322
268
  sorters: [
323
- {
324
- name: 'controlNo'
269
+ { name: 'controlNo'
325
270
  }
326
271
  ],
327
- tree: {
328
- childrenProperty: 'children',
272
+ tree: { childrenProperty: 'children',
329
273
  expanded: () => true
330
274
  }
331
275
  };
332
276
  }
333
277
  async pageUpdated(changes, lifecycle) {
334
- if (this.active) {
335
- // do something here when this page just became as active
278
+ if (this.active) { // do something here when this page just became as active
336
279
  }
337
280
  }
338
281
  async delete() {
339
282
  if (!this.grist.selected || this.grist.selected.length == 0) {
340
- await OxPrompt.open({
341
- title: 'select department first.',
283
+ await OxPrompt.open({ title: 'select department first.',
342
284
  confirmButton: { text: i18next.t('button.confirm') }
343
285
  });
344
286
  return;
345
287
  }
346
288
  if (this.grist.selected.find(selected => selected.children && selected.children.length > 0)) {
347
- await OxPrompt.open({
348
- title: 'Department having children cannot be deleted.',
289
+ await OxPrompt.open({ title: 'Department having children cannot be deleted.',
349
290
  confirmButton: { text: i18next.t('button.confirm') }
350
291
  });
351
292
  return;
352
293
  }
353
- if (await OxPrompt.open({
354
- title: i18next.t('text.sure_to_x', { x: i18next.t('text.delete') }),
294
+ if (await OxPrompt.open({ title: i18next.t('text.sure_to_x', { x: i18next.t('text.delete') }),
355
295
  confirmButton: { text: i18next.t('button.confirm') },
356
296
  cancelButton: { text: i18next.t('button.cancel') }
357
297
  })) {
358
298
  const temporaries = this.grist.selected.filter(record => !record.id);
359
299
  if (temporaries && temporaries.length > 0) {
360
- this.grist.remove;
300
+ this.grist.fetch();
361
301
  }
362
302
  const ids = this.grist.selected.filter(record => record.id).map(record => record.id);
363
303
  if (ids && ids.length > 0) {
364
- const response = await client.mutate({
365
- mutation: gql `
366
- mutation ($ids: [String!]!) {
367
- deleteDepartments(ids: $ids)
368
- }
304
+ const response = await client.mutate({ mutation: gql `
305
+ mutation ($ids: [String!]!) { deleteDepartments(ids: $ids)
306
+ }
369
307
  `,
370
- variables: {
371
- ids
308
+ variables: { ids
372
309
  }
373
310
  });
374
311
  if (!response.errors) {
375
312
  this.grist.fetch();
376
- notify({
377
- message: i18next.t('text.info_x_successfully', { x: i18next.t('text.delete') })
313
+ notify({ message: i18next.t('text.info_x_successfully', { x: i18next.t('text.delete') })
378
314
  });
379
315
  }
380
316
  }
@@ -393,19 +329,14 @@ let DepartmentListPage = class DepartmentListPage extends connect(store)(localiz
393
329
  patchField.cuFlag = patch.__dirty__;
394
330
  return patchField;
395
331
  });
396
- const response = await client.mutate({
397
- mutation: gql `
398
- mutation ($patches: [DepartmentPatch!]!) {
399
- updateMultipleDepartment(patches: $patches) {
400
- name
401
- }
402
- }
332
+ const response = await client.mutate({ mutation: gql `
333
+ mutation ($patches: [DepartmentPatch!]!) { updateMultipleDepartment(patches: $patches) { name
334
+ }
335
+ }
403
336
  `,
404
- variables: {
405
- patches
337
+ variables: { patches
406
338
  },
407
- context: {
408
- hasUpload: true
339
+ context: { hasUpload: true
409
340
  }
410
341
  });
411
342
  if (!response.errors) {
@@ -1 +1 @@
1
- {"version":3,"file":"department-list-page.js","sourceRoot":"","sources":["../../../client/pages/department/department-list-page.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/data-tree'\nimport '@operato/context/ox-context-page-toolbar.js'\nimport '@operato/data-grist/ox-record-creator.js'\n\nimport { CommonHeaderStyles, ScrollbarStyles } from '@operato/styles'\nimport { PageView, store } from '@operato/shell'\nimport { css, html } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { ScopedElementsMixin } from '@open-wc/scoped-elements'\nimport { client } from '@operato/graphql'\nimport { i18next, localize } from '@operato/i18n'\nimport { isMobileDevice } from '@operato/utils'\nimport { DataGrist, FetchOption } from '@operato/data-grist'\nimport { notify } from '@operato/layout'\nimport { OxPrompt } from '@operato/popup/ox-prompt.js'\n\nimport { connect } from 'pwa-helpers/connect-mixin'\nimport gql from 'graphql-tag'\n\nimport { DepartmentImporter } from './department-importer'\nimport { Department } from '../../types/department'\n\nconst SubDepartmentFragment = gql`\n fragment SubDepartmentFragment on Department {\n id\n controlNo\n name\n description\n\n manager {\n id\n name\n controlNo\n photo\n email\n }\n active\n picture\n\n updater {\n id\n name\n }\n updatedAt\n }\n`\n\n@customElement('department-list-page')\nexport class DepartmentListPage extends connect(store)(localize(i18next)(ScopedElementsMixin(PageView))) {\n static styles = [\n ScrollbarStyles,\n CommonHeaderStyles,\n css`\n :host {\n display: flex;\n\n width: 100%;\n\n --grid-record-emphasized-background-color: #8b0000;\n --grid-record-emphasized-color: #ff6b6b;\n }\n\n ox-grist {\n overflow-y: auto;\n flex: 1;\n }\n\n .header {\n grid-template-areas: 'filters actions';\n }\n `\n ]\n\n static get scopedElements() {\n return {\n 'department-importer': DepartmentImporter\n }\n }\n\n @state() root?: Department\n @state() selected?: Department\n\n @query('ox-grist') private grist!: DataGrist\n\n get context() {\n return {\n title: i18next.t('title.department list'),\n help: 'organization/department',\n actions: [\n {\n icon: 'add',\n title: i18next.t('button.add'),\n action: () => this.grist.addRecord()\n },\n // {\n // icon: 'add',\n // title: i18next.t('button.add-sibling-dept'),\n // action: () => this.grist.addSiblingNodes()\n // },\n {\n icon: 'save',\n title: i18next.t('button.save'),\n action: this.save.bind(this)\n },\n {\n icon: 'delete',\n title: i18next.t('button.delete'),\n action: this.delete.bind(this),\n emphasis: {\n danger: true\n }\n }\n ].filter(Boolean),\n toolbar: false\n }\n }\n\n @property({ type: Object }) gristConfig: any\n\n render() {\n const 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\" class=\"header\">\n <div class=\"filters\">\n <ox-filters-form class=\"filter\" autofocus without-search></ox-filters-form>\n </div>\n\n <ox-context-page-toolbar class=\"actions\" .context=${this.context}></ox-context-page-toolbar>\n </div>\n </ox-grist>\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: departmentRoots(filters: $filters, pagination: $pagination, sortings: $sortings) {\n total\n items {\n ...SubDepartmentFragment\n children(filters: $filters, sortings: $sortings) {\n ...SubDepartmentFragment\n children(filters: $filters, sortings: $sortings) {\n ...SubDepartmentFragment\n children(filters: $filters, sortings: $sortings) {\n ...SubDepartmentFragment\n children(filters: $filters, sortings: $sortings) {\n ...SubDepartmentFragment\n children(filters: $filters, sortings: $sortings) {\n ...SubDepartmentFragment\n children(filters: $filters, sortings: $sortings) {\n ...SubDepartmentFragment\n children(filters: $filters, sortings: $sortings) {\n ...SubDepartmentFragment\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n\n ${SubDepartmentFragment}\n `,\n variables: {\n filters,\n pagination: { page, limit },\n sortings\n }\n })\n\n const { items: records, total } = response.data.responses\n\n return {\n total,\n records\n }\n }\n\n async pageInitialized(lifecycle: any) {\n this.gristConfig = {\n pagination: { pages: [50, 100, 200] },\n list: {\n thumbnail: 'profile',\n fields: ['controlNo', 'name'],\n details: ['email', 'manager', 'updatedAt']\n },\n columns: [\n {\n type: 'gutter',\n gutterName: 'dirty',\n fixed: true\n },\n {\n type: 'tree',\n name: 'name',\n label: true,\n header: i18next.t('label.name'),\n record: {\n editable: true,\n options: {\n selectable: true\n }\n },\n filter: 'search',\n sortable: true,\n width: 200,\n fixed: true,\n handlers: {\n contextmenu: 'contextmenu-tree-mutation'\n }\n },\n { name: 'id', hidden: true },\n {\n type: 'string',\n name: 'controlNo',\n header: i18next.t('label.control-no'),\n record: {\n editable: true\n },\n filter: 'search',\n sortable: true,\n width: 110\n },\n {\n type: 'string',\n name: 'description',\n header: i18next.t('label.description'),\n record: {\n editable: true\n },\n filter: 'search',\n sortable: true,\n width: 110\n },\n {\n type: 'resource-object',\n name: 'manager',\n header: i18next.t('label.manager'),\n record: {\n editable: true,\n options: {\n title: i18next.t('title.employee list'),\n queryName: 'employees',\n pagination: { pages: [50, 100, 200] },\n basicArgs: {\n filters: [\n {\n name: 'active',\n operator: 'eq',\n value: true\n }\n ]\n },\n list: { fields: ['controlNo', 'name', 'email'] },\n columns: [\n { name: 'id', hidden: true },\n {\n name: 'controlNo',\n width: 120,\n header: { renderer: () => i18next.t('field.control-no') },\n filter: 'search',\n sortable: true\n },\n {\n name: 'name',\n width: 120,\n header: { renderer: () => i18next.t('field.name') },\n filter: 'search',\n sortable: true\n },\n {\n name: 'email',\n width: 150,\n header: { renderer: () => i18next.t('label.email') },\n filter: false,\n sortable: true\n }\n ],\n valueField: 'id',\n nameField: 'name',\n descriptionField: 'controlNo'\n }\n },\n sortable: true,\n width: 120\n },\n {\n type: 'checkbox',\n name: 'active',\n label: true,\n header: i18next.t('field.active'),\n width: 70,\n record: {\n align: 'center',\n editable: true\n },\n filter: true,\n sortable: true\n },\n {\n type: 'resource-object',\n name: 'updater',\n header: i18next.t('field.updater'),\n width: 90,\n sortable: false\n },\n {\n type: 'datetime',\n name: 'updatedAt',\n header: i18next.t('field.updated_at'),\n width: 180,\n sortable: true\n },\n {\n type: 'image',\n name: 'picture',\n record: {\n renderer: function (value, column, record, rowIndex, field) {\n return html`<ox-pfp-view\n style=\"height:90%; width: unset; aspect-ratio: 1 / 1;\"\n .profile=${record.picture}\n .name=${record.name}\n ></ox-pfp-view>`\n }\n },\n hidden: true\n }\n ],\n rows: {\n appendable: false,\n selectable: {\n multiple: true\n }\n },\n sorters: [\n {\n name: 'controlNo'\n }\n ],\n tree: {\n childrenProperty: 'children',\n expanded: () => true\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 delete() {\n if (!this.grist.selected || this.grist.selected.length == 0) {\n await OxPrompt.open({\n title: 'select department first.',\n confirmButton: { text: i18next.t('button.confirm') }\n })\n return\n }\n\n if (this.grist.selected.find(selected => selected.children && selected.children.length > 0)) {\n await OxPrompt.open({\n title: 'Department having children cannot be deleted.',\n confirmButton: { text: i18next.t('button.confirm') }\n })\n return\n }\n\n if (\n await OxPrompt.open({\n title: i18next.t('text.sure_to_x', { x: i18next.t('text.delete') }),\n confirmButton: { text: i18next.t('button.confirm') },\n cancelButton: { text: i18next.t('button.cancel') }\n })\n ) {\n const temporaries = this.grist.selected.filter(record => !record.id)\n\n if (temporaries && temporaries.length > 0) {\n this.grist.remove\n }\n\n const ids = this.grist.selected.filter(record => record.id).map(record => record.id)\n\n if (ids && ids.length > 0) {\n const response = await client.mutate({\n mutation: gql`\n mutation ($ids: [String!]!) {\n deleteDepartments(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 save() {\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.parent = patch.parent\n patchField.cuFlag = patch.__dirty__\n\n return patchField\n })\n\n const response = await client.mutate({\n mutation: gql`\n mutation ($patches: [DepartmentPatch!]!) {\n updateMultipleDepartment(patches: $patches) {\n name\n }\n }\n `,\n variables: {\n patches\n },\n context: {\n hasUpload: true\n }\n })\n\n if (!response.errors) {\n this.grist.fetch()\n }\n }\n }\n}\n"]}
1
+ {"version":3,"file":"department-list-page.js","sourceRoot":"","sources":["../../../client/pages/department/department-list-page.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/data-tree'\nimport '@operato/context/ox-context-page-toolbar.js'\nimport '@operato/data-grist/ox-record-creator.js'\n\nimport { CommonHeaderStyles, ScrollbarStyles } from '@operato/styles'\nimport { PageView } from '@operato/shell'\nimport { css, html } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { ScopedElementsMixin } from '@open-wc/scoped-elements'\nimport { client } from '@operato/graphql'\nimport { i18next, localize } from '@operato/i18n'\nimport { isMobileDevice } from '@operato/utils'\nimport { DataGrist, FetchOption } from '@operato/data-grist'\nimport { notify } from '@operato/layout'\nimport { OxPrompt } from '@operato/popup/ox-prompt.js'\n\nimport gql from 'graphql-tag'\n\nimport { DepartmentImporter } from './department-importer'\nimport { Department } from '../../types/department'\n\nconst SubDepartmentFragment = gql`\n fragment SubDepartmentFragment on Department { id\n controlNo\n name\n description\n\n manager { id\n name\n controlNo\n photo\n email\n }\n active\n picture\n\n updater { id\n name\n }\n updatedAt\n }\n`\n\n@customElement('department-list-page')\nexport class DepartmentListPage extends localize(i18next)(ScopedElementsMixin(PageView)) { static styles = [\n ScrollbarStyles,\n CommonHeaderStyles,\n css`\n :host { display: flex;\n\n width: 100%;\n\n --grid-record-emphasized-background-color: #8b0000;\n --grid-record-emphasized-color: #ff6b6b;\n }\n\n ox-grist { overflow-y: auto;\n flex: 1;\n }\n\n .header { grid-template-areas: 'filters actions';\n }\n `\n ]\n\n static get scopedElements() { return { 'department-importer': DepartmentImporter\n }\n }\n\n @state() root?: Department\n @state() selected?: Department\n\n @query('ox-grist') private grist!: DataGrist\n\n get context() { return { title: i18next.t('title.department list'),\n help: 'organization/department',\n actions: [\n { icon: 'add',\n title: i18next.t('button.add'),\n action: () => this.grist.addRecord()\n },\n // { // icon: 'add',\n // title: i18next.t('button.add-sibling-dept'),\n // action: () => this.grist.addSiblingNodes()\n // },\n { icon: 'save',\n title: i18next.t('button.save'),\n action: this.save.bind(this)\n },\n { icon: 'delete',\n title: i18next.t('button.delete'),\n action: this.delete.bind(this),\n emphasis: { danger: true\n }\n }\n ].filter(Boolean),\n toolbar: false\n }\n }\n\n @property({ type: Object }) gristConfig: any\n\n render() { const 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\" class=\"header\">\n <div class=\"filters\">\n <ox-filters-form class=\"filter\" autofocus without-search></ox-filters-form>\n </div>\n\n <ox-context-page-toolbar class=\"actions\" .context=${this.context}></ox-context-page-toolbar>\n </div>\n </ox-grist>\n `\n }\n\n async fetchHandler({ page = 1, limit = 100, sortings = [], filters = [] }: FetchOption) { const response = await client.query({ query: gql`\n query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) { responses: departmentRoots(filters: $filters, pagination: $pagination, sortings: $sortings) { total\n items { ...SubDepartmentFragment\n children(filters: $filters, sortings: $sortings) { ...SubDepartmentFragment\n children(filters: $filters, sortings: $sortings) { ...SubDepartmentFragment\n children(filters: $filters, sortings: $sortings) { ...SubDepartmentFragment\n children(filters: $filters, sortings: $sortings) { ...SubDepartmentFragment\n children(filters: $filters, sortings: $sortings) { ...SubDepartmentFragment\n children(filters: $filters, sortings: $sortings) { ...SubDepartmentFragment\n children(filters: $filters, sortings: $sortings) { ...SubDepartmentFragment\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n\n ${SubDepartmentFragment}\n `,\n variables: { filters,\n pagination: { page, limit },\n sortings\n }\n })\n\n const { items: records, total } = response.data.responses\n\n return { total,\n records\n }\n }\n\n async pageInitialized(lifecycle: any) { this.gristConfig = { pagination: { pages: [50, 100, 200] },\n list: { thumbnail: 'profile',\n fields: ['controlNo', 'name'],\n details: ['email', 'manager', 'updatedAt']\n },\n columns: [\n { type: 'gutter',\n gutterName: 'dirty',\n fixed: true\n },\n { type: 'tree',\n name: 'name',\n label: true,\n header: i18next.t('label.name'),\n record: { editable: true,\n options: { selectable: true\n }\n },\n filter: 'search',\n sortable: true,\n width: 200,\n fixed: true,\n handlers: { contextmenu: 'contextmenu-tree-mutation'\n }\n },\n { name: 'id', hidden: true },\n { type: 'string',\n name: 'controlNo',\n header: i18next.t('label.control-no'),\n record: { editable: true\n },\n filter: 'search',\n sortable: true,\n width: 110\n },\n { type: 'string',\n name: 'description',\n header: i18next.t('label.description'),\n record: { editable: true\n },\n filter: 'search',\n sortable: true,\n width: 110\n },\n { type: 'resource-object',\n name: 'manager',\n header: i18next.t('label.manager'),\n record: { editable: true,\n options: { title: i18next.t('title.employee list'),\n queryName: 'employees',\n pagination: { pages: [50, 100, 200] },\n basicArgs: { filters: [\n { name: 'active',\n operator: 'eq',\n value: true\n }\n ]\n },\n list: { fields: ['controlNo', 'name', 'email'] },\n columns: [\n { name: 'id', hidden: true },\n { name: 'controlNo',\n width: 120,\n header: { renderer: () => i18next.t('field.control-no') },\n filter: 'search',\n sortable: true\n },\n { name: 'name',\n width: 120,\n header: { renderer: () => i18next.t('field.name') },\n filter: 'search',\n sortable: true\n },\n { name: 'email',\n width: 150,\n header: { renderer: () => i18next.t('label.email') },\n filter: false,\n sortable: true\n }\n ],\n valueField: 'id',\n nameField: 'name',\n descriptionField: 'controlNo'\n }\n },\n sortable: true,\n width: 120\n },\n { type: 'checkbox',\n name: 'active',\n label: true,\n header: i18next.t('field.active'),\n width: 70,\n record: { align: 'center',\n editable: true\n },\n filter: true,\n sortable: true\n },\n { type: 'resource-object',\n name: 'updater',\n header: i18next.t('field.updater'),\n width: 90,\n sortable: false\n },\n { type: 'datetime',\n name: 'updatedAt',\n header: i18next.t('field.updated_at'),\n width: 180,\n sortable: true\n },\n { type: 'image',\n name: 'picture',\n record: { renderer: function (value, column, record, rowIndex, field) { return html`<ox-pfp-view\n style=\"height:90%; width: unset; aspect-ratio: 1 / 1;\"\n .profile=${record.picture}\n .name=${record.name}\n ></ox-pfp-view>`\n }\n },\n hidden: true\n }\n ],\n rows: { appendable: false,\n selectable: { multiple: true\n }\n },\n sorters: [\n { name: 'controlNo'\n }\n ],\n tree: { childrenProperty: 'children',\n expanded: () => true\n }\n }\n }\n\n async pageUpdated(changes: any, lifecycle: any) { if (this.active) { // do something here when this page just became as active\n }\n }\n\n async delete() { if (!this.grist.selected || this.grist.selected.length == 0) { await OxPrompt.open({ title: 'select department first.',\n confirmButton: { text: i18next.t('button.confirm') }\n })\n return\n }\n\n if (this.grist.selected.find(selected => selected.children && selected.children.length > 0)) { await OxPrompt.open({ title: 'Department having children cannot be deleted.',\n confirmButton: { text: i18next.t('button.confirm') }\n })\n return\n }\n\n if (\n await OxPrompt.open({ title: i18next.t('text.sure_to_x', { x: i18next.t('text.delete') }),\n confirmButton: { text: i18next.t('button.confirm') },\n cancelButton: { text: i18next.t('button.cancel') }\n })\n ) { const temporaries = this.grist.selected.filter(record => !record.id)\n\n if (temporaries && temporaries.length > 0) { this.grist.fetch()\n }\n\n const ids = this.grist.selected.filter(record => record.id).map(record => record.id)\n\n if (ids && ids.length > 0) { const response = await client.mutate({ mutation: gql`\n mutation ($ids: [String!]!) { deleteDepartments(ids: $ids)\n }\n `,\n variables: { ids\n }\n })\n\n if (!response.errors) { this.grist.fetch()\n notify({ message: i18next.t('text.info_x_successfully', { x: i18next.t('text.delete') })\n })\n }\n }\n }\n }\n\n async save() { let patches = this.grist.dirtyRecords\n if (patches && patches.length) { patches = patches.map(patch => { let patchField: any = patch.id ? { id: patch.id } : {}\n const dirtyFields = patch.__dirtyfields__\n for (let key in dirtyFields) { patchField[key] = dirtyFields[key].after\n }\n patchField.parent = patch.parent\n patchField.cuFlag = patch.__dirty__\n\n return patchField\n })\n\n const response = await client.mutate({ mutation: gql`\n mutation ($patches: [DepartmentPatch!]!) { updateMultipleDepartment(patches: $patches) { name\n }\n }\n `,\n variables: { patches\n },\n context: { hasUpload: true\n }\n })\n\n if (!response.errors) { this.grist.fetch()\n }\n }\n }\n}\n"]}
@@ -5,13 +5,7 @@ import { PageView } from '@operato/shell';
5
5
  import { DepartmentImporter } from './department-importer';
6
6
  import { Department } from '../../types/department';
7
7
  import { DepartmentView } from '../../component/department-view';
8
- declare const DepartmentTreePage_base: (new (...args: any[]) => {
9
- _storeUnsubscribe: import("redux").Unsubscribe;
10
- connectedCallback(): void;
11
- disconnectedCallback(): void;
12
- stateChanged(_state: unknown): void;
13
- readonly isConnected: boolean;
14
- }) & (new (...args: any[]) => import("lit").LitElement) & typeof PageView & import("@open-wc/dedupe-mixin").Constructor<import("@open-wc/scoped-elements/types/src/types").ScopedElementsHost>;
8
+ declare const DepartmentTreePage_base: (new (...args: any[]) => import("lit").LitElement) & typeof PageView & import("@open-wc/dedupe-mixin").Constructor<import("@open-wc/scoped-elements/types/src/types").ScopedElementsHost>;
15
9
  export declare class DepartmentTreePage extends DepartmentTreePage_base {
16
10
  static styles: import("lit").CSSResult[];
17
11
  static get scopedElements(): {