@things-factory/dashboard 9.0.0-beta.27 → 9.0.0-beta.29

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 (45) hide show
  1. package/dist-client/actions/board-settings.d.ts +3 -0
  2. package/dist-client/actions/board-settings.js +29 -0
  3. package/dist-client/actions/board-settings.js.map +1 -0
  4. package/dist-client/actions/index.d.ts +1 -0
  5. package/dist-client/actions/index.js +2 -0
  6. package/dist-client/actions/index.js.map +1 -0
  7. package/dist-client/bootstrap.d.ts +2 -0
  8. package/dist-client/bootstrap.js +31 -0
  9. package/dist-client/bootstrap.js.map +1 -0
  10. package/dist-client/const.d.ts +5 -0
  11. package/dist-client/const.js +6 -0
  12. package/dist-client/const.js.map +1 -0
  13. package/dist-client/index.d.ts +1 -0
  14. package/dist-client/index.js +2 -0
  15. package/dist-client/index.js.map +1 -0
  16. package/dist-client/pages/dashboard.d.ts +19 -0
  17. package/dist-client/pages/dashboard.js +99 -0
  18. package/dist-client/pages/dashboard.js.map +1 -0
  19. package/dist-client/reducers/board-settings.d.ts +2 -0
  20. package/dist-client/reducers/board-settings.js +14 -0
  21. package/dist-client/reducers/board-settings.js.map +1 -0
  22. package/dist-client/route.d.ts +1 -0
  23. package/dist-client/route.js +10 -0
  24. package/dist-client/route.js.map +1 -0
  25. package/dist-client/tsconfig.tsbuildinfo +1 -0
  26. package/dist-client/viewparts/dashboard-setting-let.d.ts +26 -0
  27. package/dist-client/viewparts/dashboard-setting-let.js +222 -0
  28. package/dist-client/viewparts/dashboard-setting-let.js.map +1 -0
  29. package/dist-server/index.d.ts +1 -0
  30. package/dist-server/index.js +5 -0
  31. package/dist-server/index.js.map +1 -0
  32. package/dist-server/service/board-settings/board-setting.d.ts +7 -0
  33. package/dist-server/service/board-settings/board-setting.js +29 -0
  34. package/dist-server/service/board-settings/board-setting.js.map +1 -0
  35. package/dist-server/service/board-settings/board-settings-query.d.ts +4 -0
  36. package/dist-server/service/board-settings/board-settings-query.js +62 -0
  37. package/dist-server/service/board-settings/board-settings-query.js.map +1 -0
  38. package/dist-server/service/board-settings/index.d.ts +3 -0
  39. package/dist-server/service/board-settings/index.js +7 -0
  40. package/dist-server/service/board-settings/index.js.map +1 -0
  41. package/dist-server/service/index.d.ts +5 -0
  42. package/dist-server/service/index.js +19 -0
  43. package/dist-server/service/index.js.map +1 -0
  44. package/dist-server/tsconfig.tsbuildinfo +1 -0
  45. package/package.json +6 -6
