@things-factory/integration-ui 7.0.1-alpha.10 → 7.0.1-alpha.100

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. package/client/bootstrap.ts +1 -6
  2. package/client/editors/entity-selector.ts +9 -33
  3. package/client/editors/things-editor-entity-selector.ts +3 -3
  4. package/client/editors/things-editor-oracle-procedure.ts +9 -9
  5. package/client/grist/connection-selector.ts +0 -2
  6. package/client/grist/connector-selector.ts +0 -2
  7. package/client/grist/dynamic-selector.ts +1 -5
  8. package/client/pages/connection-importer.ts +6 -15
  9. package/client/pages/connection.ts +3 -2
  10. package/client/pages/integration-analysis.ts +1 -1
  11. package/client/pages/integration-monitor.ts +12 -3
  12. package/client/pages/scenario-detail.ts +7 -23
  13. package/client/pages/scenario-importer.ts +6 -15
  14. package/client/pages/scenario.ts +9 -24
  15. package/client/viewparts/connections-monitor.ts +10 -9
  16. package/client/viewparts/monitoring-summary.ts +4 -3
  17. package/client/viewparts/pending-q-monitor.ts +5 -3
  18. package/client/viewparts/scenario-instance-log-view.ts +7 -2
  19. package/client/viewparts/scenario-instance-monitor.ts +9 -6
  20. package/client/viewparts/scenario-instance-view.ts +1 -1
  21. package/client/viewparts/scenario-monitor.ts +14 -14
  22. package/client/viewparts/scenarios-monitor.ts +7 -5
  23. package/dist-client/bootstrap.d.ts +0 -1
  24. package/dist-client/bootstrap.js +0 -1
  25. package/dist-client/bootstrap.js.map +1 -1
  26. package/dist-client/editors/entity-selector.d.ts +1 -1
  27. package/dist-client/editors/entity-selector.js +9 -29
  28. package/dist-client/editors/entity-selector.js.map +1 -1
  29. package/dist-client/editors/things-editor-entity-selector.d.ts +1 -1
  30. package/dist-client/editors/things-editor-entity-selector.js +3 -3
  31. package/dist-client/editors/things-editor-entity-selector.js.map +1 -1
  32. package/dist-client/editors/things-editor-oracle-procedure.d.ts +1 -1
  33. package/dist-client/editors/things-editor-oracle-procedure.js +9 -9
  34. package/dist-client/editors/things-editor-oracle-procedure.js.map +1 -1
  35. package/dist-client/grist/connection-selector.d.ts +0 -1
  36. package/dist-client/grist/connection-selector.js +0 -1
  37. package/dist-client/grist/connection-selector.js.map +1 -1
  38. package/dist-client/grist/connector-selector.d.ts +0 -1
  39. package/dist-client/grist/connector-selector.js +0 -1
  40. package/dist-client/grist/connector-selector.js.map +1 -1
  41. package/dist-client/grist/dynamic-selector.d.ts +0 -1
  42. package/dist-client/grist/dynamic-selector.js +0 -1
  43. package/dist-client/grist/dynamic-selector.js.map +1 -1
  44. package/dist-client/pages/connection-importer.d.ts +1 -0
  45. package/dist-client/pages/connection-importer.js +6 -15
  46. package/dist-client/pages/connection-importer.js.map +1 -1
  47. package/dist-client/pages/connection.js +3 -2
  48. package/dist-client/pages/connection.js.map +1 -1
  49. package/dist-client/pages/integration-analysis.js +1 -1
  50. package/dist-client/pages/integration-analysis.js.map +1 -1
  51. package/dist-client/pages/integration-monitor.js +12 -3
  52. package/dist-client/pages/integration-monitor.js.map +1 -1
  53. package/dist-client/pages/scenario-detail.d.ts +1 -0
  54. package/dist-client/pages/scenario-detail.js +7 -23
  55. package/dist-client/pages/scenario-detail.js.map +1 -1
  56. package/dist-client/pages/scenario-importer.d.ts +1 -0
  57. package/dist-client/pages/scenario-importer.js +6 -15
  58. package/dist-client/pages/scenario-importer.js.map +1 -1
  59. package/dist-client/pages/scenario.js +4 -16
  60. package/dist-client/pages/scenario.js.map +1 -1
  61. package/dist-client/tsconfig.tsbuildinfo +1 -1
  62. package/dist-client/viewparts/connections-monitor.d.ts +1 -1
  63. package/dist-client/viewparts/connections-monitor.js +10 -9
  64. package/dist-client/viewparts/connections-monitor.js.map +1 -1
  65. package/dist-client/viewparts/monitoring-summary.d.ts +1 -0
  66. package/dist-client/viewparts/monitoring-summary.js +4 -3
  67. package/dist-client/viewparts/monitoring-summary.js.map +1 -1
  68. package/dist-client/viewparts/pending-q-monitor.d.ts +1 -0
  69. package/dist-client/viewparts/pending-q-monitor.js +4 -3
  70. package/dist-client/viewparts/pending-q-monitor.js.map +1 -1
  71. package/dist-client/viewparts/scenario-instance-log-view.d.ts +2 -1
  72. package/dist-client/viewparts/scenario-instance-log-view.js +7 -2
  73. package/dist-client/viewparts/scenario-instance-log-view.js.map +1 -1
  74. package/dist-client/viewparts/scenario-instance-monitor.d.ts +1 -1
  75. package/dist-client/viewparts/scenario-instance-monitor.js +9 -6
  76. package/dist-client/viewparts/scenario-instance-monitor.js.map +1 -1
  77. package/dist-client/viewparts/scenario-instance-view.js +1 -1
  78. package/dist-client/viewparts/scenario-instance-view.js.map +1 -1
  79. package/dist-client/viewparts/scenario-monitor.d.ts +1 -1
  80. package/dist-client/viewparts/scenario-monitor.js +13 -14
  81. package/dist-client/viewparts/scenario-monitor.js.map +1 -1
  82. package/dist-client/viewparts/scenarios-monitor.d.ts +1 -1
  83. package/dist-client/viewparts/scenarios-monitor.js +6 -5
  84. package/dist-client/viewparts/scenarios-monitor.js.map +1 -1
  85. package/dist-server/tsconfig.tsbuildinfo +1 -1
  86. package/package.json +7 -7
