@things-factory/organization 9.2.5 → 10.0.0-beta.10
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 +87 -156
- 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 -233
- 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/tsconfig.tsbuildinfo +1 -1
- package/package.json +12 -12
|
@@ -7,37 +7,33 @@ import { ScopedElementsMixin } from '@open-wc/scoped-elements';
|
|
|
7
7
|
import { client } from '@operato/graphql';
|
|
8
8
|
import { i18next, localize } from '@operato/i18n';
|
|
9
9
|
import { CommonHeaderStyles, ScrollbarStyles } from '@operato/styles';
|
|
10
|
-
import { CustomAlert, PageView
|
|
11
|
-
import { connect } from 'pwa-helpers/connect-mixin';
|
|
10
|
+
import { CustomAlert, PageView } from '@operato/shell';
|
|
12
11
|
import gql from 'graphql-tag';
|
|
13
12
|
import { DepartmentImporter } from './department-importer';
|
|
14
13
|
import { Department } from '../../types/department';
|
|
15
14
|
import { DepartmentView } from '../../component/department-view';
|
|
16
15
|
const SubDepartmentFragment = 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
|
picture
|
|
32
29
|
|
|
33
|
-
updater {
|
|
34
|
-
id
|
|
30
|
+
updater { id
|
|
35
31
|
name
|
|
36
|
-
|
|
32
|
+
}
|
|
37
33
|
updatedAt
|
|
38
|
-
|
|
34
|
+
}
|
|
39
35
|
`;
|
|
40
|
-
let DepartmentTreePage = class DepartmentTreePage extends
|
|
36
|
+
let DepartmentTreePage = class DepartmentTreePage extends localize(i18next)(ScopedElementsMixin(PageView)) {
|
|
41
37
|
constructor() {
|
|
42
38
|
super(...arguments);
|
|
43
39
|
this.modified = false;
|
|
@@ -47,69 +43,57 @@ let DepartmentTreePage = class DepartmentTreePage extends connect(store)(localiz
|
|
|
47
43
|
CommonHeaderStyles,
|
|
48
44
|
ScrollbarStyles,
|
|
49
45
|
css `
|
|
50
|
-
:host {
|
|
51
|
-
display: flex;
|
|
46
|
+
:host { display: flex;
|
|
52
47
|
flex-direction: column;
|
|
53
48
|
|
|
54
49
|
width: 100%;
|
|
55
50
|
overflow: auto;
|
|
56
|
-
|
|
51
|
+
}
|
|
57
52
|
|
|
58
|
-
content {
|
|
59
|
-
flex: 1;
|
|
53
|
+
content { flex: 1;
|
|
60
54
|
display: flex;
|
|
61
55
|
flex-direction: row;
|
|
62
|
-
|
|
56
|
+
}
|
|
63
57
|
|
|
64
|
-
div[editor] {
|
|
65
|
-
width: 300px;
|
|
58
|
+
div[editor] { width: 300px;
|
|
66
59
|
display: flex;
|
|
67
60
|
flex-direction: column;
|
|
68
|
-
|
|
61
|
+
}
|
|
69
62
|
|
|
70
|
-
ox-tree-vertical {
|
|
71
|
-
flex: 1;
|
|
63
|
+
ox-tree-vertical { flex: 1;
|
|
72
64
|
overflow: auto;
|
|
73
|
-
|
|
65
|
+
}
|
|
74
66
|
|
|
75
|
-
department-view {
|
|
76
|
-
flex: 1;
|
|
67
|
+
department-view { flex: 1;
|
|
77
68
|
padding: var(--spacing-medium);
|
|
78
69
|
background-color: var(--md-sys-color-surface-variant);
|
|
79
70
|
overflow: auto;
|
|
80
|
-
|
|
71
|
+
}
|
|
81
72
|
|
|
82
|
-
.footer button[disabled] {
|
|
83
|
-
color: var(--md-sys-color-surface-dim);
|
|
73
|
+
.footer button[disabled] { color: var(--md-sys-color-surface-dim);
|
|
84
74
|
background-color: transparent;
|
|
85
|
-
|
|
75
|
+
}
|
|
86
76
|
`
|
|
87
77
|
]; }
|
|
88
78
|
static get scopedElements() {
|
|
89
|
-
return {
|
|
90
|
-
'department-importer': DepartmentImporter
|
|
79
|
+
return { 'department-importer': DepartmentImporter
|
|
91
80
|
};
|
|
92
81
|
}
|
|
93
82
|
get context() {
|
|
94
|
-
return {
|
|
95
|
-
title: i18next.t('title.department list'),
|
|
83
|
+
return { title: i18next.t('title.department list'),
|
|
96
84
|
help: 'organization/department',
|
|
97
85
|
actions: [
|
|
98
|
-
{
|
|
99
|
-
icon: 'delete',
|
|
86
|
+
{ icon: 'delete',
|
|
100
87
|
title: i18next.t('button.delete'),
|
|
101
88
|
action: this.delete.bind(this),
|
|
102
|
-
emphasis: {
|
|
103
|
-
danger: true
|
|
89
|
+
emphasis: { danger: true
|
|
104
90
|
}
|
|
105
91
|
}
|
|
106
92
|
].filter(Boolean),
|
|
107
|
-
exportable: {
|
|
108
|
-
name: i18next.t('title.department list'),
|
|
93
|
+
exportable: { name: i18next.t('title.department list'),
|
|
109
94
|
data: this.exportHandler.bind(this)
|
|
110
95
|
},
|
|
111
|
-
importable: {
|
|
112
|
-
handler: this.importHandler.bind(this)
|
|
96
|
+
importable: { handler: this.importHandler.bind(this)
|
|
113
97
|
},
|
|
114
98
|
toolbar: false
|
|
115
99
|
};
|
|
@@ -169,8 +153,7 @@ let DepartmentTreePage = class DepartmentTreePage extends connect(store)(localiz
|
|
|
169
153
|
async create() {
|
|
170
154
|
const { id: parentId } = this.department || {};
|
|
171
155
|
const { controlNo, name, description, picture, active, manager } = this.department || {};
|
|
172
|
-
var department = {
|
|
173
|
-
controlNo,
|
|
156
|
+
var department = { controlNo,
|
|
174
157
|
name,
|
|
175
158
|
description,
|
|
176
159
|
manager,
|
|
@@ -182,21 +165,16 @@ let DepartmentTreePage = class DepartmentTreePage extends connect(store)(localiz
|
|
|
182
165
|
if (parentId) {
|
|
183
166
|
department.parent = { id: parentId };
|
|
184
167
|
}
|
|
185
|
-
const response = await client.mutate({
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
...SubDepartmentFragment
|
|
190
|
-
}
|
|
191
|
-
}
|
|
168
|
+
const response = await client.mutate({ mutation: gql `
|
|
169
|
+
mutation ($department: NewDepartment!) { createDepartment(department: $department) { ...SubDepartmentFragment
|
|
170
|
+
}
|
|
171
|
+
}
|
|
192
172
|
|
|
193
173
|
${SubDepartmentFragment}
|
|
194
174
|
`,
|
|
195
|
-
variables: {
|
|
196
|
-
department
|
|
175
|
+
variables: { department
|
|
197
176
|
},
|
|
198
|
-
context: {
|
|
199
|
-
hasUpload: true
|
|
177
|
+
context: { hasUpload: true
|
|
200
178
|
}
|
|
201
179
|
});
|
|
202
180
|
this.selected = response.data.createDepartment;
|
|
@@ -206,16 +184,14 @@ let DepartmentTreePage = class DepartmentTreePage extends connect(store)(localiz
|
|
|
206
184
|
async save() {
|
|
207
185
|
const { id, controlNo, name, description, picture, active, manager } = this.department || {};
|
|
208
186
|
if (!id) {
|
|
209
|
-
await CustomAlert({
|
|
210
|
-
type: 'warning',
|
|
187
|
+
await CustomAlert({ type: 'warning',
|
|
211
188
|
title: 'department not selected',
|
|
212
189
|
text: 'Please select department first.',
|
|
213
190
|
confirmButton: { text: i18next.t('button.confirm') }
|
|
214
191
|
});
|
|
215
192
|
return;
|
|
216
193
|
}
|
|
217
|
-
var patch = {
|
|
218
|
-
controlNo,
|
|
194
|
+
var patch = { controlNo,
|
|
219
195
|
name,
|
|
220
196
|
description,
|
|
221
197
|
active,
|
|
@@ -224,22 +200,17 @@ let DepartmentTreePage = class DepartmentTreePage extends connect(store)(localiz
|
|
|
224
200
|
if (picture instanceof File) {
|
|
225
201
|
patch.picture = picture;
|
|
226
202
|
}
|
|
227
|
-
const response = await client.mutate({
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
...SubDepartmentFragment
|
|
232
|
-
}
|
|
233
|
-
}
|
|
203
|
+
const response = await client.mutate({ mutation: gql `
|
|
204
|
+
mutation ($id: String!, $patch: DepartmentPatch!) { updateDepartment(id: $id, patch: $patch) { ...SubDepartmentFragment
|
|
205
|
+
}
|
|
206
|
+
}
|
|
234
207
|
|
|
235
208
|
${SubDepartmentFragment}
|
|
236
209
|
`,
|
|
237
|
-
variables: {
|
|
238
|
-
id,
|
|
210
|
+
variables: { id,
|
|
239
211
|
patch
|
|
240
212
|
},
|
|
241
|
-
context: {
|
|
242
|
-
hasUpload: true
|
|
213
|
+
context: { hasUpload: true
|
|
243
214
|
}
|
|
244
215
|
});
|
|
245
216
|
this.selected = response.data.updateDepartment;
|
|
@@ -247,8 +218,7 @@ let DepartmentTreePage = class DepartmentTreePage extends connect(store)(localiz
|
|
|
247
218
|
}
|
|
248
219
|
async delete() {
|
|
249
220
|
if (!this.selected) {
|
|
250
|
-
await CustomAlert({
|
|
251
|
-
type: 'warning',
|
|
221
|
+
await CustomAlert({ type: 'warning',
|
|
252
222
|
title: 'department not selected',
|
|
253
223
|
text: 'Please select department first.',
|
|
254
224
|
confirmButton: { text: i18next.t('button.confirm') }
|
|
@@ -257,8 +227,7 @@ let DepartmentTreePage = class DepartmentTreePage extends connect(store)(localiz
|
|
|
257
227
|
}
|
|
258
228
|
const children = this.selected?.children;
|
|
259
229
|
if (children && children.length > 0) {
|
|
260
|
-
await CustomAlert({
|
|
261
|
-
type: 'warning',
|
|
230
|
+
await CustomAlert({ type: 'warning',
|
|
262
231
|
title: 'Departments with subordinates cannot be deleted.',
|
|
263
232
|
text: 'Department having children cannot be deleted.',
|
|
264
233
|
confirmButton: { text: i18next.t('button.confirm') }
|
|
@@ -267,14 +236,11 @@ let DepartmentTreePage = class DepartmentTreePage extends connect(store)(localiz
|
|
|
267
236
|
}
|
|
268
237
|
if (confirm(i18next.t('text.sure_to_x', { x: i18next.t('text.delete') }))) {
|
|
269
238
|
const { id } = this.selected || {};
|
|
270
|
-
const response = await client.mutate({
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
deleteDepartment(id: $id)
|
|
274
|
-
}
|
|
239
|
+
const response = await client.mutate({ mutation: gql `
|
|
240
|
+
mutation ($id: String!) { deleteDepartment(id: $id)
|
|
241
|
+
}
|
|
275
242
|
`,
|
|
276
|
-
variables: {
|
|
277
|
-
id
|
|
243
|
+
variables: { id
|
|
278
244
|
}
|
|
279
245
|
});
|
|
280
246
|
this.selected = {};
|
|
@@ -286,42 +252,30 @@ let DepartmentTreePage = class DepartmentTreePage extends connect(store)(localiz
|
|
|
286
252
|
this.fetch();
|
|
287
253
|
}
|
|
288
254
|
async pageUpdated(changes, lifecycle) {
|
|
289
|
-
if (this.active) {
|
|
290
|
-
// do something here when this page just became as active
|
|
255
|
+
if (this.active) { // do something here when this page just became as active
|
|
291
256
|
}
|
|
292
257
|
}
|
|
293
258
|
async fetch() {
|
|
294
|
-
const response = await client.query({
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
...SubDepartmentFragment
|
|
315
|
-
}
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
}
|
|
259
|
+
const response = await client.query({ query: gql `
|
|
260
|
+
query { responses: departmentRoots { total
|
|
261
|
+
items { ...SubDepartmentFragment
|
|
262
|
+
children { ...SubDepartmentFragment
|
|
263
|
+
children { ...SubDepartmentFragment
|
|
264
|
+
children { ...SubDepartmentFragment
|
|
265
|
+
children { ...SubDepartmentFragment
|
|
266
|
+
children { ...SubDepartmentFragment
|
|
267
|
+
children { ...SubDepartmentFragment
|
|
268
|
+
children { ...SubDepartmentFragment
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
325
279
|
|
|
326
280
|
${SubDepartmentFragment}
|
|
327
281
|
`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"department-tree-page.js","sourceRoot":"","sources":["../../../client/pages/department/department-tree-page.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/data-tree'\nimport '@operato/context/ox-context-page-toolbar.js'\n\nimport { css, html, PropertyValues } 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 { CommonHeaderStyles, ScrollbarStyles } from '@operato/styles'\nimport { CustomAlert, PageView, store } from '@operato/shell'\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\nimport { DepartmentView } from '../../component/department-view'\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-tree-page')\nexport class DepartmentTreePage extends connect(store)(localize(i18next)(ScopedElementsMixin(PageView))) {\n static styles = [\n CommonHeaderStyles,\n ScrollbarStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n\n width: 100%;\n overflow: auto;\n }\n\n content {\n flex: 1;\n display: flex;\n flex-direction: row;\n }\n\n div[editor] {\n width: 300px;\n display: flex;\n flex-direction: column;\n }\n\n ox-tree-vertical {\n flex: 1;\n overflow: auto;\n }\n\n department-view {\n flex: 1;\n padding: var(--spacing-medium);\n background-color: var(--md-sys-color-surface-variant);\n overflow: auto;\n }\n\n .footer button[disabled] {\n color: var(--md-sys-color-surface-dim);\n background-color: transparent;\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 @state() department?: Department\n @state() modified: boolean = false\n @state() appendable: boolean = false\n\n @query('department-view') departmentView!: DepartmentView\n\n get context() {\n return {\n title: i18next.t('title.department list'),\n help: 'organization/department',\n actions: [\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 exportable: {\n name: i18next.t('title.department list'),\n data: this.exportHandler.bind(this)\n },\n importable: {\n handler: this.importHandler.bind(this)\n },\n toolbar: false\n }\n }\n\n render() {\n return html`\n <div class=\"header\">\n <ox-context-page-toolbar class=\"actions\" .context=${this.context}></ox-context-page-toolbar>\n </div>\n\n <content>\n <ox-tree-vertical\n .data=${this.root}\n .selected=${this.selected}\n @select=${this.onSelect.bind(this)}\n id-property=\"controlNo\"\n label-property=\"name\"\n description-property=\"description\"\n ></ox-tree-vertical>\n\n <div editor>\n <department-view\n .department=${this.department}\n @property-change=${(e: CustomEvent) => {\n const { controlNo, name } = e.detail || {}\n\n this.modified = true\n this.appendable = controlNo && controlNo !== this.selected?.controlNo && name !== this.selected?.name\n }}\n ></department-view>\n <div class=\"footer\">\n <button @click=${this.reset.bind(this)}><md-icon>restart_alt</md-icon>${i18next.t('button.reset')}</button>\n <div filler></div>\n <button @click=${this.create.bind(this)} ?disabled=${!this.appendable}>\n <md-icon>add</md-icon>${i18next.t('button.add')}\n </button>\n <button @click=${this.save.bind(this)} ?disabled=${!this.modified} done>\n <md-icon>save</md-icon>${i18next.t('button.save')}\n </button>\n </div>\n </div>\n </content>\n `\n }\n\n updated(changes: PropertyValues<this>) {\n if (changes.has('selected')) {\n this.modified = false\n this.department = { ...this.selected }\n }\n }\n\n onSelect(e: CustomEvent) {\n this.selected = e.detail as Department\n this.updateContext()\n }\n\n reset() {\n this.departmentView.department = {}\n }\n\n async create() {\n const { id: parentId } = this.department || {}\n const { controlNo, name, description, picture, active, manager } = this.department || {}\n\n var department = {\n controlNo,\n name,\n description,\n manager,\n active\n } as any\n\n if ((picture as any) instanceof File) {\n department.picture = picture\n }\n\n if (parentId) {\n department.parent = { id: parentId }\n }\n\n const response = await client.mutate({\n mutation: gql`\n mutation ($department: NewDepartment!) {\n createDepartment(department: $department) {\n ...SubDepartmentFragment\n }\n }\n\n ${SubDepartmentFragment}\n `,\n variables: {\n department\n },\n context: {\n hasUpload: true\n }\n })\n\n this.selected = response.data.createDepartment\n this.updateContext()\n\n await this.fetch()\n }\n\n async save() {\n const { id, controlNo, name, description, picture, active, manager } = this.department || {}\n\n if (!id) {\n await CustomAlert({\n type: 'warning',\n title: 'department not selected',\n text: 'Please select department first.',\n confirmButton: { text: i18next.t('button.confirm') }\n })\n\n return\n }\n\n var patch = {\n controlNo,\n name,\n description,\n active,\n manager\n } as any\n\n if ((picture as any) instanceof File) {\n patch.picture = picture\n }\n\n const response = await client.mutate({\n mutation: gql`\n mutation ($id: String!, $patch: DepartmentPatch!) {\n updateDepartment(id: $id, patch: $patch) {\n ...SubDepartmentFragment\n }\n }\n\n ${SubDepartmentFragment}\n `,\n variables: {\n id,\n patch\n },\n context: {\n hasUpload: true\n }\n })\n\n this.selected = response.data.updateDepartment\n\n this.fetch()\n }\n\n async delete() {\n if (!this.selected) {\n await CustomAlert({\n type: 'warning',\n title: 'department not selected',\n text: 'Please select department first.',\n confirmButton: { text: i18next.t('button.confirm') }\n })\n\n return\n }\n\n const children = this.selected?.children\n if (children && children.length > 0) {\n await CustomAlert({\n type: 'warning',\n title: 'Departments with subordinates cannot be deleted.',\n text: 'Department having children cannot be deleted.',\n confirmButton: { text: i18next.t('button.confirm') }\n })\n\n return\n }\n\n if (confirm(i18next.t('text.sure_to_x', { x: i18next.t('text.delete') }))) {\n const { id } = this.selected || {}\n\n const response = await client.mutate({\n mutation: gql`\n mutation ($id: String!) {\n deleteDepartment(id: $id)\n }\n `,\n variables: {\n id\n }\n })\n\n this.selected = {}\n this.updateContext()\n\n await this.fetch()\n }\n }\n\n async pageInitialized(lifecycle: any) {\n this.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 fetch() {\n const response = await client.query({\n query: gql`\n query {\n responses: departmentRoots {\n total\n items {\n ...SubDepartmentFragment\n children {\n ...SubDepartmentFragment\n children {\n ...SubDepartmentFragment\n children {\n ...SubDepartmentFragment\n children {\n ...SubDepartmentFragment\n children {\n ...SubDepartmentFragment\n children {\n ...SubDepartmentFragment\n children {\n ...SubDepartmentFragment\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n\n ${SubDepartmentFragment}\n `\n })\n const { items: records, total } = response.data.responses\n\n this.root = records[0]\n }\n\n async exportHandler() {}\n\n async importHandler(records) {}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"department-tree-page.js","sourceRoot":"","sources":["../../../client/pages/department/department-tree-page.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/data-tree'\nimport '@operato/context/ox-context-page-toolbar.js'\n\nimport { css, html, PropertyValues } 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 { CommonHeaderStyles, ScrollbarStyles } from '@operato/styles'\nimport { CustomAlert, PageView } from '@operato/shell'\n\nimport gql from 'graphql-tag'\n\nimport { DepartmentImporter } from './department-importer'\nimport { Department } from '../../types/department'\n\nimport { DepartmentView } from '../../component/department-view'\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-tree-page')\nexport class DepartmentTreePage extends localize(i18next)(ScopedElementsMixin(PageView)) { static styles = [\n CommonHeaderStyles,\n ScrollbarStyles,\n css`\n :host { display: flex;\n flex-direction: column;\n\n width: 100%;\n overflow: auto;\n }\n\n content { flex: 1;\n display: flex;\n flex-direction: row;\n }\n\n div[editor] { width: 300px;\n display: flex;\n flex-direction: column;\n }\n\n ox-tree-vertical { flex: 1;\n overflow: auto;\n }\n\n department-view { flex: 1;\n padding: var(--spacing-medium);\n background-color: var(--md-sys-color-surface-variant);\n overflow: auto;\n }\n\n .footer button[disabled] { color: var(--md-sys-color-surface-dim);\n background-color: transparent;\n }\n `\n ]\n\n static get scopedElements() { return { 'department-importer': DepartmentImporter\n }\n }\n\n @state() root?: Department\n @state() selected?: Department\n @state() department?: Department\n @state() modified: boolean = false\n @state() appendable: boolean = false\n\n @query('department-view') departmentView!: DepartmentView\n\n get context() { return { title: i18next.t('title.department list'),\n help: 'organization/department',\n actions: [\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 exportable: { name: i18next.t('title.department list'),\n data: this.exportHandler.bind(this)\n },\n importable: { handler: this.importHandler.bind(this)\n },\n toolbar: false\n }\n }\n\n render() { return html`\n <div class=\"header\">\n <ox-context-page-toolbar class=\"actions\" .context=${this.context}></ox-context-page-toolbar>\n </div>\n\n <content>\n <ox-tree-vertical\n .data=${this.root}\n .selected=${this.selected}\n @select=${this.onSelect.bind(this)}\n id-property=\"controlNo\"\n label-property=\"name\"\n description-property=\"description\"\n ></ox-tree-vertical>\n\n <div editor>\n <department-view\n .department=${this.department}\n @property-change=${(e: CustomEvent) => { const { controlNo, name } = e.detail || {}\n\n this.modified = true\n this.appendable = controlNo && controlNo !== this.selected?.controlNo && name !== this.selected?.name\n }}\n ></department-view>\n <div class=\"footer\">\n <button @click=${this.reset.bind(this)}><md-icon>restart_alt</md-icon>${i18next.t('button.reset')}</button>\n <div filler></div>\n <button @click=${this.create.bind(this)} ?disabled=${!this.appendable}>\n <md-icon>add</md-icon>${i18next.t('button.add')}\n </button>\n <button @click=${this.save.bind(this)} ?disabled=${!this.modified} done>\n <md-icon>save</md-icon>${i18next.t('button.save')}\n </button>\n </div>\n </div>\n </content>\n `\n }\n\n updated(changes: PropertyValues<this>) { if (changes.has('selected')) { this.modified = false\n this.department = { ...this.selected }\n }\n }\n\n onSelect(e: CustomEvent) { this.selected = e.detail as Department\n this.updateContext()\n }\n\n reset() { this.departmentView.department = {}\n }\n\n async create() { const { id: parentId } = this.department || {}\n const { controlNo, name, description, picture, active, manager } = this.department || {}\n\n var department = { controlNo,\n name,\n description,\n manager,\n active\n } as any\n\n if ((picture as any) instanceof File) { department.picture = picture\n }\n\n if (parentId) { department.parent = { id: parentId }\n }\n\n const response = await client.mutate({ mutation: gql`\n mutation ($department: NewDepartment!) { createDepartment(department: $department) { ...SubDepartmentFragment\n }\n }\n\n ${SubDepartmentFragment}\n `,\n variables: { department\n },\n context: { hasUpload: true\n }\n })\n\n this.selected = response.data.createDepartment\n this.updateContext()\n\n await this.fetch()\n }\n\n async save() { const { id, controlNo, name, description, picture, active, manager } = this.department || {}\n\n if (!id) { await CustomAlert({ type: 'warning',\n title: 'department not selected',\n text: 'Please select department first.',\n confirmButton: { text: i18next.t('button.confirm') }\n })\n\n return\n }\n\n var patch = { controlNo,\n name,\n description,\n active,\n manager\n } as any\n\n if ((picture as any) instanceof File) { patch.picture = picture\n }\n\n const response = await client.mutate({ mutation: gql`\n mutation ($id: String!, $patch: DepartmentPatch!) { updateDepartment(id: $id, patch: $patch) { ...SubDepartmentFragment\n }\n }\n\n ${SubDepartmentFragment}\n `,\n variables: { id,\n patch\n },\n context: { hasUpload: true\n }\n })\n\n this.selected = response.data.updateDepartment\n\n this.fetch()\n }\n\n async delete() { if (!this.selected) { await CustomAlert({ type: 'warning',\n title: 'department not selected',\n text: 'Please select department first.',\n confirmButton: { text: i18next.t('button.confirm') }\n })\n\n return\n }\n\n const children = this.selected?.children\n if (children && children.length > 0) { await CustomAlert({ type: 'warning',\n title: 'Departments with subordinates cannot be deleted.',\n text: 'Department having children cannot be deleted.',\n confirmButton: { text: i18next.t('button.confirm') }\n })\n\n return\n }\n\n if (confirm(i18next.t('text.sure_to_x', { x: i18next.t('text.delete') }))) { const { id } = this.selected || {}\n\n const response = await client.mutate({ mutation: gql`\n mutation ($id: String!) { deleteDepartment(id: $id)\n }\n `,\n variables: { id\n }\n })\n\n this.selected = {}\n this.updateContext()\n\n await this.fetch()\n }\n }\n\n async pageInitialized(lifecycle: any) { this.fetch()\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 fetch() { const response = await client.query({ query: gql`\n query { responses: departmentRoots { total\n items { ...SubDepartmentFragment\n children { ...SubDepartmentFragment\n children { ...SubDepartmentFragment\n children { ...SubDepartmentFragment\n children { ...SubDepartmentFragment\n children { ...SubDepartmentFragment\n children { ...SubDepartmentFragment\n children { ...SubDepartmentFragment\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n\n ${SubDepartmentFragment}\n `\n })\n const { items: records, total } = response.data.responses\n\n this.root = records[0]\n }\n\n async exportHandler() {}\n\n async importHandler(records) {}\n}\n"]}
|
|
@@ -6,12 +6,6 @@ import { FetchOption, GristRecord } from '@operato/data-grist';
|
|
|
6
6
|
import { PageView } from '@operato/shell';
|
|
7
7
|
import { EmployeeImporter } from './employee-importer';
|
|
8
8
|
declare const EmployeeListPage_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[]) => {
|
|
15
9
|
__preferenceProviders: {
|
|
16
10
|
[element: string]: import("@operato/p13n").PagePreferenceProvider;
|
|
17
11
|
};
|