@things-factory/dataset 8.0.0-alpha.3 → 8.0.0-alpha.4

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.
Files changed (41) hide show
  1. package/client/activities/activity-data-collect-edit.ts +3 -1
  2. package/client/activities/activity-ooc-resolve-edit.ts +4 -2
  3. package/client/activities/activity-ooc-review-edit.ts +4 -2
  4. package/client/bootstrap.ts +11 -1
  5. package/client/components/data-entry-form.ts +3 -3
  6. package/client/pages/data-entry/data-entry-list-page.ts +50 -9
  7. package/client/pages/data-report/data-report-list-page.ts +9 -2
  8. package/dist-client/activities/activity-data-collect-edit.d.ts +1 -1
  9. package/dist-client/activities/activity-data-collect-edit.js +2 -1
  10. package/dist-client/activities/activity-data-collect-edit.js.map +1 -1
  11. package/dist-client/activities/activity-ooc-resolve-edit.js +4 -2
  12. package/dist-client/activities/activity-ooc-resolve-edit.js.map +1 -1
  13. package/dist-client/activities/activity-ooc-review-edit.js +4 -2
  14. package/dist-client/activities/activity-ooc-review-edit.js.map +1 -1
  15. package/dist-client/bootstrap.js +4 -0
  16. package/dist-client/bootstrap.js.map +1 -1
  17. package/dist-client/components/data-entry-form.js +3 -3
  18. package/dist-client/components/data-entry-form.js.map +1 -1
  19. package/dist-client/pages/data-entry/data-entry-list-page.js +47 -8
  20. package/dist-client/pages/data-entry/data-entry-list-page.js.map +1 -1
  21. package/dist-client/pages/data-report/data-report-list-page.js +8 -2
  22. package/dist-client/pages/data-report/data-report-list-page.js.map +1 -1
  23. package/dist-client/tsconfig.tsbuildinfo +1 -1
  24. package/dist-server/service/data-set/data-set-mutation.d.ts +1 -0
  25. package/dist-server/service/data-set/data-set-mutation.js +71 -11
  26. package/dist-server/service/data-set/data-set-mutation.js.map +1 -1
  27. package/dist-server/service/data-set/data-set-query.js +4 -2
  28. package/dist-server/service/data-set/data-set-query.js.map +1 -1
  29. package/dist-server/tsconfig.tsbuildinfo +1 -1
  30. package/helps/dataset/data-set.ja.md +55 -59
  31. package/helps/dataset/data-set.ko.md +9 -11
  32. package/helps/dataset/data-set.md +20 -24
  33. package/helps/dataset/data-set.zh.md +3 -11
  34. package/package.json +3 -3
  35. package/server/service/data-set/data-set-mutation.ts +78 -12
  36. package/server/service/data-set/data-set-query.ts +4 -2
  37. package/translations/en.json +1 -0
  38. package/translations/ja.json +1 -0
  39. package/translations/ko.json +1 -0
  40. package/translations/ms.json +1 -0
  41. package/translations/zh.json +1 -0