@@ -0,0 +1,26 @@
1
+ import '@material/web/icon/icon.js';
2
+ import '@operato/board/ox-board-selector.js';
3
+ import '@operato/i18n/ox-i18n.js';
4
+ import { LitElement } from 'lit';
5
+ declare const DashboardSettingLet_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
+ }) & (new (...args: any[]) => LitElement) & typeof LitElement;
12
+ export declare class DashboardSettingLet extends DashboardSettingLet_base {
13
+ static styles: import("lit").CSSResult[];
14
+ private dashboard;
15
+ private dashboardMobile;
16
+ render(): import("lit-html").TemplateResult<1>;
17
+ stateChanged(state: any): void;
18
+ onClickBoardSelector(name: string, description: string): void;
19
+ saveSettings({ name, value, category, description }: {
20
+ name: any;
21
+ value: any;
22
+ category: any;
23
+ description: any;
24
+ }): Promise<void>;
25
+ }
26
+ export {};
@@ -0,0 +1,222 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import '@material/web/icon/icon.js';
3
+ import '@operato/board/ox-board-selector.js';
4
+ import '@operato/i18n/ox-i18n.js';
5
+ import gql from 'graphql-tag';
6
+ import { css, html, LitElement } from 'lit';
7
+ import { customElement, state } from 'lit/decorators.js';
8
+ import { connect } from 'pwa-helpers';
9
+ import { openPopup } from '@operato/layout';
10
+ import { i18next, localize } from '@operato/i18n';
11
+ import { store } from '@operato/shell';
12
+ import { client } from '@operato/graphql';
13
+ import { fetchBoardSettings, UPDATE_BOARD_SETTINGS } from '../actions/board-settings';
14
+ import { DASHBOARD, DASHBOARD_DESCRIPTION, DASHBOARD_MOBILE, DASHBOARD_MOBILE_DESCRIPTION, FALLBACK_HOME_BOARD } from '../const';
15
+ let DashboardSettingLet = class DashboardSettingLet extends connect(store)(localize(i18next)(LitElement)) {
16
+ render() {
17
+ return html `
18
+ <setting-let>
19
+ <ox-i18n slot="title" msgid="title.dashboard setting"></ox-i18n>
20
+
21
+ <form slot="content">
22
+ ${[
23
+ {
24
+ title: i18next.t('label.dashboard for desktop'),
25
+ board: this.dashboard,
26
+ key: DASHBOARD,
27
+ description: DASHBOARD_DESCRIPTION
28
+ },
29
+ {
30
+ title: i18next.t('label.dashboard for mobile'),
31
+ board: this.dashboardMobile,
32
+ key: DASHBOARD_MOBILE,
33
+ description: DASHBOARD_MOBILE_DESCRIPTION
34
+ }
35
+ ].map(field => html `
36
+ <div class="field">
37
+ <label>${field.title}</ox-i18n></label>
38
+ <div>
39
+ <div class="name">${field.board.name}</div>
40
+ <span class="description">${field.board.description}</span>
41
+ <md-icon @click=${e => this.onClickBoardSelector(field.key, field.description)}>
42
+ more_horiz
43
+ </md-icon>
44
+ ${field.board.id
45
+ ? html `
46
+ <a href=${`board-modeller/${field.board.id}`}>
47
+ <img
48
+ src=${field.board.thumbnail ||
49
+ 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'}
50
+ />
51
+ </a>
52
+ `
53
+ : html ``}
54
+ </div>
55
+ </div>
56
+ `)}
57
+ </form>
58
+ </setting-let>
59
+ `;
60
+ }
61
+ stateChanged(state) {
62
+ var dashboard = state.boardSetting[DASHBOARD] || state.boardSetting[FALLBACK_HOME_BOARD];
63
+ var dashboardMobile = state.boardSetting[DASHBOARD_MOBILE] || dashboard;
64
+ this.dashboard = (dashboard ? dashboard.board : {}) || {};
65
+ this.dashboardMobile = (dashboardMobile ? dashboardMobile.board : {}) || {};
66
+ }
67
+ onClickBoardSelector(name, description) {
68
+ var _a, _b;
69
+ var popup = openPopup(html `
70
+ <ox-board-selector
71
+ .creatable=${true}
72
+ .value=${name == DASHBOARD ? (_a = this.dashboard) === null || _a === void 0 ? void 0 : _a.id : (_b = this.dashboardMobile) === null || _b === void 0 ? void 0 : _b.id}
73
+ @board-selected=${async (e) => {
74
+ var board = e.detail.board;
75
+ await this.saveSettings({
76
+ name,
77
+ value: board.id,
78
+ category: 'board',
79
+ description
80
+ });
81
+ var settings = await fetchBoardSettings([FALLBACK_HOME_BOARD, DASHBOARD, DASHBOARD_MOBILE]);
82
+ store.dispatch({
83
+ type: UPDATE_BOARD_SETTINGS,
84
+ settings: settings.reduce((settings, setting) => {
85
+ settings[setting.name] = setting;
86
+ return settings;
87
+ }, {})
88
+ });
89
+ popup.close();
90
+ this.requestUpdate();
91
+ }}
92
+ ></ox-board-selector>
93
+ `, {
94
+ backdrop: true,
95
+ size: 'large',
96
+ title: i18next.t('title.dashboard setting')
97
+ });
98
+ }
99
+ async saveSettings({ name, value, category, description }) {
100
+ if (!(name && value)) {
101
+ return;
102
+ }
103
+ await client.query({
104
+ query: gql `
105
+ mutation UpdateSetting($patch: SettingPatch!, $name: String!) {
106
+ updateSetting(patch: $patch, name: $name) {
107
+ name
108
+ value
109
+ }
110
+ }
111
+ `,
112
+ variables: {
113
+ name,
114
+ patch: {
115
+ name,
116
+ description,
117
+ category,
118
+ value
119
+ }
120
+ }
121
+ });
122
+ }
123
+ };
124
+ DashboardSettingLet.styles = [
125
+ css `
126
+ div.field {
127
+ display: flex;
128
+ flex-direction: row;
129
+ align-items: flex-start;
130
+ max-width: 100%;
131
+ overflow: hidden;
132
+ }
133
+
134
+ div.field > * {
135
+ flex: none;
136
+ }
137
+
138
+ div.field > div {
139
+ flex: 1;
140
+ display: flex;
141
+ flex-direction: column;
142
+ align-items: flex-start;
143
+ }
144
+
145
+ div.field a {
146
+ overflow: hidden;
147
+ border: var(--border-dim-color);
148
+ border-radius: var(--border-radius);
149
+ background-color: rgba(0, 0, 0, 0.1);
150
+ min-width: 50px;
151
+ min-height: 50px;
152
+ }
153
+
154
+ div.field img {
155
+ max-height: 250px;
156
+ max-width: 100%;
157
+ }
158
+
159
+ .name {
160
+ color: var(--md-sys-color-on-secondary-container);
161
+ }
162
+
163
+ .description {
164
+ font-size: 0.7rem;
165
+ opacity: 0.7;
166
+ color: var(--md-sys-color-on-secondary-container);
167
+ }
168
+
169
+ label {
170
+ width: 80px;
171
+ padding-right: var(--spacing-medium);
172
+ font: bold 0.9em var(--theme-font);
173
+ }
174
+
175
+ setting-let > form {
176
+ display: grid;
177
+ grid-template-columns: 1fr 1fr;
178
+ }
179
+
180
+ md-icon {
181
+ --md-icon-size: 18px;
182
+ margin: 2px 2px 5px 2px;
183
+ padding: 0 var(--spacing-medium);
184
+ color: var(--md-sys-on-secondary-container, #fff);
185
+ background-color: var(--md-sys-secondary-container, #394e64);
186
+ border-radius: var(--border-radius, 5px);
187
+ border: var(--button-border, 1px solid transparent);
188
+ }
189
+
190
+ md-icon:hover,
191
+ md-icon:active {
192
+ background-color: var(--button-active-background-color, #22a6a7);
193
+ }
194
+
195
+ @media screen and (max-width: 460px) {
196
+ setting-let > form {
197
+ display: flex;
198
+ flex-direction: column;
199
+ }
200
+ div.field {
201
+ border-bottom: var(--border-dim-color);
202
+ padding: var(--spacing-medium);
203
+ }
204
+ md-icon {
205
+ padding: var(--spacing-small) var(--spacing-medium);
206
+ }
207
+ }
208
+ `
209
+ ];
210
+ __decorate([
211
+ state(),
212
+ __metadata("design:type", Object)
213
+ ], DashboardSettingLet.prototype, "dashboard", void 0);
214
+ __decorate([
215
+ state(),
216
+ __metadata("design:type", Object)
217
+ ], DashboardSettingLet.prototype, "dashboardMobile", void 0);
218
+ DashboardSettingLet = __decorate([
219
+ customElement('dashboard-setting-let')
220
+ ], DashboardSettingLet);
221
+ export { DashboardSettingLet };
222
+ //# sourceMappingURL=dashboard-setting-let.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard-setting-let.js","sourceRoot":"","sources":["../../client/viewparts/dashboard-setting-let.ts"],"names":[],"mappings":";AAAA,OAAO,4BAA4B,CAAA;AACnC,OAAO,qCAAqC,CAAA;AAC5C,OAAO,0BAA0B,CAAA;AAEjC,OAAO,GAAG,MAAM,aAAa,CAAA;AAC7B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAErC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAEzC,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AACrF,OAAO,EACL,SAAS,EACT,qBAAqB,EACrB,gBAAgB,EAChB,4BAA4B,EAC5B,mBAAmB,EACpB,MAAM,UAAU,CAAA;AAGV,IAAM,mBAAmB,GAAzB,MAAM,mBAAoB,SAAQ,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC;IA2FpF,MAAM;QACJ,OAAO,IAAI,CAAA;;;;;YAKH;YACA;gBACE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,6BAA6B,CAAC;gBAC/C,KAAK,EAAE,IAAI,CAAC,SAAS;gBACrB,GAAG,EAAE,SAAS;gBACd,WAAW,EAAE,qBAAqB;aACnC;YACD;gBACE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,4BAA4B,CAAC;gBAC9C,KAAK,EAAE,IAAI,CAAC,eAAe;gBAC3B,GAAG,EAAE,gBAAgB;gBACrB,WAAW,EAAE,4BAA4B;aAC1C;SACF,CAAC,GAAG,CACH,KAAK,CAAC,EAAE,CAAC,IAAI,CAAA;;yBAEA,KAAK,CAAC,KAAK;;sCAEE,KAAK,CAAC,KAAK,CAAC,IAAI;8CACR,KAAK,CAAC,KAAK,CAAC,WAAW;oCACjC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,WAAW,CAAC;;;oBAI5E,KAAK,CAAC,KAAK,CAAC,EAAE;YACZ,CAAC,CAAC,IAAI,CAAA;oCACQ,kBAAkB,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE;;oCAElC,KAAK,CAAC,KAAK,CAAC,SAAS;gBAC3B,gFAAgF;;;yBAGrF;YACH,CAAC,CAAC,IAAI,CAAA,EACV;;;aAGL,CACF;;;KAGN,CAAA;IACH,CAAC;IAED,YAAY,CAAC,KAAU;QACrB,IAAI,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAA;QACxF,IAAI,eAAe,GAAG,KAAK,CAAC,YAAY,CAAC,gBAAgB,CAAC,IAAI,SAAS,CAAA;QAEvE,IAAI,CAAC,SAAS,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAA;QACzD,IAAI,CAAC,eAAe,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAA;IAC7E,CAAC;IAED,oBAAoB,CAAC,IAAY,EAAE,WAAmB;;QACpD,IAAI,KAAK,GAAG,SAAS,CACnB,IAAI,CAAA;;uBAEa,IAAI;mBACR,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC,MAAA,IAAI,CAAC,SAAS,0CAAE,EAAE,CAAC,CAAC,CAAC,MAAA,IAAI,CAAC,eAAe,0CAAE,EAAE;4BACxD,KAAK,EAAC,CAAC,EAAC,EAAE;YAC1B,IAAI,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAA;YAE1B,MAAM,IAAI,CAAC,YAAY,CAAC;gBACtB,IAAI;gBACJ,KAAK,EAAE,KAAK,CAAC,EAAE;gBACf,QAAQ,EAAE,OAAO;gBACjB,WAAW;aACZ,CAAC,CAAA;YAEF,IAAI,QAAQ,GAAG,MAAM,kBAAkB,CAAC,CAAC,mBAAmB,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAA;YAC3F,KAAK,CAAC,QAAQ,CAAC;gBACb,IAAI,EAAE,qBAAqB;gBAC3B,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE;oBAC9C,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAA;oBAChC,OAAO,QAAQ,CAAA;gBACjB,CAAC,EAAE,EAAE,CAAC;aACP,CAAC,CAAA;YAEF,KAAK,CAAC,KAAK,EAAE,CAAA;YACb,IAAI,CAAC,aAAa,EAAE,CAAA;QACtB,CAAC;;OAEJ,EACD;YACE,QAAQ,EAAE,IAAI;YACd,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,yBAAyB,CAAC;SAC5C,CACF,CAAA;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE;QACvD,IAAI,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACrB,OAAM;QACR,CAAC;QAED,MAAM,MAAM,CAAC,KAAK,CAAC;YACjB,KAAK,EAAE,GAAG,CAAA;;;;;;;OAOT;YACD,SAAS,EAAE;gBACT,IAAI;gBACJ,KAAK,EAAE;oBACL,IAAI;oBACJ,WAAW;oBACX,QAAQ;oBACR,KAAK;iBACN;aACF;SACF,CAAC,CAAA;IACJ,CAAC;;AAlNM,0BAAM,GAAG;IACd,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAmFF;CACF,AArFY,CAqFZ;AAEgB;IAAhB,KAAK,EAAE;;sDAAuB;AACd;IAAhB,KAAK,EAAE;;4DAA6B;AAzF1B,mBAAmB;IAD/B,aAAa,CAAC,uBAAuB,CAAC;GAC1B,mBAAmB,CAoN/B","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@operato/board/ox-board-selector.js'\nimport '@operato/i18n/ox-i18n.js'\n\nimport gql from 'graphql-tag'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, state } from 'lit/decorators.js'\nimport { connect } from 'pwa-helpers'\n\nimport { openPopup } from '@operato/layout'\nimport { i18next, localize } from '@operato/i18n'\nimport { store } from '@operato/shell'\nimport { client } from '@operato/graphql'\n\nimport { fetchBoardSettings, UPDATE_BOARD_SETTINGS } from '../actions/board-settings'\nimport {\n DASHBOARD,\n DASHBOARD_DESCRIPTION,\n DASHBOARD_MOBILE,\n DASHBOARD_MOBILE_DESCRIPTION,\n FALLBACK_HOME_BOARD\n} from '../const'\n\n@customElement('dashboard-setting-let')\nexport class DashboardSettingLet extends connect(store)(localize(i18next)(LitElement)) {\n static styles = [\n css`\n div.field {\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n max-width: 100%;\n overflow: hidden;\n }\n\n div.field > * {\n flex: none;\n }\n\n div.field > div {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n }\n\n div.field a {\n overflow: hidden;\n border: var(--border-dim-color);\n border-radius: var(--border-radius);\n background-color: rgba(0, 0, 0, 0.1);\n min-width: 50px;\n min-height: 50px;\n }\n\n div.field img {\n max-height: 250px;\n max-width: 100%;\n }\n\n .name {\n color: var(--md-sys-color-on-secondary-container);\n }\n\n .description {\n font-size: 0.7rem;\n opacity: 0.7;\n color: var(--md-sys-color-on-secondary-container);\n }\n\n label {\n width: 80px;\n padding-right: var(--spacing-medium);\n font: bold 0.9em var(--theme-font);\n }\n\n setting-let > form {\n display: grid;\n grid-template-columns: 1fr 1fr;\n }\n\n md-icon {\n --md-icon-size: 18px;\n margin: 2px 2px 5px 2px;\n padding: 0 var(--spacing-medium);\n color: var(--md-sys-on-secondary-container, #fff);\n background-color: var(--md-sys-secondary-container, #394e64);\n border-radius: var(--border-radius, 5px);\n border: var(--button-border, 1px solid transparent);\n }\n\n md-icon:hover,\n md-icon:active {\n background-color: var(--button-active-background-color, #22a6a7);\n }\n\n @media screen and (max-width: 460px) {\n setting-let > form {\n display: flex;\n flex-direction: column;\n }\n div.field {\n border-bottom: var(--border-dim-color);\n padding: var(--spacing-medium);\n }\n md-icon {\n padding: var(--spacing-small) var(--spacing-medium);\n }\n }\n `\n ]\n\n @state() private dashboard: any\n @state() private dashboardMobile: any\n\n render() {\n return html`\n <setting-let>\n <ox-i18n slot=\"title\" msgid=\"title.dashboard setting\"></ox-i18n>\n\n <form slot=\"content\">\n ${[\n {\n title: i18next.t('label.dashboard for desktop'),\n board: this.dashboard,\n key: DASHBOARD,\n description: DASHBOARD_DESCRIPTION\n },\n {\n title: i18next.t('label.dashboard for mobile'),\n board: this.dashboardMobile,\n key: DASHBOARD_MOBILE,\n description: DASHBOARD_MOBILE_DESCRIPTION\n }\n ].map(\n field => html`\n <div class=\"field\">\n <label>${field.title}</ox-i18n></label>\n <div>\n <div class=\"name\">${field.board.name}</div>\n <span class=\"description\">${field.board.description}</span>\n <md-icon @click=${e => this.onClickBoardSelector(field.key, field.description)}>\n more_horiz\n </md-icon>\n ${\n field.board.id\n ? html`\n <a href=${`board-modeller/${field.board.id}`}>\n <img\n src=${field.board.thumbnail ||\n 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'}\n />\n </a>\n `\n : html``\n }\n </div>\n </div>\n `\n )}\n </form>\n </setting-let>\n `\n }\n\n stateChanged(state: any) {\n var dashboard = state.boardSetting[DASHBOARD] || state.boardSetting[FALLBACK_HOME_BOARD]\n var dashboardMobile = state.boardSetting[DASHBOARD_MOBILE] || dashboard\n\n this.dashboard = (dashboard ? dashboard.board : {}) || {}\n this.dashboardMobile = (dashboardMobile ? dashboardMobile.board : {}) || {}\n }\n\n onClickBoardSelector(name: string, description: string) {\n var popup = openPopup(\n html`\n <ox-board-selector\n .creatable=${true}\n .value=${name == DASHBOARD ? this.dashboard?.id : this.dashboardMobile?.id}\n @board-selected=${async e => {\n var board = e.detail.board\n\n await this.saveSettings({\n name,\n value: board.id,\n category: 'board',\n description\n })\n\n var settings = await fetchBoardSettings([FALLBACK_HOME_BOARD, DASHBOARD, DASHBOARD_MOBILE])\n store.dispatch({\n type: UPDATE_BOARD_SETTINGS,\n settings: settings.reduce((settings, setting) => {\n settings[setting.name] = setting\n return settings\n }, {})\n })\n\n popup.close()\n this.requestUpdate()\n }}\n ></ox-board-selector>\n `,\n {\n backdrop: true,\n size: 'large',\n title: i18next.t('title.dashboard setting')\n }\n )\n }\n\n async saveSettings({ name, value, category, description }) {\n if (!(name && value)) {\n return\n }\n\n await client.query({\n query: gql`\n mutation UpdateSetting($patch: SettingPatch!, $name: String!) {\n updateSetting(patch: $patch, name: $name) {\n name\n value\n }\n }\n `,\n variables: {\n name,\n patch: {\n name,\n description,\n category,\n value\n }\n }\n })\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ export * from './service';
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./service"), exports);
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../server/index.ts"],"names":[],"mappings":";;;AAAA,oDAAyB","sourcesContent":["export * from './service'\n"]}
@@ -0,0 +1,7 @@
1
+ import { Board } from '@things-factory/board-service';
2
+ export declare class BoardSetting {
3
+ id: string;
4
+ name: string;
5
+ value: string;
6
+ board: Board;
7
+ }
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BoardSetting = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const type_graphql_1 = require("type-graphql");
6
+ const board_service_1 = require("@things-factory/board-service");
7
+ let BoardSetting = class BoardSetting {
8
+ };
9
+ exports.BoardSetting = BoardSetting;
10
+ tslib_1.__decorate([
11
+ (0, type_graphql_1.Field)(type => type_graphql_1.ID),
12
+ tslib_1.__metadata("design:type", String)
13
+ ], BoardSetting.prototype, "id", void 0);
14
+ tslib_1.__decorate([
15
+ (0, type_graphql_1.Field)(),
16
+ tslib_1.__metadata("design:type", String)
17
+ ], BoardSetting.prototype, "name", void 0);
18
+ tslib_1.__decorate([
19
+ (0, type_graphql_1.Field)(),
20
+ tslib_1.__metadata("design:type", String)
21
+ ], BoardSetting.prototype, "value", void 0);
22
+ tslib_1.__decorate([
23
+ (0, type_graphql_1.Field)(type => board_service_1.Board),
24
+ tslib_1.__metadata("design:type", board_service_1.Board)
25
+ ], BoardSetting.prototype, "board", void 0);
26
+ exports.BoardSetting = BoardSetting = tslib_1.__decorate([
27
+ (0, type_graphql_1.ObjectType)()
28
+ ], BoardSetting);
29
+ //# sourceMappingURL=board-setting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board-setting.js","sourceRoot":"","sources":["../../../server/service/board-settings/board-setting.ts"],"names":[],"mappings":";;;;AAAA,+CAAoD;AACpD,iEAAqD;AAG9C,IAAM,YAAY,GAAlB,MAAM,YAAY;CAYxB,CAAA;AAZY,oCAAY;AAEvB;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,iBAAE,CAAC;;wCACR;AAGV;IADC,IAAA,oBAAK,GAAE;;0CACI;AAGZ;IADC,IAAA,oBAAK,GAAE;;2CACK;AAGb;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,qBAAK,CAAC;sCACd,qBAAK;2CAAA;uBAXD,YAAY;IADxB,IAAA,yBAAU,GAAE;GACA,YAAY,CAYxB","sourcesContent":["import { ObjectType, Field, ID } from 'type-graphql'\nimport { Board } from '@things-factory/board-service'\n\n@ObjectType()\nexport class BoardSetting {\n @Field(type => ID)\n id: string\n\n @Field()\n name: string\n\n @Field()\n value: string\n\n @Field(type => Board)\n board: Board\n}\n"]}
@@ -0,0 +1,4 @@
1
+ import { BoardSetting } from './board-setting';
2
+ export declare class BoardSettingsQuery {
3
+ boardSettings(names: string[], context: any): Promise<BoardSetting[]>;
4
+ }
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BoardSettingsQuery = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const type_graphql_1 = require("type-graphql");
6
+ const board_service_1 = require("@things-factory/board-service");
7
+ const setting_base_1 = require("@things-factory/setting-base");
8
+ const shell_1 = require("@things-factory/shell");
9
+ const board_setting_1 = require("./board-setting");
10
+ let BoardSettingsQuery = class BoardSettingsQuery {
11
+ async boardSettings(names, context) {
12
+ const { domain } = context.state;
13
+ const queryBuilder = (0, shell_1.getRepository)(setting_base_1.Setting).createQueryBuilder();
14
+ var qb = queryBuilder
15
+ .innerJoin(board_service_1.Board, 'Board', 'Setting.value = CAST(Board.id AS char(36))')
16
+ .select([
17
+ 'Setting.id as id',
18
+ 'Setting.name as name',
19
+ 'Setting.value as value',
20
+ 'Board.id as boardId',
21
+ 'Board.name as boardName',
22
+ 'Board.description as boardDescription',
23
+ 'Board.thumbnail as boardThumbnail'
24
+ ])
25
+ .where('Setting.domain.id = :domain and Setting.category = :category', {
26
+ domain: domain.id,
27
+ category: 'board'
28
+ });
29
+ if (names && names.length)
30
+ qb.andWhere('Setting.name IN (:...names)', { names });
31
+ var boardSettingList = await qb.getRawMany();
32
+ return boardSettingList.map(boardSetting => {
33
+ var setting = {
34
+ board: {}
35
+ };
36
+ for (let key in boardSetting) {
37
+ if (key.includes('board')) {
38
+ let originKey = key;
39
+ key = key.replace('board', '').toLowerCase();
40
+ setting.board[key] = boardSetting[originKey];
41
+ }
42
+ else {
43
+ setting[key] = boardSetting[key];
44
+ }
45
+ }
46
+ return setting;
47
+ });
48
+ }
49
+ };
50
+ exports.BoardSettingsQuery = BoardSettingsQuery;
51
+ tslib_1.__decorate([
52
+ (0, type_graphql_1.Query)(returns => [board_setting_1.BoardSetting], { description: 'To fetch a BoardSettings' }),
53
+ tslib_1.__param(0, (0, type_graphql_1.Arg)('names', type => [String], { nullable: true })),
54
+ tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
55
+ tslib_1.__metadata("design:type", Function),
56
+ tslib_1.__metadata("design:paramtypes", [Array, Object]),
57
+ tslib_1.__metadata("design:returntype", Promise)
58
+ ], BoardSettingsQuery.prototype, "boardSettings", null);
59
+ exports.BoardSettingsQuery = BoardSettingsQuery = tslib_1.__decorate([
60
+ (0, type_graphql_1.Resolver)(board_setting_1.BoardSetting)
61
+ ], BoardSettingsQuery);
62
+ //# sourceMappingURL=board-settings-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board-settings-query.js","sourceRoot":"","sources":["../../../server/service/board-settings/board-settings-query.ts"],"names":[],"mappings":";;;;AAAA,+CAAwD;AAExD,iEAAqD;AACrD,+DAAsD;AACtD,iDAAqD;AAErD,mDAA8C;AAGvC,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAEvB,AAAN,KAAK,CAAC,aAAa,CAAqD,KAAe,EAAS,OAAY;QAC1G,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAChC,MAAM,YAAY,GAAG,IAAA,qBAAa,EAAC,sBAAO,CAAC,CAAC,kBAAkB,EAAE,CAAA;QAEhE,IAAI,EAAE,GAAG,YAAY;aAClB,SAAS,CAAC,qBAAK,EAAE,OAAO,EAAE,4CAA4C,CAAC;aACvE,MAAM,CAAC;YACN,kBAAkB;YAClB,sBAAsB;YACtB,wBAAwB;YACxB,qBAAqB;YACrB,yBAAyB;YACzB,uCAAuC;YACvC,mCAAmC;SACpC,CAAC;aACD,KAAK,CAAC,8DAA8D,EAAE;YACrE,MAAM,EAAE,MAAM,CAAC,EAAE;YACjB,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAA;QAEJ,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM;YAAE,EAAE,CAAC,QAAQ,CAAC,6BAA6B,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;QAEhF,IAAI,gBAAgB,GAAG,MAAM,EAAE,CAAC,UAAU,EAAE,CAAA;QAE5C,OAAO,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;YACzC,IAAI,OAAO,GAAQ;gBACjB,KAAK,EAAE,EAAE;aACV,CAAA;YAED,KAAK,IAAI,GAAG,IAAI,YAAY,EAAE,CAAC;gBAC7B,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC1B,IAAI,SAAS,GAAG,GAAG,CAAA;oBACnB,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAA;oBAC5C,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,SAAS,CAAC,CAAA;gBAC9C,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAA;gBAClC,CAAC;YACH,CAAC;YAED,OAAO,OAAO,CAAA;QAChB,CAAC,CAAC,CAAA;IACJ,CAAC;CACF,CAAA;AA5CY,gDAAkB;AAEvB;IADL,IAAA,oBAAK,EAAC,OAAO,CAAC,EAAE,CAAC,CAAC,4BAAY,CAAC,EAAE,EAAE,WAAW,EAAE,0BAA0B,EAAE,CAAC;IACzD,mBAAA,IAAA,kBAAG,EAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;IAAmB,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;uDAyC9F;6BA3CU,kBAAkB;IAD9B,IAAA,uBAAQ,EAAC,4BAAY,CAAC;GACV,kBAAkB,CA4C9B","sourcesContent":["import { Arg, Ctx, Query, Resolver } from 'type-graphql'\n\nimport { Board } from '@things-factory/board-service'\nimport { Setting } from '@things-factory/setting-base'\nimport { getRepository } from '@things-factory/shell'\n\nimport { BoardSetting } from './board-setting'\n\n@Resolver(BoardSetting)\nexport class BoardSettingsQuery {\n @Query(returns => [BoardSetting], { description: 'To fetch a BoardSettings' })\n async boardSettings(@Arg('names', type => [String], { nullable: true }) names: string[], @Ctx() context: any): Promise<BoardSetting[]> {\n const { domain } = context.state\n const queryBuilder = getRepository(Setting).createQueryBuilder()\n\n var qb = queryBuilder\n .innerJoin(Board, 'Board', 'Setting.value = CAST(Board.id AS char(36))')\n .select([\n 'Setting.id as id',\n 'Setting.name as name',\n 'Setting.value as value',\n 'Board.id as boardId',\n 'Board.name as boardName',\n 'Board.description as boardDescription',\n 'Board.thumbnail as boardThumbnail'\n ])\n .where('Setting.domain.id = :domain and Setting.category = :category', {\n domain: domain.id,\n category: 'board'\n })\n\n if (names && names.length) qb.andWhere('Setting.name IN (:...names)', { names })\n\n var boardSettingList = await qb.getRawMany()\n\n return boardSettingList.map(boardSetting => {\n var setting: any = {\n board: {}\n }\n\n for (let key in boardSetting) {\n if (key.includes('board')) {\n let originKey = key\n key = key.replace('board', '').toLowerCase()\n setting.board[key] = boardSetting[originKey]\n } else {\n setting[key] = boardSetting[key]\n }\n }\n\n return setting\n })\n }\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import { BoardSettingsQuery } from './board-settings-query';
2
+ export declare const entities: any[];
3
+ export declare const resolvers: (typeof BoardSettingsQuery)[];
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolvers = exports.entities = void 0;
4
+ const board_settings_query_1 = require("./board-settings-query");
5
+ exports.entities = [];
6
+ exports.resolvers = [board_settings_query_1.BoardSettingsQuery];
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/service/board-settings/index.ts"],"names":[],"mappings":";;;AAAA,iEAA2D;AAE9C,QAAA,QAAQ,GAAG,EAAE,CAAA;AACb,QAAA,SAAS,GAAG,CAAC,yCAAkB,CAAC,CAAA","sourcesContent":["import { BoardSettingsQuery } from './board-settings-query'\n\nexport const entities = []\nexport const resolvers = [BoardSettingsQuery]\n"]}
@@ -0,0 +1,5 @@
1
+ export * from './board-settings/board-setting';
2
+ export declare const entities: any[];
3
+ export declare const schema: {
4
+ resolverClasses: typeof import("./board-settings/board-settings-query").BoardSettingsQuery[];
5
+ };
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.schema = exports.entities = void 0;
4
+ const tslib_1 = require("tslib");
5
+ /* EXPORT ENTITY TYPES */
6
+ tslib_1.__exportStar(require("./board-settings/board-setting"), exports);
7
+ /* IMPORT ENTITIES AND RESOLVERS */
8
+ const board_settings_1 = require("./board-settings");
9
+ exports.entities = [
10
+ /* ENTITIES */
11
+ ...board_settings_1.entities
12
+ ];
13
+ exports.schema = {
14
+ resolverClasses: [
15
+ /* RESOLVER CLASSES */
16
+ ...board_settings_1.resolvers
17
+ ]
18
+ };
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../server/service/index.ts"],"names":[],"mappings":";;;;AAAA,yBAAyB;AACzB,yEAA8C;AAE9C,mCAAmC;AACnC,qDAAyG;AAE5F,QAAA,QAAQ,GAAG;IACtB,cAAc;IACd,GAAG,yBAAqB;CACzB,CAAA;AAEY,QAAA,MAAM,GAAG;IACpB,eAAe,EAAE;QACf,sBAAsB;QACtB,GAAG,0BAAsB;KAC1B;CACF,CAAA","sourcesContent":["/* EXPORT ENTITY TYPES */\nexport * from './board-settings/board-setting'\n\n/* IMPORT ENTITIES AND RESOLVERS */\nimport { entities as BoardSettingsEntities, resolvers as BoardSettingsResolvers } from './board-settings'\n\nexport const entities = [\n /* ENTITIES */\n ...BoardSettingsEntities\n]\n\nexport const schema = {\n resolverClasses: [\n /* RESOLVER CLASSES */\n ...BoardSettingsResolvers\n ]\n}\n"]}