@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.
- package/dist-client/pages/approval-line/common-approval-line-templates-page.d.ts +1 -7
- package/dist-client/pages/approval-line/common-approval-line-templates-page.js +69 -128
- package/dist-client/pages/approval-line/common-approval-line-templates-page.js.map +1 -1
- package/dist-client/pages/approval-line/my-approval-line-templates-page.d.ts +1 -7
- package/dist-client/pages/approval-line/my-approval-line-templates-page.js +71 -132
- package/dist-client/pages/approval-line/my-approval-line-templates-page.js.map +1 -1
- package/dist-client/pages/department/department-list-page.d.ts +1 -7
- package/dist-client/pages/department/department-list-page.js +88 -157
- package/dist-client/pages/department/department-list-page.js.map +1 -1
- package/dist-client/pages/department/department-tree-page.d.ts +1 -7
- package/dist-client/pages/department/department-tree-page.js +68 -114
- package/dist-client/pages/department/department-tree-page.js.map +1 -1
- package/dist-client/pages/employee/employee-list-page.d.ts +0 -6
- package/dist-client/pages/employee/employee-list-page.js +124 -234
- package/dist-client/pages/employee/employee-list-page.js.map +1 -1
- package/dist-client/pages/employee/employees-by-department.d.ts +1 -7
- package/dist-client/pages/employee/employees-by-department.js +105 -188
- package/dist-client/pages/employee/employees-by-department.js.map +1 -1
- package/dist-client/route.d.ts +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-server/service/employee/employee-mutation.js +1 -1
- package/dist-server/service/employee/employee-mutation.js.map +1 -1
- package/dist-server/service/index.d.ts +2 -2
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +12 -12
- package/spec/unit/approval-line.spec.ts +329 -0
- package/spec/unit/department.spec.ts +253 -0
- package/spec/unit/employee.spec.ts +271 -0
|
@@ -1,77 +1,67 @@
|
|
|
1
1
|
import { __decorate, __metadata } from "tslib";
|
|
2
2
|
import '@operato/data-tree';
|
|
3
3
|
import { CommonHeaderStyles, CommonGristStyles, ScrollbarStyles } from '@operato/styles';
|
|
4
|
-
import { PageView
|
|
4
|
+
import { PageView } from '@operato/shell';
|
|
5
5
|
import { css, html } from 'lit';
|
|
6
6
|
import { customElement, property, query, state } from 'lit/decorators.js';
|
|
7
7
|
import { ScopedElementsMixin } from '@open-wc/scoped-elements';
|
|
8
8
|
import { client } from '@operato/graphql';
|
|
9
9
|
import { i18next, localize } from '@operato/i18n';
|
|
10
10
|
import { DataGrist } from '@operato/data-grist';
|
|
11
|
-
import { connect } from 'pwa-helpers/connect-mixin';
|
|
12
11
|
import gql from 'graphql-tag';
|
|
13
12
|
import { DepartmentImporter } from '../department/department-importer';
|
|
14
13
|
import { Department } from '../../types/department';
|
|
15
14
|
import { EmployeeListPage } from './employee-list-page';
|
|
16
15
|
const departmentFragment = gql `
|
|
17
|
-
fragment SubDepartmentFragment on Department {
|
|
18
|
-
id
|
|
16
|
+
fragment SubDepartmentFragment on Department { id
|
|
19
17
|
controlNo
|
|
20
18
|
name
|
|
21
19
|
description
|
|
22
20
|
|
|
23
|
-
manager {
|
|
24
|
-
id
|
|
21
|
+
manager { id
|
|
25
22
|
name
|
|
26
23
|
controlNo
|
|
27
24
|
photo
|
|
28
25
|
email
|
|
29
|
-
|
|
26
|
+
}
|
|
30
27
|
active
|
|
31
28
|
state
|
|
32
29
|
picture
|
|
33
30
|
|
|
34
|
-
updater {
|
|
35
|
-
id
|
|
31
|
+
updater { id
|
|
36
32
|
name
|
|
37
|
-
|
|
33
|
+
}
|
|
38
34
|
updatedAt
|
|
39
|
-
|
|
35
|
+
}
|
|
40
36
|
`;
|
|
41
|
-
let EmployeesByDepartment = class EmployeesByDepartment extends
|
|
37
|
+
let EmployeesByDepartment = class EmployeesByDepartment extends localize(i18next)(ScopedElementsMixin(PageView)) {
|
|
42
38
|
static { this.styles = [
|
|
43
39
|
ScrollbarStyles,
|
|
44
40
|
CommonGristStyles,
|
|
45
41
|
CommonHeaderStyles,
|
|
46
42
|
css `
|
|
47
|
-
:host {
|
|
48
|
-
display: flex;
|
|
43
|
+
:host { display: flex;
|
|
49
44
|
flex-direction: row;
|
|
50
45
|
overflow: auto;
|
|
51
|
-
|
|
46
|
+
}
|
|
52
47
|
|
|
53
|
-
ox-tree {
|
|
54
|
-
flex: 1;
|
|
48
|
+
ox-tree { flex: 1;
|
|
55
49
|
overflow: auto;
|
|
56
|
-
|
|
50
|
+
}
|
|
57
51
|
|
|
58
|
-
ox-grist {
|
|
59
|
-
|
|
60
|
-
}
|
|
52
|
+
ox-grist { flex: 4;
|
|
53
|
+
}
|
|
61
54
|
|
|
62
|
-
ox-filters-form {
|
|
63
|
-
|
|
64
|
-
}
|
|
55
|
+
ox-filters-form { flex: 1;
|
|
56
|
+
}
|
|
65
57
|
`
|
|
66
58
|
]; }
|
|
67
59
|
static get scopedElements() {
|
|
68
|
-
return {
|
|
69
|
-
'department-importer': DepartmentImporter
|
|
60
|
+
return { 'department-importer': DepartmentImporter
|
|
70
61
|
};
|
|
71
62
|
}
|
|
72
63
|
get context() {
|
|
73
|
-
return {
|
|
74
|
-
title: i18next.t('title.employees-by-department'),
|
|
64
|
+
return { title: i18next.t('title.employees-by-department'),
|
|
75
65
|
actions: []
|
|
76
66
|
};
|
|
77
67
|
}
|
|
@@ -94,56 +84,45 @@ let EmployeesByDepartment = class EmployeesByDepartment extends connect(store)(l
|
|
|
94
84
|
`;
|
|
95
85
|
}
|
|
96
86
|
async pageInitialized(lifecycle) {
|
|
97
|
-
this.gristConfig = {
|
|
98
|
-
|
|
99
|
-
list: {
|
|
100
|
-
thumbnail: 'profile',
|
|
87
|
+
this.gristConfig = { pagination: { pages: [100] },
|
|
88
|
+
list: { thumbnail: 'profile',
|
|
101
89
|
fields: ['controlNo', 'name'],
|
|
102
90
|
details: ['email', 'department', 'hiredOn', 'updatedAt']
|
|
103
91
|
},
|
|
104
92
|
columns: [
|
|
105
93
|
{ type: 'gutter', gutterName: 'sequence' },
|
|
106
|
-
{
|
|
107
|
-
type: 'string',
|
|
94
|
+
{ type: 'string',
|
|
108
95
|
name: 'controlNo',
|
|
109
96
|
header: i18next.t('field.control-no'),
|
|
110
|
-
record: {
|
|
111
|
-
editable: true
|
|
97
|
+
record: { editable: true
|
|
112
98
|
},
|
|
113
99
|
filter: 'search',
|
|
114
100
|
sortable: true,
|
|
115
101
|
width: 105
|
|
116
102
|
},
|
|
117
|
-
{
|
|
118
|
-
type: 'string',
|
|
103
|
+
{ type: 'string',
|
|
119
104
|
name: 'name',
|
|
120
105
|
header: i18next.t('field.name'),
|
|
121
|
-
record: {
|
|
122
|
-
editable: true
|
|
106
|
+
record: { editable: true
|
|
123
107
|
},
|
|
124
108
|
filter: 'search',
|
|
125
109
|
sortable: true,
|
|
126
110
|
width: 100
|
|
127
111
|
},
|
|
128
|
-
{
|
|
129
|
-
type: 'string',
|
|
112
|
+
{ type: 'string',
|
|
130
113
|
name: 'alias',
|
|
131
114
|
header: i18next.t('label.alias'),
|
|
132
|
-
record: {
|
|
133
|
-
editable: true
|
|
115
|
+
record: { editable: true
|
|
134
116
|
},
|
|
135
117
|
filter: 'search',
|
|
136
118
|
sortable: true,
|
|
137
119
|
width: 110
|
|
138
120
|
},
|
|
139
|
-
{
|
|
140
|
-
type: 'resource-object',
|
|
121
|
+
{ type: 'resource-object',
|
|
141
122
|
name: 'user',
|
|
142
123
|
header: i18next.t('field.user'),
|
|
143
|
-
record: {
|
|
144
|
-
|
|
145
|
-
options: {
|
|
146
|
-
title: i18next.t('title.lookup user'),
|
|
124
|
+
record: { editable: true,
|
|
125
|
+
options: { title: i18next.t('title.lookup user'),
|
|
147
126
|
queryName: 'users',
|
|
148
127
|
basicArgs: { filters: [{ name: 'userType', operator: 'eq', value: 'user' }] },
|
|
149
128
|
descriptionField: 'email',
|
|
@@ -159,43 +138,34 @@ let EmployeesByDepartment = class EmployeesByDepartment extends connect(store)(l
|
|
|
159
138
|
filter: false,
|
|
160
139
|
width: 100
|
|
161
140
|
},
|
|
162
|
-
{
|
|
163
|
-
type: 'code',
|
|
141
|
+
{ type: 'code',
|
|
164
142
|
name: 'type',
|
|
165
143
|
header: i18next.t('field.type'),
|
|
166
144
|
width: 115,
|
|
167
145
|
sortable: false,
|
|
168
146
|
filter: false,
|
|
169
|
-
record: {
|
|
170
|
-
editable: true,
|
|
147
|
+
record: { editable: true,
|
|
171
148
|
codeName: 'EMPLOYEE_TYPE'
|
|
172
149
|
}
|
|
173
150
|
},
|
|
174
|
-
{
|
|
175
|
-
type: 'department-object',
|
|
151
|
+
{ type: 'department-object',
|
|
176
152
|
name: 'department',
|
|
177
153
|
header: i18next.t('field.department'),
|
|
178
|
-
record: {
|
|
179
|
-
editable: true
|
|
154
|
+
record: { editable: true
|
|
180
155
|
},
|
|
181
156
|
sortable: true,
|
|
182
157
|
filter: false,
|
|
183
158
|
width: 130
|
|
184
159
|
},
|
|
185
|
-
{
|
|
186
|
-
type: 'resource-object',
|
|
160
|
+
{ type: 'resource-object',
|
|
187
161
|
name: 'supervisor',
|
|
188
162
|
header: i18next.t('field.supervisor'),
|
|
189
|
-
record: {
|
|
190
|
-
|
|
191
|
-
options: {
|
|
192
|
-
title: i18next.t('title.employee list'),
|
|
163
|
+
record: { editable: true,
|
|
164
|
+
options: { title: i18next.t('title.employee list'),
|
|
193
165
|
queryName: 'employees',
|
|
194
166
|
pagination: { pages: [50, 100, 200] },
|
|
195
|
-
basicArgs: {
|
|
196
|
-
|
|
197
|
-
{
|
|
198
|
-
name: 'active',
|
|
167
|
+
basicArgs: { filters: [
|
|
168
|
+
{ name: 'active',
|
|
199
169
|
operator: 'eq',
|
|
200
170
|
value: true
|
|
201
171
|
}
|
|
@@ -204,59 +174,49 @@ let EmployeesByDepartment = class EmployeesByDepartment extends connect(store)(l
|
|
|
204
174
|
list: { fields: ['controlNo', 'name', 'alias', 'hiredOn'] },
|
|
205
175
|
columns: [
|
|
206
176
|
{ name: 'id', hidden: true },
|
|
207
|
-
{
|
|
208
|
-
name: 'controlNo',
|
|
177
|
+
{ name: 'controlNo',
|
|
209
178
|
width: 120,
|
|
210
179
|
header: { renderer: () => i18next.t('field.control-no') },
|
|
211
180
|
filter: 'search',
|
|
212
181
|
sortable: true
|
|
213
182
|
},
|
|
214
|
-
{
|
|
215
|
-
name: 'name',
|
|
183
|
+
{ name: 'name',
|
|
216
184
|
width: 120,
|
|
217
185
|
header: { renderer: () => i18next.t('field.name') },
|
|
218
186
|
filter: 'search',
|
|
219
187
|
sortable: true
|
|
220
188
|
},
|
|
221
|
-
{
|
|
222
|
-
name: 'alias',
|
|
189
|
+
{ name: 'alias',
|
|
223
190
|
width: 150,
|
|
224
191
|
header: { renderer: () => i18next.t('label.alias') },
|
|
225
192
|
filter: 'search',
|
|
226
193
|
sortable: true
|
|
227
194
|
},
|
|
228
|
-
{
|
|
229
|
-
type: 'code',
|
|
195
|
+
{ type: 'code',
|
|
230
196
|
name: 'type',
|
|
231
197
|
width: 110,
|
|
232
198
|
header: { renderer: () => i18next.t('label.type') },
|
|
233
|
-
record: {
|
|
234
|
-
editable: false,
|
|
199
|
+
record: { editable: false,
|
|
235
200
|
codeName: 'EMPLOYEE_TYPE'
|
|
236
201
|
}
|
|
237
202
|
},
|
|
238
|
-
{
|
|
239
|
-
type: 'code',
|
|
203
|
+
{ type: 'code',
|
|
240
204
|
name: 'jobPosition',
|
|
241
205
|
width: 110,
|
|
242
206
|
header: { renderer: () => i18next.t('label.job-position') },
|
|
243
|
-
record: {
|
|
244
|
-
editable: false,
|
|
207
|
+
record: { editable: false,
|
|
245
208
|
codeName: 'JOB_POSITION'
|
|
246
209
|
}
|
|
247
210
|
},
|
|
248
|
-
{
|
|
249
|
-
type: 'code',
|
|
211
|
+
{ type: 'code',
|
|
250
212
|
name: 'jobResponsibility',
|
|
251
213
|
width: 200,
|
|
252
214
|
header: { renderer: () => i18next.t('label.job-responsibility') },
|
|
253
|
-
record: {
|
|
254
|
-
editable: false,
|
|
215
|
+
record: { editable: false,
|
|
255
216
|
codeName: 'JOB_RESPONSIBILITY'
|
|
256
217
|
}
|
|
257
218
|
},
|
|
258
|
-
{
|
|
259
|
-
type: 'date',
|
|
219
|
+
{ type: 'date',
|
|
260
220
|
name: 'hiredOn',
|
|
261
221
|
header: { renderer: () => i18next.t('field.hired-on') },
|
|
262
222
|
width: 100
|
|
@@ -270,111 +230,91 @@ let EmployeesByDepartment = class EmployeesByDepartment extends connect(store)(l
|
|
|
270
230
|
sortable: true,
|
|
271
231
|
width: 120
|
|
272
232
|
},
|
|
273
|
-
{
|
|
274
|
-
type: 'string',
|
|
233
|
+
{ type: 'string',
|
|
275
234
|
name: 'email',
|
|
276
235
|
header: i18next.t('field.email'),
|
|
277
236
|
width: 200,
|
|
278
|
-
record: {
|
|
279
|
-
editable: false,
|
|
237
|
+
record: { editable: false,
|
|
280
238
|
renderer: function (value, column, record, rowIndex, field) {
|
|
281
239
|
return record.contact ? record.contact.email : '';
|
|
282
240
|
}
|
|
283
241
|
},
|
|
284
242
|
sortable: true
|
|
285
243
|
},
|
|
286
|
-
{
|
|
287
|
-
type: 'string',
|
|
244
|
+
{ type: 'string',
|
|
288
245
|
name: 'phone',
|
|
289
246
|
header: i18next.t('field.phone'),
|
|
290
247
|
width: 110,
|
|
291
|
-
record: {
|
|
292
|
-
editable: false,
|
|
248
|
+
record: { editable: false,
|
|
293
249
|
renderer: function (value, column, record, rowIndex, field) {
|
|
294
250
|
return record.contact ? record.contact.phone : '';
|
|
295
251
|
}
|
|
296
252
|
},
|
|
297
253
|
sortable: true
|
|
298
254
|
},
|
|
299
|
-
{
|
|
300
|
-
type: 'code',
|
|
255
|
+
{ type: 'code',
|
|
301
256
|
name: 'jobResponsibility',
|
|
302
257
|
header: i18next.t('label.job-responsibility'),
|
|
303
258
|
width: 175,
|
|
304
|
-
record: {
|
|
305
|
-
editable: true,
|
|
259
|
+
record: { editable: true,
|
|
306
260
|
codeName: 'JOB_RESPONSIBILITY'
|
|
307
261
|
}
|
|
308
262
|
},
|
|
309
|
-
{
|
|
310
|
-
type: 'code',
|
|
263
|
+
{ type: 'code',
|
|
311
264
|
name: 'jobPosition',
|
|
312
265
|
header: i18next.t('label.job-position'),
|
|
313
266
|
width: 100,
|
|
314
|
-
record: {
|
|
315
|
-
editable: true,
|
|
267
|
+
record: { editable: true,
|
|
316
268
|
codeName: 'JOB_POSITION'
|
|
317
269
|
}
|
|
318
270
|
},
|
|
319
|
-
{
|
|
320
|
-
type: 'date',
|
|
271
|
+
{ type: 'date',
|
|
321
272
|
name: 'hiredOn',
|
|
322
273
|
header: i18next.t('field.hired-on'),
|
|
323
274
|
width: 100,
|
|
324
|
-
record: {
|
|
325
|
-
editable: true
|
|
275
|
+
record: { editable: true
|
|
326
276
|
},
|
|
327
277
|
sortable: true
|
|
328
278
|
},
|
|
329
|
-
{
|
|
330
|
-
type: 'date',
|
|
279
|
+
{ type: 'date',
|
|
331
280
|
name: 'retiredOn',
|
|
332
281
|
header: i18next.t('label.retired-at'),
|
|
333
282
|
width: 100,
|
|
334
|
-
record: {
|
|
335
|
-
editable: true
|
|
283
|
+
record: { editable: true
|
|
336
284
|
}
|
|
337
285
|
},
|
|
338
|
-
{
|
|
339
|
-
type: 'checkbox',
|
|
286
|
+
{ type: 'checkbox',
|
|
340
287
|
name: 'active',
|
|
341
288
|
label: true,
|
|
342
289
|
header: i18next.t('field.active'),
|
|
343
290
|
width: 70,
|
|
344
|
-
record: {
|
|
345
|
-
align: 'center',
|
|
291
|
+
record: { align: 'center',
|
|
346
292
|
editable: true
|
|
347
293
|
},
|
|
348
294
|
filter: true,
|
|
349
295
|
sortable: true
|
|
350
296
|
},
|
|
351
|
-
{
|
|
352
|
-
type: 'string',
|
|
297
|
+
{ type: 'string',
|
|
353
298
|
name: 'note',
|
|
354
299
|
header: i18next.t('field.note'),
|
|
355
300
|
width: 200,
|
|
356
|
-
record: {
|
|
357
|
-
editable: true
|
|
301
|
+
record: { editable: true
|
|
358
302
|
},
|
|
359
303
|
filter: 'search'
|
|
360
304
|
}
|
|
361
305
|
],
|
|
362
|
-
rows: {
|
|
363
|
-
selectable: {
|
|
364
|
-
multiple: false
|
|
306
|
+
rows: { selectable: { multiple: false
|
|
365
307
|
}
|
|
366
308
|
},
|
|
367
309
|
sorters: [
|
|
368
|
-
{
|
|
369
|
-
name: 'controlNo'
|
|
310
|
+
{ name: 'controlNo'
|
|
370
311
|
}
|
|
371
312
|
]
|
|
372
313
|
};
|
|
373
314
|
this.fetchDepartments();
|
|
374
315
|
}
|
|
375
316
|
async pageUpdated(changes, lifecycle) {
|
|
376
|
-
if (this.active) {
|
|
377
|
-
}
|
|
317
|
+
if (this.active) { }
|
|
378
318
|
}
|
|
379
319
|
async onSelect(e) {
|
|
380
320
|
this.selected = e.detail;
|
|
@@ -383,18 +323,13 @@ let EmployeesByDepartment = class EmployeesByDepartment extends connect(store)(l
|
|
|
383
323
|
}
|
|
384
324
|
async fetchEmployees({ page = 1, limit = 100, sortings = [], filters = [] }) {
|
|
385
325
|
if (this.selected) {
|
|
386
|
-
filters.push({
|
|
387
|
-
name: 'departmentId',
|
|
326
|
+
filters.push({ name: 'departmentId',
|
|
388
327
|
operator: 'eq',
|
|
389
328
|
value: this.selected.id
|
|
390
329
|
});
|
|
391
330
|
}
|
|
392
|
-
const response = await client.query({
|
|
393
|
-
|
|
394
|
-
query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) {
|
|
395
|
-
responses: employees(filters: $filters, pagination: $pagination, sortings: $sortings) {
|
|
396
|
-
items {
|
|
397
|
-
id
|
|
331
|
+
const response = await client.query({ query: gql `
|
|
332
|
+
query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) { responses: employees(filters: $filters, pagination: $pagination, sortings: $sortings) { items { id
|
|
398
333
|
controlNo
|
|
399
334
|
name
|
|
400
335
|
alias
|
|
@@ -404,86 +339,68 @@ let EmployeesByDepartment = class EmployeesByDepartment extends connect(store)(l
|
|
|
404
339
|
active
|
|
405
340
|
email
|
|
406
341
|
phone
|
|
407
|
-
user {
|
|
408
|
-
id
|
|
342
|
+
user { id
|
|
409
343
|
name
|
|
410
|
-
|
|
411
|
-
department {
|
|
412
|
-
id
|
|
344
|
+
}
|
|
345
|
+
department { id
|
|
413
346
|
name
|
|
414
347
|
description
|
|
415
|
-
|
|
416
|
-
supervisor {
|
|
417
|
-
id
|
|
348
|
+
}
|
|
349
|
+
supervisor { id
|
|
418
350
|
name
|
|
419
351
|
controlNo
|
|
420
|
-
|
|
352
|
+
}
|
|
421
353
|
note
|
|
422
354
|
hiredOn
|
|
423
355
|
retiredOn
|
|
424
|
-
contact {
|
|
425
|
-
id
|
|
356
|
+
contact { id
|
|
426
357
|
email
|
|
427
358
|
phone
|
|
428
359
|
address
|
|
429
|
-
|
|
430
|
-
profile {
|
|
431
|
-
left
|
|
360
|
+
}
|
|
361
|
+
profile { left
|
|
432
362
|
top
|
|
433
363
|
zoom
|
|
434
364
|
picture
|
|
435
|
-
|
|
436
|
-
updater {
|
|
437
|
-
id
|
|
365
|
+
}
|
|
366
|
+
updater { id
|
|
438
367
|
name
|
|
439
|
-
|
|
368
|
+
}
|
|
440
369
|
updatedAt
|
|
441
|
-
|
|
370
|
+
}
|
|
442
371
|
total
|
|
443
|
-
|
|
444
|
-
|
|
372
|
+
}
|
|
373
|
+
}
|
|
445
374
|
`,
|
|
446
|
-
variables: {
|
|
447
|
-
filters,
|
|
375
|
+
variables: { filters,
|
|
448
376
|
pagination: { page, limit },
|
|
449
377
|
sortings
|
|
450
378
|
}
|
|
451
379
|
});
|
|
452
380
|
const records = response.data.responses.items;
|
|
453
|
-
return {
|
|
454
|
-
total: response.data.responses.total || 0,
|
|
381
|
+
return { total: response.data.responses.total || 0,
|
|
455
382
|
records
|
|
456
383
|
};
|
|
457
384
|
}
|
|
458
385
|
async fetchDepartments() {
|
|
459
|
-
const response = await client.query({
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
...SubDepartmentFragment
|
|
478
|
-
}
|
|
479
|
-
}
|
|
480
|
-
}
|
|
481
|
-
}
|
|
482
|
-
}
|
|
483
|
-
}
|
|
484
|
-
}
|
|
485
|
-
}
|
|
486
|
-
}
|
|
386
|
+
const response = await client.query({ query: gql `
|
|
387
|
+
query { responses: departmentRoots { ...SubDepartmentFragment
|
|
388
|
+
children { ...SubDepartmentFragment
|
|
389
|
+
children { ...SubDepartmentFragment
|
|
390
|
+
children { ...SubDepartmentFragment
|
|
391
|
+
children { ...SubDepartmentFragment
|
|
392
|
+
children { ...SubDepartmentFragment
|
|
393
|
+
children { ...SubDepartmentFragment
|
|
394
|
+
children { ...SubDepartmentFragment
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
}
|
|
487
404
|
|
|
488
405
|
${departmentFragment}
|
|
489
406
|
`
|