@@ -1,4 +1,5 @@
1
1
  import { __decorate, __metadata } from "tslib";
2
+ import '@material/web/icon/icon.js';
2
3
  import '@operato/data-grist';
3
4
  import gql from 'graphql-tag';
4
5
  import { css, html, LitElement } from 'lit';
@@ -6,7 +7,7 @@ import { customElement, property } from 'lit/decorators.js';
6
7
  import { client } from '@operato/graphql';
7
8
  import { i18next } from '@operato/i18n';
8
9
  import { isMobileDevice } from '@operato/utils';
9
- import { CommonGristStyles } from '@operato/styles';
10
+ import { ButtonContainerStyles, CommonGristStyles } from '@operato/styles';
10
11
  let ScenarioImporter = class ScenarioImporter extends LitElement {
11
12
  constructor() {
12
13
  super(...arguments);
@@ -49,14 +50,10 @@ let ScenarioImporter = class ScenarioImporter extends LitElement {
49
50
  }
50
51
  render() {
51
52
  return html `
52
- <ox-grist
53
- .mode=${isMobileDevice() ? 'LIST' : 'GRID'}
54
- .config=${this.columns}
55
- .data=${{ records: this.scenarios }}
56
- ></ox-grist>
53
+ <ox-grist .mode=${isMobileDevice() ? 'LIST' : 'GRID'} .config=${this.columns} .data=${{ records: this.scenarios }}></ox-grist>
57
54
 
58
55
  <div class="button-container">
59
- <mwc-button raised @click=${this.save.bind(this)}>${i18next.t('button.save')}</mwc-button>
56
+ <button @click=${this.save.bind(this)}><md-icon>save</md-icon>${i18next.t('button.save')}</button>
60
57
  </div>
61
58
  `;
62
59
  }
@@ -76,6 +73,7 @@ let ScenarioImporter = class ScenarioImporter extends LitElement {
76
73
  }
77
74
  };
78
75
  ScenarioImporter.styles = [
76
+ ButtonContainerStyles,
79
77
  CommonGristStyles,
80
78
  css `
81
79
  :host {
@@ -84,17 +82,10 @@ ScenarioImporter.styles = [
84
82
 
85
83
  background-color: #fff;
86
84
  }
85
+
87
86
  ox-grist {
88
87
  flex: 1;
89
88
  }
90
- .button-container {
91
- display: flex;
92
- margin-left: auto;
93
- padding: var(--padding-default);
94
- }
95
- mwc-button {
96
- margin-left: var(--margin-default);
97
- }
98
89
  `
99
90
  ];
100
91
  __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"scenario-importer.js","sourceRoot":"","sources":["../../client/pages/scenario-importer.ts"],"names":[],"mappings":";AAAA,OAAO,qBAAqB,CAAA;AAE5B,OAAO,GAAG,MAAM,aAAa,CAAA;AAC7B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAgB,MAAM,mBAAmB,CAAA;AAEzE,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAG5C,IAAM,gBAAgB,GAAtB,MAAM,gBAAiB,SAAQ,UAAU;IAAzC;;QAyBuB,YAAO,GAAQ;YACzC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE;YACzC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC9B,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,MAAM;oBACZ,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC;oBAC/B,KAAK,EAAE,GAAG;iBACX;gBACD;oBACE,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,MAAM;oBACZ,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC;oBAC/B,KAAK,EAAE,GAAG;iBACX;gBACD;oBACE,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,aAAa;oBACnB,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC;oBACtC,KAAK,EAAE,GAAG;iBACX;gBACD;oBACE,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,UAAU;oBAChB,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC;oBACnC,KAAK,EAAE,EAAE;iBACV;gBACD;oBACE,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,UAAU;oBAChB,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC;oBACnC,KAAK,EAAE,GAAG;iBACX;aACF;SACF,CAAA;IA8BH,CAAC;IA5BC,MAAM;QACJ,OAAO,IAAI,CAAA;;gBAEC,cAAc,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;kBAChC,IAAI,CAAC,OAAO;gBACd,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE;;;;oCAIP,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC;;KAE/E,CAAA;IACH,CAAC;IAED,KAAK,CAAC,IAAI;;QACR,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;YACnC,QAAQ,EAAE,GAAG,CAAA;;;;OAIZ;YACD,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;SACzC,CAAC,CAAA;QAEF,IAAI,MAAA,QAAQ,CAAC,MAAM,0CAAE,MAAM;YAAE,OAAM;QAEnC,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,CAAC,CAAA;IACjD,CAAC;;AAxFM,uBAAM,GAAG;IACd,iBAAiB;IACjB,GAAG,CAAA;;;;;;;;;;;;;;;;;;KAkBF;CACF,CAAA;AAED;IAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;;mDAAe;AACzC;IAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;iDAmC1B;AA5DU,gBAAgB;IAD5B,aAAa,CAAC,mBAAmB,CAAC;GACtB,gBAAgB,CA0F5B;SA1FY,gBAAgB","sourcesContent":["import '@operato/data-grist'\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 } from '@operato/i18n'\nimport { isMobileDevice } from '@operato/utils'\nimport { CommonGristStyles } from '@operato/styles'\n\n@customElement('scenario-importer')\nexport class ScenarioImporter extends LitElement {\n static styles = [\n CommonGristStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n\n background-color: #fff;\n }\n ox-grist {\n flex: 1;\n }\n .button-container {\n display: flex;\n margin-left: auto;\n padding: var(--padding-default);\n }\n mwc-button {\n margin-left: var(--margin-default);\n }\n `\n ]\n\n @property({ type: Array }) scenarios: any\n @property({ type: Object }) columns: any = {\n list: { fields: ['name', 'description'] },\n pagination: { infinite: true },\n columns: [\n {\n type: 'string',\n name: 'name',\n header: i18next.t('field.name'),\n width: 150\n },\n {\n type: 'string',\n name: 'type',\n header: i18next.t('field.type'),\n width: 100\n },\n {\n type: 'string',\n name: 'description',\n header: i18next.t('field.description'),\n width: 200\n },\n {\n type: 'crontab',\n name: 'schedule',\n header: i18next.t('field.schedule'),\n width: 80\n },\n {\n type: 'string',\n name: 'timezone',\n header: i18next.t('field.timezone'),\n width: 120\n }\n ]\n }\n\n render() {\n return html`\n <ox-grist\n .mode=${isMobileDevice() ? 'LIST' : 'GRID'}\n .config=${this.columns}\n .data=${{ records: this.scenarios }}\n ></ox-grist>\n\n <div class=\"button-container\">\n <mwc-button raised @click=${this.save.bind(this)}>${i18next.t('button.save')}</mwc-button>\n </div>\n `\n }\n\n async save() {\n const response = await client.mutate({\n mutation: gql`\n mutation importScenarios($scenarios: [ScenarioPatch!]!) {\n importScenarios(scenarios: $scenarios)\n }\n `,\n variables: { scenarios: this.scenarios }\n })\n\n if (response.errors?.length) return\n\n this.dispatchEvent(new CustomEvent('imported'))\n }\n}\n"]}
