@things-factory/board-ui 6.1.23 → 6.1.27

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 (59) hide show
  1. package/client/{board-provider.js → board-provider.ts} +5 -5
  2. package/client/data-grist/{board-editor.js → board-editor.ts} +31 -34
  3. package/client/data-grist/{board-renderer.js → board-renderer.ts} +10 -13
  4. package/client/pages/{board-modeller-page.js → board-modeller-page.ts} +44 -57
  5. package/client/pages/{board-player-page.js → board-player-page.ts} +51 -57
  6. package/client/pages/{board-viewer-page.js → board-viewer-page.ts} +50 -58
  7. package/client/pages/{printable-board-viewer-page.js → printable-board-viewer-page.ts} +2 -2
  8. package/client/pages/share/share-importer.ts +97 -0
  9. package/client/pages/share/share-list-page.ts +358 -0
  10. package/client/setting-let/{board-view-setting-let.js → board-view-setting-let.ts} +15 -21
  11. package/client/things-scene-import.d.ts +4 -0
  12. package/dist-client/board-provider.d.ts +3 -0
  13. package/dist-client/board-provider.js +77 -0
  14. package/dist-client/board-provider.js.map +1 -0
  15. package/dist-client/bootstrap.d.ts +2 -0
  16. package/dist-client/bootstrap.js +13 -0
  17. package/dist-client/bootstrap.js.map +1 -0
  18. package/dist-client/data-grist/board-editor.d.ts +14 -0
  19. package/dist-client/data-grist/board-editor.js +108 -0
  20. package/dist-client/data-grist/board-editor.js.map +1 -0
  21. package/dist-client/data-grist/board-renderer.d.ts +2 -0
  22. package/dist-client/data-grist/board-renderer.js +133 -0
  23. package/dist-client/data-grist/board-renderer.js.map +1 -0
  24. package/dist-client/index.d.ts +5 -0
  25. package/dist-client/index.js +6 -0
  26. package/dist-client/index.js.map +1 -0
  27. package/dist-client/pages/board-modeller-page.d.ts +48 -0
  28. package/dist-client/pages/board-modeller-page.js +284 -0
  29. package/dist-client/pages/board-modeller-page.js.map +1 -0
  30. package/dist-client/pages/board-player-page.d.ts +43 -0
  31. package/dist-client/pages/board-player-page.js +225 -0
  32. package/dist-client/pages/board-player-page.js.map +1 -0
  33. package/dist-client/pages/board-viewer-page.d.ts +39 -0
  34. package/dist-client/pages/board-viewer-page.js +224 -0
  35. package/dist-client/pages/board-viewer-page.js.map +1 -0
  36. package/dist-client/pages/printable-board-viewer-page.d.ts +11 -0
  37. package/dist-client/pages/printable-board-viewer-page.js +43 -0
  38. package/dist-client/pages/printable-board-viewer-page.js.map +1 -0
  39. package/dist-client/pages/share/share-importer.d.ts +22 -0
  40. package/dist-client/pages/share/share-importer.js +100 -0
  41. package/dist-client/pages/share/share-importer.js.map +1 -0
  42. package/dist-client/pages/share/share-list-page.d.ts +62 -0
  43. package/dist-client/pages/share/share-list-page.js +341 -0
  44. package/dist-client/pages/share/share-list-page.js.map +1 -0
  45. package/dist-client/pages/things-scene-components-with-tools.import +0 -0
  46. package/dist-client/pages/things-scene-components.import +0 -0
  47. package/dist-client/route.d.ts +1 -0
  48. package/dist-client/route.js +17 -0
  49. package/dist-client/route.js.map +1 -0
  50. package/dist-client/setting-let/board-view-setting-let.d.ts +14 -0
  51. package/dist-client/setting-let/board-view-setting-let.js +70 -0
  52. package/dist-client/setting-let/board-view-setting-let.js.map +1 -0
  53. package/dist-client/themes/board-theme.css +107 -0
  54. package/dist-client/tsconfig.tsbuildinfo +1 -0
  55. package/dist-server/tsconfig.tsbuildinfo +1 -1
  56. package/package.json +12 -8
  57. /package/client/{bootstrap.js → bootstrap.ts} +0 -0
  58. /package/client/{index.js → index.ts} +0 -0
  59. /package/client/{route.js → route.ts} +0 -0