@@ -47,7 +47,9 @@ export class DataCollectActivityEdit extends localize(i18next)(LitElement) {
47
47
  `
48
48
  }
49
49
 
50
- async _updateDataItems() {
50
+ async _updateDataItems(e: CustomEvent) {
51
+ e.stopPropagation()
52
+
51
53
  this.output = this.entryForm.value
52
54
 
53
55
  this.dispatchEvent(
@@ -57,10 +57,12 @@ class OocResolveActivityEdit extends localize(i18next)(LitElement) {
57
57
 
58
58
  textarea {
59
59
  border: var(--input-field-border);
60
- border-radius: 10px;
60
+ border-radius: var(--spacing-small);
61
61
  margin: var(--spacing-medium);
62
- padding: var(--input-padding);
62
+ padding: var(--spacing-medium);
63
63
  font: var(--input-field-font);
64
+ color: var(--md-sys-color-on-surface);
65
+ background: var(--md-sys-color-surface-variant);
64
66
 
65
67
  resize: none;
66
68
  outline: none;
@@ -61,10 +61,12 @@ class OocReviewActivityEdit extends localize(i18next)(LitElement) {
61
61
 
62
62
  textarea {
63
63
  border: var(--input-field-border);
64
- border-radius: 10px;
64
+ border-radius: var(--spacing-small);
65
65
  margin: var(--spacing-medium);
66
- padding: var(--input-padding);
66
+ padding: var(--spacing-medium);
67
67
  font: var(--input-field-font);
68
+ color: var(--md-sys-color-on-surface);
69
+ background: var(--md-sys-color-surface-variant);
68
70
 
69
71
  resize: none;
70
72
  outline: none;
@@ -9,11 +9,18 @@ import './activities/activity-ooc-resolve-view' /* refered by the activity templ
9
9
  import '@operato/app/filter-renderer.js' /* register resource-object filter renderer */
10
10
 
11
11
  import { OxGristEditorCode } from '@operato/app/grist-editor/ox-grist-editor-code.js'
12
- import { OxGristRendererJson5, registerEditor as registerGristEditor, registerRenderer as registerGristRenderer } from '@operato/data-grist'
12
+ import {
13
+ OxGristRendererJson5,
14
+ registerEditor as registerGristEditor,
15
+ registerRenderer as registerGristRenderer
16
+ } from '@operato/data-grist'
13
17
  import { OxGristEditorDataItemSpec } from '@operato/dataset/grist-editor/ox-grist-editor-data-item-spec.js'
14
18
  import { OxGristEditorPartitionKeys } from '@operato/grist-editor/ox-grist-editor-partition-keys.js'
15
19
  import { OxGristRendererPartitionKeys } from '@operato/grist-editor/ox-grist-renderer-partition-keys.js'
16
20
 
21
+ import { OxGristEditorSignature } from '@operato/grist-editor/ox-grist-editor-signature.js'
22
+ import { OxGristRendererSignature } from '@operato/grist-editor/ox-grist-renderer-signature.js'
23
+
17
24
  export default function bootstrap() {
18
25
  registerGristEditor('data-item-spec', OxGristEditorDataItemSpec)
19
26
  registerGristRenderer('data-item-spec', OxGristRendererJson5)
@@ -22,4 +29,7 @@ export default function bootstrap() {
22
29
 
23
30
  registerGristEditor('partition-keys', OxGristEditorPartitionKeys)
24
31
  registerGristRenderer('partition-keys', OxGristRendererPartitionKeys)
32
+
33
+ registerGristRenderer('signature', OxGristRendererSignature)
34
+ registerGristEditor('signature', OxGristEditorSignature)
25
35
  }
@@ -30,9 +30,9 @@ export class DataEntryForm extends localize(i18next)(LitElement) {
30
30
  overflow: auto;
31
31
  }
32
32
 
33
- .button-container span {
34
- font-size: 14px;
35
- color: #333;
33
+ .footer span {
34
+ font-size: 0.8em;
35
+ color: var(--md-sys-color-on-surface);
36
36
  line-height: 1.5;
37
37
  padding: 10px;
38
38
  }
@@ -14,7 +14,7 @@ import { ColumnConfig, DataGrist, FetchOption, SortersControl, getRenderer } fro
14
14
  import { OxDataUseCase } from '@operato/dataset'
15
15
  import { client } from '@operato/graphql'
16
16
  import { i18next, localize } from '@operato/i18n'
17
- import { openPopup } from '@operato/layout'
17
+ import { openPopup, notify } from '@operato/layout'
18
18
  import { InheritedValueType, navigate, PageView, store } from '@operato/shell'
19
19
  import { CommonHeaderStyles, ScrollbarStyles } from '@operato/styles'
20
20
  import { provider } from '@things-factory/board-ui/dist-client'
@@ -81,6 +81,28 @@ const showEntryView = async (columns, data, column, record, rowIndex) => {
81
81
  }
82
82
  }
83
83
 
84
+ const issueDataEntry = async (columns, data, column, record, rowIndex) => {
85
+ const response = await client.mutate({
86
+ mutation: gql`
87
+ mutation ($dataSetId: String!) {
88
+ issueDataCollection(dataSetId: $dataSetId)
89
+ }
90
+ `,
91
+ variables: { dataSetId: record.id }
92
+ })
93
+
94
+ if (response.errors) {
95
+ notify({
96
+ message: response.errors[0].message,
97
+ level: 'error'
98
+ })
99
+ } else {
100
+ notify({
101
+ message: 'Data entry task issued successfully'
102
+ })
103
+ }
104
+ }
105
+
84
106
  @customElement('data-entry-list-page')
85
107
  export class DataEntryListPage extends connect(store)(localize(i18next)(PageView)) {
86
108
  static styles = [
@@ -131,11 +153,9 @@ export class DataEntryListPage extends connect(store)(localize(i18next)(PageView
131
153
  }
132
154
 
133
155
  render() {
134
- const mode = 'CARD'
135
-
136
156
  return html`
137
157
  <ox-grist
138
- .mode=${mode}
158
+ mode="CARD"
139
159
  .config=${this.gristConfig}
140
160
  .fetchHandler=${this.fetchHandler.bind(this)}
141
161
  ?url-params-sensitive=${this.active}
@@ -157,6 +177,23 @@ export class DataEntryListPage extends connect(store)(localize(i18next)(PageView
157
177
  details: ['schedule', 'type', 'useCase', 'latestCollectedAt', 'prevSchedule', 'nextSchedule']
158
178
  },
159
179
  columns: [
180
+ {
181
+ type: 'gutter',
182
+ gutterName: 'button',
183
+ icon: record => (!record ? 'assignment_add' : !record.id ? '' : 'assignment_add'),
184
+ iconOnly: false,
185
+ width: 96,
186
+ fixed: true,
187
+ title: record =>
188
+ !record
189
+ ? i18next.t('button.assign-data-collection')
190
+ : !record.id
191
+ ? ''
192
+ : i18next.t('button.assign-data-collection'),
193
+ handlers: {
194
+ click: issueDataEntry
195
+ }
196
+ },
160
197
  {
161
198
  type: 'gutter',
162
199
  gutterName: 'button',
@@ -296,9 +333,16 @@ export class DataEntryListPage extends connect(store)(localize(i18next)(PageView
296
333
  editable: false,
297
334
  renderer: function (value, column, record, rowIndex, field) {
298
335
  const type = record.entryType !== 'board' ? 'string' : 'image'
299
- value = record.entryType !== 'board' ? value : record.entryBoard?.thumbnail
300
336
 
301
- return getRenderer(type)(value, column, record, rowIndex, field)
337
+ let renderedValue
338
+
339
+ if (record.entryType === 'board' && record.entryBoard?.thumbnail) {
340
+ renderedValue = record.entryBoard.thumbnail
341
+ } else {
342
+ renderedValue = html`<md-icon style="--md-icon-size: 64px;">assignment</md-icon>`
343
+ }
344
+
345
+ return getRenderer(type)(renderedValue, column, record, rowIndex, field)
302
346
  }
303
347
  }
304
348
  }
@@ -309,9 +353,6 @@ export class DataEntryListPage extends connect(store)(localize(i18next)(PageView
309
353
  selectable: {
310
354
  multiple: false
311
355
  },
312
- handlers: {
313
- click: showEntryView
314
- },
315
356
  classifier: function (record, rowIndex) {}
316
357
  },
317
358
  sorters: [
@@ -344,9 +344,16 @@ export class DataReportListPage extends connect(store)(localize(i18next)(PageVie
344
344
  editable: false,
345
345
  renderer: function (value, column, record, rowIndex, field) {
346
346
  const type = record.monitorType !== 'board' ? 'string' : 'image'
347
- value = record.monitorType !== 'board' ? value : record.monitorBoard?.thumbnail
348
347
 
349
- return getRenderer(type)(value, column, record, rowIndex, field)
348
+ let renderedValue
349
+
350
+ if (record.monitorType === 'board' && record.entryBoard?.thumbnail) {
351
+ renderedValue = record.entryBoard.thumbnail
352
+ } else {
353
+ renderedValue = html`<md-icon style="--md-icon-size: 64px;">newsmode</md-icon>`
354
+ }
355
+
356
+ return getRenderer(type)(renderedValue, column, record, rowIndex, field)
350
357
  }
351
358
  }
352
359
  }
@@ -12,7 +12,7 @@ export declare class DataCollectActivityEdit extends DataCollectActivityEdit_bas
12
12
  };
13
13
  entryForm: OxDataEntryForm;
14
14
  render(): import("lit-html").TemplateResult<1>;
15
- _updateDataItems(): Promise<void>;
15
+ _updateDataItems(e: CustomEvent): Promise<void>;
16
16
  updated(changes: any): void;
17
17
  fetchDataSet(): Promise<void>;
18
18
  }
@@ -17,7 +17,8 @@ let DataCollectActivityEdit = class DataCollectActivityEdit extends localize(i18
17
17
  ></ox-data-entry-form>
18
18
  `;
19
19
  }
20
- async _updateDataItems() {
20
+ async _updateDataItems(e) {
21
+ e.stopPropagation();
21
22
  this.output = this.entryForm.value;
22
23
  this.dispatchEvent(new CustomEvent('change', {
23
24
  detail: this.output
@@ -1 +1 @@
1
- {"version":3,"file":"activity-data-collect-edit.js","sourceRoot":"","sources":["../../client/activities/activity-data-collect-edit.ts"],"names":[],"mappings":";AAAA,OAAO,wCAAwC,CAAA;AAE/C,OAAO,GAAG,MAAM,aAAa,CAAA;AAC7B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAEzE,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAA;AAIjE,IAAM,uBAAuB,GAA7B,MAAM,uBAAwB,SAAQ,QAAQ,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC;IA0BxE,MAAM;QACJ,OAAO,IAAI,CAAA;;mBAEI,IAAI,CAAC,OAAO;iBACd,IAAI,CAAC,MAAM;kBACV,IAAI,CAAC,gBAAgB;;KAElC,CAAA;IACH,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAA;QAElC,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,QAAQ,EAAE;YACxB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CACH,CAAA;IACH,CAAC;IAED,OAAO,CAAC,OAAO;QACb,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,YAAY,EAAE,CAAA;QACrB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAA;QAE/B,IAAI,EAAE,EAAE,CAAC;YACP,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;gBAClC,KAAK,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;SAuBT;gBACD,SAAS,EAAE;oBACT,EAAE;iBACH;aACF,CAAC,CAAA;YAEF,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAA;QACtC,CAAC;IACH,CAAC;;AAvFM,8BAAM,GAAG;IACd,eAAe;IACf,GAAG,CAAA;;;;;;;;;;;;;KAaF;CACF,AAhBY,CAgBZ;AAE2B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;sDAAY;AACX;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;uDAAa;AAE/B;IAAR,KAAK,EAAE;;wDAAmC;AAEd;IAA5B,KAAK,CAAC,oBAAoB,CAAC;8BAAa,eAAe;0DAAA;AAxB7C,uBAAuB;IADnC,aAAa,CAAC,4BAA4B,CAAC;GAC/B,uBAAuB,CAyFnC","sourcesContent":["import '@operato/dataset/ox-data-entry-form.js'\n\nimport gql from 'graphql-tag'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\n\nimport { client } from '@operato/graphql'\nimport { i18next, localize } from '@operato/i18n'\nimport { ScrollbarStyles } from '@operato/styles'\nimport { OxDataEntryForm } from '@operato/dataset/ox-data-entry-form.js'\nimport { DataSet } from '@operato/dataset'\n\n@customElement('activity-data-collect-edit')\nexport class DataCollectActivityEdit extends localize(i18next)(LitElement) {\n static styles = [\n ScrollbarStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n\n background-color: var(--md-sys-color-surface);\n }\n\n ox-data-entry-form {\n flex: 1;\n padding: 10px;\n overflow: auto;\n }\n `\n ]\n\n @property({ type: Object }) input?: any\n @property({ type: Object }) output?: any\n\n @state() dataSet?: DataSet & { id: string }\n\n @query('ox-data-entry-form') entryForm!: OxDataEntryForm\n\n render() {\n return html`\n <ox-data-entry-form\n .dataSet=${this.dataSet}\n .value=${this.output}\n @change=${this._updateDataItems}\n ></ox-data-entry-form>\n `\n }\n\n async _updateDataItems() {\n this.output = this.entryForm.value\n\n this.dispatchEvent(\n new CustomEvent('change', {\n detail: this.output\n })\n )\n }\n\n updated(changes) {\n if (changes.has('input')) {\n this.fetchDataSet()\n }\n }\n\n async fetchDataSet() {\n const id = this.input.dataSetId\n\n if (id) {\n const response = await client.query({\n query: gql`\n query ($id: String!) {\n dataSet(id: $id) {\n id\n name\n description\n useCase\n dataItems {\n name\n description\n active\n hidden\n tag\n group\n type\n unit\n options\n quota\n spec\n stat\n }\n }\n }\n `,\n variables: {\n id\n }\n })\n\n this.dataSet = response.data.dataSet\n }\n }\n}\n"]}
1
+ {"version":3,"file":"activity-data-collect-edit.js","sourceRoot":"","sources":["../../client/activities/activity-data-collect-edit.ts"],"names":[],"mappings":";AAAA,OAAO,wCAAwC,CAAA;AAE/C,OAAO,GAAG,MAAM,aAAa,CAAA;AAC7B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAEzE,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAA;AAIjE,IAAM,uBAAuB,GAA7B,MAAM,uBAAwB,SAAQ,QAAQ,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC;IA0BxE,MAAM;QACJ,OAAO,IAAI,CAAA;;mBAEI,IAAI,CAAC,OAAO;iBACd,IAAI,CAAC,MAAM;kBACV,IAAI,CAAC,gBAAgB;;KAElC,CAAA;IACH,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,CAAc;QACnC,CAAC,CAAC,eAAe,EAAE,CAAA;QAEnB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAA;QAElC,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,QAAQ,EAAE;YACxB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CACH,CAAA;IACH,CAAC;IAED,OAAO,CAAC,OAAO;QACb,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,YAAY,EAAE,CAAA;QACrB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAA;QAE/B,IAAI,EAAE,EAAE,CAAC;YACP,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;gBAClC,KAAK,EAAE,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;SAuBT;gBACD,SAAS,EAAE;oBACT,EAAE;iBACH;aACF,CAAC,CAAA;YAEF,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAA;QACtC,CAAC;IACH,CAAC;;AAzFM,8BAAM,GAAG;IACd,eAAe;IACf,GAAG,CAAA;;;;;;;;;;;;;KAaF;CACF,AAhBY,CAgBZ;AAE2B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;sDAAY;AACX;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;uDAAa;AAE/B;IAAR,KAAK,EAAE;;wDAAmC;AAEd;IAA5B,KAAK,CAAC,oBAAoB,CAAC;8BAAa,eAAe;0DAAA;AAxB7C,uBAAuB;IADnC,aAAa,CAAC,4BAA4B,CAAC;GAC/B,uBAAuB,CA2FnC","sourcesContent":["import '@operato/dataset/ox-data-entry-form.js'\n\nimport gql from 'graphql-tag'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\n\nimport { client } from '@operato/graphql'\nimport { i18next, localize } from '@operato/i18n'\nimport { ScrollbarStyles } from '@operato/styles'\nimport { OxDataEntryForm } from '@operato/dataset/ox-data-entry-form.js'\nimport { DataSet } from '@operato/dataset'\n\n@customElement('activity-data-collect-edit')\nexport class DataCollectActivityEdit extends localize(i18next)(LitElement) {\n static styles = [\n ScrollbarStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n\n background-color: var(--md-sys-color-surface);\n }\n\n ox-data-entry-form {\n flex: 1;\n padding: 10px;\n overflow: auto;\n }\n `\n ]\n\n @property({ type: Object }) input?: any\n @property({ type: Object }) output?: any\n\n @state() dataSet?: DataSet & { id: string }\n\n @query('ox-data-entry-form') entryForm!: OxDataEntryForm\n\n render() {\n return html`\n <ox-data-entry-form\n .dataSet=${this.dataSet}\n .value=${this.output}\n @change=${this._updateDataItems}\n ></ox-data-entry-form>\n `\n }\n\n async _updateDataItems(e: CustomEvent) {\n e.stopPropagation()\n\n this.output = this.entryForm.value\n\n this.dispatchEvent(\n new CustomEvent('change', {\n detail: this.output\n })\n )\n }\n\n updated(changes) {\n if (changes.has('input')) {\n this.fetchDataSet()\n }\n }\n\n async fetchDataSet() {\n const id = this.input.dataSetId\n\n if (id) {\n const response = await client.query({\n query: gql`\n query ($id: String!) {\n dataSet(id: $id) {\n id\n name\n description\n useCase\n dataItems {\n name\n description\n active\n hidden\n tag\n group\n type\n unit\n options\n quota\n spec\n stat\n }\n }\n }\n `,\n variables: {\n id\n }\n })\n\n this.dataSet = response.data.dataSet\n }\n }\n}\n"]}
@@ -157,10 +157,12 @@ OocResolveActivityEdit.styles = [
157
157
 
158
158
  textarea {
159
159
  border: var(--input-field-border);
160
- border-radius: 10px;
160
+ border-radius: var(--spacing-small);
161
161
  margin: var(--spacing-medium);
162
- padding: var(--input-padding);
162
+ padding: var(--spacing-medium);
163
163
  font: var(--input-field-font);
164
+ color: var(--md-sys-color-on-surface);
165
+ background: var(--md-sys-color-surface-variant);
164
166
 
165
167
  resize: none;
166
168
  outline: none;
@@ -1 +1 @@
1
- {"version":3,"file":"activity-ooc-resolve-edit.js","sourceRoot":"","sources":["../../client/activities/activity-ooc-resolve-edit.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@operato/dataset/ox-data-ooc-brief-view.js'\n\nimport gql from 'graphql-tag'\nimport { css, html, LitElement, nothing } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\n\nimport { client } from '@operato/graphql'\nimport { i18next, localize } from '@operato/i18n'\nimport { ScrollbarStyles } from '@operato/styles'\n\n@customElement('activity-ooc-resolve-edit')\nclass OocResolveActivityEdit extends localize(i18next)(LitElement) {\n static styles = [\n ScrollbarStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n\n background-color: var(--md-sys-color-surface);\n }\n\n div[content] {\n flex: 1;\n flex-direction: column;\n\n display: flex;\n overflow: auto;\n }\n\n ox-data-ooc-brief-view {\n flex: 1;\n padding: var(--spacing-large);\n overflow: auto;\n }\n\n label[action] {\n display: flex;\n flex-direction: column;\n\n padding: var(--spacing-large);\n }\n\n label[action] h2 {\n display: flex;\n\n color: var(--title-text-color);\n text-transform: capitalize;\n margin: var(--title-margin);\n align-items: center;\n }\n\n md-icon {\n color: var(--status-danger-color);\n }\n\n textarea {\n border: var(--input-field-border);\n border-radius: 10px;\n margin: var(--spacing-medium);\n padding: var(--input-padding);\n font: var(--input-field-font);\n\n resize: none;\n outline: none;\n min-height: 200px;\n }\n `\n ]\n\n @property({ type: Object }) input?: any\n @property({ type: Object }) output?: any\n @property({ type: Object }) activityThread?: any\n\n @state() dataOoc?: any\n\n @query('textarea') actionTextArea!: HTMLTextAreaElement\n\n render() {\n const action = this.output?.action\n const state = this.activityThread?.state\n const editable = state == 'assigned' || state == 'started'\n\n return html`\n <div content>\n <ox-data-ooc-brief-view .dataOoc=${this.dataOoc}></ox-data-ooc-brief-view>\n </div>\n\n <!-- <ox-data-ooc-correction-part .dataOoc=${this.dataOoc}></ox-data-ooc-correction-part> -->\n\n ${editable\n ? html`\n <label action>\n <h2><md-icon>build_circle</md-icon>&nbsp;<span>${i18next.t('label.corrective action')}</span></h2>\n <textarea\n placeholder=${String(i18next.t('text.corrective action placeholder'))}\n .value=${action || ''}\n @change=${this.onChangeAction}\n ></textarea>\n </label>\n `\n : nothing}\n `\n }\n\n onChangeAction(e: Event) {\n this.output ||= {}\n this.output.action = (e.target as HTMLTextAreaElement).value\n\n this.dispatchEvent(\n new CustomEvent('change', {\n detail: this.output\n })\n )\n }\n\n updated(changes) {\n if (changes.has('input')) {\n this.fetchDataOoc()\n }\n }\n\n async fetchDataOoc() {\n const id = this.input.dataOocId\n\n if (id) {\n const response = await client.query({\n query: gql`\n query ($id: String!) {\n dataOoc(id: $id) {\n id\n name\n description\n ooc\n oos\n state\n type\n useCase\n data\n judgment\n history\n correctiveAction\n correctiveInstruction\n dataItems {\n name\n description\n active\n hidden\n tag\n group\n type\n unit\n options\n quota\n spec\n stat\n }\n workDate\n workShift\n reviewer {\n id\n name\n }\n corrector {\n id\n name\n }\n collectedAt\n reviewedAt\n correctedAt\n }\n }\n `,\n variables: {\n id\n }\n })\n\n const dataOoc = {\n ...response.data.dataOoc\n }\n\n if (this.activityThread?.output) {\n dataOoc.correctiveAction = this.activityThread.output.action\n dataOoc.correctedAt = this.activityThread.updatedAt\n dataOoc.corrector = this.activityThread.assignee\n }\n\n this.dataOoc = dataOoc\n }\n }\n}\n"]}
1
+ {"version":3,"file":"activity-ooc-resolve-edit.js","sourceRoot":"","sources":["../../client/activities/activity-ooc-resolve-edit.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@operato/dataset/ox-data-ooc-brief-view.js'\n\nimport gql from 'graphql-tag'\nimport { css, html, LitElement, nothing } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\n\nimport { client } from '@operato/graphql'\nimport { i18next, localize } from '@operato/i18n'\nimport { ScrollbarStyles } from '@operato/styles'\n\n@customElement('activity-ooc-resolve-edit')\nclass OocResolveActivityEdit extends localize(i18next)(LitElement) {\n static styles = [\n ScrollbarStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n\n background-color: var(--md-sys-color-surface);\n }\n\n div[content] {\n flex: 1;\n flex-direction: column;\n\n display: flex;\n overflow: auto;\n }\n\n ox-data-ooc-brief-view {\n flex: 1;\n padding: var(--spacing-large);\n overflow: auto;\n }\n\n label[action] {\n display: flex;\n flex-direction: column;\n\n padding: var(--spacing-large);\n }\n\n label[action] h2 {\n display: flex;\n\n color: var(--title-text-color);\n text-transform: capitalize;\n margin: var(--title-margin);\n align-items: center;\n }\n\n md-icon {\n color: var(--status-danger-color);\n }\n\n textarea {\n border: var(--input-field-border);\n border-radius: var(--spacing-small);\n margin: var(--spacing-medium);\n padding: var(--spacing-medium);\n font: var(--input-field-font);\n color: var(--md-sys-color-on-surface);\n background: var(--md-sys-color-surface-variant);\n\n resize: none;\n outline: none;\n min-height: 200px;\n }\n `\n ]\n\n @property({ type: Object }) input?: any\n @property({ type: Object }) output?: any\n @property({ type: Object }) activityThread?: any\n\n @state() dataOoc?: any\n\n @query('textarea') actionTextArea!: HTMLTextAreaElement\n\n render() {\n const action = this.output?.action\n const state = this.activityThread?.state\n const editable = state == 'assigned' || state == 'started'\n\n return html`\n <div content>\n <ox-data-ooc-brief-view .dataOoc=${this.dataOoc}></ox-data-ooc-brief-view>\n </div>\n\n <!-- <ox-data-ooc-correction-part .dataOoc=${this.dataOoc}></ox-data-ooc-correction-part> -->\n\n ${editable\n ? html`\n <label action>\n <h2><md-icon>build_circle</md-icon>&nbsp;<span>${i18next.t('label.corrective action')}</span></h2>\n <textarea\n placeholder=${String(i18next.t('text.corrective action placeholder'))}\n .value=${action || ''}\n @change=${this.onChangeAction}\n ></textarea>\n </label>\n `\n : nothing}\n `\n }\n\n onChangeAction(e: Event) {\n this.output ||= {}\n this.output.action = (e.target as HTMLTextAreaElement).value\n\n this.dispatchEvent(\n new CustomEvent('change', {\n detail: this.output\n })\n )\n }\n\n updated(changes) {\n if (changes.has('input')) {\n this.fetchDataOoc()\n }\n }\n\n async fetchDataOoc() {\n const id = this.input.dataOocId\n\n if (id) {\n const response = await client.query({\n query: gql`\n query ($id: String!) {\n dataOoc(id: $id) {\n id\n name\n description\n ooc\n oos\n state\n type\n useCase\n data\n judgment\n history\n correctiveAction\n correctiveInstruction\n dataItems {\n name\n description\n active\n hidden\n tag\n group\n type\n unit\n options\n quota\n spec\n stat\n }\n workDate\n workShift\n reviewer {\n id\n name\n }\n corrector {\n id\n name\n }\n collectedAt\n reviewedAt\n correctedAt\n }\n }\n `,\n variables: {\n id\n }\n })\n\n const dataOoc = {\n ...response.data.dataOoc\n }\n\n if (this.activityThread?.output) {\n dataOoc.correctiveAction = this.activityThread.output.action\n dataOoc.correctedAt = this.activityThread.updatedAt\n dataOoc.corrector = this.activityThread.assignee\n }\n\n this.dataOoc = dataOoc\n }\n }\n}\n"]}
@@ -140,10 +140,12 @@ OocReviewActivityEdit.styles = [
140
140
 
141
141
  textarea {
142
142
  border: var(--input-field-border);
143
- border-radius: 10px;
143
+ border-radius: var(--spacing-small);
144
144
  margin: var(--spacing-medium);
145
- padding: var(--input-padding);
145
+ padding: var(--spacing-medium);
146
146
  font: var(--input-field-font);
147
+ color: var(--md-sys-color-on-surface);
148
+ background: var(--md-sys-color-surface-variant);
147
149
 
148
150
  resize: none;
149
151
  outline: none;
@@ -1 +1 @@
1
- {"version":3,"file":"activity-ooc-review-edit.js","sourceRoot":"","sources":["../../client/activities/activity-ooc-review-edit.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@operato/dataset/ox-data-sample-view.js'\n\nimport gql from 'graphql-tag'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\n\nimport { client } from '@operato/graphql'\nimport { i18next, localize } from '@operato/i18n'\nimport { ScrollbarStyles } from '@operato/styles'\n\n@customElement('activity-ooc-review-edit')\nclass OocReviewActivityEdit extends localize(i18next)(LitElement) {\n static styles = [\n ScrollbarStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n\n background-color: var(--md-sys-color-surface);\n }\n\n div[content] {\n flex: 1;\n flex-direction: column;\n\n display: flex;\n overflow: auto;\n }\n\n ox-data-sample-view {\n flex: 1;\n padding: var(--spacing-large);\n overflow: auto;\n }\n\n label[instruction] {\n display: flex;\n flex-direction: column;\n\n padding: var(--spacing-large);\n\n h2 {\n display: flex;\n\n color: var(--title-text-color);\n text-transform: capitalize;\n margin: var(--title-margin);\n align-items: center;\n }\n\n div {\n padding: var(--spacing-large);\n font: var(--input-field-font);\n }\n\n md-icon {\n color: var(--status-danger-color);\n }\n\n textarea {\n border: var(--input-field-border);\n border-radius: 10px;\n margin: var(--spacing-medium);\n padding: var(--input-padding);\n font: var(--input-field-font);\n\n resize: none;\n outline: none;\n min-height: 200px;\n }\n }\n `\n ]\n\n @property({ type: Object }) input?: any\n @property({ type: Object }) output?: any\n @property({ type: Object }) activityThread?: any\n\n @state() dataOoc?: any\n\n render() {\n const instruction = this.output?.instruction\n const { state } = this.activityThread || {}\n const editable = state == 'assigned' || state == 'started' || state == 'submitted'\n\n return html`\n <div content>\n <ox-data-sample-view .dataSample=${this.dataOoc}></ox-data-sample-view>\n </div>\n\n <label instruction>\n <h2><md-icon>build_circle</md-icon>&nbsp;<span>${i18next.t('label.corrective instruction')}</span></h2>\n ${editable\n ? html`\n <textarea\n placeholder=${String(i18next.t('text.corrective instruction placeholder'))}\n .value=${instruction || ''}\n @change=${this.onChangeInstruction}\n ></textarea>\n `\n : html`<div>${instruction}</div>`}\n </label>\n `\n }\n\n onChangeInstruction(e: Event) {\n this.output ||= {}\n this.output.instruction = (e.target as HTMLTextAreaElement).value\n\n this.dispatchEvent(\n new CustomEvent('change', {\n detail: this.output\n })\n )\n }\n\n updated(changes) {\n if (changes.has('input')) {\n this.fetchDataOoc()\n }\n }\n\n async fetchDataOoc() {\n const id = this.input?.dataOocId\n\n if (id) {\n const response = await client.query({\n query: gql`\n query ($id: String!) {\n dataOoc(id: $id) {\n id\n name\n description\n ooc\n oos\n state\n type\n useCase\n data\n judgment\n dataItems {\n name\n description\n active\n hidden\n tag\n group\n type\n unit\n options\n quota\n spec\n stat\n }\n workDate\n workShift\n collectedAt\n }\n }\n `,\n variables: {\n id\n }\n })\n\n this.dataOoc = response.data.dataOoc\n }\n }\n}\n"]}
1
+ {"version":3,"file":"activity-ooc-review-edit.js","sourceRoot":"","sources":["../../client/activities/activity-ooc-review-edit.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@operato/dataset/ox-data-sample-view.js'\n\nimport gql from 'graphql-tag'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\n\nimport { client } from '@operato/graphql'\nimport { i18next, localize } from '@operato/i18n'\nimport { ScrollbarStyles } from '@operato/styles'\n\n@customElement('activity-ooc-review-edit')\nclass OocReviewActivityEdit extends localize(i18next)(LitElement) {\n static styles = [\n ScrollbarStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n\n background-color: var(--md-sys-color-surface);\n }\n\n div[content] {\n flex: 1;\n flex-direction: column;\n\n display: flex;\n overflow: auto;\n }\n\n ox-data-sample-view {\n flex: 1;\n padding: var(--spacing-large);\n overflow: auto;\n }\n\n label[instruction] {\n display: flex;\n flex-direction: column;\n\n padding: var(--spacing-large);\n\n h2 {\n display: flex;\n\n color: var(--title-text-color);\n text-transform: capitalize;\n margin: var(--title-margin);\n align-items: center;\n }\n\n div {\n padding: var(--spacing-large);\n font: var(--input-field-font);\n }\n\n md-icon {\n color: var(--status-danger-color);\n }\n\n textarea {\n border: var(--input-field-border);\n border-radius: var(--spacing-small);\n margin: var(--spacing-medium);\n padding: var(--spacing-medium);\n font: var(--input-field-font);\n color: var(--md-sys-color-on-surface);\n background: var(--md-sys-color-surface-variant);\n\n resize: none;\n outline: none;\n min-height: 200px;\n }\n }\n `\n ]\n\n @property({ type: Object }) input?: any\n @property({ type: Object }) output?: any\n @property({ type: Object }) activityThread?: any\n\n @state() dataOoc?: any\n\n render() {\n const instruction = this.output?.instruction\n const { state } = this.activityThread || {}\n const editable = state == 'assigned' || state == 'started' || state == 'submitted'\n\n return html`\n <div content>\n <ox-data-sample-view .dataSample=${this.dataOoc}></ox-data-sample-view>\n </div>\n\n <label instruction>\n <h2><md-icon>build_circle</md-icon>&nbsp;<span>${i18next.t('label.corrective instruction')}</span></h2>\n ${editable\n ? html`\n <textarea\n placeholder=${String(i18next.t('text.corrective instruction placeholder'))}\n .value=${instruction || ''}\n @change=${this.onChangeInstruction}\n ></textarea>\n `\n : html`<div>${instruction}</div>`}\n </label>\n `\n }\n\n onChangeInstruction(e: Event) {\n this.output ||= {}\n this.output.instruction = (e.target as HTMLTextAreaElement).value\n\n this.dispatchEvent(\n new CustomEvent('change', {\n detail: this.output\n })\n )\n }\n\n updated(changes) {\n if (changes.has('input')) {\n this.fetchDataOoc()\n }\n }\n\n async fetchDataOoc() {\n const id = this.input?.dataOocId\n\n if (id) {\n const response = await client.query({\n query: gql`\n query ($id: String!) {\n dataOoc(id: $id) {\n id\n name\n description\n ooc\n oos\n state\n type\n useCase\n data\n judgment\n dataItems {\n name\n description\n active\n hidden\n tag\n group\n type\n unit\n options\n quota\n spec\n stat\n }\n workDate\n workShift\n collectedAt\n }\n }\n `,\n variables: {\n id\n }\n })\n\n this.dataOoc = response.data.dataOoc\n }\n }\n}\n"]}
@@ -12,11 +12,15 @@ import { OxGristRendererJson5, registerEditor as registerGristEditor, registerRe
12
12
  import { OxGristEditorDataItemSpec } from '@operato/dataset/grist-editor/ox-grist-editor-data-item-spec.js';
13
13
  import { OxGristEditorPartitionKeys } from '@operato/grist-editor/ox-grist-editor-partition-keys.js';
14
14
  import { OxGristRendererPartitionKeys } from '@operato/grist-editor/ox-grist-renderer-partition-keys.js';
15
+ import { OxGristEditorSignature } from '@operato/grist-editor/ox-grist-editor-signature.js';
16
+ import { OxGristRendererSignature } from '@operato/grist-editor/ox-grist-renderer-signature.js';
15
17
  export default function bootstrap() {
16
18
  registerGristEditor('data-item-spec', OxGristEditorDataItemSpec);
17
19
  registerGristRenderer('data-item-spec', OxGristRendererJson5);
18
20
  registerGristEditor('script', OxGristEditorCode);
19
21
  registerGristEditor('partition-keys', OxGristEditorPartitionKeys);
20
22
  registerGristRenderer('partition-keys', OxGristRendererPartitionKeys);
23
+ registerGristRenderer('signature', OxGristRendererSignature);
24
+ registerGristEditor('signature', OxGristEditorSignature);
21
25
  }
22
26
  //# sourceMappingURL=bootstrap.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../client/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,yCAAyC,CAAA,CAAC,wEAAwE;AACzH,OAAO,yCAAyC,CAAA,CAAC,wEAAwE;AACzH,OAAO,wCAAwC,CAAA,CAAC,uEAAuE;AACvH,OAAO,wCAAwC,CAAA,CAAC,uEAAuE;AACvH,OAAO,uCAAuC,CAAA,CAAC,sEAAsE;AACrH,OAAO,uCAAuC,CAAA,CAAC,sEAAsE;AACrH,OAAO,wCAAwC,CAAA,CAAC,uEAAuE;AACvH,OAAO,wCAAwC,CAAA,CAAC,uEAAuE;AACvH,OAAO,iCAAiC,CAAA,CAAC,8CAA8C;AAEvF,OAAO,EAAE,iBAAiB,EAAE,MAAM,mDAAmD,CAAA;AACrF,OAAO,EAAE,oBAAoB,EAAE,cAAc,IAAI,mBAAmB,EAAE,gBAAgB,IAAI,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAC5I,OAAO,EAAE,yBAAyB,EAAE,MAAM,iEAAiE,CAAA;AAC3G,OAAO,EAAE,0BAA0B,EAAE,MAAM,yDAAyD,CAAA;AACpG,OAAO,EAAE,4BAA4B,EAAE,MAAM,2DAA2D,CAAA;AAExG,MAAM,CAAC,OAAO,UAAU,SAAS;IAC/B,mBAAmB,CAAC,gBAAgB,EAAE,yBAAyB,CAAC,CAAA;IAChE,qBAAqB,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAA;IAE7D,mBAAmB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAA;IAEhD,mBAAmB,CAAC,gBAAgB,EAAE,0BAA0B,CAAC,CAAA;IACjE,qBAAqB,CAAC,gBAAgB,EAAE,4BAA4B,CAAC,CAAA;AACvE,CAAC","sourcesContent":["import './activities/activity-data-collect-edit' /* refered by the activity template (activity-data-collect) on server */\nimport './activities/activity-data-collect-view' /* refered by the activity template (activity-data-collect) on server */\nimport './activities/activity-data-review-edit' /* refered by the activity template (activity-data-review) on server */\nimport './activities/activity-data-review-view' /* refered by the activity template (activity-data-review) on server */\nimport './activities/activity-ooc-review-edit' /* refered by the activity template (activity-ooc-review) on server */\nimport './activities/activity-ooc-review-view' /* refered by the activity template (activity-ooc-review) on server */\nimport './activities/activity-ooc-resolve-edit' /* refered by the activity template (activity-ooc-resolve) on server */\nimport './activities/activity-ooc-resolve-view' /* refered by the activity template (activity-ooc-resolve) on server */\nimport '@operato/app/filter-renderer.js' /* register resource-object filter renderer */\n\nimport { OxGristEditorCode } from '@operato/app/grist-editor/ox-grist-editor-code.js'\nimport { OxGristRendererJson5, registerEditor as registerGristEditor, registerRenderer as registerGristRenderer } from '@operato/data-grist'\nimport { OxGristEditorDataItemSpec } from '@operato/dataset/grist-editor/ox-grist-editor-data-item-spec.js'\nimport { OxGristEditorPartitionKeys } from '@operato/grist-editor/ox-grist-editor-partition-keys.js'\nimport { OxGristRendererPartitionKeys } from '@operato/grist-editor/ox-grist-renderer-partition-keys.js'\n\nexport default function bootstrap() {\n registerGristEditor('data-item-spec', OxGristEditorDataItemSpec)\n registerGristRenderer('data-item-spec', OxGristRendererJson5)\n\n registerGristEditor('script', OxGristEditorCode)\n\n registerGristEditor('partition-keys', OxGristEditorPartitionKeys)\n registerGristRenderer('partition-keys', OxGristRendererPartitionKeys)\n}\n"]}
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../client/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,yCAAyC,CAAA,CAAC,wEAAwE;AACzH,OAAO,yCAAyC,CAAA,CAAC,wEAAwE;AACzH,OAAO,wCAAwC,CAAA,CAAC,uEAAuE;AACvH,OAAO,wCAAwC,CAAA,CAAC,uEAAuE;AACvH,OAAO,uCAAuC,CAAA,CAAC,sEAAsE;AACrH,OAAO,uCAAuC,CAAA,CAAC,sEAAsE;AACrH,OAAO,wCAAwC,CAAA,CAAC,uEAAuE;AACvH,OAAO,wCAAwC,CAAA,CAAC,uEAAuE;AACvH,OAAO,iCAAiC,CAAA,CAAC,8CAA8C;AAEvF,OAAO,EAAE,iBAAiB,EAAE,MAAM,mDAAmD,CAAA;AACrF,OAAO,EACL,oBAAoB,EACpB,cAAc,IAAI,mBAAmB,EACrC,gBAAgB,IAAI,qBAAqB,EAC1C,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,yBAAyB,EAAE,MAAM,iEAAiE,CAAA;AAC3G,OAAO,EAAE,0BAA0B,EAAE,MAAM,yDAAyD,CAAA;AACpG,OAAO,EAAE,4BAA4B,EAAE,MAAM,2DAA2D,CAAA;AAExG,OAAO,EAAE,sBAAsB,EAAE,MAAM,oDAAoD,CAAA;AAC3F,OAAO,EAAE,wBAAwB,EAAE,MAAM,sDAAsD,CAAA;AAE/F,MAAM,CAAC,OAAO,UAAU,SAAS;IAC/B,mBAAmB,CAAC,gBAAgB,EAAE,yBAAyB,CAAC,CAAA;IAChE,qBAAqB,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAA;IAE7D,mBAAmB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAA;IAEhD,mBAAmB,CAAC,gBAAgB,EAAE,0BAA0B,CAAC,CAAA;IACjE,qBAAqB,CAAC,gBAAgB,EAAE,4BAA4B,CAAC,CAAA;IAErE,qBAAqB,CAAC,WAAW,EAAE,wBAAwB,CAAC,CAAA;IAC5D,mBAAmB,CAAC,WAAW,EAAE,sBAAsB,CAAC,CAAA;AAC1D,CAAC","sourcesContent":["import './activities/activity-data-collect-edit' /* refered by the activity template (activity-data-collect) on server */\nimport './activities/activity-data-collect-view' /* refered by the activity template (activity-data-collect) on server */\nimport './activities/activity-data-review-edit' /* refered by the activity template (activity-data-review) on server */\nimport './activities/activity-data-review-view' /* refered by the activity template (activity-data-review) on server */\nimport './activities/activity-ooc-review-edit' /* refered by the activity template (activity-ooc-review) on server */\nimport './activities/activity-ooc-review-view' /* refered by the activity template (activity-ooc-review) on server */\nimport './activities/activity-ooc-resolve-edit' /* refered by the activity template (activity-ooc-resolve) on server */\nimport './activities/activity-ooc-resolve-view' /* refered by the activity template (activity-ooc-resolve) on server */\nimport '@operato/app/filter-renderer.js' /* register resource-object filter renderer */\n\nimport { OxGristEditorCode } from '@operato/app/grist-editor/ox-grist-editor-code.js'\nimport {\n OxGristRendererJson5,\n registerEditor as registerGristEditor,\n registerRenderer as registerGristRenderer\n} from '@operato/data-grist'\nimport { OxGristEditorDataItemSpec } from '@operato/dataset/grist-editor/ox-grist-editor-data-item-spec.js'\nimport { OxGristEditorPartitionKeys } from '@operato/grist-editor/ox-grist-editor-partition-keys.js'\nimport { OxGristRendererPartitionKeys } from '@operato/grist-editor/ox-grist-renderer-partition-keys.js'\n\nimport { OxGristEditorSignature } from '@operato/grist-editor/ox-grist-editor-signature.js'\nimport { OxGristRendererSignature } from '@operato/grist-editor/ox-grist-renderer-signature.js'\n\nexport default function bootstrap() {\n registerGristEditor('data-item-spec', OxGristEditorDataItemSpec)\n registerGristRenderer('data-item-spec', OxGristRendererJson5)\n\n registerGristEditor('script', OxGristEditorCode)\n\n registerGristEditor('partition-keys', OxGristEditorPartitionKeys)\n registerGristRenderer('partition-keys', OxGristRendererPartitionKeys)\n\n registerGristRenderer('signature', OxGristRendererSignature)\n registerGristEditor('signature', OxGristEditorSignature)\n}\n"]}
@@ -81,9 +81,9 @@ DataEntryForm.styles = [
81
81
  overflow: auto;
82
82
  }
83
83
 
84
- .button-container span {
85
- font-size: 14px;
86
- color: #333;
84
+ .footer span {
85
+ font-size: 0.8em;
86
+ color: var(--md-sys-color-on-surface);
87
87
  line-height: 1.5;
88
88
  padding: 10px;
89
89
  }
@@ -1 +1 @@
1
- {"version":3,"file":"data-entry-form.js","sourceRoot":"","sources":["../../client/components/data-entry-form.ts"],"names":[],"mappings":";AAAA,OAAO,4BAA4B,CAAA;AACnC,OAAO,wCAAwC,CAAA;AAE/C,OAAO,GAAG,MAAM,aAAa,CAAA;AAC7B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAEzE,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACjD,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAA;AAIjE,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,QAAQ,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC;IAiC9D,MAAM;QACJ,OAAO,IAAI,CAAA;qCACsB,IAAI,CAAC,OAAO;;;;UAIvC,CAAC,IAAI,CAAC,UAAU;YAChB,CAAC,CAAC,IAAI,CAAA;+BACe,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;yCACrB,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC;;aAEpD;YACH,CAAC,CAAC,IAAI,CAAA,UAAU,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,cAAc,EAAE,UAAU;;KAE/G,CAAA;IACH,CAAC;IAEO,KAAK,CAAC,eAAe;;QAC3B,yDAAyD;QACzD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAA;QAExC,MAAM,UAAU,GAAG;YACjB,OAAO,EAAE;gBACP,EAAE,EAAE,MAAA,IAAI,CAAC,OAAO,0CAAE,EAAE;aACrB;YACD,IAAI;SACE,CAAA;QAER,IAAI,MAAA,IAAI,CAAC,UAAU,0CAAE,WAAW,EAAE,CAAC;YACjC,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAA;QACtD,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;YACnC,QAAQ,EAAE,GAAG,CAAA;;;;;;;OAOZ;YACD,SAAS,EAAE;gBACT,UAAU;aACX;YACD,OAAO,EAAE;gBACP,SAAS,EAAE,IAAI;aAChB;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACrB,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAA;YAC1D,IAAI,CAAC,UAAU,GAAG;gBAChB,EAAE;gBACF,WAAW,EAAE,IAAI,IAAI,CAAC,WAAW,CAAC;aACnC,CAAA;YAED,QAAQ,CAAC,aAAa,CACpB,IAAI,WAAW,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,uCAAuC,CAAC,EAAE,EAAE,CAAC,CACvG,CAAA;QACH,CAAC;IACH,CAAC;;AA5FM,oBAAM,GAAG;IACd,kBAAkB;IAClB,eAAe;IACf,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;KAoBF;CACF,AAxBY,CAwBZ;AAE2B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;8CAAmC;AAErD;IAAR,KAAK,EAAE;;iDAA+C;AAE1B;IAA5B,KAAK,CAAC,oBAAoB,CAAC;8BAAa,eAAe;gDAAA;AA/B7C,aAAa;IADzB,aAAa,CAAC,iBAAiB,CAAC;GACpB,aAAa,CA8FzB","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@operato/dataset/ox-data-entry-form.js'\n\nimport gql from 'graphql-tag'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\n\nimport { client } from '@operato/graphql'\nimport { i18next, localize } from '@operato/i18n'\nimport { CommonHeaderStyles, ScrollbarStyles } from '@operato/styles'\nimport { OxDataEntryForm } from '@operato/dataset/ox-data-entry-form.js'\nimport { DataSet } from '@operato/dataset'\n\n@customElement('data-entry-form')\nexport class DataEntryForm extends localize(i18next)(LitElement) {\n static styles = [\n CommonHeaderStyles,\n ScrollbarStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n\n background-color: var(--md-sys-color-surface);\n }\n\n ox-data-entry-form {\n flex: 1;\n padding: 10px;\n overflow: auto;\n }\n\n .button-container span {\n font-size: 14px;\n color: #333;\n line-height: 1.5;\n padding: 10px;\n }\n `\n ]\n\n @property({ type: Object }) dataSet?: DataSet & { id: string }\n\n @state() dataSample?: { id: string; collectedAt: Date }\n\n @query('ox-data-entry-form') entryForm!: OxDataEntryForm\n\n render() {\n return html`\n <ox-data-entry-form .dataSet=${this.dataSet}></ox-data-entry-form>\n\n <div class=\"footer\">\n <div filler></div>\n ${!this.dataSample\n ? html`\n <button @click=${this.updateDataItems.bind(this)} done>\n <md-icon>save</md-icon>${i18next.t('button.save')}\n </button>\n `\n : html` <span>${i18next.t('field.collected-at')}: ${this.dataSample.collectedAt.toLocaleString()}</span> `}\n </div>\n `\n }\n\n private async updateDataItems() {\n //@ts-ignore TODO replace with following line and confirm\n const data = this.entryForm.buildValue()\n\n const dataSample = {\n dataSet: {\n id: this.dataSet?.id\n },\n data\n } as any\n\n if (this.dataSample?.collectedAt) {\n dataSample.collectedAt = this.dataSample.collectedAt\n }\n\n const response = await client.mutate({\n mutation: gql`\n mutation ($dataSample: NewDataSample!) {\n createDataSample(dataSample: $dataSample) {\n id\n collectedAt\n }\n }\n `,\n variables: {\n dataSample\n },\n context: {\n hasUpload: true\n }\n })\n\n if (!response.errors) {\n const { id, collectedAt } = response.data.createDataSample\n this.dataSample = {\n id,\n collectedAt: new Date(collectedAt)\n }\n\n document.dispatchEvent(\n new CustomEvent('notify', { detail: { message: i18next.t('text.data sample created successfully') } })\n )\n }\n }\n}\n"]}
1
+ {"version":3,"file":"data-entry-form.js","sourceRoot":"","sources":["../../client/components/data-entry-form.ts"],"names":[],"mappings":";AAAA,OAAO,4BAA4B,CAAA;AACnC,OAAO,wCAAwC,CAAA;AAE/C,OAAO,GAAG,MAAM,aAAa,CAAA;AAC7B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAEzE,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACjD,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAA;AAIjE,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,QAAQ,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC;IAiC9D,MAAM;QACJ,OAAO,IAAI,CAAA;qCACsB,IAAI,CAAC,OAAO;;;;UAIvC,CAAC,IAAI,CAAC,UAAU;YAChB,CAAC,CAAC,IAAI,CAAA;+BACe,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;yCACrB,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC;;aAEpD;YACH,CAAC,CAAC,IAAI,CAAA,UAAU,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,cAAc,EAAE,UAAU;;KAE/G,CAAA;IACH,CAAC;IAEO,KAAK,CAAC,eAAe;;QAC3B,yDAAyD;QACzD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAA;QAExC,MAAM,UAAU,GAAG;YACjB,OAAO,EAAE;gBACP,EAAE,EAAE,MAAA,IAAI,CAAC,OAAO,0CAAE,EAAE;aACrB;YACD,IAAI;SACE,CAAA;QAER,IAAI,MAAA,IAAI,CAAC,UAAU,0CAAE,WAAW,EAAE,CAAC;YACjC,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAA;QACtD,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;YACnC,QAAQ,EAAE,GAAG,CAAA;;;;;;;OAOZ;YACD,SAAS,EAAE;gBACT,UAAU;aACX;YACD,OAAO,EAAE;gBACP,SAAS,EAAE,IAAI;aAChB;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACrB,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAA;YAC1D,IAAI,CAAC,UAAU,GAAG;gBAChB,EAAE;gBACF,WAAW,EAAE,IAAI,IAAI,CAAC,WAAW,CAAC;aACnC,CAAA;YAED,QAAQ,CAAC,aAAa,CACpB,IAAI,WAAW,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,uCAAuC,CAAC,EAAE,EAAE,CAAC,CACvG,CAAA;QACH,CAAC;IACH,CAAC;;AA5FM,oBAAM,GAAG;IACd,kBAAkB;IAClB,eAAe;IACf,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;KAoBF;CACF,AAxBY,CAwBZ;AAE2B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;8CAAmC;AAErD;IAAR,KAAK,EAAE;;iDAA+C;AAE1B;IAA5B,KAAK,CAAC,oBAAoB,CAAC;8BAAa,eAAe;gDAAA;AA/B7C,aAAa;IADzB,aAAa,CAAC,iBAAiB,CAAC;GACpB,aAAa,CA8FzB","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@operato/dataset/ox-data-entry-form.js'\n\nimport gql from 'graphql-tag'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\n\nimport { client } from '@operato/graphql'\nimport { i18next, localize } from '@operato/i18n'\nimport { CommonHeaderStyles, ScrollbarStyles } from '@operato/styles'\nimport { OxDataEntryForm } from '@operato/dataset/ox-data-entry-form.js'\nimport { DataSet } from '@operato/dataset'\n\n@customElement('data-entry-form')\nexport class DataEntryForm extends localize(i18next)(LitElement) {\n static styles = [\n CommonHeaderStyles,\n ScrollbarStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n\n background-color: var(--md-sys-color-surface);\n }\n\n ox-data-entry-form {\n flex: 1;\n padding: 10px;\n overflow: auto;\n }\n\n .footer span {\n font-size: 0.8em;\n color: var(--md-sys-color-on-surface);\n line-height: 1.5;\n padding: 10px;\n }\n `\n ]\n\n @property({ type: Object }) dataSet?: DataSet & { id: string }\n\n @state() dataSample?: { id: string; collectedAt: Date }\n\n @query('ox-data-entry-form') entryForm!: OxDataEntryForm\n\n render() {\n return html`\n <ox-data-entry-form .dataSet=${this.dataSet}></ox-data-entry-form>\n\n <div class=\"footer\">\n <div filler></div>\n ${!this.dataSample\n ? html`\n <button @click=${this.updateDataItems.bind(this)} done>\n <md-icon>save</md-icon>${i18next.t('button.save')}\n </button>\n `\n : html` <span>${i18next.t('field.collected-at')}: ${this.dataSample.collectedAt.toLocaleString()}</span> `}\n </div>\n `\n }\n\n private async updateDataItems() {\n //@ts-ignore TODO replace with following line and confirm\n const data = this.entryForm.buildValue()\n\n const dataSample = {\n dataSet: {\n id: this.dataSet?.id\n },\n data\n } as any\n\n if (this.dataSample?.collectedAt) {\n dataSample.collectedAt = this.dataSample.collectedAt\n }\n\n const response = await client.mutate({\n mutation: gql`\n mutation ($dataSample: NewDataSample!) {\n createDataSample(dataSample: $dataSample) {\n id\n collectedAt\n }\n }\n `,\n variables: {\n dataSample\n },\n context: {\n hasUpload: true\n }\n })\n\n if (!response.errors) {\n const { id, collectedAt } = response.data.createDataSample\n this.dataSample = {\n id,\n collectedAt: new Date(collectedAt)\n }\n\n document.dispatchEvent(\n new CustomEvent('notify', { detail: { message: i18next.t('text.data sample created successfully') } })\n )\n }\n }\n}\n"]}
@@ -12,7 +12,7 @@ import { DataGrist, getRenderer } from '@operato/data-grist';
12
12
  import { OxDataUseCase } from '@operato/dataset';
13
13
  import { client } from '@operato/graphql';
14
14
  import { i18next, localize } from '@operato/i18n';
15
- import { openPopup } from '@operato/layout';
15
+ import { openPopup, notify } from '@operato/layout';
16
16
  import { InheritedValueType, navigate, PageView, store } from '@operato/shell';
17
17
  import { CommonHeaderStyles, ScrollbarStyles } from '@operato/styles';
18
18
  import { provider } from '@things-factory/board-ui/dist-client';
@@ -66,6 +66,27 @@ const showEntryView = async (columns, data, column, record, rowIndex) => {
66
66
  break;
67
67
  }
68
68
  };
69
+ const issueDataEntry = async (columns, data, column, record, rowIndex) => {
70
+ const response = await client.mutate({
71
+ mutation: gql `
72
+ mutation ($dataSetId: String!) {
73
+ issueDataCollection(dataSetId: $dataSetId)
74
+ }
75
+ `,
76
+ variables: { dataSetId: record.id }
77
+ });
78
+ if (response.errors) {
79
+ notify({
80
+ message: response.errors[0].message,
81
+ level: 'error'
82
+ });
83
+ }
84
+ else {
85
+ notify({
86
+ message: 'Data entry task issued successfully'
87
+ });
88
+ }
89
+ };
69
90
  let DataEntryListPage = class DataEntryListPage extends connect(store)(localize(i18next)(PageView)) {
70
91
  get context() {
71
92
  var _a;
@@ -87,10 +108,9 @@ let DataEntryListPage = class DataEntryListPage extends connect(store)(localize(
87
108
  };
88
109
  }
89
110
  render() {
90
- const mode = 'CARD';
91
111
  return html `
92
112
  <ox-grist
93
- .mode=${mode}
113
+ mode="CARD"
94
114
  .config=${this.gristConfig}
95
115
  .fetchHandler=${this.fetchHandler.bind(this)}
96
116
  ?url-params-sensitive=${this.active}
@@ -111,6 +131,22 @@ let DataEntryListPage = class DataEntryListPage extends connect(store)(localize(
111
131
  details: ['schedule', 'type', 'useCase', 'latestCollectedAt', 'prevSchedule', 'nextSchedule']
112
132
  },
113
133
  columns: [
134
+ {
135
+ type: 'gutter',
136
+ gutterName: 'button',
137
+ icon: record => (!record ? 'assignment_add' : !record.id ? '' : 'assignment_add'),
138
+ iconOnly: false,
139
+ width: 96,
140
+ fixed: true,
141
+ title: record => !record
142
+ ? i18next.t('button.assign-data-collection')
143
+ : !record.id
144
+ ? ''
145
+ : i18next.t('button.assign-data-collection'),
146
+ handlers: {
147
+ click: issueDataEntry
148
+ }
149
+ },
114
150
  {
115
151
  type: 'gutter',
116
152
  gutterName: 'button',
@@ -250,8 +286,14 @@ let DataEntryListPage = class DataEntryListPage extends connect(store)(localize(
250
286
  renderer: function (value, column, record, rowIndex, field) {
251
287
  var _a;
252
288
  const type = record.entryType !== 'board' ? 'string' : 'image';
253
- value = record.entryType !== 'board' ? value : (_a = record.entryBoard) === null || _a === void 0 ? void 0 : _a.thumbnail;
254
- return getRenderer(type)(value, column, record, rowIndex, field);
289
+ let renderedValue;
290
+ if (record.entryType === 'board' && ((_a = record.entryBoard) === null || _a === void 0 ? void 0 : _a.thumbnail)) {
291
+ renderedValue = record.entryBoard.thumbnail;
292
+ }
293
+ else {
294
+ renderedValue = html `<md-icon style="--md-icon-size: 64px;">assignment</md-icon>`;
295
+ }
296
+ return getRenderer(type)(renderedValue, column, record, rowIndex, field);
255
297
  }
256
298
  }
257
299
  }
@@ -262,9 +304,6 @@ let DataEntryListPage = class DataEntryListPage extends connect(store)(localize(
262
304
  selectable: {
263
305
  multiple: false
264
306
  },
265
- handlers: {
266
- click: showEntryView
267
- },
268
307
  classifier: function (record, rowIndex) { }
269
308
  },
270
309
  sorters: [