1
+ {"version":3,"file":"scenario-importer.js","sourceRoot":"","sources":["../../client/pages/scenario-importer.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@operato/data-grist'\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 } from '@operato/i18n'\nimport { isMobileDevice } from '@operato/utils'\nimport { ButtonContainerStyles, CommonGristStyles } from '@operato/styles'\n\n@customElement('scenario-importer')\nexport class ScenarioImporter extends LitElement {\n static styles = [\n ButtonContainerStyles,\n CommonGristStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n\n background-color: #fff;\n }\n\n ox-grist {\n flex: 1;\n }\n `\n ]\n\n @property({ type: Array }) scenarios: any\n @property({ type: Object }) columns: any = {\n list: { fields: ['name', 'description'] },\n pagination: { infinite: true },\n columns: [\n {\n type: 'string',\n name: 'name',\n header: i18next.t('field.name'),\n width: 150\n },\n {\n type: 'string',\n name: 'type',\n header: i18next.t('field.type'),\n width: 100\n },\n {\n type: 'string',\n name: 'description',\n header: i18next.t('field.description'),\n width: 200\n },\n {\n type: 'crontab',\n name: 'schedule',\n header: i18next.t('field.schedule'),\n width: 80\n },\n {\n type: 'string',\n name: 'timezone',\n header: i18next.t('field.timezone'),\n width: 120\n }\n ]\n }\n\n render() {\n return html`\n <ox-grist .mode=${isMobileDevice() ? 'LIST' : 'GRID'} .config=${this.columns} .data=${{ records: this.scenarios }}></ox-grist>\n\n <div class=\"button-container\">\n <button @click=${this.save.bind(this)}><md-icon>save</md-icon>${i18next.t('button.save')}</button>\n </div>\n `\n }\n\n async save() {\n const response = await client.mutate({\n mutation: gql`\n mutation importScenarios($scenarios: [ScenarioPatch!]!) {\n importScenarios(scenarios: $scenarios)\n }\n `,\n variables: { scenarios: this.scenarios }\n })\n\n if (response.errors?.length) return\n\n this.dispatchEvent(new CustomEvent('imported'))\n }\n}\n"]}
@@ -5,7 +5,7 @@ import './scenario-importer';
5
5
  import gql from 'graphql-tag';
6
6
  import { css, html } from 'lit';
7
7
  import { customElement, property, query, state } from 'lit/decorators.js';
8
- import moment from 'moment-timezone';
8
+ import moment from '@operato/moment-timezone-es';
9
9
  import { connect } from 'pwa-helpers/connect-mixin';
10
10
  import { DataGrist } from '@operato/data-grist/ox-grist.js';
11
11
  import { client } from '@operato/graphql';
@@ -91,14 +91,7 @@ let Scenario = class Scenario extends connect(store)(localize(i18next)(PageView)
91
91
  };
92
92
  }
93
93
  render() {
94
- return html `
95
- <ox-grist
96
- .mode=${isMobileDevice() ? 'LIST' : 'GRID'}
97
- .config=${this.gristConfig}
98
- .fetchHandler=${this.fetchHandler.bind(this)}
99
- >
100
- </ox-grist>
101
- `;
94
+ return html ` <ox-grist .mode=${isMobileDevice() ? 'LIST' : 'GRID'} .config=${this.gristConfig} .fetchHandler=${this.fetchHandler.bind(this)}> </ox-grist> `;
102
95
  }