@@ -0,0 +1,108 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import '@operato/board/ox-board-selector.js';
3
+ import './board-renderer';
4
+ import { css, html } from 'lit';
5
+ import { customElement, property } from 'lit/decorators.js';
6
+ import { OxGristEditor } from '@operato/data-grist';
7
+ import { i18next } from '@operato/i18n';
8
+ import { openPopup } from '@operato/layout';
9
+ let BoardEditor = class BoardEditor extends OxGristEditor {
10
+ render() {
11
+ var { boardViewerPage } = this.column.record.options || {};
12
+ return html ` <board-renderer .value=${this.value} .boardViewerPage=${boardViewerPage}></board-renderer> `;
13
+ }
14
+ async firstUpdated() {
15
+ this.value = this.record[this.column.name];
16
+ await this.updateComplete;
17
+ this.renderRoot.addEventListener('click', e => {
18
+ e.stopPropagation();
19
+ this.openSelector();
20
+ });
21
+ this.openSelector();
22
+ }
23
+ openSelector() {
24
+ if (this.popup) {
25
+ delete this.popup;
26
+ }
27
+ /*
28
+ * 기존 설정된 보드가 선택된 상태가 되게 하기 위해서는 selector에 value를 전달해줄 필요가 있음.
29
+ * 주의. value는 object일 수도 있고, string일 수도 있다.
30
+ * string인 경우에는 해당 보드의 id로 해석한다.
31
+ */
32
+ var value = this.value || {};
33
+ var template = html `
34
+ <ox-board-selector
35
+ .creatable=${true}
36
+ .value=${this.value}
37
+ @board-selected=${async (e) => {
38
+ var board = e.detail.board;
39
+ this.dispatchEvent(new CustomEvent('field-change', {
40
+ bubbles: true,
41
+ composed: true,
42
+ detail: {
43
+ before: this.value,
44
+ after: this.column.type == 'board' ? board : board.id || '',
45
+ record: this.record,
46
+ column: this.column,
47
+ row: this.row
48
+ }
49
+ }));
50
+ this.popup && this.popup.close();
51
+ }}
52
+ ></ox-board-selector>
53
+ `;
54
+ this.popup = openPopup(template, {
55
+ backdrop: true,
56
+ size: 'large',
57
+ title: i18next.t('title.select board')
58
+ });
59
+ }
60
+ };
61
+ BoardEditor.styles = css `
62
+ :host {
63
+ display: flex;
64
+ flex-flow: row nowrap;
65
+ align-items: center;
66
+
67
+ box-sizing: border-box;
68
+
69
+ width: 100%;
70
+ height: 100%;
71
+
72
+ border: 0;
73
+ background-color: transparent;
74
+
75
+ font: var(--grist-object-editor-font);
76
+ color: var(--grist-object-editor-color);
77
+
78
+ justify-content: inherit;
79
+ }
80
+
81
+ board-renderer {
82
+ display: flex;
83
+ flex: auto;
84
+
85
+ justify-content: inherit;
86
+ }
87
+ `;
88
+ __decorate([
89
+ property({ type: Object }),
90
+ __metadata("design:type", Object)
91
+ ], BoardEditor.prototype, "value", void 0);
92
+ __decorate([
93
+ property({ type: Object }),
94
+ __metadata("design:type", Object)
95
+ ], BoardEditor.prototype, "column", void 0);
96
+ __decorate([
97
+ property({ type: Object }),
98
+ __metadata("design:type", Object)
99
+ ], BoardEditor.prototype, "record", void 0);
100
+ __decorate([
101
+ property({ type: Number }),
102
+ __metadata("design:type", Number)
103
+ ], BoardEditor.prototype, "row", void 0);
104
+ BoardEditor = __decorate([
105
+ customElement('board-editor')
106
+ ], BoardEditor);
107
+ export { BoardEditor };
108
+ //# sourceMappingURL=board-editor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board-editor.js","sourceRoot":"","sources":["../../client/data-grist/board-editor.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/board/ox-board-selector.js'\nimport './board-renderer'\n\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, query } from 'lit/decorators.js'\n\nimport { OxGristEditor } from '@operato/data-grist'\nimport { i18next } from '@operato/i18n'\nimport { openPopup } from '@operato/layout'\n\n@customElement('board-editor')\nexport class BoardEditor extends OxGristEditor {\n static styles = css`\n :host {\n display: flex;\n flex-flow: row nowrap;\n align-items: center;\n\n box-sizing: border-box;\n\n width: 100%;\n height: 100%;\n\n border: 0;\n background-color: transparent;\n\n font: var(--grist-object-editor-font);\n color: var(--grist-object-editor-color);\n\n justify-content: inherit;\n }\n\n board-renderer {\n display: flex;\n flex: auto;\n\n justify-content: inherit;\n }\n `\n\n @property({ type: Object }) value: any\n @property({ type: Object }) column: any\n @property({ type: Object }) record: any\n @property({ type: Number }) row?: number\n\n popup\n\n render() {\n var { boardViewerPage } = this.column.record.options || {}\n return html` <board-renderer .value=${this.value} .boardViewerPage=${boardViewerPage}></board-renderer> `\n }\n\n async firstUpdated() {\n this.value = this.record[this.column.name]\n\n await this.updateComplete\n\n this.renderRoot.addEventListener('click', e => {\n e.stopPropagation()\n\n this.openSelector()\n })\n\n this.openSelector()\n }\n\n openSelector() {\n if (this.popup) {\n delete this.popup\n }\n\n /*\n * 기존 설정된 보드가 선택된 상태가 되게 하기 위해서는 selector에 value를 전달해줄 필요가 있음.\n * 주의. value는 object일 수도 있고, string일 수도 있다.\n * string인 경우에는 해당 보드의 id로 해석한다.\n */\n var value = this.value || {}\n\n var template = html`\n <ox-board-selector\n .creatable=${true}\n .value=${this.value}\n @board-selected=${async e => {\n var board = e.detail.board\n\n this.dispatchEvent(\n new CustomEvent('field-change', {\n bubbles: true,\n composed: true,\n detail: {\n before: this.value,\n after: this.column.type == 'board' ? board : board.id || '',\n record: this.record,\n column: this.column,\n row: this.row\n }\n })\n )\n\n this.popup && this.popup.close()\n }}\n ></ox-board-selector>\n `\n\n this.popup = openPopup(template, {\n backdrop: true,\n size: 'large',\n title: i18next.t('title.select board')\n })\n }\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import '@material/mwc-icon';
2
+ export declare const BoardRenderer: (value: any, column: any, record: any) => import("lit-html").TemplateResult<1>;
@@ -0,0 +1,133 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import '@material/mwc-icon';
3
+ import gql from 'graphql-tag';
4
+ import { css, html, LitElement } from 'lit';
5
+ import { customElement, property } from 'lit/decorators.js';
6
+ import { navigate } from '@operato/shell';
7
+ import { client, gqlContext } from '@operato/graphql';
8
+ const FETCH_BOARD_GQL = id => {
9
+ return gql `
10
+ {
11
+ board(id:"${id}") {
12
+ id
13
+ name
14
+ description
15
+ thumbnail
16
+ }
17
+ }
18
+ `;
19
+ };
20
+ let BoardRendererElement = class BoardRendererElement extends LitElement {
21
+ async updated(changes) {
22
+ if (changes.has('value')) {
23
+ if (typeof this.value == 'string' && this.value) {
24
+ /* fetchBoard..., */
25
+ try {
26
+ var response = await client.query({
27
+ query: FETCH_BOARD_GQL(this.value),
28
+ context: gqlContext()
29
+ });
30
+ this._value = (response && response.data && response.data.board) || {};
31
+ }
32
+ catch (e) {
33
+ console.error(e);
34
+ }
35
+ }
36
+ else {
37
+ this._value = this.value || {};
38
+ }
39
+ }
40
+ }
41
+ render() {
42
+ var { id, name = '', thumbnail = 'image/gif' } = this._value || {};
43
+ return id
44
+ ? html `
45
+ <span>${name}</span>
46
+ <img src=${thumbnail} alt="no thumbnail!" />
47
+ <mwc-icon view @mousedown=${e => this.onClickViewer(e, id)}>search</mwc-icon>
48
+ <mwc-icon edit @mousedown=${e => this.onClickModeler(e, id)}>edit</mwc-icon>
49
+ `
50
+ : html ` choose board.. `;
51
+ }
52
+ onClickViewer(e, id) {
53
+ e.preventDefault();
54
+ e.stopPropagation();
55
+ var boardViewerPage = this.boardViewerPage || 'board-viewer';
56
+ navigate(`${boardViewerPage}/${id}${window.location.search}`);
57
+ }
58
+ onClickModeler(e, id) {
59
+ e.preventDefault();
60
+ e.stopPropagation();
61
+ navigate(`board-modeller/${id}${window.location.search}`);
62
+ }
63
+ };
64
+ BoardRendererElement.styles = [
65
+ css `
66
+ :host {
67
+ display: block;
68
+ position: relative;
69
+
70
+ max-width: var(--board-renderer-max-width);
71
+ border: var(--board-renderer-border);
72
+
73
+ width: 100%;
74
+ }
75
+ span {
76
+ position: absolute;
77
+ bottom: 0;
78
+ width: 100%;
79
+ text-indent: 5px;
80
+ color: #fff;
81
+
82
+ font: var(--board-renderer-name-font);
83
+ background-color: var(--board-renderer-name-background-color);
84
+ }
85
+ img {
86
+ object-fit: contain;
87
+ max-width: 100%;
88
+ max-height: 100%;
89
+ }
90
+ mwc-icon {
91
+ position: absolute;
92
+ top: 0;
93
+ text-align: center;
94
+ color: #fff;
95
+
96
+ width: var(--board-renderer-icon-size);
97
+ height: var(--board-renderer-icon-size);
98
+ font: var(--board-renderer-font);
99
+ }
100
+ mwc-icon[edit] {
101
+ right: 0;
102
+
103
+ border-bottom-left-radius: var(--board-renderer-icon-border-radius);
104
+ background-color: var(--board-renderer-icon-edit-background-color);
105
+ }
106
+ mwc-icon[view] {
107
+ left: 0;
108
+
109
+ border-bottom-right-radius: var(--board-renderer-icon-border-radius);
110
+ background-color: var(--board-renderer-icon-view-background-color);
111
+ }
112
+ `
113
+ ];
114
+ __decorate([
115
+ property({ type: Object }),
116
+ __metadata("design:type", Object)
117
+ ], BoardRendererElement.prototype, "value", void 0);
118
+ __decorate([
119
+ property({ type: String }),
120
+ __metadata("design:type", String)
121
+ ], BoardRendererElement.prototype, "boardViewerPage", void 0);
122
+ __decorate([
123
+ property({ type: Object }),
124
+ __metadata("design:type", Object)
125
+ ], BoardRendererElement.prototype, "_value", void 0);
126
+ BoardRendererElement = __decorate([
127
+ customElement('board-renderer')
128
+ ], BoardRendererElement);
129
+ export const BoardRenderer = (value, column, record) => {
130
+ var { boardViewerPage = '' } = column.record.options || {};
131
+ return html ` <board-renderer .value=${value} .boardViewerPage=${boardViewerPage}></board-renderer> `;
132
+ };
133
+ //# sourceMappingURL=board-renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board-renderer.js","sourceRoot":"","sources":["../../client/data-grist/board-renderer.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/mwc-icon'\n\nimport gql from 'graphql-tag'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, query } from 'lit/decorators.js'\n\nimport { navigate } from '@operato/shell'\nimport { client, gqlContext } from '@operato/graphql'\n\nconst FETCH_BOARD_GQL = id => {\n return gql`\n {\n board(id:\"${id}\") {\n id\n name\n description\n thumbnail\n }\n }\n`\n}\n\n@customElement('board-renderer')\nclass BoardRendererElement extends LitElement {\n static styles = [\n css`\n :host {\n display: block;\n position: relative;\n\n max-width: var(--board-renderer-max-width);\n border: var(--board-renderer-border);\n\n width: 100%;\n }\n span {\n position: absolute;\n bottom: 0;\n width: 100%;\n text-indent: 5px;\n color: #fff;\n\n font: var(--board-renderer-name-font);\n background-color: var(--board-renderer-name-background-color);\n }\n img {\n object-fit: contain;\n max-width: 100%;\n max-height: 100%;\n }\n mwc-icon {\n position: absolute;\n top: 0;\n text-align: center;\n color: #fff;\n\n width: var(--board-renderer-icon-size);\n height: var(--board-renderer-icon-size);\n font: var(--board-renderer-font);\n }\n mwc-icon[edit] {\n right: 0;\n\n border-bottom-left-radius: var(--board-renderer-icon-border-radius);\n background-color: var(--board-renderer-icon-edit-background-color);\n }\n mwc-icon[view] {\n left: 0;\n\n border-bottom-right-radius: var(--board-renderer-icon-border-radius);\n background-color: var(--board-renderer-icon-view-background-color);\n }\n `\n ]\n\n @property({ type: Object }) value: any\n @property({ type: String }) boardViewerPage?: string\n @property({ type: Object }) _value: any\n\n async updated(changes) {\n if (changes.has('value')) {\n if (typeof this.value == 'string' && this.value) {\n /* fetchBoard..., */\n try {\n var response = await client.query({\n query: FETCH_BOARD_GQL(this.value),\n context: gqlContext()\n })\n\n this._value = (response && response.data && response.data.board) || {}\n } catch (e) {\n console.error(e)\n }\n } else {\n this._value = this.value || {}\n }\n }\n }\n\n render() {\n var { id, name = '', thumbnail = 'image/gif' } = this._value || {}\n\n return id\n ? html`\n <span>${name}</span>\n <img src=${thumbnail} alt=\"no thumbnail!\" />\n <mwc-icon view @mousedown=${e => this.onClickViewer(e, id)}>search</mwc-icon>\n <mwc-icon edit @mousedown=${e => this.onClickModeler(e, id)}>edit</mwc-icon>\n `\n : html` choose board.. `\n }\n\n onClickViewer(e, id) {\n e.preventDefault()\n e.stopPropagation()\n\n var boardViewerPage = this.boardViewerPage || 'board-viewer'\n\n navigate(`${boardViewerPage}/${id}${window.location.search}`)\n }\n\n onClickModeler(e, id) {\n e.preventDefault()\n e.stopPropagation()\n\n navigate(`board-modeller/${id}${window.location.search}`)\n }\n}\n\nexport const BoardRenderer = (value, column, record) => {\n var { boardViewerPage = '' } = column.record.options || {}\n\n return html` <board-renderer .value=${value} .boardViewerPage=${boardViewerPage}></board-renderer> `\n}\n"]}
@@ -0,0 +1,5 @@
1
+ export * from './board-provider';
2
+ export * from './pages/board-viewer-page';
3
+ export * from './pages/board-player-page';
4
+ export * from './pages/board-modeller-page';
5
+ export * from './setting-let/board-view-setting-let';
@@ -0,0 +1,6 @@
1
+ export * from './board-provider';
2
+ export * from './pages/board-viewer-page';
3
+ export * from './pages/board-player-page';
4
+ export * from './pages/board-modeller-page';
5
+ export * from './setting-let/board-view-setting-let';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../client/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAEhC,cAAc,2BAA2B,CAAA;AACzC,cAAc,2BAA2B,CAAA;AACzC,cAAc,6BAA6B,CAAA;AAE3C,cAAc,sCAAsC,CAAA","sourcesContent":["export * from './board-provider'\n\nexport * from './pages/board-viewer-page'\nexport * from './pages/board-player-page'\nexport * from './pages/board-modeller-page'\n\nexport * from './setting-let/board-view-setting-let'\n"]}
@@ -0,0 +1,48 @@
1
+ import './things-scene-components.import';
2
+ import '@operato/board/ox-board-modeller.js';
3
+ import { BoardModeller } from '@operato/board/ox-board-modeller.js';
4
+ import { PageView } from '@operato/shell';
5
+ declare const BoardModellerPage_base: (new (...args: any[]) => {
6
+ _storeUnsubscribe: import("redux").Unsubscribe;
7
+ connectedCallback(): void;
8
+ disconnectedCallback(): void;
9
+ stateChanged(_state: unknown): void;
10
+ readonly isConnected: boolean;
11
+ }) & typeof PageView;
12
+ export declare class BoardModellerPage extends BoardModellerPage_base {
13
+ constructor();
14
+ static styles: import("lit").CSSResult[];
15
+ boardId?: string | null;
16
+ boardName?: string;
17
+ model: any;
18
+ baseUrl?: string;
19
+ selected: any;
20
+ mode?: number;
21
+ hideProperty?: boolean;
22
+ overlay?: string | null;
23
+ scene: any;
24
+ componentGroupList?: any;
25
+ fonts: any;
26
+ propertyEditor: any;
27
+ preparing?: boolean;
28
+ board: any;
29
+ modeller?: BoardModeller;
30
+ get context(): {
31
+ title: string | undefined;
32
+ help: string;
33
+ widebleed: boolean;
34
+ };
35
+ get oopsNote(): {
36
+ icon: string;
37
+ title: string;
38
+ description: string;
39
+ };
40
+ refresh(): Promise<void>;
41
+ updated(changes: any): void;
42
+ pageUpdated(changes: any, lifecycle: any): void;
43
+ stateChanged(state: any): void;
44
+ render(): import("lit-html").TemplateResult<1>;
45
+ updateBoard(): Promise<void>;
46
+ saveBoard(): Promise<void>;
47
+ }
48
+ export {};
@@ -0,0 +1,284 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import './things-scene-components.import';
3
+ import '@operato/board/ox-board-modeller.js';
4
+ import gql from 'graphql-tag';
5
+ import { css, html } from 'lit';
6
+ import { customElement, property, query } from 'lit/decorators.js';
7
+ import { connect } from 'pwa-helpers/connect-mixin.js';
8
+ import { BoardModeller } from '@operato/board/ox-board-modeller.js';
9
+ import { OxPropertyEditor } from '@operato/property-editor';
10
+ import { PageView, store } from '@operato/shell';
11
+ import { client, gqlContext } from '@operato/graphql';
12
+ import { provider } from '../board-provider';
13
+ import components from './things-scene-components-with-tools.import';
14
+ const NOOP = () => { };
15
+ let BoardModellerPage = class BoardModellerPage extends connect(store)(PageView) {
16
+ constructor() {
17
+ super();
18
+ components.forEach(({ templates = [], groups = [] }) => {
19
+ groups.forEach(group => BoardModeller.registerGroup(group));
20
+ BoardModeller.registerTemplate(templates);
21
+ });
22
+ /* 컴포넌트에서 정의된 에디터들을 MODELLER_EDITORS에 등록 */
23
+ var addedEditors = {};
24
+ for (let component in components) {
25
+ let { editors } = components[component];
26
+ editors &&
27
+ editors.forEach(editor => {
28
+ let { type, element } = editor;
29
+ addedEditors[type] = element;
30
+ });
31
+ }
32
+ OxPropertyEditor.register(addedEditors);
33
+ this.boardName = '';
34
+ this.model = null;
35
+ this.baseUrl = '';
36
+ this.selected = [];
37
+ this.mode = 1;
38
+ this.hideProperty = false;
39
+ this.overlay = null;
40
+ this.scene = null;
41
+ this.fonts = [];
42
+ this.board = null;
43
+ this.componentGroupList = BoardModeller.groups;
44
+ }
45
+ get context() {
46
+ return {
47
+ title: this.board ? this.boardName : this.preparing ? 'Fetching board...' : 'Board Not Found',
48
+ help: 'board-modeller/modeller',
49
+ widebleed: true
50
+ };
51
+ }
52
+ get oopsNote() {
53
+ return {
54
+ icon: 'color_lens',
55
+ title: 'EMPTY BOARD',
56
+ description: 'There are no board to be designed'
57
+ };
58
+ }
59
+ async refresh() {
60
+ if (!this.boardId) {
61
+ this.board = null;
62
+ this.model = null;
63
+ return;
64
+ }
65
+ try {
66
+ this.preparing = true;
67
+ this.updateContext();
68
+ var response = await client.query({
69
+ query: gql `
70
+ query FetchBoardById($id: String!) {
71
+ board(id: $id) {
72
+ id
73
+ name
74
+ model
75
+ }
76
+ }
77
+ `,
78
+ variables: { id: this.boardId },
79
+ context: gqlContext()
80
+ });
81
+ var board = response.data.board;
82
+ if (!board) {
83
+ this.board = null;
84
+ throw 'board not found';
85
+ }
86
+ this.board = Object.assign(Object.assign({}, board), { model: JSON.parse(board.model) });
87
+ this.boardName = this.board.name;
88
+ this.model = Object.assign({}, this.board.model);
89
+ }
90
+ catch (ex) {
91
+ document.dispatchEvent(new CustomEvent('notify', {
92
+ detail: {
93
+ level: 'error',
94
+ message: ex,
95
+ ex
96
+ }
97
+ }));
98
+ }
99
+ finally {
100
+ this.preparing = false;
101
+ this.updateContext();
102
+ }
103
+ }
104
+ updated(changes) {
105
+ if (changes.has('boardId')) {
106
+ this.refresh();
107
+ }
108
+ }
109
+ pageUpdated(changes, lifecycle) {
110
+ var _a;
111
+ if (this.active) {
112
+ this.boardId = lifecycle.resourceId;
113
+ }
114
+ else {
115
+ this.boardId = null;
116
+ this.model = null;
117
+ (_a = this.modeller) === null || _a === void 0 ? void 0 : _a.close();
118
+ }
119
+ }
120
+ stateChanged(state) {
121
+ this.baseUrl = state.route.rootPath;
122
+ this.fonts = state.font;
123
+ }
124
+ render() {
125
+ var oops = !this.preparing && !this.model && this.oopsNote;
126
+ return oops
127
+ ? html ` <oops-note icon=${oops.icon} title=${oops.title} description=${oops.description}></oops-note> `
128
+ : html `
129
+ <ox-board-modeller
130
+ .mode=${this.mode}
131
+ @mode-changed=${e => {
132
+ this.mode = e.detail.value;
133
+ }}
134
+ .model=${this.model}
135
+ @model-changed=${e => {
136
+ this.model = e.detail.value;
137
+ }}
138
+ .scene=${this.scene}
139
+ @scene-changed=${e => {
140
+ this.scene = e.detail.value;
141
+ }}
142
+ .selected=${this.selected}
143
+ @selected-changed=${e => {
144
+ this.selected = e.detail.value;
145
+ }}
146
+ .baseUrl=${this.baseUrl}
147
+ .provider=${provider}
148
+ @save-model=${e => this.saveBoard()}
149
+ .componentGroupList=${this.componentGroupList}
150
+ .fonts=${this.fonts}
151
+ .hideProperty=${this.hideProperty}
152
+ >
153
+ </ox-board-modeller>
154
+ `;
155
+ }
156
+ async updateBoard() {
157
+ try {
158
+ this.preparing = true;
159
+ var { id, name, description, groupId } = this.board;
160
+ var model = JSON.stringify(this.scene.model);
161
+ await client.mutate({
162
+ mutation: gql `
163
+ mutation UpdateBoard($id: String!, $patch: BoardPatch!) {
164
+ updateBoard(id: $id, patch: $patch) {
165
+ id
166
+ }
167
+ }
168
+ `,
169
+ variables: {
170
+ id,
171
+ patch: { name, description, model, groupId }
172
+ },
173
+ context: gqlContext()
174
+ });
175
+ document.dispatchEvent(new CustomEvent('notify', {
176
+ detail: {
177
+ level: 'info',
178
+ message: 'saved'
179
+ }
180
+ }));
181
+ }
182
+ catch (ex) {
183
+ document.dispatchEvent(new CustomEvent('notify', {
184
+ detail: {
185
+ level: 'error',
186
+ message: ex,
187
+ ex: ex
188
+ }
189
+ }));
190
+ }
191
+ finally {
192
+ this.preparing = false;
193
+ }
194
+ this.updateContext();
195
+ }
196
+ async saveBoard() {
197
+ await this.updateBoard();
198
+ }
199
+ };
200
+ BoardModellerPage.styles = [
201
+ css `
202
+ :host {
203
+ display: flex;
204
+ flex-direction: column;
205
+
206
+ overflow: hidden;
207
+ position: relative;
208
+ }
209
+
210
+ board-modeller {
211
+ flex: 1;
212
+ }
213
+
214
+ oops-note {
215
+ display: block;
216
+ position: absolute;
217
+ left: 50%;
218
+ top: 50%;
219
+ transform: translate(-50%, -50%);
220
+ }
221
+ `
222
+ ];
223
+ __decorate([
224
+ property({ type: String }),
225
+ __metadata("design:type", Object)
226
+ ], BoardModellerPage.prototype, "boardId", void 0);
227
+ __decorate([
228
+ property({ type: String }),
229
+ __metadata("design:type", String)
230
+ ], BoardModellerPage.prototype, "boardName", void 0);
231
+ __decorate([
232
+ property({ type: Object }),
233
+ __metadata("design:type", Object)
234
+ ], BoardModellerPage.prototype, "model", void 0);
235
+ __decorate([
236
+ property({ type: String }),
237
+ __metadata("design:type", String)
238
+ ], BoardModellerPage.prototype, "baseUrl", void 0);
239
+ __decorate([
240
+ property({ type: Array }),
241
+ __metadata("design:type", Object)
242
+ ], BoardModellerPage.prototype, "selected", void 0);
243
+ __decorate([
244
+ property({ type: Number }),
245
+ __metadata("design:type", Number)
246
+ ], BoardModellerPage.prototype, "mode", void 0);
247
+ __decorate([
248
+ property({ type: Boolean }),
249
+ __metadata("design:type", Boolean)
250
+ ], BoardModellerPage.prototype, "hideProperty", void 0);
251
+ __decorate([
252
+ property({ type: String }),
253
+ __metadata("design:type", Object)
254
+ ], BoardModellerPage.prototype, "overlay", void 0);
255
+ __decorate([
256
+ property({ type: Object }),
257
+ __metadata("design:type", Object)
258
+ ], BoardModellerPage.prototype, "scene", void 0);
259
+ __decorate([
260
+ property({ type: Array }),
261
+ __metadata("design:type", Object)
262
+ ], BoardModellerPage.prototype, "componentGroupList", void 0);
263
+ __decorate([
264
+ property({ type: Array }),
265
+ __metadata("design:type", Object)
266
+ ], BoardModellerPage.prototype, "fonts", void 0);
267
+ __decorate([
268
+ property({ type: Array }),
269
+ __metadata("design:type", Object)
270
+ ], BoardModellerPage.prototype, "propertyEditor", void 0);
271
+ __decorate([
272
+ property({ type: Boolean }),
273
+ __metadata("design:type", Boolean)
274
+ ], BoardModellerPage.prototype, "preparing", void 0);
275
+ __decorate([
276
+ query('ox-board-modeller'),
277
+ __metadata("design:type", BoardModeller)
278
+ ], BoardModellerPage.prototype, "modeller", void 0);
279
+ BoardModellerPage = __decorate([
280
+ customElement('board-modeller-page'),
281
+ __metadata("design:paramtypes", [])
282
+ ], BoardModellerPage);
283
+ export { BoardModellerPage };
284
+ //# sourceMappingURL=board-modeller-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board-modeller-page.js","sourceRoot":"","sources":["../../client/pages/board-modeller-page.ts"],"names":[],"mappings":"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","sourcesContent":["import './things-scene-components.import'\nimport '@operato/board/ox-board-modeller.js'\n\nimport gql from 'graphql-tag'\nimport { css, html } from 'lit'\nimport { customElement, property, query } from 'lit/decorators.js'\nimport { connect } from 'pwa-helpers/connect-mixin.js'\n\nimport { BoardModeller } from '@operato/board/ox-board-modeller.js'\nimport { OxPropertyEditor } from '@operato/property-editor'\nimport { PageView, store } from '@operato/shell'\nimport { client, gqlContext } from '@operato/graphql'\n\nimport { provider } from '../board-provider'\nimport components from './things-scene-components-with-tools.import'\n\nconst NOOP = () => {}\n\n@customElement('board-modeller-page')\nexport class BoardModellerPage extends connect(store)(PageView) {\n constructor() {\n super()\n\n components.forEach(({ templates = [], groups = [] }) => {\n groups.forEach(group => BoardModeller.registerGroup(group))\n BoardModeller.registerTemplate(templates)\n })\n\n /* 컴포넌트에서 정의된 에디터들을 MODELLER_EDITORS에 등록 */\n var addedEditors = {}\n for (let component in components) {\n let { editors } = components[component]\n\n editors &&\n editors.forEach(editor => {\n let { type, element } = editor\n\n addedEditors[type] = element\n })\n }\n\n OxPropertyEditor.register(addedEditors)\n\n this.boardName = ''\n this.model = null\n this.baseUrl = ''\n this.selected = []\n this.mode = 1\n this.hideProperty = false\n this.overlay = null\n this.scene = null\n this.fonts = []\n this.board = null\n this.componentGroupList = BoardModeller.groups\n }\n\n static styles = [\n css`\n :host {\n display: flex;\n flex-direction: column;\n\n overflow: hidden;\n position: relative;\n }\n\n board-modeller {\n flex: 1;\n }\n\n oops-note {\n display: block;\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n }\n `\n ]\n\n @property({ type: String }) boardId?: string | null\n @property({ type: String }) boardName?: string\n @property({ type: Object }) model: any\n @property({ type: String }) baseUrl?: string\n @property({ type: Array }) selected: any\n @property({ type: Number }) mode?: number\n @property({ type: Boolean }) hideProperty?: boolean\n @property({ type: String }) overlay?: string | null\n @property({ type: Object }) scene: any\n @property({ type: Array }) componentGroupList?: any\n @property({ type: Array }) fonts: any\n @property({ type: Array }) propertyEditor: any\n @property({ type: Boolean }) preparing?: boolean\n\n board: any\n @query('ox-board-modeller') modeller?: BoardModeller\n\n get context() {\n return {\n title: this.board ? this.boardName : this.preparing ? 'Fetching board...' : 'Board Not Found',\n help: 'board-modeller/modeller',\n widebleed: true\n }\n }\n\n get oopsNote() {\n return {\n icon: 'color_lens',\n title: 'EMPTY BOARD',\n description: 'There are no board to be designed'\n }\n }\n\n async refresh() {\n if (!this.boardId) {\n this.board = null\n this.model = null\n\n return\n }\n try {\n this.preparing = true\n this.updateContext()\n\n var response = await client.query({\n query: gql`\n query FetchBoardById($id: String!) {\n board(id: $id) {\n id\n name\n model\n }\n }\n `,\n variables: { id: this.boardId },\n context: gqlContext()\n })\n\n var board = response.data.board\n\n if (!board) {\n this.board = null\n throw 'board not found'\n }\n\n this.board = {\n ...board,\n model: JSON.parse(board.model)\n }\n\n this.boardName = this.board.name\n this.model = {\n ...this.board.model\n }\n } catch (ex) {\n document.dispatchEvent(\n new CustomEvent('notify', {\n detail: {\n level: 'error',\n message: ex,\n ex\n }\n })\n )\n } finally {\n this.preparing = false\n this.updateContext()\n }\n }\n\n updated(changes) {\n if (changes.has('boardId')) {\n this.refresh()\n }\n }\n\n pageUpdated(changes, lifecycle) {\n if (this.active) {\n this.boardId = lifecycle.resourceId\n } else {\n this.boardId = null\n this.model = null\n this.modeller?.close()\n }\n }\n\n stateChanged(state) {\n this.baseUrl = state.route.rootPath\n this.fonts = state.font\n }\n\n render() {\n var oops = !this.preparing && !this.model && this.oopsNote\n\n return oops\n ? html` <oops-note icon=${oops.icon} title=${oops.title} description=${oops.description}></oops-note> `\n : html`\n <ox-board-modeller\n .mode=${this.mode}\n @mode-changed=${e => {\n this.mode = e.detail.value\n }}\n .model=${this.model}\n @model-changed=${e => {\n this.model = e.detail.value\n }}\n .scene=${this.scene}\n @scene-changed=${e => {\n this.scene = e.detail.value\n }}\n .selected=${this.selected}\n @selected-changed=${e => {\n this.selected = e.detail.value\n }}\n .baseUrl=${this.baseUrl}\n .provider=${provider}\n @save-model=${e => this.saveBoard()}\n .componentGroupList=${this.componentGroupList}\n .fonts=${this.fonts}\n .hideProperty=${this.hideProperty}\n >\n </ox-board-modeller>\n `\n }\n\n async updateBoard() {\n try {\n this.preparing = true\n\n var { id, name, description, groupId } = this.board\n var model = JSON.stringify(this.scene.model)\n\n await client.mutate({\n mutation: gql`\n mutation UpdateBoard($id: String!, $patch: BoardPatch!) {\n updateBoard(id: $id, patch: $patch) {\n id\n }\n }\n `,\n variables: {\n id,\n patch: { name, description, model, groupId }\n },\n context: gqlContext()\n })\n\n document.dispatchEvent(\n new CustomEvent('notify', {\n detail: {\n level: 'info',\n message: 'saved'\n }\n })\n )\n } catch (ex) {\n document.dispatchEvent(\n new CustomEvent('notify', {\n detail: {\n level: 'error',\n message: ex,\n ex: ex\n }\n })\n )\n } finally {\n this.preparing = false\n }\n\n this.updateContext()\n }\n\n async saveBoard() {\n await this.updateBoard()\n }\n}\n"]}