@things-factory/code-ui 7.0.48 → 7.0.55

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.
@@ -8,11 +8,11 @@ import { css, html, LitElement } from 'lit'
8
8
  import { customElement, property, query, state } from 'lit/decorators.js'
9
9
 
10
10
  import { i18next, localize } from '@operato/i18n'
11
- import { client, gqlContext, buildArgs } from '@operato/graphql'
12
- import { ButtonContainerStyles, CommonHeaderStyles, ScrollbarStyles } from '@operato/styles'
13
- import { isMobileDevice } from '@operato/utils'
11
+ import { client } from '@operato/graphql'
12
+ import { ButtonContainerStyles, CommonGristStyles, CommonHeaderStyles, ScrollbarStyles } from '@operato/styles'
13
+ import { isMobileDevice, adjustFilters } from '@operato/utils'
14
14
  import { OxPrompt } from '@operato/popup/ox-prompt.js'
15
- import { DataGrist, FetchOption } from '@operato/data-grist'
15
+ import { DataGrist, FetchOption, QueryFilter } from '@operato/data-grist'
16
16
 
17
17
  import { getLanguages } from '@things-factory/auth-base/dist-client'
18
18
 
@@ -21,6 +21,7 @@ export class CodeManagementDetail extends localize(i18next)(LitElement) {
21
21
  static styles = [
22
22
  ScrollbarStyles,
23
23
  ButtonContainerStyles,
24
+ CommonGristStyles,
24
25
  CommonHeaderStyles,
25
26
  css`
26
27
  :host {
@@ -131,21 +132,19 @@ export class CodeManagementDetail extends localize(i18next)(LitElement) {
131
132
 
132
133
  async fetchHandler({ filters, page, limit, sorters = [{ name: 'rank' }] }: FetchOption) {
133
134
  if (this.codeId) {
134
- filters!.push({
135
- name: 'commonCodeId',
136
- operator: 'eq',
137
- value: this.codeId
138
- })
135
+ filters = adjustFilters(filters || [], [
136
+ {
137
+ name: 'commonCode',
138
+ operator: 'eq',
139
+ value: this.codeId
140
+ }
141
+ ]) as QueryFilter[]
139
142
  }
140
143
 
141
144
  const response = await client.query({
142
145
  query: gql`
143
- query {
144
- commonCodeDetails(${buildArgs({
145
- filters,
146
- pagination: { page, limit },
147
- sortings: sorters
148
- })}) {
146
+ query CommonCodeDetails($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) {
147
+ commonCodeDetails(filters: $filters, pagination: $pagination, sortings: $sortings) {
149
148
  items {
150
149
  id
151
150
  name
@@ -153,7 +152,7 @@ export class CodeManagementDetail extends localize(i18next)(LitElement) {
153
152
  rank
154
153
  labels
155
154
  updatedAt
156
- updater{
155
+ updater {
157
156
  name
158
157
  description
159
158
  }
@@ -162,7 +161,11 @@ export class CodeManagementDetail extends localize(i18next)(LitElement) {
162
161
  }
163
162
  }
164
163
  `,
165
- context: gqlContext()
164
+ variables: {
165
+ filters,
166
+ pagination: { page, limit },
167
+ sorters
168
+ }
166
169
  })
167
170
 
168
171
  if (!response.errors) {
@@ -179,16 +182,15 @@ export class CodeManagementDetail extends localize(i18next)(LitElement) {
179
182
  return this.showToast(i18next.t('text.nothing_changed'))
180
183
  }
181
184
 
182
- const response = await client.query({
183
- query: gql`
185
+ const response = await client.mutate({
186
+ mutation: gql`
184
187
  mutation updateMultipleCommonCodeDetail($patches: [CommonCodeDetailPatch!]!) {
185
188
  updateMultipleCommonCodeDetail(patches: $patches) {
186
189
  name
187
190
  }
188
191
  }
189
192
  `,
190
- variables: { patches },
191
- context: gqlContext()
193
+ variables: { patches }
192
194
  })
193
195
 
194
196
  if (!response.errors) this.grist.fetch()
@@ -209,13 +211,15 @@ export class CodeManagementDetail extends localize(i18next)(LitElement) {
209
211
  cancelButton: { text: i18next.t('button.cancel') }
210
212
  })
211
213
  ) {
212
- const response = await client.query({
213
- query: gql`
214
- mutation {
215
- deleteCommonCodeDetails(${buildArgs({ ids })})
214
+ const response = await client.mutate({
215
+ mutation: gql`
216
+ mutation DeleteCommonCodeDetails($ids: [String!]!) {
217
+ deleteCommonCodeDetails(ids: $ids)
216
218
  }
217
219
  `,
218
- context: gqlContext()
220
+ variables: {
221
+ ids
222
+ }
219
223
  })
220
224
 
221
225
  if (!response.errors) {
@@ -10,9 +10,9 @@ import { customElement, property, query, state } from 'lit/decorators.js'
10
10
 
11
11
  import { openPopup } from '@operato/layout'
12
12
  import { i18next, localize } from '@operato/i18n'
13
- import { client, gqlContext, buildArgs } from '@operato/graphql'
13
+ import { client } from '@operato/graphql'
14
14
  import { PageView } from '@operato/shell'
15
- import { CommonButtonStyles, CommonHeaderStyles, ScrollbarStyles } from '@operato/styles'
15
+ import { CommonButtonStyles, CommonGristStyles, CommonHeaderStyles, ScrollbarStyles } from '@operato/styles'
16
16
  import { isMobileDevice } from '@operato/utils'
17
17
  import { DataGrist, FetchOption } from '@operato/data-grist'
18
18
 
@@ -22,13 +22,25 @@ import { OxPrompt } from '@operato/popup/ox-prompt.js'
22
22
  export class CodeManagement extends localize(i18next)(PageView) {
23
23
  static styles = [
24
24
  ScrollbarStyles,
25
+ CommonGristStyles,
25
26
  CommonHeaderStyles,
26
27
  css`
27
28
  :host {
28
29
  display: flex;
29
- flex-direction: column;
30
30
 
31
- overflow: hidden;
31
+ width: 100%;
32
+
33
+ --grid-record-emphasized-background-color: #8b0000;
34
+ --grid-record-emphasized-color: #ff6b6b;
35
+ }
36
+
37
+ ox-grist {
38
+ overflow-y: auto;
39
+ flex: 1;
40
+ }
41
+
42
+ .header {
43
+ grid-template-areas: 'filters actions';
32
44
  }
33
45
  `
34
46
  ]
@@ -55,7 +67,7 @@ export class CodeManagement extends localize(i18next)(PageView) {
55
67
 
56
68
  get context() {
57
69
  return {
58
- title: i18next.t('title.code_management'),
70
+ title: i18next.t('title.code-management'),
59
71
  actions: [
60
72
  {
61
73
  title: i18next.t('button.save'),
@@ -137,18 +149,14 @@ export class CodeManagement extends localize(i18next)(PageView) {
137
149
  async fetchHandler({ filters, page, limit, sorters = [{ name: 'name' }, { name: 'updatedAt' }] }: FetchOption) {
138
150
  const response = await client.query({
139
151
  query: gql`
140
- query {
141
- commonCodes(${buildArgs({
142
- filters,
143
- pagination: { page, limit },
144
- sortings: sorters
145
- })}) {
152
+ query CommonCodes($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) {
153
+ commonCodes(filters: $filters, pagination: $pagination, sortings: $sortings) {
146
154
  items {
147
155
  id
148
156
  name
149
157
  description
150
158
  updatedAt
151
- updater{
159
+ updater {
152
160
  id
153
161
  name
154
162
  description
@@ -158,7 +166,11 @@ export class CodeManagement extends localize(i18next)(PageView) {
158
166
  }
159
167
  }
160
168
  `,
161
- context: gqlContext()
169
+ variables: {
170
+ filters,
171
+ pagination: { page, limit },
172
+ sorters
173
+ }
162
174
  })
163
175
 
164
176
  return {
@@ -173,17 +185,15 @@ export class CodeManagement extends localize(i18next)(PageView) {
173
185
  return this.showToast(i18next.t('text.nothing_changed'))
174
186
  }
175
187
 
176
- const response = await client.query({
177
- query: gql`
178
- mutation {
179
- updateMultipleCommonCode(${buildArgs({
180
- patches
181
- })}) {
182
- name
183
- }
188
+ const response = await client.mutate({
189
+ mutation: gql`
190
+ mutation UpdateMultipleCommonCode($patches: [CommonCodePatch!]!) {
191
+ updateMultipleCommonCode(patches: $patches) {
192
+ name
184
193
  }
185
- `,
186
- context: gqlContext()
194
+ }
195
+ `,
196
+ variables: { patches }
187
197
  })
188
198
 
189
199
  if (!response.errors) {
@@ -207,13 +217,15 @@ export class CodeManagement extends localize(i18next)(PageView) {
207
217
  cancelButton: { text: i18next.t('button.cancel') }
208
218
  })
209
219
  ) {
210
- const response = await client.query({
211
- query: gql`
212
- mutation {
213
- deleteCommonCodes(${buildArgs({ ids })})
220
+ const response = await client.mutate({
221
+ mutation: gql`
222
+ mutation DeleteCommonCodes($ids: [String!]!) {
223
+ deleteCommonCodes(ids: $ids)
214
224
  }
215
225
  `,
216
- context: gqlContext()
226
+ variables: {
227
+ ids
228
+ }
217
229
  })
218
230
 
219
231
  if (!response.errors) {
@@ -251,7 +263,7 @@ export class CodeManagement extends localize(i18next)(PageView) {
251
263
  openPopup(html` <code-management-detail .codeId="${codeId}"></code-management-detail> `, {
252
264
  backdrop: true,
253
265
  size: 'large',
254
- title: `${i18next.t('title.code_management_detail')} - ${codeName}`
266
+ title: `${i18next.t('title.code-management-detail')} - ${codeName}`
255
267
  })
256
268
  }
257
269
 
@@ -7,9 +7,9 @@ import gql from 'graphql-tag';
7
7
  import { css, html, LitElement } from 'lit';
8
8
  import { customElement, property, query, state } from 'lit/decorators.js';
9
9
  import { i18next, localize } from '@operato/i18n';
10
- import { client, gqlContext, buildArgs } from '@operato/graphql';
11
- import { ButtonContainerStyles, CommonHeaderStyles, ScrollbarStyles } from '@operato/styles';
12
- import { isMobileDevice } from '@operato/utils';
10
+ import { client } from '@operato/graphql';
11
+ import { ButtonContainerStyles, CommonGristStyles, CommonHeaderStyles, ScrollbarStyles } from '@operato/styles';
12
+ import { isMobileDevice, adjustFilters } from '@operato/utils';
13
13
  import { OxPrompt } from '@operato/popup/ox-prompt.js';
14
14
  import { DataGrist } from '@operato/data-grist';
15
15
  import { getLanguages } from '@things-factory/auth-base/dist-client';
@@ -101,20 +101,18 @@ let CodeManagementDetail = class CodeManagementDetail extends localize(i18next)(
101
101
  }
102
102
  async fetchHandler({ filters, page, limit, sorters = [{ name: 'rank' }] }) {
103
103
  if (this.codeId) {
104
- filters.push({
105
- name: 'commonCodeId',
106
- operator: 'eq',
107
- value: this.codeId
108
- });
104
+ filters = adjustFilters(filters || [], [
105
+ {
106
+ name: 'commonCode',
107
+ operator: 'eq',
108
+ value: this.codeId
109
+ }
110
+ ]);
109
111
  }
110
112
  const response = await client.query({
111
113
  query: gql `
112
- query {
113
- commonCodeDetails(${buildArgs({
114
- filters,
115
- pagination: { page, limit },
116
- sortings: sorters
117
- })}) {
114
+ query CommonCodeDetails($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) {
115
+ commonCodeDetails(filters: $filters, pagination: $pagination, sortings: $sortings) {
118
116
  items {
119
117
  id
120
118
  name
@@ -122,7 +120,7 @@ let CodeManagementDetail = class CodeManagementDetail extends localize(i18next)(
122
120
  rank
123
121
  labels
124
122
  updatedAt
125
- updater{
123
+ updater {
126
124
  name
127
125
  description
128
126
  }
@@ -131,7 +129,11 @@ let CodeManagementDetail = class CodeManagementDetail extends localize(i18next)(
131
129
  }
132
130
  }
133
131
  `,
134
- context: gqlContext()
132
+ variables: {
133
+ filters,
134
+ pagination: { page, limit },
135
+ sorters
136
+ }
135
137
  });
136
138
  if (!response.errors) {
137
139
  return {
@@ -145,16 +147,15 @@ let CodeManagementDetail = class CodeManagementDetail extends localize(i18next)(
145
147
  if (!(patches === null || patches === void 0 ? void 0 : patches.length)) {
146
148
  return this.showToast(i18next.t('text.nothing_changed'));
147
149
  }
148
- const response = await client.query({
149
- query: gql `
150
+ const response = await client.mutate({
151
+ mutation: gql `
150
152
  mutation updateMultipleCommonCodeDetail($patches: [CommonCodeDetailPatch!]!) {
151
153
  updateMultipleCommonCodeDetail(patches: $patches) {
152
154
  name
153
155
  }
154
156
  }
155
157
  `,
156
- variables: { patches },
157
- context: gqlContext()
158
+ variables: { patches }
158
159
  });
159
160
  if (!response.errors)
160
161
  this.grist.fetch();
@@ -171,13 +172,15 @@ let CodeManagementDetail = class CodeManagementDetail extends localize(i18next)(
171
172
  confirmButton: { text: i18next.t('button.delete') },
172
173
  cancelButton: { text: i18next.t('button.cancel') }
173
174
  })) {
174
- const response = await client.query({
175
- query: gql `
176
- mutation {
177
- deleteCommonCodeDetails(${buildArgs({ ids })})
175
+ const response = await client.mutate({
176
+ mutation: gql `
177
+ mutation DeleteCommonCodeDetails($ids: [String!]!) {
178
+ deleteCommonCodeDetails(ids: $ids)
178
179
  }
179
180
  `,
180
- context: gqlContext()
181
+ variables: {
182
+ ids
183
+ }
181
184
  });
182
185
  if (!response.errors) {
183
186
  OxPrompt.open({
@@ -213,6 +216,7 @@ let CodeManagementDetail = class CodeManagementDetail extends localize(i18next)(
213
216
  CodeManagementDetail.styles = [
214
217
  ScrollbarStyles,
215
218
  ButtonContainerStyles,
219
+ CommonGristStyles,
216
220
  CommonHeaderStyles,
217
221
  css `
218
222
  :host {
@@ -1 +1 @@
1
- {"version":3,"file":"code-management-detail.js","sourceRoot":"","sources":["../../client/pages/code-management-detail.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/data-grist/ox-grist.js'\nimport '@operato/data-grist/ox-filters-form.js'\nimport '@operato/data-grist/ox-sorters-control.js'\nimport '@operato/data-grist/ox-record-creator.js'\n\nimport gql from 'graphql-tag'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\n\nimport { i18next, localize } from '@operato/i18n'\nimport { client, gqlContext, buildArgs } from '@operato/graphql'\nimport { ButtonContainerStyles, CommonHeaderStyles, ScrollbarStyles } from '@operato/styles'\nimport { isMobileDevice } from '@operato/utils'\nimport { OxPrompt } from '@operato/popup/ox-prompt.js'\nimport { DataGrist, FetchOption } from '@operato/data-grist'\n\nimport { getLanguages } from '@things-factory/auth-base/dist-client'\n\n@customElement('code-management-detail')\nexport class CodeManagementDetail extends localize(i18next)(LitElement) {\n static styles = [\n ScrollbarStyles,\n ButtonContainerStyles,\n CommonHeaderStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n background-color: var(--md-sys-color-surface);\n }\n\n ox-grist {\n flex: 1;\n }\n `\n ]\n\n @property({ type: String }) codeId?: string\n @property({ type: Object }) config: any\n\n @state() mode: 'LIST' | 'GRID' = isMobileDevice() ? 'LIST' : 'GRID'\n\n @query('ox-grist') grist!: DataGrist\n\n render() {\n let mode = this.mode\n\n return html`\n <ox-grist .mode=${mode} auto-fetch .config=${this.config} .fetchHandler=${this.fetchHandler.bind(this)}>\n <div slot=\"headroom\" class=\"header\">\n <div class=\"filters\">\n <ox-filters-form></ox-filters-form>\n </div>\n </div>\n </ox-grist>\n\n <div class=\"button-container\">\n <button @click=${this.save}><md-icon>save</md-icon>${String(i18next.t('button.save'))}</button>\n <button @click=${this.delete} danger><md-icon>delete</md-icon>${String(i18next.t('button.delete'))}</button>\n </div>\n `\n }\n\n async firstUpdated() {\n this.config = {\n rows: { selectable: { multiple: true } },\n pagination: { pages: [100, 200, 500] },\n columns: [\n { type: 'gutter', gutterName: 'dirty' },\n { type: 'gutter', gutterName: 'sequence' },\n { type: 'gutter', gutterName: 'row-selector', multiple: true },\n {\n type: 'integer',\n name: 'rank',\n record: { align: 'left', editable: true, format: '#,###' },\n header: i18next.t('field.rank'),\n sortable: true,\n width: 60\n },\n {\n type: 'string',\n name: 'name',\n record: { align: 'left', editable: true },\n header: i18next.t('field.code'),\n sortable: true,\n filter: 'search',\n width: 320\n },\n {\n type: 'i18n-label',\n name: 'labels',\n record: {\n align: 'left',\n editable: true,\n renderer: (value, column, record, rowIndex, field) =>\n html`<span>${value && typeof value == 'object' ? value[i18next.language] : record['description']}</span>`,\n options: {\n objectified: true,\n languages: await getLanguages(),\n displayColumn: 'description'\n }\n },\n header: i18next.t('field.i18n-label'),\n sortable: true,\n filter: 'search',\n width: 370\n },\n {\n type: 'object',\n name: 'updater',\n record: { align: 'left', editable: false },\n header: i18next.t('field.updater'),\n sortable: true,\n width: 90\n },\n {\n type: 'datetime',\n name: 'updatedAt',\n header: i18next.t('field.updated_at'),\n record: { editable: false },\n sortable: true,\n width: 180\n }\n ]\n }\n\n await this.updateComplete\n this.grist.fetch()\n }\n\n async fetchHandler({ filters, page, limit, sorters = [{ name: 'rank' }] }: FetchOption) {\n if (this.codeId) {\n filters!.push({\n name: 'commonCodeId',\n operator: 'eq',\n value: this.codeId\n })\n }\n\n const response = await client.query({\n query: gql`\n query {\n commonCodeDetails(${buildArgs({\n filters,\n pagination: { page, limit },\n sortings: sorters\n })}) {\n items {\n id\n name\n description\n rank\n labels\n updatedAt\n updater{\n name\n description\n }\n }\n total\n }\n }\n `,\n context: gqlContext()\n })\n\n if (!response.errors) {\n return {\n total: response.data.commonCodeDetails.total || 0,\n records: response.data.commonCodeDetails.items || []\n }\n }\n }\n\n async save() {\n const patches = this.getPatches()\n if (!patches?.length) {\n return this.showToast(i18next.t('text.nothing_changed'))\n }\n\n const response = await client.query({\n query: gql`\n mutation updateMultipleCommonCodeDetail($patches: [CommonCodeDetailPatch!]!) {\n updateMultipleCommonCodeDetail(patches: $patches) {\n name\n }\n }\n `,\n variables: { patches },\n context: gqlContext()\n })\n\n if (!response.errors) this.grist.fetch()\n }\n\n async delete() {\n const ids = this.grist.selected.map(record => record.id)\n if (!ids?.length) {\n return this.showToast(i18next.t('text.there_is_nothing_to_delete'))\n }\n\n if (\n await OxPrompt.open({\n type: 'warning',\n title: i18next.t('button.delete'),\n text: i18next.t('text.are_you_sure'),\n confirmButton: { text: i18next.t('button.delete') },\n cancelButton: { text: i18next.t('button.cancel') }\n })\n ) {\n const response = await client.query({\n query: gql`\n mutation {\n deleteCommonCodeDetails(${buildArgs({ ids })})\n }\n `,\n context: gqlContext()\n })\n\n if (!response.errors) {\n OxPrompt.open({\n type: 'success',\n title: i18next.t('text.completed'),\n text: i18next.t('text.data_deleted_successfully'),\n confirmButton: { text: i18next.t('button.confirm') }\n })\n\n this.grist.fetch()\n }\n }\n }\n\n getPatches() {\n let patches = this.grist.dirtyRecords\n if (patches && patches.length) {\n patches = patches.map(code => {\n let patchField: any = code.id ? { id: code.id } : {}\n const dirtyFields = code.__dirtyfields__\n for (let key in dirtyFields) {\n patchField[key] = dirtyFields[key].after\n }\n patchField.commonCode = { id: this.codeId }\n patchField.cuFlag = code.__dirty__\n\n return patchField\n })\n }\n\n return patches\n }\n\n showToast(message) {\n document.dispatchEvent(new CustomEvent('notify', { detail: { message, option: { timer: 1000 } } }))\n }\n}\n"]}
1
+ {"version":3,"file":"code-management-detail.js","sourceRoot":"","sources":["../../client/pages/code-management-detail.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/data-grist/ox-grist.js'\nimport '@operato/data-grist/ox-filters-form.js'\nimport '@operato/data-grist/ox-sorters-control.js'\nimport '@operato/data-grist/ox-record-creator.js'\n\nimport gql from 'graphql-tag'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\n\nimport { i18next, localize } from '@operato/i18n'\nimport { client } from '@operato/graphql'\nimport { ButtonContainerStyles, CommonGristStyles, CommonHeaderStyles, ScrollbarStyles } from '@operato/styles'\nimport { isMobileDevice, adjustFilters } from '@operato/utils'\nimport { OxPrompt } from '@operato/popup/ox-prompt.js'\nimport { DataGrist, FetchOption, QueryFilter } from '@operato/data-grist'\n\nimport { getLanguages } from '@things-factory/auth-base/dist-client'\n\n@customElement('code-management-detail')\nexport class CodeManagementDetail extends localize(i18next)(LitElement) {\n static styles = [\n ScrollbarStyles,\n ButtonContainerStyles,\n CommonGristStyles,\n CommonHeaderStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n background-color: var(--md-sys-color-surface);\n }\n\n ox-grist {\n flex: 1;\n }\n `\n ]\n\n @property({ type: String }) codeId?: string\n @property({ type: Object }) config: any\n\n @state() mode: 'LIST' | 'GRID' = isMobileDevice() ? 'LIST' : 'GRID'\n\n @query('ox-grist') grist!: DataGrist\n\n render() {\n let mode = this.mode\n\n return html`\n <ox-grist .mode=${mode} auto-fetch .config=${this.config} .fetchHandler=${this.fetchHandler.bind(this)}>\n <div slot=\"headroom\" class=\"header\">\n <div class=\"filters\">\n <ox-filters-form></ox-filters-form>\n </div>\n </div>\n </ox-grist>\n\n <div class=\"button-container\">\n <button @click=${this.save}><md-icon>save</md-icon>${String(i18next.t('button.save'))}</button>\n <button @click=${this.delete} danger><md-icon>delete</md-icon>${String(i18next.t('button.delete'))}</button>\n </div>\n `\n }\n\n async firstUpdated() {\n this.config = {\n rows: { selectable: { multiple: true } },\n pagination: { pages: [100, 200, 500] },\n columns: [\n { type: 'gutter', gutterName: 'dirty' },\n { type: 'gutter', gutterName: 'sequence' },\n { type: 'gutter', gutterName: 'row-selector', multiple: true },\n {\n type: 'integer',\n name: 'rank',\n record: { align: 'left', editable: true, format: '#,###' },\n header: i18next.t('field.rank'),\n sortable: true,\n width: 60\n },\n {\n type: 'string',\n name: 'name',\n record: { align: 'left', editable: true },\n header: i18next.t('field.code'),\n sortable: true,\n filter: 'search',\n width: 320\n },\n {\n type: 'i18n-label',\n name: 'labels',\n record: {\n align: 'left',\n editable: true,\n renderer: (value, column, record, rowIndex, field) =>\n html`<span>${value && typeof value == 'object' ? value[i18next.language] : record['description']}</span>`,\n options: {\n objectified: true,\n languages: await getLanguages(),\n displayColumn: 'description'\n }\n },\n header: i18next.t('field.i18n-label'),\n sortable: true,\n filter: 'search',\n width: 370\n },\n {\n type: 'object',\n name: 'updater',\n record: { align: 'left', editable: false },\n header: i18next.t('field.updater'),\n sortable: true,\n width: 90\n },\n {\n type: 'datetime',\n name: 'updatedAt',\n header: i18next.t('field.updated_at'),\n record: { editable: false },\n sortable: true,\n width: 180\n }\n ]\n }\n\n await this.updateComplete\n this.grist.fetch()\n }\n\n async fetchHandler({ filters, page, limit, sorters = [{ name: 'rank' }] }: FetchOption) {\n if (this.codeId) {\n filters = adjustFilters(filters || [], [\n {\n name: 'commonCode',\n operator: 'eq',\n value: this.codeId\n }\n ]) as QueryFilter[]\n }\n\n const response = await client.query({\n query: gql`\n query CommonCodeDetails($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) {\n commonCodeDetails(filters: $filters, pagination: $pagination, sortings: $sortings) {\n items {\n id\n name\n description\n rank\n labels\n updatedAt\n updater {\n name\n description\n }\n }\n total\n }\n }\n `,\n variables: {\n filters,\n pagination: { page, limit },\n sorters\n }\n })\n\n if (!response.errors) {\n return {\n total: response.data.commonCodeDetails.total || 0,\n records: response.data.commonCodeDetails.items || []\n }\n }\n }\n\n async save() {\n const patches = this.getPatches()\n if (!patches?.length) {\n return this.showToast(i18next.t('text.nothing_changed'))\n }\n\n const response = await client.mutate({\n mutation: gql`\n mutation updateMultipleCommonCodeDetail($patches: [CommonCodeDetailPatch!]!) {\n updateMultipleCommonCodeDetail(patches: $patches) {\n name\n }\n }\n `,\n variables: { patches }\n })\n\n if (!response.errors) this.grist.fetch()\n }\n\n async delete() {\n const ids = this.grist.selected.map(record => record.id)\n if (!ids?.length) {\n return this.showToast(i18next.t('text.there_is_nothing_to_delete'))\n }\n\n if (\n await OxPrompt.open({\n type: 'warning',\n title: i18next.t('button.delete'),\n text: i18next.t('text.are_you_sure'),\n confirmButton: { text: i18next.t('button.delete') },\n cancelButton: { text: i18next.t('button.cancel') }\n })\n ) {\n const response = await client.mutate({\n mutation: gql`\n mutation DeleteCommonCodeDetails($ids: [String!]!) {\n deleteCommonCodeDetails(ids: $ids)\n }\n `,\n variables: {\n ids\n }\n })\n\n if (!response.errors) {\n OxPrompt.open({\n type: 'success',\n title: i18next.t('text.completed'),\n text: i18next.t('text.data_deleted_successfully'),\n confirmButton: { text: i18next.t('button.confirm') }\n })\n\n this.grist.fetch()\n }\n }\n }\n\n getPatches() {\n let patches = this.grist.dirtyRecords\n if (patches && patches.length) {\n patches = patches.map(code => {\n let patchField: any = code.id ? { id: code.id } : {}\n const dirtyFields = code.__dirtyfields__\n for (let key in dirtyFields) {\n patchField[key] = dirtyFields[key].after\n }\n patchField.commonCode = { id: this.codeId }\n patchField.cuFlag = code.__dirty__\n\n return patchField\n })\n }\n\n return patches\n }\n\n showToast(message) {\n document.dispatchEvent(new CustomEvent('notify', { detail: { message, option: { timer: 1000 } } }))\n }\n}\n"]}
@@ -9,9 +9,9 @@ import { css, html } from 'lit';
9
9
  import { customElement, query, state } from 'lit/decorators.js';
10
10
  import { openPopup } from '@operato/layout';
11
11
  import { i18next, localize } from '@operato/i18n';
12
- import { client, gqlContext, buildArgs } from '@operato/graphql';
12
+ import { client } from '@operato/graphql';
13
13
  import { PageView } from '@operato/shell';
14
- import { CommonButtonStyles, CommonHeaderStyles, ScrollbarStyles } from '@operato/styles';
14
+ import { CommonButtonStyles, CommonGristStyles, CommonHeaderStyles, ScrollbarStyles } from '@operato/styles';
15
15
  import { isMobileDevice } from '@operato/utils';
16
16
  import { DataGrist } from '@operato/data-grist';
17
17
  import { OxPrompt } from '@operato/popup/ox-prompt.js';
@@ -34,7 +34,7 @@ let CodeManagement = class CodeManagement extends localize(i18next)(PageView) {
34
34
  }
35
35
  get context() {
36
36
  return {
37
- title: i18next.t('title.code_management'),
37
+ title: i18next.t('title.code-management'),
38
38
  actions: [
39
39
  Object.assign({ title: i18next.t('button.save'), action: this.save.bind(this) }, CommonButtonStyles.save),
40
40
  Object.assign({ title: i18next.t('button.delete'), action: this.delete.bind(this) }, CommonButtonStyles.delete)
@@ -106,18 +106,14 @@ let CodeManagement = class CodeManagement extends localize(i18next)(PageView) {
106
106
  async fetchHandler({ filters, page, limit, sorters = [{ name: 'name' }, { name: 'updatedAt' }] }) {
107
107
  const response = await client.query({
108
108
  query: gql `
109
- query {
110
- commonCodes(${buildArgs({
111
- filters,
112
- pagination: { page, limit },
113
- sortings: sorters
114
- })}) {
109
+ query CommonCodes($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) {
110
+ commonCodes(filters: $filters, pagination: $pagination, sortings: $sortings) {
115
111
  items {
116
112
  id
117
113
  name
118
114
  description
119
115
  updatedAt
120
- updater{
116
+ updater {
121
117
  id
122
118
  name
123
119
  description
@@ -127,7 +123,11 @@ let CodeManagement = class CodeManagement extends localize(i18next)(PageView) {
127
123
  }
128
124
  }
129
125
  `,
130
- context: gqlContext()
126
+ variables: {
127
+ filters,
128
+ pagination: { page, limit },
129
+ sorters
130
+ }
131
131
  });
132
132
  return {
133
133
  total: response.data.commonCodes.total || 0,
@@ -139,17 +139,15 @@ let CodeManagement = class CodeManagement extends localize(i18next)(PageView) {
139
139
  if (!(patches === null || patches === void 0 ? void 0 : patches.length)) {
140
140
  return this.showToast(i18next.t('text.nothing_changed'));
141
141
  }
142
- const response = await client.query({
143
- query: gql `
144
- mutation {
145
- updateMultipleCommonCode(${buildArgs({
146
- patches
147
- })}) {
148
- name
149
- }
142
+ const response = await client.mutate({
143
+ mutation: gql `
144
+ mutation UpdateMultipleCommonCode($patches: [CommonCodePatch!]!) {
145
+ updateMultipleCommonCode(patches: $patches) {
146
+ name
150
147
  }
151
- `,
152
- context: gqlContext()
148
+ }
149
+ `,
150
+ variables: { patches }
153
151
  });
154
152
  if (!response.errors) {
155
153
  this.showToast(i18next.t('text.data_updated_successfully'));
@@ -168,13 +166,15 @@ let CodeManagement = class CodeManagement extends localize(i18next)(PageView) {
168
166
  confirmButton: { text: i18next.t('button.delete') },
169
167
  cancelButton: { text: i18next.t('button.cancel') }
170
168
  })) {
171
- const response = await client.query({
172
- query: gql `
173
- mutation {
174
- deleteCommonCodes(${buildArgs({ ids })})
169
+ const response = await client.mutate({
170
+ mutation: gql `
171
+ mutation DeleteCommonCodes($ids: [String!]!) {
172
+ deleteCommonCodes(ids: $ids)
175
173
  }
176
174
  `,
177
- context: gqlContext()
175
+ variables: {
176
+ ids
177
+ }
178
178
  });
179
179
  if (!response.errors) {
180
180
  OxPrompt.open({
@@ -206,7 +206,7 @@ let CodeManagement = class CodeManagement extends localize(i18next)(PageView) {
206
206
  openPopup(html ` <code-management-detail .codeId="${codeId}"></code-management-detail> `, {
207
207
  backdrop: true,
208
208
  size: 'large',
209
- title: `${i18next.t('title.code_management_detail')} - ${codeName}`
209
+ title: `${i18next.t('title.code-management-detail')} - ${codeName}`
210
210
  });
211
211
  }
212
212
  showToast(message) {
@@ -215,13 +215,25 @@ let CodeManagement = class CodeManagement extends localize(i18next)(PageView) {
215
215
  };
216
216
  CodeManagement.styles = [
217
217
  ScrollbarStyles,
218
+ CommonGristStyles,
218
219
  CommonHeaderStyles,
219
220
  css `
220
221
  :host {
221
222
  display: flex;
222
- flex-direction: column;
223
223
 
224
- overflow: hidden;
224
+ width: 100%;
225
+
226
+ --grid-record-emphasized-background-color: #8b0000;
227
+ --grid-record-emphasized-color: #ff6b6b;
228
+ }
229
+
230
+ ox-grist {
231
+ overflow-y: auto;
232
+ flex: 1;
233
+ }
234
+
235
+ .header {
236
+ grid-template-areas: 'filters actions';
225
237
  }
226
238
  `
227
239
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"code-management.js","sourceRoot":"","sources":["../../client/pages/code-management.ts"],"names":[],"mappings":"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","sourcesContent":["import './code-management-detail'\nimport '@operato/data-grist/ox-grist.js'\nimport '@operato/data-grist/ox-filters-form.js'\nimport '@operato/data-grist/ox-sorters-control.js'\nimport '@operato/data-grist/ox-record-creator.js'\n\nimport gql from 'graphql-tag'\nimport { css, html } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\n\nimport { openPopup } from '@operato/layout'\nimport { i18next, localize } from '@operato/i18n'\nimport { client, gqlContext, buildArgs } from '@operato/graphql'\nimport { PageView } from '@operato/shell'\nimport { CommonButtonStyles, CommonHeaderStyles, ScrollbarStyles } from '@operato/styles'\nimport { isMobileDevice } from '@operato/utils'\nimport { DataGrist, FetchOption } from '@operato/data-grist'\n\nimport { OxPrompt } from '@operato/popup/ox-prompt.js'\n\n@customElement('code-management')\nexport class CodeManagement extends localize(i18next)(PageView) {\n static styles = [\n ScrollbarStyles,\n CommonHeaderStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n\n overflow: hidden;\n }\n `\n ]\n\n @state() config?: any\n @state() data?: any\n @state() mode: 'LIST' | 'GRID' = isMobileDevice() ? 'LIST' : 'GRID'\n\n @query('ox-grist') grist!: DataGrist\n\n render() {\n let mode = this.mode\n\n return html`\n <ox-grist .mode=${mode} auto-fetch .config=${this.config} .fetchHandler=${this.fetchHandler.bind(this)}>\n <div slot=\"headroom\" class=\"header\">\n <div class=\"filters\">\n <ox-filters-form></ox-filters-form>\n </div>\n </div>\n </ox-grist>\n `\n }\n\n get context() {\n return {\n title: i18next.t('title.code_management'),\n actions: [\n {\n title: i18next.t('button.save'),\n action: this.save.bind(this),\n ...CommonButtonStyles.save\n },\n {\n title: i18next.t('button.delete'),\n action: this.delete.bind(this),\n ...CommonButtonStyles.delete\n }\n ],\n help: 'code/code-management'\n }\n }\n\n pageUpdated(_changed, _lifecycle) {\n if (this.active) {\n this.grist.fetch()\n }\n }\n\n pageInitialized() {\n this.config = {\n rows: { selectable: { multiple: true } },\n pagination: { pages: [50, 100, 200] },\n columns: [\n { type: 'gutter', gutterName: 'dirty' },\n { type: 'gutter', gutterName: 'sequence' },\n { type: 'gutter', gutterName: 'row-selector', multiple: true },\n {\n type: 'gutter',\n gutterName: 'button',\n icon: 'reorder',\n handlers: {\n click: (_columns, _data, _column, record, _rowIndex) => {\n if (record.id && record.name) this.openCodeDetail(record.id, record.name)\n }\n }\n },\n {\n type: 'string',\n name: 'name',\n header: i18next.t('field.common-code'),\n record: { editable: true, align: 'left' },\n sortable: true,\n filter: 'search',\n width: 375\n },\n {\n type: 'string',\n name: 'description',\n header: i18next.t('field.description'),\n record: { editable: true, align: 'left' },\n sortable: true,\n filter: 'search',\n width: 500\n },\n {\n type: 'object',\n name: 'updater',\n header: i18next.t('field.updater'),\n record: { editable: false },\n sortable: true,\n width: 90\n },\n {\n type: 'datetime',\n name: 'updatedAt',\n header: i18next.t('field.updated_at'),\n record: { editable: false },\n sortable: true,\n width: 180\n }\n ]\n }\n }\n\n async fetchHandler({ filters, page, limit, sorters = [{ name: 'name' }, { name: 'updatedAt' }] }: FetchOption) {\n const response = await client.query({\n query: gql`\n query {\n commonCodes(${buildArgs({\n filters,\n pagination: { page, limit },\n sortings: sorters\n })}) {\n items {\n id\n name\n description\n updatedAt\n updater{\n id\n name\n description\n }\n }\n total\n }\n }\n `,\n context: gqlContext()\n })\n\n return {\n total: response.data.commonCodes.total || 0,\n records: response.data.commonCodes.items || []\n }\n }\n\n async save() {\n const patches = this.getPatches()\n if (!patches?.length) {\n return this.showToast(i18next.t('text.nothing_changed'))\n }\n\n const response = await client.query({\n query: gql`\n mutation {\n updateMultipleCommonCode(${buildArgs({\n patches\n })}) {\n name\n }\n }\n `,\n context: gqlContext()\n })\n\n if (!response.errors) {\n this.showToast(i18next.t('text.data_updated_successfully'))\n this.grist.fetch()\n }\n }\n\n async delete() {\n const ids = this.grist.selected.map(record => record.id)\n if (!ids?.length) {\n return this.showToast(i18next.t('text.there_is_nothing_to_delete'))\n }\n\n if (\n await OxPrompt.open({\n type: 'warning',\n title: i18next.t('button.delete'),\n text: i18next.t('text.are_you_sure'),\n confirmButton: { text: i18next.t('button.delete') },\n cancelButton: { text: i18next.t('button.cancel') }\n })\n ) {\n const response = await client.query({\n query: gql`\n mutation {\n deleteCommonCodes(${buildArgs({ ids })})\n }\n `,\n context: gqlContext()\n })\n\n if (!response.errors) {\n OxPrompt.open({\n type: 'success',\n title: i18next.t('text.completed'),\n text: i18next.t('text.data_deleted_successfully'),\n confirmButton: { text: i18next.t('button.confirm') }\n })\n\n this.grist.fetch()\n }\n }\n }\n\n getPatches() {\n let patches = this.grist.dirtyRecords\n if (patches && patches.length) {\n patches = patches.map(code => {\n let patchField: any = code.id ? { id: code.id } : {}\n const dirtyFields = code.__dirtyfields__\n for (let key in dirtyFields) {\n patchField[key] = dirtyFields[key].after\n }\n patchField.cuFlag = code.__dirty__\n\n return patchField\n })\n }\n\n return patches\n }\n\n openCodeDetail(codeId, codeName) {\n openPopup(html` <code-management-detail .codeId=\"${codeId}\"></code-management-detail> `, {\n backdrop: true,\n size: 'large',\n title: `${i18next.t('title.code_management_detail')} - ${codeName}`\n })\n }\n\n showToast(message) {\n document.dispatchEvent(new CustomEvent('notify', { detail: { message, option: { timer: 1000 } } }))\n }\n}\n"]}
1
+ {"version":3,"file":"code-management.js","sourceRoot":"","sources":["../../client/pages/code-management.ts"],"names":[],"mappings":"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","sourcesContent":["import './code-management-detail'\nimport '@operato/data-grist/ox-grist.js'\nimport '@operato/data-grist/ox-filters-form.js'\nimport '@operato/data-grist/ox-sorters-control.js'\nimport '@operato/data-grist/ox-record-creator.js'\n\nimport gql from 'graphql-tag'\nimport { css, html } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\n\nimport { openPopup } from '@operato/layout'\nimport { i18next, localize } from '@operato/i18n'\nimport { client } from '@operato/graphql'\nimport { PageView } from '@operato/shell'\nimport { CommonButtonStyles, CommonGristStyles, CommonHeaderStyles, ScrollbarStyles } from '@operato/styles'\nimport { isMobileDevice } from '@operato/utils'\nimport { DataGrist, FetchOption } from '@operato/data-grist'\n\nimport { OxPrompt } from '@operato/popup/ox-prompt.js'\n\n@customElement('code-management')\nexport class CodeManagement extends localize(i18next)(PageView) {\n static styles = [\n ScrollbarStyles,\n CommonGristStyles,\n CommonHeaderStyles,\n css`\n :host {\n display: flex;\n\n width: 100%;\n\n --grid-record-emphasized-background-color: #8b0000;\n --grid-record-emphasized-color: #ff6b6b;\n }\n\n ox-grist {\n overflow-y: auto;\n flex: 1;\n }\n\n .header {\n grid-template-areas: 'filters actions';\n }\n `\n ]\n\n @state() config?: any\n @state() data?: any\n @state() mode: 'LIST' | 'GRID' = isMobileDevice() ? 'LIST' : 'GRID'\n\n @query('ox-grist') grist!: DataGrist\n\n render() {\n let mode = this.mode\n\n return html`\n <ox-grist .mode=${mode} auto-fetch .config=${this.config} .fetchHandler=${this.fetchHandler.bind(this)}>\n <div slot=\"headroom\" class=\"header\">\n <div class=\"filters\">\n <ox-filters-form></ox-filters-form>\n </div>\n </div>\n </ox-grist>\n `\n }\n\n get context() {\n return {\n title: i18next.t('title.code-management'),\n actions: [\n {\n title: i18next.t('button.save'),\n action: this.save.bind(this),\n ...CommonButtonStyles.save\n },\n {\n title: i18next.t('button.delete'),\n action: this.delete.bind(this),\n ...CommonButtonStyles.delete\n }\n ],\n help: 'code/code-management'\n }\n }\n\n pageUpdated(_changed, _lifecycle) {\n if (this.active) {\n this.grist.fetch()\n }\n }\n\n pageInitialized() {\n this.config = {\n rows: { selectable: { multiple: true } },\n pagination: { pages: [50, 100, 200] },\n columns: [\n { type: 'gutter', gutterName: 'dirty' },\n { type: 'gutter', gutterName: 'sequence' },\n { type: 'gutter', gutterName: 'row-selector', multiple: true },\n {\n type: 'gutter',\n gutterName: 'button',\n icon: 'reorder',\n handlers: {\n click: (_columns, _data, _column, record, _rowIndex) => {\n if (record.id && record.name) this.openCodeDetail(record.id, record.name)\n }\n }\n },\n {\n type: 'string',\n name: 'name',\n header: i18next.t('field.common-code'),\n record: { editable: true, align: 'left' },\n sortable: true,\n filter: 'search',\n width: 375\n },\n {\n type: 'string',\n name: 'description',\n header: i18next.t('field.description'),\n record: { editable: true, align: 'left' },\n sortable: true,\n filter: 'search',\n width: 500\n },\n {\n type: 'object',\n name: 'updater',\n header: i18next.t('field.updater'),\n record: { editable: false },\n sortable: true,\n width: 90\n },\n {\n type: 'datetime',\n name: 'updatedAt',\n header: i18next.t('field.updated_at'),\n record: { editable: false },\n sortable: true,\n width: 180\n }\n ]\n }\n }\n\n async fetchHandler({ filters, page, limit, sorters = [{ name: 'name' }, { name: 'updatedAt' }] }: FetchOption) {\n const response = await client.query({\n query: gql`\n query CommonCodes($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) {\n commonCodes(filters: $filters, pagination: $pagination, sortings: $sortings) {\n items {\n id\n name\n description\n updatedAt\n updater {\n id\n name\n description\n }\n }\n total\n }\n }\n `,\n variables: {\n filters,\n pagination: { page, limit },\n sorters\n }\n })\n\n return {\n total: response.data.commonCodes.total || 0,\n records: response.data.commonCodes.items || []\n }\n }\n\n async save() {\n const patches = this.getPatches()\n if (!patches?.length) {\n return this.showToast(i18next.t('text.nothing_changed'))\n }\n\n const response = await client.mutate({\n mutation: gql`\n mutation UpdateMultipleCommonCode($patches: [CommonCodePatch!]!) {\n updateMultipleCommonCode(patches: $patches) {\n name\n }\n }\n `,\n variables: { patches }\n })\n\n if (!response.errors) {\n this.showToast(i18next.t('text.data_updated_successfully'))\n this.grist.fetch()\n }\n }\n\n async delete() {\n const ids = this.grist.selected.map(record => record.id)\n if (!ids?.length) {\n return this.showToast(i18next.t('text.there_is_nothing_to_delete'))\n }\n\n if (\n await OxPrompt.open({\n type: 'warning',\n title: i18next.t('button.delete'),\n text: i18next.t('text.are_you_sure'),\n confirmButton: { text: i18next.t('button.delete') },\n cancelButton: { text: i18next.t('button.cancel') }\n })\n ) {\n const response = await client.mutate({\n mutation: gql`\n mutation DeleteCommonCodes($ids: [String!]!) {\n deleteCommonCodes(ids: $ids)\n }\n `,\n variables: {\n ids\n }\n })\n\n if (!response.errors) {\n OxPrompt.open({\n type: 'success',\n title: i18next.t('text.completed'),\n text: i18next.t('text.data_deleted_successfully'),\n confirmButton: { text: i18next.t('button.confirm') }\n })\n\n this.grist.fetch()\n }\n }\n }\n\n getPatches() {\n let patches = this.grist.dirtyRecords\n if (patches && patches.length) {\n patches = patches.map(code => {\n let patchField: any = code.id ? { id: code.id } : {}\n const dirtyFields = code.__dirtyfields__\n for (let key in dirtyFields) {\n patchField[key] = dirtyFields[key].after\n }\n patchField.cuFlag = code.__dirty__\n\n return patchField\n })\n }\n\n return patches\n }\n\n openCodeDetail(codeId, codeName) {\n openPopup(html` <code-management-detail .codeId=\"${codeId}\"></code-management-detail> `, {\n backdrop: true,\n size: 'large',\n title: `${i18next.t('title.code-management-detail')} - ${codeName}`\n })\n }\n\n showToast(message) {\n document.dispatchEvent(new CustomEvent('notify', { detail: { message, option: { timer: 1000 } } }))\n }\n}\n"]}