@things-factory/organization 7.0.52 → 7.0.56
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/component/approval-line-brief.ts +2 -2
- package/client/component/approval-line-items-editor-popup.ts +6 -4
- package/client/component/approval-line-items-editor.ts +5 -6
- package/client/component/approval-line-selector.ts +4 -4
- package/client/component/approval-line-templates-manager.ts +8 -6
- package/client/component/approval-line-view.ts +10 -6
- package/client/component/assignees-editor-popup.ts +4 -4
- package/client/component/assignees-editor.ts +3 -3
- package/client/component/department-selector.ts +20 -17
- package/client/component/recipients-editor-popup.ts +4 -4
- package/client/component/recipients-editor.ts +2 -2
- package/client/grist-editor/grist-editor-department-object.ts +1 -0
- package/client/pages/department/department-importer.ts +5 -4
- package/client/pages/department/department-list-page.ts +11 -11
- package/client/pages/department/department-tree-page.ts +15 -15
- package/client/pages/employee/employee-importer.ts +5 -4
- package/client/pages/employee/employee-list-page.ts +122 -98
- package/client/pages/employee/employees-by-department.ts +10 -10
- package/dist-client/component/approval-line-brief.js +2 -2
- package/dist-client/component/approval-line-brief.js.map +1 -1
- package/dist-client/component/approval-line-items-editor-popup.d.ts +1 -1
- package/dist-client/component/approval-line-items-editor-popup.js +6 -4
- package/dist-client/component/approval-line-items-editor-popup.js.map +1 -1
- package/dist-client/component/approval-line-items-editor.d.ts +4 -9
- package/dist-client/component/approval-line-items-editor.js +4 -5
- package/dist-client/component/approval-line-items-editor.js.map +1 -1
- package/dist-client/component/approval-line-selector.d.ts +1 -1
- package/dist-client/component/approval-line-selector.js +4 -4
- package/dist-client/component/approval-line-selector.js.map +1 -1
- package/dist-client/component/approval-line-templates-manager.d.ts +3 -7
- package/dist-client/component/approval-line-templates-manager.js +6 -4
- package/dist-client/component/approval-line-templates-manager.js.map +1 -1
- package/dist-client/component/approval-line-view.js +10 -6
- package/dist-client/component/approval-line-view.js.map +1 -1
- package/dist-client/component/assignees-editor-popup.d.ts +1 -1
- package/dist-client/component/assignees-editor-popup.js +4 -4
- package/dist-client/component/assignees-editor-popup.js.map +1 -1
- package/dist-client/component/assignees-editor.d.ts +3 -8
- package/dist-client/component/assignees-editor.js +1 -1
- package/dist-client/component/assignees-editor.js.map +1 -1
- package/dist-client/component/department-selector.d.ts +1 -1
- package/dist-client/component/department-selector.js +19 -17
- package/dist-client/component/department-selector.js.map +1 -1
- package/dist-client/component/department-view.d.ts +1 -1
- package/dist-client/component/recipients-editor-popup.d.ts +1 -1
- package/dist-client/component/recipients-editor-popup.js +4 -4
- package/dist-client/component/recipients-editor-popup.js.map +1 -1
- package/dist-client/component/recipients-editor.d.ts +3 -8
- package/dist-client/component/recipients-editor.js.map +1 -1
- package/dist-client/grist-editor/grist-editor-department-object.js +1 -0
- package/dist-client/grist-editor/grist-editor-department-object.js.map +1 -1
- package/dist-client/pages/approval-line/common-approval-line-templates-page.d.ts +1 -1
- package/dist-client/pages/approval-line/my-approval-line-templates-page.d.ts +1 -1
- package/dist-client/pages/department/department-importer.d.ts +1 -1
- package/dist-client/pages/department/department-importer.js +5 -4
- package/dist-client/pages/department/department-importer.js.map +1 -1
- package/dist-client/pages/department/department-list-page.d.ts +1 -1
- package/dist-client/pages/department/department-list-page.js +11 -11
- package/dist-client/pages/department/department-list-page.js.map +1 -1
- package/dist-client/pages/department/department-tree-page.d.ts +1 -1
- package/dist-client/pages/department/department-tree-page.js +15 -15
- package/dist-client/pages/department/department-tree-page.js.map +1 -1
- package/dist-client/pages/employee/employee-importer.d.ts +1 -1
- package/dist-client/pages/employee/employee-importer.js +5 -4
- package/dist-client/pages/employee/employee-importer.js.map +1 -1
- package/dist-client/pages/employee/employee-list-page.d.ts +8 -3
- package/dist-client/pages/employee/employee-list-page.js +122 -95
- package/dist-client/pages/employee/employee-list-page.js.map +1 -1
- package/dist-client/pages/employee/employees-by-department.d.ts +1 -1
- package/dist-client/pages/employee/employees-by-department.js +10 -10
- package/dist-client/pages/employee/employees-by-department.js.map +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-server/service/employee/employee-type.d.ts +12 -2
- package/dist-server/service/employee/employee-type.js +41 -5
- package/dist-server/service/employee/employee-type.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -6
- package/server/service/employee/employee-type.ts +28 -4
- package/translations/en.json +2 -0
- package/translations/ja.json +6 -4
- package/translations/ko.json +2 -0
- package/translations/ms.json +5 -3
- package/translations/zh.json +6 -4
|
@@ -13,8 +13,8 @@ import gql from 'graphql-tag';
|
|
|
13
13
|
import { DepartmentImporter } from './department-importer';
|
|
14
14
|
import { Department } from '../../types/department';
|
|
15
15
|
import { DepartmentView } from '../../component/department-view';
|
|
16
|
-
const
|
|
17
|
-
fragment
|
|
16
|
+
const SubDepartmentFragment = gql `
|
|
17
|
+
fragment SubDepartmentFragment on Department {
|
|
18
18
|
id
|
|
19
19
|
controlNo
|
|
20
20
|
name
|
|
@@ -129,11 +129,11 @@ let DepartmentTreePage = class DepartmentTreePage extends connect(store)(localiz
|
|
|
129
129
|
mutation: gql `
|
|
130
130
|
mutation ($department: NewDepartment!) {
|
|
131
131
|
createDepartment(department: $department) {
|
|
132
|
-
...
|
|
132
|
+
...SubDepartmentFragment
|
|
133
133
|
}
|
|
134
134
|
}
|
|
135
135
|
|
|
136
|
-
${
|
|
136
|
+
${SubDepartmentFragment}
|
|
137
137
|
`,
|
|
138
138
|
variables: {
|
|
139
139
|
department
|
|
@@ -171,11 +171,11 @@ let DepartmentTreePage = class DepartmentTreePage extends connect(store)(localiz
|
|
|
171
171
|
mutation: gql `
|
|
172
172
|
mutation ($id: String!, $patch: DepartmentPatch!) {
|
|
173
173
|
updateDepartment(id: $id, patch: $patch) {
|
|
174
|
-
...
|
|
174
|
+
...SubDepartmentFragment
|
|
175
175
|
}
|
|
176
176
|
}
|
|
177
177
|
|
|
178
|
-
${
|
|
178
|
+
${SubDepartmentFragment}
|
|
179
179
|
`,
|
|
180
180
|
variables: {
|
|
181
181
|
id,
|
|
@@ -241,21 +241,21 @@ let DepartmentTreePage = class DepartmentTreePage extends connect(store)(localiz
|
|
|
241
241
|
responses: departmentRoots {
|
|
242
242
|
total
|
|
243
243
|
items {
|
|
244
|
-
...
|
|
244
|
+
...SubDepartmentFragment
|
|
245
245
|
children {
|
|
246
|
-
...
|
|
246
|
+
...SubDepartmentFragment
|
|
247
247
|
children {
|
|
248
|
-
...
|
|
248
|
+
...SubDepartmentFragment
|
|
249
249
|
children {
|
|
250
|
-
...
|
|
250
|
+
...SubDepartmentFragment
|
|
251
251
|
children {
|
|
252
|
-
...
|
|
252
|
+
...SubDepartmentFragment
|
|
253
253
|
children {
|
|
254
|
-
...
|
|
254
|
+
...SubDepartmentFragment
|
|
255
255
|
children {
|
|
256
|
-
...
|
|
256
|
+
...SubDepartmentFragment
|
|
257
257
|
children {
|
|
258
|
-
...
|
|
258
|
+
...SubDepartmentFragment
|
|
259
259
|
}
|
|
260
260
|
}
|
|
261
261
|
}
|
|
@@ -267,7 +267,7 @@ let DepartmentTreePage = class DepartmentTreePage extends connect(store)(localiz
|
|
|
267
267
|
}
|
|
268
268
|
}
|
|
269
269
|
|
|
270
|
-
${
|
|
270
|
+
${SubDepartmentFragment}
|
|
271
271
|
`
|
|
272
272
|
});
|
|
273
273
|
const { items: records, total } = response.data.responses;
|
|
@@ -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 departmentFragment = gql`\n fragment departmentFragment 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 ox-tree-vertical {\n flex: 1;\n }\n\n department-view {\n flex: 1;\n\n max-width: 500px;\n align-self: center;\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: 'add',\n title: i18next.t('button.add'),\n action: this.create.bind(this)\n },\n this.selected\n ? {\n icon: 'save',\n title: i18next.t('button.save'),\n action: this.save.bind(this)\n }\n : null,\n {\n icon: 'refresh',\n title: i18next.t('button.reset'),\n action: this.reset.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 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 <ox-tree-vertical\n .data=${this.root}\n .selected=${this.selected}\n @select=${this.onSelect.bind(this)}\n label-property=\"name\"\n ></ox-tree-vertical>\n\n <department-view .department=${this.selected}></department-view>\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 ...departmentFragment\n }\n }\n\n ${departmentFragment}\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 ...departmentFragment\n }\n }\n\n ${departmentFragment}\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 ...departmentFragment\n children {\n ...departmentFragment\n children {\n ...departmentFragment\n children {\n ...departmentFragment\n children {\n ...departmentFragment\n children {\n ...departmentFragment\n children {\n ...departmentFragment\n children {\n ...departmentFragment\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n\n ${departmentFragment}\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 { 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 ox-tree-vertical {\n flex: 1;\n }\n\n department-view {\n flex: 1;\n\n max-width: 500px;\n align-self: center;\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: 'add',\n title: i18next.t('button.add'),\n action: this.create.bind(this)\n },\n this.selected\n ? {\n icon: 'save',\n title: i18next.t('button.save'),\n action: this.save.bind(this)\n }\n : null,\n {\n icon: 'refresh',\n title: i18next.t('button.reset'),\n action: this.reset.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 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 <ox-tree-vertical\n .data=${this.root}\n .selected=${this.selected}\n @select=${this.onSelect.bind(this)}\n label-property=\"name\"\n ></ox-tree-vertical>\n\n <department-view .department=${this.selected}></department-view>\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"]}
|
|
@@ -7,7 +7,7 @@ import { property } from 'lit/decorators.js';
|
|
|
7
7
|
import { client } from '@operato/graphql';
|
|
8
8
|
import { i18next } from '@operato/i18n';
|
|
9
9
|
import { isMobileDevice } from '@operato/utils';
|
|
10
|
-
import {
|
|
10
|
+
import { CommonHeaderStyles } from '@operato/styles';
|
|
11
11
|
export class EmployeeImporter extends LitElement {
|
|
12
12
|
constructor() {
|
|
13
13
|
super(...arguments);
|
|
@@ -47,8 +47,9 @@ export class EmployeeImporter extends LitElement {
|
|
|
47
47
|
}}
|
|
48
48
|
></ox-grist>
|
|
49
49
|
|
|
50
|
-
<div class="
|
|
51
|
-
<
|
|
50
|
+
<div class="footer">
|
|
51
|
+
<div filler></div>
|
|
52
|
+
<button @click=${this.save.bind(this)} done><md-icon>save</md-icon>${i18next.t('button.save')}</button>
|
|
52
53
|
</div>
|
|
53
54
|
`;
|
|
54
55
|
}
|
|
@@ -68,7 +69,7 @@ export class EmployeeImporter extends LitElement {
|
|
|
68
69
|
}
|
|
69
70
|
}
|
|
70
71
|
EmployeeImporter.styles = [
|
|
71
|
-
|
|
72
|
+
CommonHeaderStyles,
|
|
72
73
|
css `
|
|
73
74
|
:host {
|
|
74
75
|
display: flex;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"employee-importer.js","sourceRoot":"","sources":["../../../client/pages/employee/employee-importer.ts"],"names":[],"mappings":";AAAA,OAAO,4BAA4B,CAAA;AACnC,OAAO,qBAAqB,CAAA;AAE5B,OAAO,GAAG,MAAM,aAAa,CAAA;AAC7B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAE5C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"employee-importer.js","sourceRoot":"","sources":["../../../client/pages/employee/employee-importer.ts"],"names":[],"mappings":";AAAA,OAAO,4BAA4B,CAAA;AACnC,OAAO,qBAAqB,CAAA;AAE5B,OAAO,GAAG,MAAM,aAAa,CAAA;AAC7B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAE5C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAEpD,MAAM,OAAO,gBAAiB,SAAQ,UAAU;IAAhD;;QAiB6B,cAAS,GAAU,EAAE,CAAA;QACpB,YAAO,GAAG;YACpC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE;YACzC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC9B,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,MAAM;oBACZ,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC;oBAC/B,KAAK,EAAE,GAAG;iBACX;gBACD;oBACE,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,aAAa;oBACnB,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC;oBACtC,KAAK,EAAE,GAAG;iBACX;gBACD;oBACE,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,QAAQ;oBACd,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC;oBACjC,KAAK,EAAE,EAAE;iBACV;aACF;SACF,CAAA;IAiCH,CAAC;IA/BC,MAAM;QACJ,OAAO,IAAI,CAAA;;gBAEC,cAAc,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;kBAChC,IAAI,CAAC,OAAO;gBACd;YACN,OAAO,EAAE,IAAI,CAAC,SAAS;SACxB;;;;;yBAKgB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gCAAgC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC;;KAEhG,CAAA;IACH,CAAC;IAED,KAAK,CAAC,IAAI;;QACR,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;YACnC,QAAQ,EAAE,GAAG,CAAA;;;;OAIZ;YACD,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;SACzC,CAAC,CAAA;QAEF,IAAI,MAAA,QAAQ,CAAC,MAAM,0CAAE,MAAM;YAAE,OAAM;QAEnC,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,CAAC,CAAA;IACjD,CAAC;;AAxEM,uBAAM,GAAG;IACd,kBAAkB;IAClB,GAAG,CAAA;;;;;;;;;;;KAWF;CACF,AAdY,CAcZ;AAE0B;IAA1B,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;;mDAAsB;AACpB;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;iDAuB1B","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@operato/data-grist'\n\nimport gql from 'graphql-tag'\nimport { css, html, LitElement } from 'lit'\nimport { property } from 'lit/decorators.js'\n\nimport { client } from '@operato/graphql'\nimport { i18next } from '@operato/i18n'\nimport { isMobileDevice } from '@operato/utils'\nimport { CommonHeaderStyles } from '@operato/styles'\n\nexport class EmployeeImporter extends LitElement {\n static styles = [\n CommonHeaderStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n\n background-color: var(--md-sys-color-surface);\n }\n\n ox-grist {\n flex: 1;\n }\n `\n ]\n\n @property({ type: Array }) employees: any[] = []\n @property({ type: Object }) columns = {\n list: { fields: ['name', 'description'] },\n pagination: { infinite: true },\n columns: [\n {\n type: 'string',\n name: 'name',\n header: i18next.t('field.name'),\n width: 150\n },\n {\n type: 'string',\n name: 'description',\n header: i18next.t('field.description'),\n width: 200\n },\n {\n type: 'checkbox',\n name: 'active',\n header: i18next.t('field.active'),\n width: 60\n }\n ]\n }\n\n render() {\n return html`\n <ox-grist\n .mode=${isMobileDevice() ? 'LIST' : 'GRID'}\n .config=${this.columns}\n .data=${{\n records: this.employees\n }}\n ></ox-grist>\n\n <div class=\"footer\">\n <div filler></div>\n <button @click=${this.save.bind(this)} done><md-icon>save</md-icon>${i18next.t('button.save')}</button>\n </div>\n `\n }\n\n async save() {\n const response = await client.mutate({\n mutation: gql`\n mutation importEmployees($employees: [EmployeePatch!]!) {\n importEmployees(employees: $employees)\n }\n `,\n variables: { employees: this.employees }\n })\n\n if (response.errors?.length) return\n\n this.dispatchEvent(new CustomEvent('imported'))\n }\n}\n"]}
|
|
@@ -11,6 +11,11 @@ declare const EmployeeListPage_base: (new (...args: any[]) => {
|
|
|
11
11
|
disconnectedCallback(): void;
|
|
12
12
|
stateChanged(_state: unknown): void;
|
|
13
13
|
readonly isConnected: boolean;
|
|
14
|
+
}) & (new (...args: any[]) => {
|
|
15
|
+
__preferenceProviders: {
|
|
16
|
+
[element: string]: import("@operato/p13n").PagePreferenceProvider;
|
|
17
|
+
};
|
|
18
|
+
getPagePreferenceProvider(element: string): import("@operato/p13n").PagePreferenceProvider | undefined;
|
|
14
19
|
}) & (new (...args: any[]) => import("lit").LitElement) & typeof PageView & import("@open-wc/dedupe-mixin").Constructor<import("@open-wc/scoped-elements/types/src/types").ScopedElementsHost>;
|
|
15
20
|
export declare class EmployeeListPage extends EmployeeListPage_base {
|
|
16
21
|
static styles: import("lit").CSSResult[];
|
|
@@ -52,15 +57,15 @@ export declare class EmployeeListPage extends EmployeeListPage_base {
|
|
|
52
57
|
};
|
|
53
58
|
toolbar: boolean;
|
|
54
59
|
};
|
|
55
|
-
render(): import("lit").TemplateResult<1>;
|
|
60
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
56
61
|
pageInitialized(lifecycle: any): Promise<void>;
|
|
57
62
|
pageUpdated(changes: any, lifecycle: any): Promise<void>;
|
|
58
63
|
fetchHandler({ page, limit, sortings, filters }: FetchOption): Promise<{
|
|
59
64
|
total: any;
|
|
60
65
|
records: any;
|
|
61
66
|
}>;
|
|
62
|
-
|
|
63
|
-
|
|
67
|
+
onDeleteEmployee(): Promise<void>;
|
|
68
|
+
onUpdateEmployee(): Promise<void>;
|
|
64
69
|
exportHandler(): Promise<{}[]>;
|
|
65
70
|
importHandler(records: any): Promise<void>;
|
|
66
71
|
openContactPopup(record: GristRecord): Promise<void>;
|
|
@@ -12,10 +12,11 @@ import { client } from '@operato/graphql';
|
|
|
12
12
|
import { i18next, localize } from '@operato/i18n';
|
|
13
13
|
import { notify, openPopup } from '@operato/layout';
|
|
14
14
|
import { PageView, store } from '@operato/shell';
|
|
15
|
-
import { CommonHeaderStyles, ScrollbarStyles } from '@operato/styles';
|
|
15
|
+
import { CommonHeaderStyles, CommonGristStyles, ScrollbarStyles } from '@operato/styles';
|
|
16
16
|
import { isMobileDevice } from '@operato/utils';
|
|
17
|
+
import { p13n } from '@operato/p13n';
|
|
17
18
|
import { EmployeeImporter } from './employee-importer';
|
|
18
|
-
let EmployeeListPage = class EmployeeListPage extends connect(store)(localize(i18next)(ScopedElementsMixin(PageView))) {
|
|
19
|
+
let EmployeeListPage = class EmployeeListPage extends connect(store)(p13n(localize(i18next)(ScopedElementsMixin(PageView)))) {
|
|
19
20
|
constructor() {
|
|
20
21
|
super(...arguments);
|
|
21
22
|
this.mode = isMobileDevice() ? 'CARD' : 'GRID';
|
|
@@ -45,12 +46,12 @@ let EmployeeListPage = class EmployeeListPage extends connect(store)(localize(i1
|
|
|
45
46
|
{
|
|
46
47
|
icon: 'save',
|
|
47
48
|
title: i18next.t('button.save'),
|
|
48
|
-
action: this.
|
|
49
|
+
action: this.onUpdateEmployee.bind(this)
|
|
49
50
|
},
|
|
50
51
|
{
|
|
51
52
|
icon: 'delete',
|
|
52
53
|
title: i18next.t('button.delete'),
|
|
53
|
-
action: this.
|
|
54
|
+
action: this.onDeleteEmployee.bind(this),
|
|
54
55
|
emphasis: {
|
|
55
56
|
danger: true
|
|
56
57
|
}
|
|
@@ -69,13 +70,21 @@ let EmployeeListPage = class EmployeeListPage extends connect(store)(localize(i1
|
|
|
69
70
|
render() {
|
|
70
71
|
const mode = this.mode || (isMobileDevice() ? 'CARD' : 'GRID');
|
|
71
72
|
return html `
|
|
72
|
-
<ox-grist
|
|
73
|
+
<ox-grist
|
|
74
|
+
.mode=${mode}
|
|
75
|
+
.config=${this.gristConfig}
|
|
76
|
+
.fetchHandler=${this.fetchHandler.bind(this)}
|
|
77
|
+
.personalConfigProvider=${this.getPagePreferenceProvider('ox-grist')}
|
|
78
|
+
>
|
|
73
79
|
<div slot="headroom" class="header">
|
|
74
80
|
<div class="filters">
|
|
75
81
|
<ox-filters-form class="filter" autofocus without-search></ox-filters-form>
|
|
76
82
|
</div>
|
|
83
|
+
|
|
77
84
|
<ox-context-page-toolbar class="actions" .context=${this.context}></ox-context-page-toolbar>
|
|
78
85
|
</div>
|
|
86
|
+
|
|
87
|
+
<ox-grist-personalizer slot="setting"></ox-grist-personalizer>
|
|
79
88
|
</ox-grist>
|
|
80
89
|
`;
|
|
81
90
|
}
|
|
@@ -90,21 +99,46 @@ let EmployeeListPage = class EmployeeListPage extends connect(store)(localize(i1
|
|
|
90
99
|
columns: [
|
|
91
100
|
{ type: 'gutter', gutterName: 'sequence', fixed: true },
|
|
92
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
|
+
// },
|
|
93
121
|
{
|
|
94
|
-
type: '
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
122
|
+
type: 'image',
|
|
123
|
+
name: 'profile',
|
|
124
|
+
header: i18next.t('button.edit-contact'),
|
|
125
|
+
width: 80,
|
|
126
|
+
record: {
|
|
127
|
+
align: 'center',
|
|
128
|
+
renderer: function (value, column, record, rowIndex, field) {
|
|
129
|
+
return html `<ox-pfp-view
|
|
130
|
+
style="min-height: 36px; width: unset; aspect-ratio: 1 / 1;"
|
|
131
|
+
.profile=${record.profile}
|
|
132
|
+
.name=${record.name}
|
|
133
|
+
></ox-pfp-view>`;
|
|
134
|
+
}
|
|
135
|
+
},
|
|
102
136
|
handlers: {
|
|
103
137
|
click: async (columns, data, column, record, rowIndex) => {
|
|
104
|
-
if (record.contact) {
|
|
138
|
+
if (record && record.contact) {
|
|
105
139
|
this.openContactPopup(record);
|
|
106
140
|
}
|
|
107
|
-
else
|
|
141
|
+
else {
|
|
108
142
|
this.openContactSelector(record);
|
|
109
143
|
}
|
|
110
144
|
}
|
|
@@ -116,7 +150,8 @@ let EmployeeListPage = class EmployeeListPage extends connect(store)(localize(i1
|
|
|
116
150
|
fixed: true,
|
|
117
151
|
header: i18next.t('field.control-no'),
|
|
118
152
|
record: {
|
|
119
|
-
editable: true
|
|
153
|
+
editable: true,
|
|
154
|
+
mandatory: true
|
|
120
155
|
},
|
|
121
156
|
filter: 'search',
|
|
122
157
|
sortable: true,
|
|
@@ -128,7 +163,8 @@ let EmployeeListPage = class EmployeeListPage extends connect(store)(localize(i1
|
|
|
128
163
|
fixed: true,
|
|
129
164
|
header: i18next.t('field.name'),
|
|
130
165
|
record: {
|
|
131
|
-
editable: true
|
|
166
|
+
editable: true,
|
|
167
|
+
mandatory: true
|
|
132
168
|
},
|
|
133
169
|
filter: 'search',
|
|
134
170
|
sortable: true,
|
|
@@ -177,7 +213,8 @@ let EmployeeListPage = class EmployeeListPage extends connect(store)(localize(i1
|
|
|
177
213
|
filter: false,
|
|
178
214
|
record: {
|
|
179
215
|
editable: true,
|
|
180
|
-
codeName: 'EMPLOYEE_TYPE'
|
|
216
|
+
codeName: 'EMPLOYEE_TYPE',
|
|
217
|
+
selectDispOpt: 'name'
|
|
181
218
|
}
|
|
182
219
|
},
|
|
183
220
|
{
|
|
@@ -241,7 +278,8 @@ let EmployeeListPage = class EmployeeListPage extends connect(store)(localize(i1
|
|
|
241
278
|
header: { renderer: () => i18next.t('label.type') },
|
|
242
279
|
record: {
|
|
243
280
|
editable: false,
|
|
244
|
-
codeName: 'EMPLOYEE_TYPE'
|
|
281
|
+
codeName: 'EMPLOYEE_TYPE',
|
|
282
|
+
selectDispOpt: 'name'
|
|
245
283
|
}
|
|
246
284
|
},
|
|
247
285
|
{
|
|
@@ -251,7 +289,8 @@ let EmployeeListPage = class EmployeeListPage extends connect(store)(localize(i1
|
|
|
251
289
|
header: { renderer: () => i18next.t('label.job-position') },
|
|
252
290
|
record: {
|
|
253
291
|
editable: false,
|
|
254
|
-
codeName: 'JOB_POSITION'
|
|
292
|
+
codeName: 'JOB_POSITION',
|
|
293
|
+
selectDispOpt: 'name'
|
|
255
294
|
}
|
|
256
295
|
},
|
|
257
296
|
{
|
|
@@ -261,14 +300,15 @@ let EmployeeListPage = class EmployeeListPage extends connect(store)(localize(i1
|
|
|
261
300
|
header: { renderer: () => i18next.t('label.job-responsibility') },
|
|
262
301
|
record: {
|
|
263
302
|
editable: false,
|
|
264
|
-
codeName: 'JOB_RESPONSIBILITY'
|
|
303
|
+
codeName: 'JOB_RESPONSIBILITY',
|
|
304
|
+
selectDispOpt: 'name'
|
|
265
305
|
}
|
|
266
306
|
},
|
|
267
307
|
{
|
|
268
308
|
type: 'date',
|
|
269
309
|
name: 'hiredOn',
|
|
270
310
|
header: { renderer: () => i18next.t('field.hired-on') },
|
|
271
|
-
width:
|
|
311
|
+
width: 120
|
|
272
312
|
}
|
|
273
313
|
],
|
|
274
314
|
valueField: 'id',
|
|
@@ -296,7 +336,7 @@ let EmployeeListPage = class EmployeeListPage extends connect(store)(localize(i1
|
|
|
296
336
|
type: 'string',
|
|
297
337
|
name: 'phone',
|
|
298
338
|
header: i18next.t('field.phone'),
|
|
299
|
-
width:
|
|
339
|
+
width: 130,
|
|
300
340
|
record: {
|
|
301
341
|
editable: false,
|
|
302
342
|
renderer: function (value, column, record, rowIndex, field) {
|
|
@@ -312,7 +352,8 @@ let EmployeeListPage = class EmployeeListPage extends connect(store)(localize(i1
|
|
|
312
352
|
width: 175,
|
|
313
353
|
record: {
|
|
314
354
|
editable: true,
|
|
315
|
-
codeName: 'JOB_RESPONSIBILITY'
|
|
355
|
+
codeName: 'JOB_RESPONSIBILITY',
|
|
356
|
+
selectDispOpt: 'name'
|
|
316
357
|
}
|
|
317
358
|
},
|
|
318
359
|
{
|
|
@@ -322,14 +363,15 @@ let EmployeeListPage = class EmployeeListPage extends connect(store)(localize(i1
|
|
|
322
363
|
width: 100,
|
|
323
364
|
record: {
|
|
324
365
|
editable: true,
|
|
325
|
-
codeName: 'JOB_POSITION'
|
|
366
|
+
codeName: 'JOB_POSITION',
|
|
367
|
+
selectDispOpt: 'name'
|
|
326
368
|
}
|
|
327
369
|
},
|
|
328
370
|
{
|
|
329
371
|
type: 'date',
|
|
330
372
|
name: 'hiredOn',
|
|
331
373
|
header: i18next.t('field.hired-on'),
|
|
332
|
-
width:
|
|
374
|
+
width: 120,
|
|
333
375
|
record: {
|
|
334
376
|
editable: true
|
|
335
377
|
},
|
|
@@ -339,7 +381,7 @@ let EmployeeListPage = class EmployeeListPage extends connect(store)(localize(i1
|
|
|
339
381
|
type: 'date',
|
|
340
382
|
name: 'retiredAt',
|
|
341
383
|
header: i18next.t('label.retired-at'),
|
|
342
|
-
width:
|
|
384
|
+
width: 120,
|
|
343
385
|
record: {
|
|
344
386
|
editable: true
|
|
345
387
|
}
|
|
@@ -382,17 +424,8 @@ let EmployeeListPage = class EmployeeListPage extends connect(store)(localize(i1
|
|
|
382
424
|
sortable: true
|
|
383
425
|
},
|
|
384
426
|
{
|
|
385
|
-
type: '
|
|
386
|
-
name: '
|
|
387
|
-
record: {
|
|
388
|
-
renderer: function (value, column, record, rowIndex, field) {
|
|
389
|
-
return html `<ox-pfp-view
|
|
390
|
-
style="height:90%; width: unset; aspect-ratio: 1 / 1;"
|
|
391
|
-
.profile=${record.profile}
|
|
392
|
-
.name=${record.name}
|
|
393
|
-
></ox-pfp-view>`;
|
|
394
|
-
}
|
|
395
|
-
},
|
|
427
|
+
type: 'resource-object',
|
|
428
|
+
name: 'contact',
|
|
396
429
|
hidden: true
|
|
397
430
|
}
|
|
398
431
|
],
|
|
@@ -435,6 +468,7 @@ let EmployeeListPage = class EmployeeListPage extends connect(store)(localize(i1
|
|
|
435
468
|
}
|
|
436
469
|
department {
|
|
437
470
|
id
|
|
471
|
+
controlNo
|
|
438
472
|
name
|
|
439
473
|
description
|
|
440
474
|
}
|
|
@@ -480,7 +514,7 @@ let EmployeeListPage = class EmployeeListPage extends connect(store)(localize(i1
|
|
|
480
514
|
records
|
|
481
515
|
};
|
|
482
516
|
}
|
|
483
|
-
async
|
|
517
|
+
async onDeleteEmployee() {
|
|
484
518
|
if (confirm(i18next.t('text.sure_to_x', { x: i18next.t('text.delete') }))) {
|
|
485
519
|
const ids = this.grist.selected.map(record => record.id);
|
|
486
520
|
if (ids && ids.length > 0) {
|
|
@@ -503,7 +537,7 @@ let EmployeeListPage = class EmployeeListPage extends connect(store)(localize(i1
|
|
|
503
537
|
}
|
|
504
538
|
}
|
|
505
539
|
}
|
|
506
|
-
async
|
|
540
|
+
async onUpdateEmployee() {
|
|
507
541
|
let patches = this.grist.dirtyRecords;
|
|
508
542
|
if (patches && patches.length) {
|
|
509
543
|
patches = patches.map(patch => {
|
|
@@ -576,40 +610,9 @@ let EmployeeListPage = class EmployeeListPage extends connect(store)(localize(i1
|
|
|
576
610
|
if (!((_a = record.contact) === null || _a === void 0 ? void 0 : _a.id)) {
|
|
577
611
|
return;
|
|
578
612
|
}
|
|
579
|
-
const response = await client.query({
|
|
580
|
-
query: gql `
|
|
581
|
-
query ($id: String!) {
|
|
582
|
-
contact(id: $id) {
|
|
583
|
-
id
|
|
584
|
-
name
|
|
585
|
-
company
|
|
586
|
-
department
|
|
587
|
-
email
|
|
588
|
-
phone
|
|
589
|
-
address
|
|
590
|
-
note
|
|
591
|
-
items {
|
|
592
|
-
type
|
|
593
|
-
label
|
|
594
|
-
value
|
|
595
|
-
}
|
|
596
|
-
profile {
|
|
597
|
-
left
|
|
598
|
-
top
|
|
599
|
-
zoom
|
|
600
|
-
picture
|
|
601
|
-
}
|
|
602
|
-
}
|
|
603
|
-
}
|
|
604
|
-
`,
|
|
605
|
-
variables: {
|
|
606
|
-
id: record.contact.id
|
|
607
|
-
}
|
|
608
|
-
});
|
|
609
|
-
const { contact } = response.data;
|
|
610
613
|
const popup = openPopup(html `
|
|
611
614
|
<contact-popup
|
|
612
|
-
.
|
|
615
|
+
.contactId=${record.contact.id}
|
|
613
616
|
@change=${() => {
|
|
614
617
|
this.grist.fetch();
|
|
615
618
|
}}
|
|
@@ -634,39 +637,63 @@ let EmployeeListPage = class EmployeeListPage extends connect(store)(localize(i1
|
|
|
634
637
|
});
|
|
635
638
|
}
|
|
636
639
|
async attachContact(record, contact) {
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
id
|
|
640
|
+
if (record.id) {
|
|
641
|
+
const response = await client.mutate({
|
|
642
|
+
mutation: gql `
|
|
643
|
+
mutation ($id: String!, $contactId: String!) {
|
|
644
|
+
attachContact(id: $id, contactId: $contactId) {
|
|
645
|
+
id
|
|
646
|
+
}
|
|
642
647
|
}
|
|
648
|
+
`,
|
|
649
|
+
variables: {
|
|
650
|
+
id: record.id,
|
|
651
|
+
contactId: contact.id
|
|
652
|
+
}
|
|
653
|
+
});
|
|
654
|
+
this.grist.fetch();
|
|
655
|
+
}
|
|
656
|
+
else if (contact === null || contact === void 0 ? void 0 : contact.id) {
|
|
657
|
+
this.grist.addRecord({
|
|
658
|
+
name: contact.name,
|
|
659
|
+
contact: {
|
|
660
|
+
id: contact.id,
|
|
661
|
+
name: contact.name,
|
|
662
|
+
email: contact.email,
|
|
663
|
+
phone: contact.phone,
|
|
664
|
+
address: contact.address
|
|
665
|
+
}
|
|
666
|
+
});
|
|
667
|
+
this.grist.refresh();
|
|
668
|
+
await this.grist.requestUpdate();
|
|
669
|
+
this.grist.checkDirties();
|
|
643
670
|
}
|
|
644
|
-
`,
|
|
645
|
-
variables: {
|
|
646
|
-
id: record.id,
|
|
647
|
-
contactId: contact.id
|
|
648
|
-
}
|
|
649
|
-
});
|
|
650
|
-
this.grist.fetch();
|
|
651
671
|
}
|
|
652
672
|
async detachContact(record) {
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
id
|
|
673
|
+
if (record.id) {
|
|
674
|
+
const response = await client.mutate({
|
|
675
|
+
mutation: gql `
|
|
676
|
+
mutation ($id: String!) {
|
|
677
|
+
detachContact(id: $id) {
|
|
678
|
+
id
|
|
679
|
+
}
|
|
658
680
|
}
|
|
681
|
+
`,
|
|
682
|
+
variables: {
|
|
683
|
+
id: record.id
|
|
684
|
+
}
|
|
685
|
+
});
|
|
686
|
+
this.grist.fetch();
|
|
687
|
+
}
|
|
688
|
+
else {
|
|
689
|
+
record.contact = null;
|
|
690
|
+
this.grist.refresh();
|
|
659
691
|
}
|
|
660
|
-
`,
|
|
661
|
-
variables: {
|
|
662
|
-
id: record.id
|
|
663
|
-
}
|
|
664
|
-
});
|
|
665
|
-
this.grist.fetch();
|
|
666
692
|
}
|
|
667
693
|
};
|
|
668
694
|
EmployeeListPage.styles = [
|
|
669
695
|
ScrollbarStyles,
|
|
696
|
+
CommonGristStyles,
|
|
670
697
|
CommonHeaderStyles,
|
|
671
698
|
css `
|
|
672
699
|
:host {
|