@operato/scene-integration 0.0.5 → 0.0.6

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 (47) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/connection-control.d.ts +41 -0
  3. package/dist/connection-control.js +137 -0
  4. package/dist/connection-control.js.map +1 -0
  5. package/dist/connection-state-subscription.d.ts +29 -0
  6. package/dist/connection-state-subscription.js +89 -0
  7. package/dist/connection-state-subscription.js.map +1 -0
  8. package/dist/data-subscription.d.ts +29 -0
  9. package/dist/data-subscription.js +76 -0
  10. package/dist/data-subscription.js.map +1 -0
  11. package/dist/index.d.ts +11 -0
  12. package/dist/index.js +21 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/origin-client.d.ts +5 -0
  15. package/dist/origin-client.js +110 -0
  16. package/dist/origin-client.js.map +1 -0
  17. package/dist/scenario-control.d.ts +44 -0
  18. package/dist/scenario-control.js +142 -0
  19. package/dist/scenario-control.js.map +1 -0
  20. package/dist/scenario-instance-subscription.d.ts +34 -0
  21. package/dist/scenario-instance-subscription.js +107 -0
  22. package/dist/scenario-instance-subscription.js.map +1 -0
  23. package/dist/scenario-queue-subscription.d.ts +22 -0
  24. package/dist/scenario-queue-subscription.js +68 -0
  25. package/dist/scenario-queue-subscription.js.map +1 -0
  26. package/dist/scenario-run.d.ts +39 -0
  27. package/dist/scenario-run.js +136 -0
  28. package/dist/scenario-run.js.map +1 -0
  29. package/dist/scenario-start.d.ts +39 -0
  30. package/dist/scenario-start.js +134 -0
  31. package/dist/scenario-start.js.map +1 -0
  32. package/dist/scenario-stop.d.ts +39 -0
  33. package/dist/scenario-stop.js +122 -0
  34. package/dist/scenario-stop.js.map +1 -0
  35. package/package.json +2 -2
  36. package/src/connection-control.ts +1 -5
  37. package/src/connection-state-subscription.ts +2 -7
  38. package/src/data-subscription.ts +1 -6
  39. package/src/origin-client.ts +0 -3
  40. package/src/scenario-control.ts +0 -3
  41. package/src/scenario-instance-subscription.ts +2 -7
  42. package/src/scenario-queue-subscription.ts +1 -6
  43. package/src/scenario-run.ts +0 -3
  44. package/src/scenario-start.ts +0 -3
  45. package/src/scenario-stop.ts +0 -3
  46. package/tsconfig.json +1 -1
  47. package/tsconfig.tsbuildinfo +1 -1