103
96
  async pageInitialized(lifecycle) {
104
97
  this.fetchTaskTypes();
@@ -158,13 +151,7 @@ let Scenario = class Scenario extends connect(store)(localize(i18next)(PageView)
158
151
  click: (columns, data, column, record, rowIndex) => {
159
152
  if (!record.id)
160
153
  return;
161
- openPopup(html `
162
- <scenario-detail
163
- .scenario=${record}
164
- .taskTypes=${this.taskTypes}
165
- @requestRefresh="${() => this.grist.fetch()}"
166
- ></scenario-detail>
167
- `, {
154
+ openPopup(html ` <scenario-detail .scenario=${record} .taskTypes=${this.taskTypes} @requestRefresh="${() => this.grist.fetch()}"></scenario-detail> `, {
168
155
  backdrop: true,
169
156
  help: 'integration/ui/scenario-detail',
170
157
  size: 'large',
@@ -366,6 +353,7 @@ let Scenario = class Scenario extends connect(store)(localize(i18next)(PageView)
366
353
  label
367
354
  placeholder
368
355
  property
356
+ styles
369
357
  }
370
358
  }
371
359
  }
@@ -1 +1 @@
1
- {"version":3,"file":"scenario.js","sourceRoot":"","sources":["../../client/pages/scenario.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/data-grist'\nimport './scenario-detail'\nimport './scenario-importer'\n\nimport gql from 'graphql-tag'\nimport { css, html } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport moment from 'moment-timezone'\nimport { connect } from 'pwa-helpers/connect-mixin'\n\nimport { DataGrist } from '@operato/data-grist/ox-grist.js'\nimport { client } from '@operato/graphql'\nimport { i18next, localize } from '@operato/i18n'\nimport { notify, openPopup } from '@operato/layout'\nimport { navigate, PageView, store } from '@operato/shell'\nimport { CommonButtonStyles, CommonGristStyles, ScrollbarStyles } from '@operato/styles'\nimport { isMobileDevice } from '@operato/utils'\n\nconst DEFAULT_TZ = Intl.DateTimeFormat().resolvedOptions().timeZone\nconst TIMEZONE_OPTIONS = ['', DEFAULT_TZ, ...moment.tz.names().filter(tz => tz !== DEFAULT_TZ)]\n\nfunction IS_SCENARIO_RUNNING(state) {\n return state && state !== 'UNLOADED'\n}\n\n@customElement('scenario-page')\nexport class Scenario extends connect(store)(localize(i18next)(PageView)) {\n static get styles() {\n return [\n CommonGristStyles,\n ScrollbarStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n\n overflow: hidden;\n }\n\n ox-grist {\n overflow-y: auto;\n flex: 1;\n }\n\n #filters {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n\n background-color: white;\n }\n\n #filters > * {\n padding: var(--padding-default) var(--padding-wide);\n }\n `\n ]\n }\n\n @property({ type: Boolean }) active: boolean = false\n @property({ type: Object }) gristConfig: any\n @property({ type: Object }) taskTypes: any\n\n @query('ox-grist') grist!: DataGrist\n\n get context() {\n return {\n title: i18next.t('text.scenario list'),\n search: {\n handler: search => {\n this.grist.searchText = search\n },\n value: this.grist?.searchText || ''\n },\n // 필터가 설정되면, 아래 코멘트 해제\n // filter: {\n // handler: () => {\n // const display = this.headroom.style.display\n // this.headroom.style.display = display !== 'none' ? 'none' : 'flex'\n // }\n // },\n help: 'integration/ui/scenario',\n actions: [\n {\n title: i18next.t('button.start monitor'),\n action: () => {\n navigate('integration-monitor')\n },\n ...CommonButtonStyles.preview\n },\n {\n title: i18next.t('button.copy'),\n action: this._copyScenario.bind(this),\n ...CommonButtonStyles.copy\n },\n {\n title: i18next.t('button.save'),\n action: this._updateScenario.bind(this),\n ...CommonButtonStyles.save\n },\n {\n title: i18next.t('button.delete'),\n action: this._deleteScenario.bind(this),\n ...CommonButtonStyles.delete\n }\n ],\n exportable: {\n name: i18next.t('text.scenario list'),\n data: this.exportHandler.bind(this)\n },\n importable: {\n handler: this.importHandler.bind(this)\n }\n }\n }\n\n render() {\n return html`\n <ox-grist\n .mode=${isMobileDevice() ? 'LIST' : 'GRID'}\n .config=${this.gristConfig}\n .fetchHandler=${this.fetchHandler.bind(this)}\n >\n </ox-grist>\n `\n }\n\n async pageInitialized(lifecycle) {\n this.fetchTaskTypes()\n\n this.gristConfig = {\n list: { fields: ['name', 'description', 'schedule', 'active'] },\n columns: [\n { type: 'gutter', gutterName: 'sequence', fixed: true },\n { type: 'gutter', gutterName: 'row-selector', multiple: true, fixed: true },\n {\n type: 'gutter',\n gutterName: 'button',\n fixed: true,\n title: i18next.t('title.scenario schedule (un)register'),\n icon: record => (!record || record.scheduleId ? 'event_available' : ''),\n handlers: {\n click: (columns, data, column, record, rowIndex) => {\n if (!record || !record.name) {\n /* TODO record가 새로 추가된 것이면 리턴하도록 한다. */\n return\n }\n if (record.scheduleId) {\n this.stopScenarioSchedule(record)\n } else {\n this.startScenarioSchedule(record)\n }\n }\n }\n },\n {\n type: 'gutter',\n gutterName: 'button',\n name: 'state',\n fixed: true,\n icon: record => (!record ? 'play_arrow' : IS_SCENARIO_RUNNING(record.state) ? 'pause' : 'play_arrow'),\n handlers: {\n click: (columns, data, column, record, rowIndex) => {\n if (!record || !record.name) {\n /* TODO record가 새로 추가된 것이면 리턴하도록 한다. */\n return\n }\n if (IS_SCENARIO_RUNNING(record.state)) {\n this.stopScenario(record)\n } else {\n this.startScenario(record)\n }\n }\n }\n },\n {\n type: 'gutter',\n gutterName: 'button',\n fixed: true,\n icon: 'reorder',\n handlers: {\n click: (columns, data, column, record, rowIndex) => {\n if (!record.id) return\n openPopup(\n html`\n <scenario-detail\n .scenario=${record}\n .taskTypes=${this.taskTypes}\n @requestRefresh=\"${() => this.grist.fetch()}\"\n ></scenario-detail>\n `,\n {\n backdrop: true,\n help: 'integration/ui/scenario-detail',\n size: 'large',\n title: i18next.t('title.scenario-detail')\n }\n )\n }\n }\n },\n {\n type: 'string',\n name: 'name',\n fixed: true,\n label: true,\n header: i18next.t('field.name'),\n record: {\n editable: true\n },\n filter: 'search',\n sortable: true,\n width: 300,\n validation: function (after, before, record, column) {\n /* connected 상태에서는 이름을 바꿀 수 없다. */\n if (IS_SCENARIO_RUNNING(record.state)) {\n notify({\n level: 'warn',\n message: 'scenario name cannot be changed during execution.'\n })\n return false\n }\n return true\n }\n },\n {\n type: 'string',\n name: 'type',\n header: i18next.t('field.type'),\n record: {\n editable: true\n },\n filter: 'search',\n width: 100\n },\n {\n type: 'string',\n name: 'description',\n label: true,\n header: i18next.t('field.description'),\n record: {\n editable: true\n },\n filter: 'search',\n width: 350\n },\n {\n type: 'crontab',\n name: 'schedule',\n label: true,\n header: i18next.t('field.schedule'),\n record: {\n editable: true\n },\n width: 110\n },\n {\n type: 'select',\n name: 'timezone',\n header: i18next.t('field.timezone'),\n record: {\n editable: true,\n options: TIMEZONE_OPTIONS\n },\n width: 120\n },\n {\n type: 'privilege',\n name: 'privilege',\n label: true,\n header: i18next.t('field.required privilege'),\n record: {\n editable: true\n },\n sortable: true,\n width: 200\n },\n {\n type: 'checkbox',\n name: 'active',\n label: true,\n header: i18next.t('field.active'),\n record: {\n align: 'center',\n editable: true\n },\n sortable: true,\n width: 60\n },\n {\n type: 'object',\n name: 'updater',\n header: i18next.t('field.updater'),\n record: {\n editable: false\n },\n sortable: true,\n width: 85\n },\n {\n type: 'datetime',\n name: 'updatedAt',\n header: i18next.t('field.updated_at'),\n record: {\n editable: false\n },\n sortable: true,\n width: 180\n }\n ],\n rows: {\n selectable: {\n multiple: true\n }\n },\n sorters: [\n {\n name: 'name'\n }\n ]\n }\n }\n\n async pageUpdated(changes, lifecycle) {\n if (this.active) {\n this.grist.fetch()\n }\n }\n\n async fetchHandler({ page, limit, sortings = [], filters = [] }) {\n const response = await client.query({\n query: gql`\n query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) {\n responses: scenarios(filters: $filters, pagination: $pagination, sortings: $sortings) {\n items {\n id\n name\n type\n description\n active\n state\n schedule\n scheduleId\n timezone\n privilege {\n category\n privilege\n owner\n super\n }\n updater {\n id\n name\n }\n updatedAt\n steps {\n name\n description\n sequence\n task\n skip\n log\n connection\n params\n }\n }\n total\n }\n }\n `,\n variables: {\n filters,\n pagination: { page, limit },\n sortings\n }\n })\n\n return {\n total: response.data.responses.total || 0,\n records: response.data.responses.items || []\n }\n }\n\n async fetchTaskTypes() {\n const response = await client.query({\n query: gql`\n query {\n taskTypes {\n items {\n name\n description\n help\n parameterSpec {\n type\n name\n label\n placeholder\n property\n }\n }\n }\n }\n `\n })\n\n if (!response.errors) {\n this.taskTypes = response.data.taskTypes.items.reduce((taskTypes, taskType) => {\n taskTypes[taskType.name] = taskType\n return taskTypes\n }, {})\n } else {\n console.error('fetch taskTypes error')\n }\n }\n\n async _deleteScenario() {\n if (confirm(i18next.t('text.sure_to_x', { x: i18next.t('text.delete') }))) {\n const ids = this.grist.selected.map(record => record.id)\n if (ids && ids.length > 0) {\n const response = await client.mutate({\n mutation: gql`\n mutation ($ids: [String!]!) {\n deleteScenarios(ids: $ids)\n }\n `,\n variables: {\n ids\n }\n })\n\n if (!response.errors) {\n this.grist.fetch()\n notify({\n message: i18next.t('text.info_x_successfully', { x: i18next.t('text.delete') })\n })\n }\n }\n }\n }\n\n async _copyScenario() {\n var selected = this.grist.selected\n if (selected.length == 0) return\n\n if (!confirm(i18next.t('text.sure_to_x', { x: i18next.t('text.copy') }))) return\n var response = await client.mutate({\n mutation: gql`\n mutation ($ids: [String!]!) {\n copyScenarios(ids: $ids) {\n id\n }\n }\n `,\n variables: {\n ids: selected.map(r => r.id)\n }\n })\n\n if (!response.errors) this.grist.fetch()\n }\n\n async _updateScenario() {\n var patches = this.grist.dirtyRecords\n if (patches && patches.length) {\n patches = patches.map(patch => {\n let patchField: any = patch.id ? { id: patch.id } : {}\n const dirtyFields = patch.__dirtyfields__\n for (let key in dirtyFields) {\n if (['message', 'step', 'steps', 'progress', 'rounds'].indexOf(key) == -1) {\n patchField[key] = dirtyFields[key].after\n }\n }\n patchField.cuFlag = patch.__dirty__\n\n return patchField\n })\n\n const response = await client.mutate({\n mutation: gql`\n mutation ($patches: [ScenarioPatch!]!) {\n updateMultipleScenario(patches: $patches) {\n name\n }\n }\n `,\n variables: {\n patches\n }\n })\n\n if (!response.errors) this.grist.fetch()\n }\n }\n\n async startScenario(record) {\n var { data, errors } = await client.mutate({\n mutation: gql`\n mutation ($scenarioName: String!, $instanceName: String) {\n startScenario(scenarioName: $scenarioName, instanceName: $instanceName) {\n state\n }\n }\n `,\n variables: {\n scenarioName: record.name,\n instanceName: record.name\n }\n })\n\n if (data && data.startScenario) {\n record.state = data.startScenario.state\n\n notify({\n level: 'info',\n message: `${IS_SCENARIO_RUNNING(state) ? 'success' : 'fail'} to start scenario : ${record.name}`\n })\n }\n\n this.grist.fetch()\n }\n\n async stopScenario(record) {\n var response = await client.mutate({\n mutation: gql`\n mutation ($instanceName: String!) {\n stopScenario(instanceName: $instanceName) {\n state\n }\n }\n `,\n variables: {\n instanceName: record.name\n }\n })\n\n if (!response.errors) {\n notify({\n level: 'info',\n message: `success to stop scenario : ${record.name}`\n })\n } else {\n notify({\n level: 'error',\n message: `${response.errors.map(error => error.message).join('\\n')}`\n })\n }\n\n this.grist.fetch()\n }\n\n async startScenarioSchedule(record) {\n var response = await client.mutate({\n mutation: gql`\n mutation ($scenarioId: String!) {\n startScenarioSchedule(scenarioId: $scenarioId) {\n scheduleId\n }\n }\n `,\n variables: {\n scenarioId: record.id\n }\n })\n\n const scheduleId = response.data.startScenarioSchedule.scheduleId\n record.scheduleId = scheduleId\n\n notify({\n level: 'info',\n message: `${record.scheduleId ? 'success' : 'fail'} to start scenario schedule : ${record.name}`\n })\n\n this.grist.fetch()\n }\n\n async stopScenarioSchedule(record) {\n var response = await client.mutate({\n mutation: gql`\n mutation ($scenarioId: String!) {\n stopScenarioSchedule(scenarioId: $scenarioId) {\n scheduleId\n }\n }\n `,\n variables: {\n scenarioId: record.id\n }\n })\n\n if (!response.errors) {\n notify({\n level: 'info',\n message: `success to stop scenario schedule : ${record.name}`\n })\n } else {\n notify({\n level: 'error',\n message: `${response.errors.map(error => error.message).join('\\n')}`\n })\n }\n\n this.grist.fetch()\n }\n\n async exportHandler() {\n const exportTargets = this.grist.selected.length ? this.grist.selected : this.grist.dirtyData.records\n const targetFieldSet = new Set(['id', 'name', 'type', 'description', 'schedule', 'timezone', 'steps'])\n\n return exportTargets.map(scenario => {\n let tempObj = {}\n for (const field of targetFieldSet) {\n tempObj[field] = scenario[field]\n }\n\n return tempObj\n })\n }\n\n async importHandler(records) {\n openPopup(\n html`\n <scenario-importer\n .scenarios=\"${records}\"\n @imported=\"${() => {\n history.back()\n this.grist.fetch()\n }}\"\n ></scenario-importer>\n `,\n {\n backdrop: true,\n size: 'large',\n title: i18next.t('title.import scenario')\n }\n )\n }\n}\n"]}
1
+ {"version":3,"file":"scenario.js","sourceRoot":"","sources":["../../client/pages/scenario.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/data-grist'\nimport './scenario-detail'\nimport './scenario-importer'\n\nimport gql from 'graphql-tag'\nimport { css, html } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport moment from '@operato/moment-timezone-es'\nimport { connect } from 'pwa-helpers/connect-mixin'\n\nimport { DataGrist } from '@operato/data-grist/ox-grist.js'\nimport { client } from '@operato/graphql'\nimport { i18next, localize } from '@operato/i18n'\nimport { notify, openPopup } from '@operato/layout'\nimport { navigate, PageView, store } from '@operato/shell'\nimport { CommonButtonStyles, CommonGristStyles, ScrollbarStyles } from '@operato/styles'\nimport { isMobileDevice } from '@operato/utils'\n\nconst DEFAULT_TZ = Intl.DateTimeFormat().resolvedOptions().timeZone\nconst TIMEZONE_OPTIONS = ['', DEFAULT_TZ, ...moment.tz.names().filter(tz => tz !== DEFAULT_TZ)]\n\nfunction IS_SCENARIO_RUNNING(state) {\n return state && state !== 'UNLOADED'\n}\n\n@customElement('scenario-page')\nexport class Scenario extends connect(store)(localize(i18next)(PageView)) {\n static get styles() {\n return [\n CommonGristStyles,\n ScrollbarStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n\n overflow: hidden;\n }\n\n ox-grist {\n overflow-y: auto;\n flex: 1;\n }\n\n #filters {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n\n background-color: white;\n }\n\n #filters > * {\n padding: var(--padding-default) var(--padding-wide);\n }\n `\n ]\n }\n\n @property({ type: Boolean }) active: boolean = false\n @property({ type: Object }) gristConfig: any\n @property({ type: Object }) taskTypes: any\n\n @query('ox-grist') grist!: DataGrist\n\n get context() {\n return {\n title: i18next.t('text.scenario list'),\n search: {\n handler: search => {\n this.grist.searchText = search\n },\n value: this.grist?.searchText || ''\n },\n // 필터가 설정되면, 아래 코멘트 해제\n // filter: {\n // handler: () => {\n // const display = this.headroom.style.display\n // this.headroom.style.display = display !== 'none' ? 'none' : 'flex'\n // }\n // },\n help: 'integration/ui/scenario',\n actions: [\n {\n title: i18next.t('button.start monitor'),\n action: () => {\n navigate('integration-monitor')\n },\n ...CommonButtonStyles.preview\n },\n {\n title: i18next.t('button.copy'),\n action: this._copyScenario.bind(this),\n ...CommonButtonStyles.copy\n },\n {\n title: i18next.t('button.save'),\n action: this._updateScenario.bind(this),\n ...CommonButtonStyles.save\n },\n {\n title: i18next.t('button.delete'),\n action: this._deleteScenario.bind(this),\n ...CommonButtonStyles.delete\n }\n ],\n exportable: {\n name: i18next.t('text.scenario list'),\n data: this.exportHandler.bind(this)\n },\n importable: {\n handler: this.importHandler.bind(this)\n }\n }\n }\n\n render() {\n return html` <ox-grist .mode=${isMobileDevice() ? 'LIST' : 'GRID'} .config=${this.gristConfig} .fetchHandler=${this.fetchHandler.bind(this)}> </ox-grist> `\n }\n\n async pageInitialized(lifecycle) {\n this.fetchTaskTypes()\n\n this.gristConfig = {\n list: { fields: ['name', 'description', 'schedule', 'active'] },\n columns: [\n { type: 'gutter', gutterName: 'sequence', fixed: true },\n { type: 'gutter', gutterName: 'row-selector', multiple: true, fixed: true },\n {\n type: 'gutter',\n gutterName: 'button',\n fixed: true,\n title: i18next.t('title.scenario schedule (un)register'),\n icon: record => (!record || record.scheduleId ? 'event_available' : ''),\n handlers: {\n click: (columns, data, column, record, rowIndex) => {\n if (!record || !record.name) {\n /* TODO record가 새로 추가된 것이면 리턴하도록 한다. */\n return\n }\n if (record.scheduleId) {\n this.stopScenarioSchedule(record)\n } else {\n this.startScenarioSchedule(record)\n }\n }\n }\n },\n {\n type: 'gutter',\n gutterName: 'button',\n name: 'state',\n fixed: true,\n icon: record => (!record ? 'play_arrow' : IS_SCENARIO_RUNNING(record.state) ? 'pause' : 'play_arrow'),\n handlers: {\n click: (columns, data, column, record, rowIndex) => {\n if (!record || !record.name) {\n /* TODO record가 새로 추가된 것이면 리턴하도록 한다. */\n return\n }\n if (IS_SCENARIO_RUNNING(record.state)) {\n this.stopScenario(record)\n } else {\n this.startScenario(record)\n }\n }\n }\n },\n {\n type: 'gutter',\n gutterName: 'button',\n fixed: true,\n icon: 'reorder',\n handlers: {\n click: (columns, data, column, record, rowIndex) => {\n if (!record.id) return\n openPopup(html` <scenario-detail .scenario=${record} .taskTypes=${this.taskTypes} @requestRefresh=\"${() => this.grist.fetch()}\"></scenario-detail> `, {\n backdrop: true,\n help: 'integration/ui/scenario-detail',\n size: 'large',\n title: i18next.t('title.scenario-detail')\n })\n }\n }\n },\n {\n type: 'string',\n name: 'name',\n fixed: true,\n label: true,\n header: i18next.t('field.name'),\n record: {\n editable: true\n },\n filter: 'search',\n sortable: true,\n width: 300,\n validation: function (after, before, record, column) {\n /* connected 상태에서는 이름을 바꿀 수 없다. */\n if (IS_SCENARIO_RUNNING(record.state)) {\n notify({\n level: 'warn',\n message: 'scenario name cannot be changed during execution.'\n })\n return false\n }\n return true\n }\n },\n {\n type: 'string',\n name: 'type',\n header: i18next.t('field.type'),\n record: {\n editable: true\n },\n filter: 'search',\n width: 100\n },\n {\n type: 'string',\n name: 'description',\n label: true,\n header: i18next.t('field.description'),\n record: {\n editable: true\n },\n filter: 'search',\n width: 350\n },\n {\n type: 'crontab',\n name: 'schedule',\n label: true,\n header: i18next.t('field.schedule'),\n record: {\n editable: true\n },\n width: 110\n },\n {\n type: 'select',\n name: 'timezone',\n header: i18next.t('field.timezone'),\n record: {\n editable: true,\n options: TIMEZONE_OPTIONS\n },\n width: 120\n },\n {\n type: 'privilege',\n name: 'privilege',\n label: true,\n header: i18next.t('field.required privilege'),\n record: {\n editable: true\n },\n sortable: true,\n width: 200\n },\n {\n type: 'checkbox',\n name: 'active',\n label: true,\n header: i18next.t('field.active'),\n record: {\n align: 'center',\n editable: true\n },\n sortable: true,\n width: 60\n },\n {\n type: 'object',\n name: 'updater',\n header: i18next.t('field.updater'),\n record: {\n editable: false\n },\n sortable: true,\n width: 85\n },\n {\n type: 'datetime',\n name: 'updatedAt',\n header: i18next.t('field.updated_at'),\n record: {\n editable: false\n },\n sortable: true,\n width: 180\n }\n ],\n rows: {\n selectable: {\n multiple: true\n }\n },\n sorters: [\n {\n name: 'name'\n }\n ]\n }\n }\n\n async pageUpdated(changes, lifecycle) {\n if (this.active) {\n this.grist.fetch()\n }\n }\n\n async fetchHandler({ page, limit, sortings = [], filters = [] }) {\n const response = await client.query({\n query: gql`\n query ($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) {\n responses: scenarios(filters: $filters, pagination: $pagination, sortings: $sortings) {\n items {\n id\n name\n type\n description\n active\n state\n schedule\n scheduleId\n timezone\n privilege {\n category\n privilege\n owner\n super\n }\n updater {\n id\n name\n }\n updatedAt\n steps {\n name\n description\n sequence\n task\n skip\n log\n connection\n params\n }\n }\n total\n }\n }\n `,\n variables: {\n filters,\n pagination: { page, limit },\n sortings\n }\n })\n\n return {\n total: response.data.responses.total || 0,\n records: response.data.responses.items || []\n }\n }\n\n async fetchTaskTypes() {\n const response = await client.query({\n query: gql`\n query {\n taskTypes {\n items {\n name\n description\n help\n parameterSpec {\n type\n name\n label\n placeholder\n property\n styles\n }\n }\n }\n }\n `\n })\n\n if (!response.errors) {\n this.taskTypes = response.data.taskTypes.items.reduce((taskTypes, taskType) => {\n taskTypes[taskType.name] = taskType\n return taskTypes\n }, {})\n } else {\n console.error('fetch taskTypes error')\n }\n }\n\n async _deleteScenario() {\n if (confirm(i18next.t('text.sure_to_x', { x: i18next.t('text.delete') }))) {\n const ids = this.grist.selected.map(record => record.id)\n if (ids && ids.length > 0) {\n const response = await client.mutate({\n mutation: gql`\n mutation ($ids: [String!]!) {\n deleteScenarios(ids: $ids)\n }\n `,\n variables: {\n ids\n }\n })\n\n if (!response.errors) {\n this.grist.fetch()\n notify({\n message: i18next.t('text.info_x_successfully', { x: i18next.t('text.delete') })\n })\n }\n }\n }\n }\n\n async _copyScenario() {\n var selected = this.grist.selected\n if (selected.length == 0) return\n\n if (!confirm(i18next.t('text.sure_to_x', { x: i18next.t('text.copy') }))) return\n var response = await client.mutate({\n mutation: gql`\n mutation ($ids: [String!]!) {\n copyScenarios(ids: $ids) {\n id\n }\n }\n `,\n variables: {\n ids: selected.map(r => r.id)\n }\n })\n\n if (!response.errors) this.grist.fetch()\n }\n\n async _updateScenario() {\n var patches = this.grist.dirtyRecords\n if (patches && patches.length) {\n patches = patches.map(patch => {\n let patchField: any = patch.id ? { id: patch.id } : {}\n const dirtyFields = patch.__dirtyfields__\n for (let key in dirtyFields) {\n if (['message', 'step', 'steps', 'progress', 'rounds'].indexOf(key) == -1) {\n patchField[key] = dirtyFields[key].after\n }\n }\n patchField.cuFlag = patch.__dirty__\n\n return patchField\n })\n\n const response = await client.mutate({\n mutation: gql`\n mutation ($patches: [ScenarioPatch!]!) {\n updateMultipleScenario(patches: $patches) {\n name\n }\n }\n `,\n variables: {\n patches\n }\n })\n\n if (!response.errors) this.grist.fetch()\n }\n }\n\n async startScenario(record) {\n var { data, errors } = await client.mutate({\n mutation: gql`\n mutation ($scenarioName: String!, $instanceName: String) {\n startScenario(scenarioName: $scenarioName, instanceName: $instanceName) {\n state\n }\n }\n `,\n variables: {\n scenarioName: record.name,\n instanceName: record.name\n }\n })\n\n if (data && data.startScenario) {\n record.state = data.startScenario.state\n\n notify({\n level: 'info',\n message: `${IS_SCENARIO_RUNNING(state) ? 'success' : 'fail'} to start scenario : ${record.name}`\n })\n }\n\n this.grist.fetch()\n }\n\n async stopScenario(record) {\n var response = await client.mutate({\n mutation: gql`\n mutation ($instanceName: String!) {\n stopScenario(instanceName: $instanceName) {\n state\n }\n }\n `,\n variables: {\n instanceName: record.name\n }\n })\n\n if (!response.errors) {\n notify({\n level: 'info',\n message: `success to stop scenario : ${record.name}`\n })\n } else {\n notify({\n level: 'error',\n message: `${response.errors.map(error => error.message).join('\\n')}`\n })\n }\n\n this.grist.fetch()\n }\n\n async startScenarioSchedule(record) {\n var response = await client.mutate({\n mutation: gql`\n mutation ($scenarioId: String!) {\n startScenarioSchedule(scenarioId: $scenarioId) {\n scheduleId\n }\n }\n `,\n variables: {\n scenarioId: record.id\n }\n })\n\n const scheduleId = response.data.startScenarioSchedule.scheduleId\n record.scheduleId = scheduleId\n\n notify({\n level: 'info',\n message: `${record.scheduleId ? 'success' : 'fail'} to start scenario schedule : ${record.name}`\n })\n\n this.grist.fetch()\n }\n\n async stopScenarioSchedule(record) {\n var response = await client.mutate({\n mutation: gql`\n mutation ($scenarioId: String!) {\n stopScenarioSchedule(scenarioId: $scenarioId) {\n scheduleId\n }\n }\n `,\n variables: {\n scenarioId: record.id\n }\n })\n\n if (!response.errors) {\n notify({\n level: 'info',\n message: `success to stop scenario schedule : ${record.name}`\n })\n } else {\n notify({\n level: 'error',\n message: `${response.errors.map(error => error.message).join('\\n')}`\n })\n }\n\n this.grist.fetch()\n }\n\n async exportHandler() {\n const exportTargets = this.grist.selected.length ? this.grist.selected : this.grist.dirtyData.records\n const targetFieldSet = new Set(['id', 'name', 'type', 'description', 'schedule', 'timezone', 'steps'])\n\n return exportTargets.map(scenario => {\n let tempObj = {}\n for (const field of targetFieldSet) {\n tempObj[field] = scenario[field]\n }\n\n return tempObj\n })\n }\n\n async importHandler(records) {\n openPopup(\n html`\n <scenario-importer\n .scenarios=\"${records}\"\n @imported=\"${() => {\n history.back()\n this.grist.fetch()\n }}\"\n ></scenario-importer>\n `,\n {\n backdrop: true,\n size: 'large',\n title: i18next.t('title.import scenario')\n }\n )\n }\n}\n"]}