@things-factory/organization 7.0.63 → 7.0.64
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/client/pages/department/department-tree-page.ts +38 -15
- package/client/pages/employee/employee-list-page.ts +15 -32
- package/client/types/department.ts +2 -0
- package/dist-client/pages/department/department-tree-page.d.ts +5 -0
- package/dist-client/pages/department/department-tree-page.js +48 -12
- package/dist-client/pages/department/department-tree-page.js.map +1 -1
- package/dist-client/pages/employee/employee-list-page.js +15 -32
- package/dist-client/pages/employee/employee-list-page.js.map +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-client/types/department.d.ts +1 -0
- package/dist-client/types/department.js.map +1 -1
- package/package.json +6 -6
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import '@operato/data-tree'
|
|
2
2
|
import '@operato/context/ox-context-page-toolbar.js'
|
|
3
3
|
|
|
4
|
-
import {
|
|
5
|
-
import { CustomAlert, PageView, store } from '@operato/shell'
|
|
6
|
-
import { css, html } from 'lit'
|
|
4
|
+
import { css, html, PropertyValues } from 'lit'
|
|
7
5
|
import { customElement, property, query, state } from 'lit/decorators.js'
|
|
8
6
|
import { ScopedElementsMixin } from '@open-wc/scoped-elements'
|
|
9
7
|
import { client } from '@operato/graphql'
|
|
10
8
|
import { i18next, localize } from '@operato/i18n'
|
|
9
|
+
import { CommonHeaderStyles, ScrollbarStyles } from '@operato/styles'
|
|
10
|
+
import { CustomAlert, PageView, store } from '@operato/shell'
|
|
11
11
|
|
|
12
12
|
import { connect } from 'pwa-helpers/connect-mixin'
|
|
13
13
|
import gql from 'graphql-tag'
|
|
@@ -63,7 +63,7 @@ export class DepartmentTreePage extends connect(store)(localize(i18next)(ScopedE
|
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
div[editor] {
|
|
66
|
-
width:
|
|
66
|
+
width: 300px;
|
|
67
67
|
display: flex;
|
|
68
68
|
flex-direction: column;
|
|
69
69
|
}
|
|
@@ -79,6 +79,11 @@ export class DepartmentTreePage extends connect(store)(localize(i18next)(ScopedE
|
|
|
79
79
|
background-color: var(--md-sys-color-surface-variant);
|
|
80
80
|
overflow: auto;
|
|
81
81
|
}
|
|
82
|
+
|
|
83
|
+
.footer button[disabled] {
|
|
84
|
+
color: var(--md-sys-color-surface-dim);
|
|
85
|
+
background-color: transparent;
|
|
86
|
+
}
|
|
82
87
|
`
|
|
83
88
|
]
|
|
84
89
|
|
|
@@ -90,6 +95,9 @@ export class DepartmentTreePage extends connect(store)(localize(i18next)(ScopedE
|
|
|
90
95
|
|
|
91
96
|
@state() root?: Department
|
|
92
97
|
@state() selected?: Department
|
|
98
|
+
@state() department?: Department
|
|
99
|
+
@state() modified: boolean = false
|
|
100
|
+
@state() appendable: boolean = false
|
|
93
101
|
|
|
94
102
|
@query('department-view') departmentView!: DepartmentView
|
|
95
103
|
|
|
@@ -121,8 +129,6 @@ export class DepartmentTreePage extends connect(store)(localize(i18next)(ScopedE
|
|
|
121
129
|
render() {
|
|
122
130
|
return html`
|
|
123
131
|
<div class="header">
|
|
124
|
-
<div class="title">${i18next.t('title.department list')}</div>
|
|
125
|
-
|
|
126
132
|
<ox-context-page-toolbar class="actions" .context=${this.context}></ox-context-page-toolbar>
|
|
127
133
|
</div>
|
|
128
134
|
|
|
@@ -137,12 +143,22 @@ export class DepartmentTreePage extends connect(store)(localize(i18next)(ScopedE
|
|
|
137
143
|
></ox-tree-vertical>
|
|
138
144
|
|
|
139
145
|
<div editor>
|
|
140
|
-
<department-view
|
|
146
|
+
<department-view
|
|
147
|
+
.department=${this.department}
|
|
148
|
+
@property-change=${(e: CustomEvent) => {
|
|
149
|
+
const { controlNo, name } = e.detail || {}
|
|
150
|
+
|
|
151
|
+
this.modified = true
|
|
152
|
+
this.appendable = controlNo && controlNo !== this.selected?.controlNo && name !== this.selected?.name
|
|
153
|
+
}}
|
|
154
|
+
></department-view>
|
|
141
155
|
<div class="footer">
|
|
142
|
-
<div filler></div>
|
|
143
156
|
<button @click=${this.reset.bind(this)}><md-icon>restart_alt</md-icon>${i18next.t('button.reset')}</button>
|
|
144
|
-
<
|
|
145
|
-
<button @click=${this.
|
|
157
|
+
<div filler></div>
|
|
158
|
+
<button @click=${this.create.bind(this)} ?disabled=${!this.appendable}>
|
|
159
|
+
<md-icon>add</md-icon>${i18next.t('button.add')}
|
|
160
|
+
</button>
|
|
161
|
+
<button @click=${this.save.bind(this)} ?disabled=${!this.modified} done>
|
|
146
162
|
<md-icon>save</md-icon>${i18next.t('button.save')}
|
|
147
163
|
</button>
|
|
148
164
|
</div>
|
|
@@ -151,6 +167,13 @@ export class DepartmentTreePage extends connect(store)(localize(i18next)(ScopedE
|
|
|
151
167
|
`
|
|
152
168
|
}
|
|
153
169
|
|
|
170
|
+
updated(changes: PropertyValues<this>) {
|
|
171
|
+
if (changes.has('selected')) {
|
|
172
|
+
this.modified = false
|
|
173
|
+
this.department = { ...this.selected }
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
154
177
|
onSelect(e: CustomEvent) {
|
|
155
178
|
this.selected = e.detail as Department
|
|
156
179
|
this.updateContext()
|
|
@@ -161,8 +184,8 @@ export class DepartmentTreePage extends connect(store)(localize(i18next)(ScopedE
|
|
|
161
184
|
}
|
|
162
185
|
|
|
163
186
|
async create() {
|
|
164
|
-
const { id: parentId } = this.
|
|
165
|
-
const { controlNo, name, description, picture, active, manager } = this.
|
|
187
|
+
const { id: parentId } = this.department || {}
|
|
188
|
+
const { controlNo, name, description, picture, active, manager } = this.department || {}
|
|
166
189
|
|
|
167
190
|
var department = {
|
|
168
191
|
controlNo,
|
|
@@ -172,7 +195,7 @@ export class DepartmentTreePage extends connect(store)(localize(i18next)(ScopedE
|
|
|
172
195
|
active
|
|
173
196
|
} as any
|
|
174
197
|
|
|
175
|
-
if (picture instanceof File) {
|
|
198
|
+
if ((picture as any) instanceof File) {
|
|
176
199
|
department.picture = picture
|
|
177
200
|
}
|
|
178
201
|
|
|
@@ -205,7 +228,7 @@ export class DepartmentTreePage extends connect(store)(localize(i18next)(ScopedE
|
|
|
205
228
|
}
|
|
206
229
|
|
|
207
230
|
async save() {
|
|
208
|
-
const { id, controlNo, name, description, picture, active, manager } = this.
|
|
231
|
+
const { id, controlNo, name, description, picture, active, manager } = this.department || {}
|
|
209
232
|
|
|
210
233
|
if (!id) {
|
|
211
234
|
await CustomAlert({
|
|
@@ -226,7 +249,7 @@ export class DepartmentTreePage extends connect(store)(localize(i18next)(ScopedE
|
|
|
226
249
|
manager
|
|
227
250
|
} as any
|
|
228
251
|
|
|
229
|
-
if (picture instanceof File) {
|
|
252
|
+
if ((picture as any) instanceof File) {
|
|
230
253
|
patch.picture = picture
|
|
231
254
|
}
|
|
232
255
|
|
|
@@ -134,25 +134,6 @@ export class EmployeeListPage extends connect(store)(p13n(localize(i18next)(Scop
|
|
|
134
134
|
columns: [
|
|
135
135
|
{ type: 'gutter', gutterName: 'sequence', fixed: true },
|
|
136
136
|
{ type: 'gutter', gutterName: 'row-selector', multiple: true, fixed: true },
|
|
137
|
-
// {
|
|
138
|
-
// type: 'gutter',
|
|
139
|
-
// gutterName: 'button',
|
|
140
|
-
// fixed: true,
|
|
141
|
-
// forList: true,
|
|
142
|
-
// icon: 'contact_page',
|
|
143
|
-
// iconOnly: false,
|
|
144
|
-
// title: i18next.t('button.edit-contact'),
|
|
145
|
-
// width: 110,
|
|
146
|
-
// handlers: {
|
|
147
|
-
// click: async (columns, data, column, record, rowIndex) => {
|
|
148
|
-
// if (record && record.contact) {
|
|
149
|
-
// this.openContactPopup(record)
|
|
150
|
-
// } else {
|
|
151
|
-
// this.openContactSelector(record)
|
|
152
|
-
// }
|
|
153
|
-
// }
|
|
154
|
-
// }
|
|
155
|
-
// },
|
|
156
137
|
{
|
|
157
138
|
type: 'image',
|
|
158
139
|
name: 'profile',
|
|
@@ -212,7 +193,7 @@ export class EmployeeListPage extends connect(store)(p13n(localize(i18next)(Scop
|
|
|
212
193
|
editable: true
|
|
213
194
|
},
|
|
214
195
|
filter: 'search',
|
|
215
|
-
sortable:
|
|
196
|
+
sortable: false,
|
|
216
197
|
width: 110
|
|
217
198
|
},
|
|
218
199
|
{
|
|
@@ -234,8 +215,8 @@ export class EmployeeListPage extends connect(store)(p13n(localize(i18next)(Scop
|
|
|
234
215
|
list: { fields: ['name', 'email'] }
|
|
235
216
|
}
|
|
236
217
|
},
|
|
237
|
-
sortable:
|
|
238
|
-
filter:
|
|
218
|
+
sortable: false,
|
|
219
|
+
filter: 'search',
|
|
239
220
|
width: 100
|
|
240
221
|
},
|
|
241
222
|
{
|
|
@@ -243,8 +224,8 @@ export class EmployeeListPage extends connect(store)(p13n(localize(i18next)(Scop
|
|
|
243
224
|
name: 'type',
|
|
244
225
|
header: i18next.t('field.type'),
|
|
245
226
|
width: 115,
|
|
246
|
-
sortable:
|
|
247
|
-
filter:
|
|
227
|
+
sortable: true,
|
|
228
|
+
filter: true,
|
|
248
229
|
record: {
|
|
249
230
|
editable: true,
|
|
250
231
|
codeName: 'EMPLOYEE_TYPE',
|
|
@@ -258,8 +239,8 @@ export class EmployeeListPage extends connect(store)(p13n(localize(i18next)(Scop
|
|
|
258
239
|
record: {
|
|
259
240
|
editable: true
|
|
260
241
|
},
|
|
261
|
-
sortable:
|
|
262
|
-
filter:
|
|
242
|
+
sortable: false,
|
|
243
|
+
filter: true,
|
|
263
244
|
width: 130
|
|
264
245
|
},
|
|
265
246
|
{
|
|
@@ -350,7 +331,7 @@ export class EmployeeListPage extends connect(store)(p13n(localize(i18next)(Scop
|
|
|
350
331
|
descriptionField: 'controlNo'
|
|
351
332
|
}
|
|
352
333
|
},
|
|
353
|
-
sortable:
|
|
334
|
+
sortable: false,
|
|
354
335
|
width: 120
|
|
355
336
|
},
|
|
356
337
|
{
|
|
@@ -364,7 +345,7 @@ export class EmployeeListPage extends connect(store)(p13n(localize(i18next)(Scop
|
|
|
364
345
|
return record.contact ? record.contact.email : ''
|
|
365
346
|
}
|
|
366
347
|
},
|
|
367
|
-
sortable:
|
|
348
|
+
sortable: false
|
|
368
349
|
},
|
|
369
350
|
{
|
|
370
351
|
type: 'string',
|
|
@@ -377,7 +358,7 @@ export class EmployeeListPage extends connect(store)(p13n(localize(i18next)(Scop
|
|
|
377
358
|
return record.contact ? record.contact.phone : ''
|
|
378
359
|
}
|
|
379
360
|
},
|
|
380
|
-
sortable:
|
|
361
|
+
sortable: false
|
|
381
362
|
},
|
|
382
363
|
{
|
|
383
364
|
type: 'code',
|
|
@@ -388,7 +369,8 @@ export class EmployeeListPage extends connect(store)(p13n(localize(i18next)(Scop
|
|
|
388
369
|
editable: true,
|
|
389
370
|
codeName: 'JOB_RESPONSIBILITY',
|
|
390
371
|
selectDispOpt: 'name'
|
|
391
|
-
}
|
|
372
|
+
},
|
|
373
|
+
filter: true
|
|
392
374
|
},
|
|
393
375
|
{
|
|
394
376
|
type: 'code',
|
|
@@ -399,7 +381,8 @@ export class EmployeeListPage extends connect(store)(p13n(localize(i18next)(Scop
|
|
|
399
381
|
editable: true,
|
|
400
382
|
codeName: 'JOB_POSITION',
|
|
401
383
|
selectDispOpt: 'name'
|
|
402
|
-
}
|
|
384
|
+
},
|
|
385
|
+
filter: true
|
|
403
386
|
},
|
|
404
387
|
{
|
|
405
388
|
type: 'date',
|
|
@@ -431,7 +414,7 @@ export class EmployeeListPage extends connect(store)(p13n(localize(i18next)(Scop
|
|
|
431
414
|
editable: true
|
|
432
415
|
},
|
|
433
416
|
filter: true,
|
|
434
|
-
sortable:
|
|
417
|
+
sortable: false
|
|
435
418
|
},
|
|
436
419
|
{
|
|
437
420
|
type: 'string',
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import '@operato/data-tree';
|
|
2
2
|
import '@operato/context/ox-context-page-toolbar.js';
|
|
3
|
+
import { PropertyValues } from 'lit';
|
|
3
4
|
import { PageView } from '@operato/shell';
|
|
4
5
|
import { DepartmentImporter } from './department-importer';
|
|
5
6
|
import { Department } from '../../types/department';
|
|
@@ -18,6 +19,9 @@ export declare class DepartmentTreePage extends DepartmentTreePage_base {
|
|
|
18
19
|
};
|
|
19
20
|
root?: Department;
|
|
20
21
|
selected?: Department;
|
|
22
|
+
department?: Department;
|
|
23
|
+
modified: boolean;
|
|
24
|
+
appendable: boolean;
|
|
21
25
|
departmentView: DepartmentView;
|
|
22
26
|
get context(): {
|
|
23
27
|
title: string;
|
|
@@ -40,6 +44,7 @@ export declare class DepartmentTreePage extends DepartmentTreePage_base {
|
|
|
40
44
|
toolbar: boolean;
|
|
41
45
|
};
|
|
42
46
|
render(): import("lit-html").TemplateResult<1>;
|
|
47
|
+
updated(changes: PropertyValues<this>): void;
|
|
43
48
|
onSelect(e: CustomEvent): void;
|
|
44
49
|
reset(): void;
|
|
45
50
|
create(): Promise<void>;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { __decorate, __metadata } from "tslib";
|
|
2
2
|
import '@operato/data-tree';
|
|
3
3
|
import '@operato/context/ox-context-page-toolbar.js';
|
|
4
|
-
import { CommonHeaderStyles, ScrollbarStyles } from '@operato/styles';
|
|
5
|
-
import { CustomAlert, PageView, store } from '@operato/shell';
|
|
6
4
|
import { css, html } from 'lit';
|
|
7
5
|
import { customElement, query, state } from 'lit/decorators.js';
|
|
8
6
|
import { ScopedElementsMixin } from '@open-wc/scoped-elements';
|
|
9
7
|
import { client } from '@operato/graphql';
|
|
10
8
|
import { i18next, localize } from '@operato/i18n';
|
|
9
|
+
import { CommonHeaderStyles, ScrollbarStyles } from '@operato/styles';
|
|
10
|
+
import { CustomAlert, PageView, store } from '@operato/shell';
|
|
11
11
|
import { connect } from 'pwa-helpers/connect-mixin';
|
|
12
12
|
import gql from 'graphql-tag';
|
|
13
13
|
import { DepartmentImporter } from './department-importer';
|
|
@@ -38,6 +38,11 @@ const SubDepartmentFragment = gql `
|
|
|
38
38
|
}
|
|
39
39
|
`;
|
|
40
40
|
let DepartmentTreePage = class DepartmentTreePage extends connect(store)(localize(i18next)(ScopedElementsMixin(PageView))) {
|
|
41
|
+
constructor() {
|
|
42
|
+
super(...arguments);
|
|
43
|
+
this.modified = false;
|
|
44
|
+
this.appendable = false;
|
|
45
|
+
}
|
|
41
46
|
static get scopedElements() {
|
|
42
47
|
return {
|
|
43
48
|
'department-importer': DepartmentImporter
|
|
@@ -70,8 +75,6 @@ let DepartmentTreePage = class DepartmentTreePage extends connect(store)(localiz
|
|
|
70
75
|
render() {
|
|
71
76
|
return html `
|
|
72
77
|
<div class="header">
|
|
73
|
-
<div class="title">${i18next.t('title.department list')}</div>
|
|
74
|
-
|
|
75
78
|
<ox-context-page-toolbar class="actions" .context=${this.context}></ox-context-page-toolbar>
|
|
76
79
|
</div>
|
|
77
80
|
|
|
@@ -86,12 +89,22 @@ let DepartmentTreePage = class DepartmentTreePage extends connect(store)(localiz
|
|
|
86
89
|
></ox-tree-vertical>
|
|
87
90
|
|
|
88
91
|
<div editor>
|
|
89
|
-
<department-view
|
|
92
|
+
<department-view
|
|
93
|
+
.department=${this.department}
|
|
94
|
+
@property-change=${(e) => {
|
|
95
|
+
var _a, _b;
|
|
96
|
+
const { controlNo, name } = e.detail || {};
|
|
97
|
+
this.modified = true;
|
|
98
|
+
this.appendable = controlNo && controlNo !== ((_a = this.selected) === null || _a === void 0 ? void 0 : _a.controlNo) && name !== ((_b = this.selected) === null || _b === void 0 ? void 0 : _b.name);
|
|
99
|
+
}}
|
|
100
|
+
></department-view>
|
|
90
101
|
<div class="footer">
|
|
91
|
-
<div filler></div>
|
|
92
102
|
<button @click=${this.reset.bind(this)}><md-icon>restart_alt</md-icon>${i18next.t('button.reset')}</button>
|
|
93
|
-
<
|
|
94
|
-
<button @click=${this.
|
|
103
|
+
<div filler></div>
|
|
104
|
+
<button @click=${this.create.bind(this)} ?disabled=${!this.appendable}>
|
|
105
|
+
<md-icon>add</md-icon>${i18next.t('button.add')}
|
|
106
|
+
</button>
|
|
107
|
+
<button @click=${this.save.bind(this)} ?disabled=${!this.modified} done>
|
|
95
108
|
<md-icon>save</md-icon>${i18next.t('button.save')}
|
|
96
109
|
</button>
|
|
97
110
|
</div>
|
|
@@ -99,6 +112,12 @@ let DepartmentTreePage = class DepartmentTreePage extends connect(store)(localiz
|
|
|
99
112
|
</content>
|
|
100
113
|
`;
|
|
101
114
|
}
|
|
115
|
+
updated(changes) {
|
|
116
|
+
if (changes.has('selected')) {
|
|
117
|
+
this.modified = false;
|
|
118
|
+
this.department = Object.assign({}, this.selected);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
102
121
|
onSelect(e) {
|
|
103
122
|
this.selected = e.detail;
|
|
104
123
|
this.updateContext();
|
|
@@ -107,8 +126,8 @@ let DepartmentTreePage = class DepartmentTreePage extends connect(store)(localiz
|
|
|
107
126
|
this.departmentView.department = {};
|
|
108
127
|
}
|
|
109
128
|
async create() {
|
|
110
|
-
const { id: parentId } = this.
|
|
111
|
-
const { controlNo, name, description, picture, active, manager } = this.
|
|
129
|
+
const { id: parentId } = this.department || {};
|
|
130
|
+
const { controlNo, name, description, picture, active, manager } = this.department || {};
|
|
112
131
|
var department = {
|
|
113
132
|
controlNo,
|
|
114
133
|
name,
|
|
@@ -144,7 +163,7 @@ let DepartmentTreePage = class DepartmentTreePage extends connect(store)(localiz
|
|
|
144
163
|
await this.fetch();
|
|
145
164
|
}
|
|
146
165
|
async save() {
|
|
147
|
-
const { id, controlNo, name, description, picture, active, manager } = this.
|
|
166
|
+
const { id, controlNo, name, description, picture, active, manager } = this.department || {};
|
|
148
167
|
if (!id) {
|
|
149
168
|
await CustomAlert({
|
|
150
169
|
type: 'warning',
|
|
@@ -292,7 +311,7 @@ DepartmentTreePage.styles = [
|
|
|
292
311
|
}
|
|
293
312
|
|
|
294
313
|
div[editor] {
|
|
295
|
-
width:
|
|
314
|
+
width: 300px;
|
|
296
315
|
display: flex;
|
|
297
316
|
flex-direction: column;
|
|
298
317
|
}
|
|
@@ -308,6 +327,11 @@ DepartmentTreePage.styles = [
|
|
|
308
327
|
background-color: var(--md-sys-color-surface-variant);
|
|
309
328
|
overflow: auto;
|
|
310
329
|
}
|
|
330
|
+
|
|
331
|
+
.footer button[disabled] {
|
|
332
|
+
color: var(--md-sys-color-surface-dim);
|
|
333
|
+
background-color: transparent;
|
|
334
|
+
}
|
|
311
335
|
`
|
|
312
336
|
];
|
|
313
337
|
__decorate([
|
|
@@ -318,6 +342,18 @@ __decorate([
|
|
|
318
342
|
state(),
|
|
319
343
|
__metadata("design:type", Department)
|
|
320
344
|
], DepartmentTreePage.prototype, "selected", void 0);
|
|
345
|
+
__decorate([
|
|
346
|
+
state(),
|
|
347
|
+
__metadata("design:type", Department)
|
|
348
|
+
], DepartmentTreePage.prototype, "department", void 0);
|
|
349
|
+
__decorate([
|
|
350
|
+
state(),
|
|
351
|
+
__metadata("design:type", Boolean)
|
|
352
|
+
], DepartmentTreePage.prototype, "modified", void 0);
|
|
353
|
+
__decorate([
|
|
354
|
+
state(),
|
|
355
|
+
__metadata("design:type", Boolean)
|
|
356
|
+
], DepartmentTreePage.prototype, "appendable", void 0);
|
|
321
357
|
__decorate([
|
|
322
358
|
query('department-view'),
|
|
323
359
|
__metadata("design:type", DepartmentView)
|
|
@@ -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 { CommonHeaderStyles, ScrollbarStyles } from '@operato/styles'\nimport { CustomAlert, 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'\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: 260px;\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 ]\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('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 <div class=\"title\">${i18next.t('title.department list')}</div>\n\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 .department=${this.selected}></department-view>\n <div class=\"footer\">\n <div filler></div>\n <button @click=${this.reset.bind(this)}><md-icon>restart_alt</md-icon>${i18next.t('button.reset')}</button>\n <button @click=${this.create.bind(this)}><md-icon>add</md-icon>${i18next.t('button.add')}</button>\n <button @click=${this.save.bind(this)} ?disabled=${!!this.selected} done>\n <md-icon>save</md-icon>${i18next.t('button.save')}\n </button>\n </div>\n </div>\n </content>\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.selected || {}\n const { controlNo, name, description, picture, active, manager } = this.departmentView.department\n\n var department = {\n controlNo,\n name,\n description,\n manager,\n active\n } as any\n\n if (picture 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.departmentView.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 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, 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"]}
|
|
@@ -99,25 +99,6 @@ let EmployeeListPage = class EmployeeListPage extends connect(store)(p13n(locali
|
|
|
99
99
|
columns: [
|
|
100
100
|
{ type: 'gutter', gutterName: 'sequence', fixed: true },
|
|
101
101
|
{ type: 'gutter', gutterName: 'row-selector', multiple: true, fixed: true },
|
|
102
|
-
// {
|
|
103
|
-
// type: 'gutter',
|
|
104
|
-
// gutterName: 'button',
|
|
105
|
-
// fixed: true,
|
|
106
|
-
// forList: true,
|
|
107
|
-
// icon: 'contact_page',
|
|
108
|
-
// iconOnly: false,
|
|
109
|
-
// title: i18next.t('button.edit-contact'),
|
|
110
|
-
// width: 110,
|
|
111
|
-
// handlers: {
|
|
112
|
-
// click: async (columns, data, column, record, rowIndex) => {
|
|
113
|
-
// if (record && record.contact) {
|
|
114
|
-
// this.openContactPopup(record)
|
|
115
|
-
// } else {
|
|
116
|
-
// this.openContactSelector(record)
|
|
117
|
-
// }
|
|
118
|
-
// }
|
|
119
|
-
// }
|
|
120
|
-
// },
|
|
121
102
|
{
|
|
122
103
|
type: 'image',
|
|
123
104
|
name: 'profile',
|
|
@@ -178,7 +159,7 @@ let EmployeeListPage = class EmployeeListPage extends connect(store)(p13n(locali
|
|
|
178
159
|
editable: true
|
|
179
160
|
},
|
|
180
161
|
filter: 'search',
|
|
181
|
-
sortable:
|
|
162
|
+
sortable: false,
|
|
182
163
|
width: 110
|
|
183
164
|
},
|
|
184
165
|
{
|
|
@@ -200,8 +181,8 @@ let EmployeeListPage = class EmployeeListPage extends connect(store)(p13n(locali
|
|
|
200
181
|
list: { fields: ['name', 'email'] }
|
|
201
182
|
}
|
|
202
183
|
},
|
|
203
|
-
sortable:
|
|
204
|
-
filter:
|
|
184
|
+
sortable: false,
|
|
185
|
+
filter: 'search',
|
|
205
186
|
width: 100
|
|
206
187
|
},
|
|
207
188
|
{
|
|
@@ -209,8 +190,8 @@ let EmployeeListPage = class EmployeeListPage extends connect(store)(p13n(locali
|
|
|
209
190
|
name: 'type',
|
|
210
191
|
header: i18next.t('field.type'),
|
|
211
192
|
width: 115,
|
|
212
|
-
sortable:
|
|
213
|
-
filter:
|
|
193
|
+
sortable: true,
|
|
194
|
+
filter: true,
|
|
214
195
|
record: {
|
|
215
196
|
editable: true,
|
|
216
197
|
codeName: 'EMPLOYEE_TYPE',
|
|
@@ -224,8 +205,8 @@ let EmployeeListPage = class EmployeeListPage extends connect(store)(p13n(locali
|
|
|
224
205
|
record: {
|
|
225
206
|
editable: true
|
|
226
207
|
},
|
|
227
|
-
sortable:
|
|
228
|
-
filter:
|
|
208
|
+
sortable: false,
|
|
209
|
+
filter: true,
|
|
229
210
|
width: 130
|
|
230
211
|
},
|
|
231
212
|
{
|
|
@@ -316,7 +297,7 @@ let EmployeeListPage = class EmployeeListPage extends connect(store)(p13n(locali
|
|
|
316
297
|
descriptionField: 'controlNo'
|
|
317
298
|
}
|
|
318
299
|
},
|
|
319
|
-
sortable:
|
|
300
|
+
sortable: false,
|
|
320
301
|
width: 120
|
|
321
302
|
},
|
|
322
303
|
{
|
|
@@ -330,7 +311,7 @@ let EmployeeListPage = class EmployeeListPage extends connect(store)(p13n(locali
|
|
|
330
311
|
return record.contact ? record.contact.email : '';
|
|
331
312
|
}
|
|
332
313
|
},
|
|
333
|
-
sortable:
|
|
314
|
+
sortable: false
|
|
334
315
|
},
|
|
335
316
|
{
|
|
336
317
|
type: 'string',
|
|
@@ -343,7 +324,7 @@ let EmployeeListPage = class EmployeeListPage extends connect(store)(p13n(locali
|
|
|
343
324
|
return record.contact ? record.contact.phone : '';
|
|
344
325
|
}
|
|
345
326
|
},
|
|
346
|
-
sortable:
|
|
327
|
+
sortable: false
|
|
347
328
|
},
|
|
348
329
|
{
|
|
349
330
|
type: 'code',
|
|
@@ -354,7 +335,8 @@ let EmployeeListPage = class EmployeeListPage extends connect(store)(p13n(locali
|
|
|
354
335
|
editable: true,
|
|
355
336
|
codeName: 'JOB_RESPONSIBILITY',
|
|
356
337
|
selectDispOpt: 'name'
|
|
357
|
-
}
|
|
338
|
+
},
|
|
339
|
+
filter: true
|
|
358
340
|
},
|
|
359
341
|
{
|
|
360
342
|
type: 'code',
|
|
@@ -365,7 +347,8 @@ let EmployeeListPage = class EmployeeListPage extends connect(store)(p13n(locali
|
|
|
365
347
|
editable: true,
|
|
366
348
|
codeName: 'JOB_POSITION',
|
|
367
349
|
selectDispOpt: 'name'
|
|
368
|
-
}
|
|
350
|
+
},
|
|
351
|
+
filter: true
|
|
369
352
|
},
|
|
370
353
|
{
|
|
371
354
|
type: 'date',
|
|
@@ -397,7 +380,7 @@ let EmployeeListPage = class EmployeeListPage extends connect(store)(p13n(locali
|
|
|
397
380
|
editable: true
|
|
398
381
|
},
|
|
399
382
|
filter: true,
|
|
400
|
-
sortable:
|
|
383
|
+
sortable: false
|
|
401
384
|
},
|
|
402
385
|
{
|
|
403
386
|
type: 'string',
|