@@ -0,0 +1,44 @@
1
+ import { Properties, Shape } from '@hatiolab/things-scene';
2
+ declare const ScenarioControl_base: (new (...args: any[]) => {
3
+ isDataSource(): boolean;
4
+ }) & typeof Shape;
5
+ export default class ScenarioControl extends ScenarioControl_base {
6
+ static _image: HTMLImageElement;
7
+ static get image(): HTMLImageElement;
8
+ private _client;
9
+ render(context: CanvasRenderingContext2D): void;
10
+ ready(): void;
11
+ _initScenario(): void;
12
+ dispose(): void;
13
+ get nature(): {
14
+ mutable: boolean;
15
+ resizable: boolean;
16
+ rotatable: boolean;
17
+ properties: ({
18
+ type: string;
19
+ label: string;
20
+ name: string;
21
+ property: {
22
+ options: () => Promise<string[]>;
23
+ };
24
+ } | {
25
+ type: string;
26
+ label: string;
27
+ name: string;
28
+ property: {
29
+ options: {
30
+ display: string;
31
+ value: string;
32
+ }[];
33
+ };
34
+ })[];
35
+ 'value-property': string;
36
+ help: string;
37
+ };
38
+ onchange(after: Properties): void;
39
+ get client(): any;
40
+ get controlType(): any;
41
+ set controlType(controlType: any);
42
+ requestData(): Promise<void>;
43
+ }
44
+ export {};
@@ -0,0 +1,142 @@
1
+ import { Component, DataSource, RectPath, Shape } from '@hatiolab/things-scene';
2
+ import COMPONENT_IMAGE from '../assets/symbol-scenario-control.png';
3
+ import { getClient } from './origin-client';
4
+ import gql from 'graphql-tag';
5
+ const NATURE = {
6
+ mutable: false,
7
+ resizable: true,
8
+ rotatable: true,
9
+ properties: [
10
+ {
11
+ type: 'select',
12
+ label: 'scenario-name',
13
+ name: 'scenarioName',
14
+ property: {
15
+ options: async () => {
16
+ var response = await getClient().query({
17
+ query: gql `
18
+ query {
19
+ scenarios {
20
+ items {
21
+ name
22
+ }
23
+ }
24
+ }
25
+ `
26
+ });
27
+ if (response.errors) {
28
+ return [''];
29
+ }
30
+ return [''].concat(response.data.scenarios.items.map((item) => item.name));
31
+ }
32
+ }
33
+ },
34
+ {
35
+ type: 'select',
36
+ label: 'control-type',
37
+ name: 'controlType',
38
+ property: {
39
+ options: [
40
+ {
41
+ display: '',
42
+ value: ''
43
+ },
44
+ {
45
+ display: 'start',
46
+ value: 'start'
47
+ },
48
+ {
49
+ display: 'stop',
50
+ value: 'stop'
51
+ }
52
+ ]
53
+ }
54
+ }
55
+ ],
56
+ 'value-property': 'controlType',
57
+ help: 'scene/component/scenario-control'
58
+ };
59
+ export default class ScenarioControl extends DataSource(RectPath(Shape)) {
60
+ static get image() {
61
+ if (!ScenarioControl._image) {
62
+ ScenarioControl._image = new Image();
63
+ ScenarioControl._image.src = COMPONENT_IMAGE;
64
+ }
65
+ return ScenarioControl._image;
66
+ }
67
+ render(context) {
68
+ var { left, top, width, height } = this.bounds;
69
+ context.beginPath();
70
+ this.drawImage(context, ScenarioControl.image, left, top, width, height);
71
+ }
72
+ ready() {
73
+ super.ready();
74
+ this._initScenario();
75
+ }
76
+ _initScenario() {
77
+ if (!this.app.isViewMode)
78
+ return;
79
+ this._client = getClient();
80
+ this.requestData();
81
+ }
82
+ dispose() {
83
+ super.dispose();
84
+ try {
85
+ if (this._client) {
86
+ this._client.stop();
87
+ }
88
+ }
89
+ catch (e) {
90
+ console.error(e);
91
+ }
92
+ delete this._client;
93
+ }
94
+ get nature() {
95
+ return NATURE;
96
+ }
97
+ onchange(after) {
98
+ if ('controlType' in after) {
99
+ this.requestData();
100
+ }
101
+ }
102
+ get client() {
103
+ return this._client;
104
+ }
105
+ get controlType() {
106
+ return this.getState('controlType');
107
+ }
108
+ set controlType(controlType) {
109
+ this.setState('controlType', controlType);
110
+ }
111
+ async requestData() {
112
+ let { controlType, scenarioName } = this.state;
113
+ if (!controlType || !scenarioName || !this.app.isViewMode)
114
+ return;
115
+ var client = this._client;
116
+ var query = '';
117
+ if (controlType == 'start') {
118
+ query = `mutation{
119
+ ${controlType}Scenario(instanceName: "${scenarioName}", scenarioName: "${scenarioName}", variables: {}) {
120
+ state
121
+ }
122
+ }`;
123
+ }
124
+ else {
125
+ query = `mutation{
126
+ ${controlType}Scenario(instanceName: "${scenarioName}") {
127
+ state
128
+ }
129
+ }`;
130
+ }
131
+ if (client) {
132
+ var response = await client.query({
133
+ query: gql `
134
+ ${query}
135
+ `
136
+ });
137
+ this.data = response;
138
+ }
139
+ }
140
+ }
141
+ Component.register('scenario-control', ScenarioControl);
142
+ //# sourceMappingURL=scenario-control.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scenario-control.js","sourceRoot":"","sources":["../src/scenario-control.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, DataSource, Properties, RectPath, Shape } from '@hatiolab/things-scene'\n\nimport COMPONENT_IMAGE from '../assets/symbol-scenario-control.png'\nimport { getClient } from './origin-client'\nimport gql from 'graphql-tag'\n\nconst NATURE = {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [\n {\n type: 'select',\n label: 'scenario-name',\n name: 'scenarioName',\n property: {\n options: async () => {\n var response = await getClient().query({\n query: gql`\n query {\n scenarios {\n items {\n name\n }\n }\n }\n `\n })\n if (response.errors) {\n return ['']\n }\n\n return [''].concat(response.data.scenarios.items.map((item: any) => item.name))\n }\n }\n },\n {\n type: 'select',\n label: 'control-type',\n name: 'controlType',\n property: {\n options: [\n {\n display: '',\n value: ''\n },\n {\n display: 'start',\n value: 'start'\n },\n {\n display: 'stop',\n value: 'stop'\n }\n ]\n }\n }\n ],\n 'value-property': 'controlType',\n help: 'scene/component/scenario-control'\n}\n\nexport default class ScenarioControl extends DataSource(RectPath(Shape)) {\n static _image: HTMLImageElement\n\n static get image() {\n if (!ScenarioControl._image) {\n ScenarioControl._image = new Image()\n ScenarioControl._image.src = COMPONENT_IMAGE\n }\n return ScenarioControl._image\n }\n\n private _client: any\n\n render(context: CanvasRenderingContext2D) {\n var { left, top, width, height } = this.bounds\n context.beginPath()\n this.drawImage(context, ScenarioControl.image, left, top, width, height)\n }\n\n ready() {\n super.ready()\n this._initScenario()\n }\n\n _initScenario() {\n if (!this.app.isViewMode) return\n\n this._client = getClient()\n this.requestData()\n }\n\n dispose() {\n super.dispose()\n\n try {\n if (this._client) {\n this._client.stop()\n }\n } catch (e) {\n console.error(e)\n }\n delete this._client\n }\n\n get nature() {\n return NATURE\n }\n\n onchange(after: Properties) {\n if ('controlType' in after) {\n this.requestData()\n }\n }\n\n get client() {\n return this._client\n }\n\n get controlType() {\n return this.getState('controlType')\n }\n\n set controlType(controlType) {\n this.setState('controlType', controlType)\n }\n\n async requestData() {\n let { controlType, scenarioName } = this.state\n if (!controlType || !scenarioName || !this.app.isViewMode) return\n var client = this._client\n var query = ''\n if (controlType == 'start') {\n query = `mutation{\n ${controlType}Scenario(instanceName: \"${scenarioName}\", scenarioName: \"${scenarioName}\", variables: {}) {\n state\n }\n }`\n } else {\n query = `mutation{\n ${controlType}Scenario(instanceName: \"${scenarioName}\") {\n state\n }\n }`\n }\n\n if (client) {\n var response = await client.query({\n query: gql`\n ${query}\n `\n })\n\n this.data = response\n }\n }\n}\n\nComponent.register('scenario-control', ScenarioControl)\n"]}
@@ -0,0 +1,34 @@
1
+ import { Shape } from '@hatiolab/things-scene';
2
+ declare const ScenarioInstanceSubscription_base: (new (...args: any[]) => {
3
+ isDataSource(): boolean;
4
+ }) & typeof Shape;
5
+ export default class ScenarioInstanceSubscription extends ScenarioInstanceSubscription_base {
6
+ static _image: HTMLImageElement;
7
+ static get image(): HTMLImageElement;
8
+ private subscription?;
9
+ dispose(): void;
10
+ render(context: CanvasRenderingContext2D): void;
11
+ ready(): void;
12
+ get nature(): {
13
+ mutable: boolean;
14
+ resizable: boolean;
15
+ rotatable: boolean;
16
+ properties: ({
17
+ type: string;
18
+ label: string;
19
+ name: string;
20
+ property: {
21
+ options: () => Promise<string[]>;
22
+ };
23
+ } | {
24
+ type: string;
25
+ label: string;
26
+ name: string;
27
+ property?: undefined;
28
+ })[];
29
+ help: string;
30
+ };
31
+ _initScenarioInstanceSubscription(): void;
32
+ startSubscribe(): Promise<void>;
33
+ }
34
+ export {};
@@ -0,0 +1,107 @@
1
+ import { Component, DataSource, RectPath, Shape } from '@hatiolab/things-scene';
2
+ import { getClient, subscribe } from './origin-client';
3
+ import COMPONENT_IMAGE from '../assets/symbol-scenario-instance-subscription.png';
4
+ import gql from 'graphql-tag';
5
+ const NATURE = {
6
+ mutable: false,
7
+ resizable: true,
8
+ rotatable: true,
9
+ properties: [
10
+ {
11
+ type: 'select',
12
+ label: 'scenario-name',
13
+ name: 'scenarioName',
14
+ property: {
15
+ options: async () => {
16
+ var response = await getClient().query({
17
+ query: gql `
18
+ query {
19
+ scenarios {
20
+ items {
21
+ name
22
+ }
23
+ }
24
+ }
25
+ `
26
+ });
27
+ if (response.errors) {
28
+ return [''];
29
+ }
30
+ return [''].concat(response.data.scenarios.items.map((item) => item.name));
31
+ }
32
+ }
33
+ },
34
+ {
35
+ type: 'string',
36
+ label: 'instance-name',
37
+ name: 'instanceName'
38
+ }
39
+ ],
40
+ help: 'scene/component/scenario-instance-subscription'
41
+ };
42
+ export default class ScenarioInstanceSubscription extends DataSource(RectPath(Shape)) {
43
+ static get image() {
44
+ if (!ScenarioInstanceSubscription._image) {
45
+ ScenarioInstanceSubscription._image = new Image();
46
+ ScenarioInstanceSubscription._image.src = COMPONENT_IMAGE;
47
+ }
48
+ return ScenarioInstanceSubscription._image;
49
+ }
50
+ dispose() {
51
+ var _a;
52
+ super.dispose();
53
+ (_a = this.subscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
54
+ delete this.subscription;
55
+ }
56
+ render(context) {
57
+ var { left, top, width, height } = this.bounds;
58
+ context.beginPath();
59
+ this.drawImage(context, ScenarioInstanceSubscription.image, left, top, width, height);
60
+ }
61
+ ready() {
62
+ if (!this.app.isViewMode)
63
+ return;
64
+ this._initScenarioInstanceSubscription();
65
+ }
66
+ get nature() {
67
+ return NATURE;
68
+ }
69
+ _initScenarioInstanceSubscription() {
70
+ if (!this.app.isViewMode)
71
+ return;
72
+ this.startSubscribe();
73
+ }
74
+ async startSubscribe() {
75
+ var { instanceName, scenarioName = '' } = this.state;
76
+ instanceName = instanceName || scenarioName;
77
+ this.subscription = await subscribe({
78
+ query: gql `
79
+ subscription {
80
+ scenarioInstanceState(instanceName: "${instanceName}", scenarioName: "${scenarioName}") {
81
+ instanceName
82
+ scenarioName
83
+ state
84
+ variables
85
+ progress{
86
+ rounds
87
+ rate
88
+ steps
89
+ step
90
+ }
91
+ data
92
+ message
93
+ timestamp
94
+ }
95
+ }
96
+ `
97
+ }, {
98
+ next: async ({ data }) => {
99
+ if (data) {
100
+ this.data = data.scenarioInstanceState;
101
+ }
102
+ }
103
+ });
104
+ }
105
+ }
106
+ Component.register('scenario-instance-subscription', ScenarioInstanceSubscription);
107
+ //# sourceMappingURL=scenario-instance-subscription.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scenario-instance-subscription.js","sourceRoot":"","sources":["../src/scenario-instance-subscription.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, DataSource, RectPath, Shape } from '@hatiolab/things-scene'\nimport { getClient, subscribe } from './origin-client'\n\nimport COMPONENT_IMAGE from '../assets/symbol-scenario-instance-subscription.png'\nimport gql from 'graphql-tag'\n\nconst NATURE = {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [\n {\n type: 'select',\n label: 'scenario-name',\n name: 'scenarioName',\n property: {\n options: async () => {\n var response = await getClient().query({\n query: gql`\n query {\n scenarios {\n items {\n name\n }\n }\n }\n `\n })\n if (response.errors) {\n return ['']\n }\n\n return [''].concat(response.data.scenarios.items.map((item: any) => item.name))\n }\n }\n },\n {\n type: 'string',\n label: 'instance-name',\n name: 'instanceName'\n }\n ],\n help: 'scene/component/scenario-instance-subscription'\n}\n\nexport default class ScenarioInstanceSubscription extends DataSource(RectPath(Shape)) {\n static _image: HTMLImageElement\n\n static get image() {\n if (!ScenarioInstanceSubscription._image) {\n ScenarioInstanceSubscription._image = new Image()\n ScenarioInstanceSubscription._image.src = COMPONENT_IMAGE\n }\n\n return ScenarioInstanceSubscription._image\n }\n\n private subscription?: {\n unsubscribe(): void\n }\n\n dispose() {\n super.dispose()\n\n this.subscription?.unsubscribe()\n delete this.subscription\n }\n\n render(context: CanvasRenderingContext2D) {\n var { left, top, width, height } = this.bounds\n\n context.beginPath()\n this.drawImage(context, ScenarioInstanceSubscription.image, left, top, width, height)\n }\n\n ready() {\n if (!this.app.isViewMode) return\n this._initScenarioInstanceSubscription()\n }\n\n get nature() {\n return NATURE\n }\n\n _initScenarioInstanceSubscription() {\n if (!this.app.isViewMode) return\n this.startSubscribe()\n }\n\n async startSubscribe() {\n var { instanceName, scenarioName = '' } = this.state\n\n instanceName = instanceName || scenarioName\n\n this.subscription = await subscribe(\n {\n query: gql`\n subscription {\n scenarioInstanceState(instanceName: \"${instanceName}\", scenarioName: \"${scenarioName}\") {\n instanceName\n scenarioName\n state\n variables\n progress{\n rounds\n rate\n steps\n step\n }\n data\n message\n timestamp\n }\n }\n `\n },\n {\n next: async ({ data }: { data: any }) => {\n if (data) {\n this.data = data.scenarioInstanceState\n }\n }\n }\n )\n }\n}\n\nComponent.register('scenario-instance-subscription', ScenarioInstanceSubscription)\n"]}
@@ -0,0 +1,22 @@
1
+ import { Shape } from '@hatiolab/things-scene';
2
+ declare const ScenarioQueueSubscription_base: (new (...args: any[]) => {
3
+ isDataSource(): boolean;
4
+ }) & typeof Shape;
5
+ export default class ScenarioQueueSubscription extends ScenarioQueueSubscription_base {
6
+ static _image: HTMLImageElement;
7
+ static get image(): HTMLImageElement;
8
+ private subscription?;
9
+ dispose(): void;
10
+ render(context: CanvasRenderingContext2D): void;
11
+ ready(): void;
12
+ get nature(): {
13
+ mutable: boolean;
14
+ resizable: boolean;
15
+ rotatable: boolean;
16
+ properties: never[];
17
+ help: string;
18
+ };
19
+ _initScenarioQueueSubscription(): void;
20
+ startSubscribe(): Promise<void>;
21
+ }
22
+ export {};
@@ -0,0 +1,68 @@
1
+ import { Component, DataSource, RectPath, Shape } from '@hatiolab/things-scene';
2
+ import COMPONENT_IMAGE from '../assets/symbol-scenario-queue-subscription.png';
3
+ import gql from 'graphql-tag';
4
+ import { subscribe } from './origin-client';
5
+ const NATURE = {
6
+ mutable: false,
7
+ resizable: true,
8
+ rotatable: true,
9
+ properties: [],
10
+ help: 'scene/component/scenario-queue-subscription'
11
+ };
12
+ export default class ScenarioQueueSubscription extends DataSource(RectPath(Shape)) {
13
+ static get image() {
14
+ if (!ScenarioQueueSubscription._image) {
15
+ ScenarioQueueSubscription._image = new Image();
16
+ ScenarioQueueSubscription._image.src = COMPONENT_IMAGE;
17
+ }
18
+ return ScenarioQueueSubscription._image;
19
+ }
20
+ dispose() {
21
+ var _a;
22
+ super.dispose();
23
+ (_a = this.subscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
24
+ delete this.subscription;
25
+ }
26
+ render(context) {
27
+ var { left, top, width, height } = this.bounds;
28
+ context.beginPath();
29
+ this.drawImage(context, ScenarioQueueSubscription.image, left, top, width, height);
30
+ }
31
+ ready() {
32
+ if (!this.app.isViewMode)
33
+ return;
34
+ this._initScenarioQueueSubscription();
35
+ }
36
+ get nature() {
37
+ return NATURE;
38
+ }
39
+ _initScenarioQueueSubscription() {
40
+ if (!this.app.isViewMode)
41
+ return;
42
+ this.startSubscribe();
43
+ }
44
+ async startSubscribe() {
45
+ this.subscription = await subscribe({
46
+ query: gql `
47
+ subscription {
48
+ scenarioQueueState {
49
+ queue {
50
+ stuff
51
+ due
52
+ priority
53
+ tag
54
+ }
55
+ }
56
+ }
57
+ `
58
+ }, {
59
+ next: async ({ data }) => {
60
+ if (data) {
61
+ this.data = data.scenarioQueueState;
62
+ }
63
+ }
64
+ });
65
+ }
66
+ }
67
+ Component.register('scenario-queue-subscription', ScenarioQueueSubscription);
68
+ //# sourceMappingURL=scenario-queue-subscription.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scenario-queue-subscription.js","sourceRoot":"","sources":["../src/scenario-queue-subscription.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAE/E,OAAO,eAAe,MAAM,kDAAkD,CAAA;AAC9E,OAAO,GAAG,MAAM,aAAa,CAAA;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,MAAM,MAAM,GAAG;IACb,OAAO,EAAE,KAAK;IACd,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;IACf,UAAU,EAAE,EAAE;IACd,IAAI,EAAE,6CAA6C;CACpD,CAAA;AAED,MAAM,CAAC,OAAO,OAAO,yBAA0B,SAAQ,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAGhF,MAAM,KAAK,KAAK;QACd,IAAI,CAAC,yBAAyB,CAAC,MAAM,EAAE;YACrC,yBAAyB,CAAC,MAAM,GAAG,IAAI,KAAK,EAAE,CAAA;YAC9C,yBAAyB,CAAC,MAAM,CAAC,GAAG,GAAG,eAAe,CAAA;SACvD;QAED,OAAO,yBAAyB,CAAC,MAAM,CAAA;IACzC,CAAC;IAMD,OAAO;;QACL,KAAK,CAAC,OAAO,EAAE,CAAA;QAEf,MAAA,IAAI,CAAC,YAAY,0CAAE,WAAW,EAAE,CAAA;QAChC,OAAO,IAAI,CAAC,YAAY,CAAA;IAC1B,CAAC;IAED,MAAM,CAAC,OAAiC;QACtC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAA;QAE9C,OAAO,CAAC,SAAS,EAAE,CAAA;QACnB,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,yBAAyB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;IACpF,CAAC;IAED,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU;YAAE,OAAM;QAChC,IAAI,CAAC,8BAA8B,EAAE,CAAA;IACvC,CAAC;IAED,IAAI,MAAM;QACR,OAAO,MAAM,CAAA;IACf,CAAC;IAED,8BAA8B;QAC5B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU;YAAE,OAAM;QAChC,IAAI,CAAC,cAAc,EAAE,CAAA;IACvB,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,IAAI,CAAC,YAAY,GAAG,MAAM,SAAS,CACjC;YACE,KAAK,EAAE,GAAG,CAAA;;;;;;;;;;;SAWT;SACF,EACD;YACE,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAiB,EAAE,EAAE;gBACtC,IAAI,IAAI,EAAE;oBACR,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAA;iBACpC;YACH,CAAC;SACF,CACF,CAAA;IACH,CAAC;CACF;AAED,SAAS,CAAC,QAAQ,CAAC,6BAA6B,EAAE,yBAAyB,CAAC,CAAA","sourcesContent":["import { Component, DataSource, RectPath, Shape } from '@hatiolab/things-scene'\n\nimport COMPONENT_IMAGE from '../assets/symbol-scenario-queue-subscription.png'\nimport gql from 'graphql-tag'\nimport { subscribe } from './origin-client'\n\nconst NATURE = {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [],\n help: 'scene/component/scenario-queue-subscription'\n}\n\nexport default class ScenarioQueueSubscription extends DataSource(RectPath(Shape)) {\n static _image: HTMLImageElement\n\n static get image() {\n if (!ScenarioQueueSubscription._image) {\n ScenarioQueueSubscription._image = new Image()\n ScenarioQueueSubscription._image.src = COMPONENT_IMAGE\n }\n\n return ScenarioQueueSubscription._image\n }\n\n private subscription?: {\n unsubscribe(): void\n }\n\n dispose() {\n super.dispose()\n\n this.subscription?.unsubscribe()\n delete this.subscription\n }\n\n render(context: CanvasRenderingContext2D) {\n var { left, top, width, height } = this.bounds\n\n context.beginPath()\n this.drawImage(context, ScenarioQueueSubscription.image, left, top, width, height)\n }\n\n ready() {\n if (!this.app.isViewMode) return\n this._initScenarioQueueSubscription()\n }\n\n get nature() {\n return NATURE\n }\n\n _initScenarioQueueSubscription() {\n if (!this.app.isViewMode) return\n this.startSubscribe()\n }\n\n async startSubscribe() {\n this.subscription = await subscribe(\n {\n query: gql`\n subscription {\n scenarioQueueState {\n queue {\n stuff\n due\n priority\n tag\n }\n }\n }\n `\n },\n {\n next: async ({ data }: { data: any }) => {\n if (data) {\n this.data = data.scenarioQueueState\n }\n }\n }\n )\n }\n}\n\nComponent.register('scenario-queue-subscription', ScenarioQueueSubscription)\n"]}
@@ -0,0 +1,39 @@
1
+ import { Properties, Shape } from '@hatiolab/things-scene';
2
+ declare const ScenarioRun_base: (new (...args: any[]) => {
3
+ isDataSource(): boolean;
4
+ }) & typeof Shape;
5
+ export default class ScenarioRun extends ScenarioRun_base {
6
+ static _image: HTMLImageElement;
7
+ static get image(): HTMLImageElement;
8
+ private _client;
9
+ render(context: CanvasRenderingContext2D): void;
10
+ ready(): void;
11
+ _initScenario(): void;
12
+ dispose(): void;
13
+ get nature(): {
14
+ mutable: boolean;
15
+ resizable: boolean;
16
+ rotatable: boolean;
17
+ properties: ({
18
+ type: string;
19
+ label: string;
20
+ name: string;
21
+ property: {
22
+ options: () => Promise<string[]>;
23
+ };
24
+ } | {
25
+ type: string;
26
+ label: string;
27
+ name: string;
28
+ property?: undefined;
29
+ })[];
30
+ 'value-property': string;
31
+ help: string;
32
+ };
33
+ onchange(after: Properties): void;
34
+ get variables(): any;
35
+ set variables(variables: any);
36
+ get client(): any;
37
+ requestData(): Promise<void>;
38
+ }
39
+ export {};
@@ -0,0 +1,136 @@
1
+ import { Component, DataSource, RectPath, Shape } from '@hatiolab/things-scene';
2
+ import COMPONENT_IMAGE from '../assets/symbol-scenario-run.png';
3
+ import { getClient } from './origin-client';
4
+ import gql from 'graphql-tag';
5
+ const NATURE = {
6
+ mutable: false,
7
+ resizable: true,
8
+ rotatable: true,
9
+ properties: [
10
+ {
11
+ type: 'select',
12
+ label: 'scenario-name',
13
+ name: 'scenarioName',
14
+ property: {
15
+ options: async () => {
16
+ var response = await getClient().query({
17
+ query: gql `
18
+ query {
19
+ scenarios {
20
+ items {
21
+ name
22
+ }
23
+ }
24
+ }
25
+ `
26
+ });
27
+ if (response.errors) {
28
+ return [''];
29
+ }
30
+ return [''].concat(response.data.scenarios.items.map((item) => item.name));
31
+ }
32
+ }
33
+ },
34
+ {
35
+ type: 'data',
36
+ label: 'variables',
37
+ name: 'variables'
38
+ },
39
+ {
40
+ type: 'checkbox',
41
+ label: 'run-on-start',
42
+ name: 'runOnStart'
43
+ }
44
+ ],
45
+ 'value-property': 'variables',
46
+ help: 'scene/component/scenario-run'
47
+ };
48
+ export default class ScenarioRun extends DataSource(RectPath(Shape)) {
49
+ static get image() {
50
+ if (!ScenarioRun._image) {
51
+ ScenarioRun._image = new Image();
52
+ ScenarioRun._image.src = COMPONENT_IMAGE;
53
+ }
54
+ return ScenarioRun._image;
55
+ }
56
+ render(context) {
57
+ var { left, top, width, height } = this.bounds;
58
+ context.beginPath();
59
+ this.drawImage(context, ScenarioRun.image, left, top, width, height);
60
+ }
61
+ ready() {
62
+ super.ready();
63
+ this._initScenario();
64
+ }
65
+ _initScenario() {
66
+ if (!this.app.isViewMode) {
67
+ return;
68
+ }
69
+ this._client = getClient();
70
+ if (this.state.runOnStart) {
71
+ this.requestData();
72
+ }
73
+ }
74
+ dispose() {
75
+ super.dispose();
76
+ try {
77
+ if (this._client) {
78
+ this._client.stop();
79
+ }
80
+ }
81
+ catch (e) {
82
+ console.error(e);
83
+ }
84
+ delete this._client;
85
+ }
86
+ get nature() {
87
+ return NATURE;
88
+ }
89
+ onchange(after) {
90
+ if ('variables' in after) {
91
+ this.requestData();
92
+ }
93
+ }
94
+ get variables() {
95
+ return this.state.variables;
96
+ }
97
+ set variables(variables) {
98
+ this.setState('variables', variables);
99
+ }
100
+ get client() {
101
+ return this._client;
102
+ }
103
+ async requestData() {
104
+ var _a, _b;
105
+ let { scenarioName, variables } = this.state;
106
+ if (!scenarioName || !this.app.isViewMode)
107
+ return;
108
+ var client = this._client;
109
+ try {
110
+ variables = typeof variables == 'string' ? JSON.parse(variables) : variables;
111
+ }
112
+ catch (e) {
113
+ console.warn('runScenario mutation variable is not an object');
114
+ }
115
+ if (client) {
116
+ var response = await client.query({
117
+ query: gql `
118
+ mutation ($scenarioName: String!, $variables: Object) {
119
+ runScenario(scenarioName: $scenarioName, variables: $variables) {
120
+ state
121
+ message
122
+ data
123
+ }
124
+ }
125
+ `,
126
+ variables: {
127
+ scenarioName: scenarioName,
128
+ variables
129
+ }
130
+ });
131
+ this.data = (_b = (_a = response === null || response === void 0 ? void 0 : response.data) === null || _a === void 0 ? void 0 : _a.runScenario) === null || _b === void 0 ? void 0 : _b.data;
132
+ }
133
+ }
134
+ }
135
+ Component.register('scenario-run', ScenarioRun);
136
+ //# sourceMappingURL=scenario-run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scenario-run.js","sourceRoot":"","sources":["../src/scenario-run.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, DataSource, Properties, RectPath, Shape } from '@hatiolab/things-scene'\n\nimport COMPONENT_IMAGE from '../assets/symbol-scenario-run.png'\nimport { getClient } from './origin-client'\nimport gql from 'graphql-tag'\n\nconst NATURE = {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [\n {\n type: 'select',\n label: 'scenario-name',\n name: 'scenarioName',\n property: {\n options: async () => {\n var response = await getClient().query({\n query: gql`\n query {\n scenarios {\n items {\n name\n }\n }\n }\n `\n })\n if (response.errors) {\n return ['']\n }\n\n return [''].concat(response.data.scenarios.items.map((item: any) => item.name))\n }\n }\n },\n {\n type: 'data',\n label: 'variables',\n name: 'variables'\n },\n {\n type: 'checkbox',\n label: 'run-on-start',\n name: 'runOnStart'\n }\n ],\n 'value-property': 'variables',\n help: 'scene/component/scenario-run'\n}\n\nexport default class ScenarioRun extends DataSource(RectPath(Shape)) {\n static _image: HTMLImageElement\n\n static get image() {\n if (!ScenarioRun._image) {\n ScenarioRun._image = new Image()\n ScenarioRun._image.src = COMPONENT_IMAGE\n }\n return ScenarioRun._image\n }\n\n private _client: any\n\n render(context: CanvasRenderingContext2D) {\n var { left, top, width, height } = this.bounds\n context.beginPath()\n this.drawImage(context, ScenarioRun.image, left, top, width, height)\n }\n\n ready() {\n super.ready()\n this._initScenario()\n }\n\n _initScenario() {\n if (!this.app.isViewMode) {\n return\n }\n this._client = getClient()\n if (this.state.runOnStart) {\n this.requestData()\n }\n }\n\n dispose() {\n super.dispose()\n\n try {\n if (this._client) {\n this._client.stop()\n }\n } catch (e) {\n console.error(e)\n }\n delete this._client\n }\n\n get nature() {\n return NATURE\n }\n\n onchange(after: Properties) {\n if ('variables' in after) {\n this.requestData()\n }\n }\n\n get variables() {\n return this.state.variables\n }\n\n set variables(variables) {\n this.setState('variables', variables)\n }\n\n get client() {\n return this._client\n }\n\n async requestData() {\n let { scenarioName, variables } = this.state\n if (!scenarioName || !this.app.isViewMode) return\n\n var client = this._client\n try {\n variables = typeof variables == 'string' ? JSON.parse(variables) : variables\n } catch (e) {\n console.warn('runScenario mutation variable is not an object')\n }\n\n if (client) {\n var response = await client.query({\n query: gql`\n mutation ($scenarioName: String!, $variables: Object) {\n runScenario(scenarioName: $scenarioName, variables: $variables) {\n state\n message\n data\n }\n }\n `,\n variables: {\n scenarioName: scenarioName,\n variables\n }\n })\n\n this.data = response?.data?.runScenario?.data\n }\n }\n}\n\nComponent.register('scenario-run', ScenarioRun)\n"]}