@things-factory/menu-ui 8.0.0-beta.8 → 8.0.0

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 (57) hide show
  1. package/client/apptools/favorite-tool.js +130 -0
  2. package/client/bootstrap.js +57 -0
  3. package/client/components/child-menus-selector.js +150 -0
  4. package/client/components/role-select-popup.js +179 -0
  5. package/client/pages/menu-list-page.js +200 -0
  6. package/client/pages/menu-management-detail.js +384 -0
  7. package/client/pages/menu-management.js +294 -0
  8. package/client/pages/role-menus-management.js +215 -0
  9. package/client/route.js +15 -0
  10. package/client/viewparts/menu-bar.js +114 -0
  11. package/client/viewparts/menu-tile-list.js +222 -0
  12. package/client/viewparts/menu-tree-bar.js +295 -0
  13. package/dist-server/tsconfig.tsbuildinfo +1 -1
  14. package/package.json +18 -21
  15. package/server/index.ts +0 -0
  16. package/things-factory.config.js +14 -5
  17. package/dist-client/apptools/favorite-tool.d.ts +0 -28
  18. package/dist-client/apptools/favorite-tool.js +0 -139
  19. package/dist-client/apptools/favorite-tool.js.map +0 -1
  20. package/dist-client/bootstrap.d.ts +0 -4
  21. package/dist-client/bootstrap.js +0 -52
  22. package/dist-client/bootstrap.js.map +0 -1
  23. package/dist-client/components/child-menus-selector.d.ts +0 -1
  24. package/dist-client/components/child-menus-selector.js +0 -146
  25. package/dist-client/components/child-menus-selector.js.map +0 -1
  26. package/dist-client/components/role-select-popup.d.ts +0 -1
  27. package/dist-client/components/role-select-popup.js +0 -180
  28. package/dist-client/components/role-select-popup.js.map +0 -1
  29. package/dist-client/index.js +0 -2
  30. package/dist-client/index.js.map +0 -1
  31. package/dist-client/pages/menu-list-page.d.ts +0 -2
  32. package/dist-client/pages/menu-list-page.js +0 -204
  33. package/dist-client/pages/menu-list-page.js.map +0 -1
  34. package/dist-client/pages/menu-management-detail.d.ts +0 -2
  35. package/dist-client/pages/menu-management-detail.js +0 -376
  36. package/dist-client/pages/menu-management-detail.js.map +0 -1
  37. package/dist-client/pages/menu-management.d.ts +0 -3
  38. package/dist-client/pages/menu-management.js +0 -280
  39. package/dist-client/pages/menu-management.js.map +0 -1
  40. package/dist-client/pages/role-menus-management.d.ts +0 -4
  41. package/dist-client/pages/role-menus-management.js +0 -215
  42. package/dist-client/pages/role-menus-management.js.map +0 -1
  43. package/dist-client/route.d.ts +0 -1
  44. package/dist-client/route.js +0 -14
  45. package/dist-client/route.js.map +0 -1
  46. package/dist-client/tsconfig.tsbuildinfo +0 -1
  47. package/dist-client/viewparts/menu-bar.d.ts +0 -12
  48. package/dist-client/viewparts/menu-bar.js +0 -108
  49. package/dist-client/viewparts/menu-bar.js.map +0 -1
  50. package/dist-client/viewparts/menu-tile-list.d.ts +0 -13
  51. package/dist-client/viewparts/menu-tile-list.js +0 -234
  52. package/dist-client/viewparts/menu-tile-list.js.map +0 -1
  53. package/dist-client/viewparts/menu-tree-bar.d.ts +0 -28
  54. package/dist-client/viewparts/menu-tree-bar.js +0 -307
  55. package/dist-client/viewparts/menu-tree-bar.js.map +0 -1
  56. /package/{dist-client/index.d.ts → client/index.js} +0 -0
  57. /package/{dist-client → client}/themes/menu-theme.css +0 -0
@@ -1,234 +0,0 @@
1
- import { __decorate, __metadata } from "tslib";
2
- import '@material/web/icon/icon.js';
3
- import '@operato/oops';
4
- import { css, html, LitElement } from 'lit';
5
- import { customElement, property } from 'lit/decorators.js';
6
- let MenuTileList = class MenuTileList extends LitElement {
7
- constructor() {
8
- super(...arguments);
9
- this.menus = [];
10
- this.favorites = [];
11
- this.showSpinner = false;
12
- }
13
- render() {
14
- var topmenus = this.menus || [];
15
- var menuId = this.menuId;
16
- if (!menuId) {
17
- /* favorite menus */
18
- var submenus = topmenus.reduce((allmenu, topmenu) => {
19
- let menus = (topmenu && topmenu.children) || [];
20
- menus.forEach(menu => {
21
- if (this.favorites.includes(this._getFullRouting(menu))) {
22
- allmenu.push(menu);
23
- }
24
- });
25
- return allmenu;
26
- }, []);
27
- }
28
- else {
29
- var menu = topmenus[menuId];
30
- var submenus = (menu && menu.children) || [];
31
- }
32
- return html `
33
- <ul>
34
- ${submenus.map(subMenu => {
35
- const routing = this._getFullRouting(subMenu);
36
- return html `
37
- <li
38
- class="${subMenu.class} text"
39
- style="grid-row: span ${subMenu.routingType.toUpperCase() === 'STATIC' ? 1 : 2}"
40
- >
41
- <a href=${routing}>${subMenu.name}</a>
42
-
43
- <md-icon ?selected=${(this.favorites || []).includes(routing)}
44
- >${(this.favorites || []).includes(routing) ? 'star' : 'star_border'}</md-icon
45
- >
46
- </li>
47
- `;
48
- })}
49
- </ul>
50
-
51
- ${submenus.length == 0 && !this.showSpinner
52
- ? typeof menuId == 'number'
53
- ? html `
54
- <ox-oops-note
55
- icon="apps"
56
- title="No Menu Found"
57
- description="Seems like you are not authorised to view this menu"
58
- ></ox-oops-note>
59
- `
60
- : html `
61
- <ox-oops-note
62
- icon="star_border"
63
- title="No Favourite Found"
64
- description="Click ☆ icon to add new favourite menu"
65
- ></ox-oops-note>
66
- `
67
- : html ``}
68
-
69
- <ox-oops-spinner ?show=${this.showSpinner}></ox-oops-spinner>
70
- `;
71
- }
72
- _getFullRouting(menu) {
73
- var { routingType, titleField, name, resourceUrl } = menu;
74
- if (routingType.toUpperCase() === 'STATIC') {
75
- return resourceUrl;
76
- }
77
- var { page } = this.routingTypes[routingType];
78
- return titleField ? `${page}/${menu[titleField]}` : `${page}/${name}`;
79
- }
80
- };
81
- MenuTileList.styles = [
82
- css `
83
- :host {
84
- display: block;
85
- box-sizing: border-box;
86
-
87
- position: relative;
88
- }
89
-
90
- ul {
91
- display: grid;
92
- grid-template-columns: 1fr 1fr;
93
- grid-auto-rows: 110px;
94
- list-style: none;
95
- padding: 0;
96
- margin: 0;
97
- }
98
-
99
- ul > li {
100
- margin: var(--menu-tile-list-item-margin);
101
- padding: 10px;
102
-
103
- position: relative;
104
- }
105
-
106
- md-icon {
107
- cursor: pointer;
108
- position: absolute;
109
- right: 8px;
110
- top: 8px;
111
-
112
- color: var(--menu-tile-list-favorite-color);
113
- font-size: 1em;
114
- }
115
-
116
- md-icon[selected] {
117
- color: white;
118
- text-shadow: 1px 1px 1px var(--menu-tile-list-favorite-color);
119
- }
120
-
121
- li.text a {
122
- color: #fff;
123
- text-decoration: none;
124
-
125
- font-size: 1.4em;
126
- line-height: 1.3;
127
- word-wrap: break-word;
128
- word-break: keep-all;
129
-
130
- margin: 0px;
131
- display: block;
132
- width: 100%;
133
- height: 100%;
134
- }
135
-
136
- li.text:nth-child(7n + 1) {
137
- background-color: #4397de;
138
- }
139
-
140
- li.text:nth-child(7n + 2) {
141
- background-color: #33b8d0;
142
- }
143
-
144
- li.text:nth-child(7n + 3) {
145
- background-color: #4ab75f;
146
- }
147
-
148
- li.text:nth-child(7n + 4) {
149
- background-color: #93796f;
150
- }
151
-
152
- li.text:nth-child(7n + 5) {
153
- background-color: #f1ac42;
154
- }
155
-
156
- li.text:nth-child(7n + 6) {
157
- background-color: #ea6361;
158
- }
159
-
160
- li.text:nth-child(7n + 7) {
161
- background-color: #7386c3;
162
- }
163
-
164
- ox-oops-note {
165
- display: block;
166
- position: absolute;
167
- left: 50%;
168
- top: 50%;
169
- transform: translate(-50%, -50%);
170
- }
171
-
172
- ox-oops-spinner {
173
- display: none;
174
- position: absolute;
175
- left: 50%;
176
- top: 50%;
177
- transform: translate(-50%, -50%);
178
- }
179
-
180
- ox-oops-spinner[show] {
181
- display: block;
182
- }
183
-
184
- @media (min-width: 600px) {
185
- ul {
186
- grid-template-columns: 1fr 1fr 1fr;
187
- grid-auto-rows: 120px;
188
- }
189
- }
190
- @media (min-width: 1200px) {
191
- ul {
192
- grid-template-columns: 1fr 1fr 1fr 1fr;
193
- grid-auto-rows: 130px;
194
- }
195
- }
196
- @media (min-width: 1800px) {
197
- ul {
198
- grid-template-columns: 1fr 1fr 1fr 1fr 1fr;
199
- grid-auto-rows: 140px;
200
- }
201
- }
202
- @media (min-width: 2400px) {
203
- ul {
204
- grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr;
205
- grid-auto-rows: 150px;
206
- }
207
- }
208
- `
209
- ];
210
- __decorate([
211
- property({ type: String }),
212
- __metadata("design:type", String)
213
- ], MenuTileList.prototype, "menuId", void 0);
214
- __decorate([
215
- property({ type: Array }),
216
- __metadata("design:type", Array)
217
- ], MenuTileList.prototype, "menus", void 0);
218
- __decorate([
219
- property({ type: Object }),
220
- __metadata("design:type", Object)
221
- ], MenuTileList.prototype, "routingTypes", void 0);
222
- __decorate([
223
- property({ type: Array }),
224
- __metadata("design:type", Array)
225
- ], MenuTileList.prototype, "favorites", void 0);
226
- __decorate([
227
- property({ type: Boolean }),
228
- __metadata("design:type", Boolean)
229
- ], MenuTileList.prototype, "showSpinner", void 0);
230
- MenuTileList = __decorate([
231
- customElement('menu-tile-list')
232
- ], MenuTileList);
233
- export default MenuTileList;
234
- //# sourceMappingURL=menu-tile-list.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"menu-tile-list.js","sourceRoot":"","sources":["../../client/viewparts/menu-tile-list.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@operato/oops'\n\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\n@customElement('menu-tile-list')\nexport default class MenuTileList extends LitElement {\n static styles = [\n css`\n :host {\n display: block;\n box-sizing: border-box;\n\n position: relative;\n }\n\n ul {\n display: grid;\n grid-template-columns: 1fr 1fr;\n grid-auto-rows: 110px;\n list-style: none;\n padding: 0;\n margin: 0;\n }\n\n ul > li {\n margin: var(--menu-tile-list-item-margin);\n padding: 10px;\n\n position: relative;\n }\n\n md-icon {\n cursor: pointer;\n position: absolute;\n right: 8px;\n top: 8px;\n\n color: var(--menu-tile-list-favorite-color);\n font-size: 1em;\n }\n\n md-icon[selected] {\n color: white;\n text-shadow: 1px 1px 1px var(--menu-tile-list-favorite-color);\n }\n\n li.text a {\n color: #fff;\n text-decoration: none;\n\n font-size: 1.4em;\n line-height: 1.3;\n word-wrap: break-word;\n word-break: keep-all;\n\n margin: 0px;\n display: block;\n width: 100%;\n height: 100%;\n }\n\n li.text:nth-child(7n + 1) {\n background-color: #4397de;\n }\n\n li.text:nth-child(7n + 2) {\n background-color: #33b8d0;\n }\n\n li.text:nth-child(7n + 3) {\n background-color: #4ab75f;\n }\n\n li.text:nth-child(7n + 4) {\n background-color: #93796f;\n }\n\n li.text:nth-child(7n + 5) {\n background-color: #f1ac42;\n }\n\n li.text:nth-child(7n + 6) {\n background-color: #ea6361;\n }\n\n li.text:nth-child(7n + 7) {\n background-color: #7386c3;\n }\n\n ox-oops-note {\n display: block;\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n }\n\n ox-oops-spinner {\n display: none;\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n }\n\n ox-oops-spinner[show] {\n display: block;\n }\n\n @media (min-width: 600px) {\n ul {\n grid-template-columns: 1fr 1fr 1fr;\n grid-auto-rows: 120px;\n }\n }\n @media (min-width: 1200px) {\n ul {\n grid-template-columns: 1fr 1fr 1fr 1fr;\n grid-auto-rows: 130px;\n }\n }\n @media (min-width: 1800px) {\n ul {\n grid-template-columns: 1fr 1fr 1fr 1fr 1fr;\n grid-auto-rows: 140px;\n }\n }\n @media (min-width: 2400px) {\n ul {\n grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr;\n grid-auto-rows: 150px;\n }\n }\n `\n ]\n\n @property({ type: String }) menuId?: string\n @property({ type: Array }) menus: any[] = []\n @property({ type: Object }) routingTypes: any\n @property({ type: Array }) favorites: any[] = []\n @property({ type: Boolean }) showSpinner: boolean = false\n\n render() {\n var topmenus = this.menus || []\n var menuId = this.menuId\n\n if (!menuId) {\n /* favorite menus */\n var submenus = topmenus.reduce((allmenu, topmenu) => {\n let menus = (topmenu && topmenu.children) || []\n menus.forEach(menu => {\n if (this.favorites.includes(this._getFullRouting(menu))) {\n allmenu.push(menu)\n }\n })\n return allmenu\n }, [])\n } else {\n var menu = topmenus[menuId]\n var submenus = (menu && menu.children) || []\n }\n\n return html`\n <ul>\n ${submenus.map(subMenu => {\n const routing = this._getFullRouting(subMenu)\n\n return html`\n <li\n class=\"${subMenu.class} text\"\n style=\"grid-row: span ${subMenu.routingType.toUpperCase() === 'STATIC' ? 1 : 2}\"\n >\n <a href=${routing}>${subMenu.name}</a>\n\n <md-icon ?selected=${(this.favorites || []).includes(routing)}\n >${(this.favorites || ([] as any[])).includes(routing) ? 'star' : 'star_border'}</md-icon\n >\n </li>\n `\n })}\n </ul>\n\n ${submenus.length == 0 && !this.showSpinner\n ? typeof menuId == 'number'\n ? html`\n <ox-oops-note\n icon=\"apps\"\n title=\"No Menu Found\"\n description=\"Seems like you are not authorised to view this menu\"\n ></ox-oops-note>\n `\n : html`\n <ox-oops-note\n icon=\"star_border\"\n title=\"No Favourite Found\"\n description=\"Click ☆ icon to add new favourite menu\"\n ></ox-oops-note>\n `\n : html``}\n\n <ox-oops-spinner ?show=${this.showSpinner}></ox-oops-spinner>\n `\n }\n\n _getFullRouting(menu): string {\n var { routingType, titleField, name, resourceUrl } = menu\n if (routingType.toUpperCase() === 'STATIC') {\n return resourceUrl\n }\n\n var { page } = this.routingTypes[routingType]\n return titleField ? `${page}/${menu[titleField]}` : `${page}/${name}`\n }\n}\n"]}
@@ -1,28 +0,0 @@
1
- import '@material/web/icon/icon.js';
2
- import { LitElement } from 'lit';
3
- declare const MenuTreeBar_base: (new (...args: any[]) => {
4
- _storeUnsubscribe: import("redux").Unsubscribe;
5
- connectedCallback(): void;
6
- disconnectedCallback(): void;
7
- stateChanged(_state: unknown): void;
8
- readonly isConnected: boolean;
9
- }) & typeof LitElement;
10
- export default class MenuTreeBar extends MenuTreeBar_base {
11
- static styles: import("lit").CSSResult[];
12
- menuId?: string;
13
- menus: any[];
14
- favorites: string[];
15
- routingTypes: string[];
16
- page?: string;
17
- user?: any;
18
- contextPath?: string;
19
- domains: any[];
20
- domain?: any;
21
- render(): import("lit-html").TemplateResult<1>;
22
- updated(changes: any): Promise<void>;
23
- stateChanged(state: any): void;
24
- _getFullRouting(menu: any): any;
25
- _onClickRefresh(e: any): void;
26
- getMenus(): Promise<any>;
27
- }
28
- export {};
@@ -1,307 +0,0 @@
1
- import { __decorate, __metadata } from "tslib";
2
- import '@material/web/icon/icon.js';
3
- import gql from 'graphql-tag';
4
- import { css, html, LitElement } from 'lit';
5
- import { customElement, property } from 'lit/decorators.js';
6
- import { connect } from 'pwa-helpers/connect-mixin.js';
7
- import { client, store } from '@things-factory/shell/client';
8
- import { ScrollbarStyles } from '@operato/styles';
9
- let MenuTreeBar = class MenuTreeBar extends connect(store)(LitElement) {
10
- constructor() {
11
- super(...arguments);
12
- this.menus = [];
13
- this.favorites = [];
14
- this.routingTypes = [];
15
- this.domains = [];
16
- }
17
- render() {
18
- var domains = this.domains || [];
19
- var domain = this.domain || {};
20
- const currentRouting = decodeURIComponent(location.pathname.substr(this.contextPath ? this.contextPath.length + 1 : 1));
21
- return html `
22
- <div domain>
23
- <md-icon>beenhere</md-icon>
24
- ${domains.length <= 1
25
- ? html ` <span>${domain.name}</span> `
26
- : html `
27
- <select
28
- .value=${domain.subdomain}
29
- @change=${e => (window.location.pathname = `/auth/checkin/${e.target.value}`)}
30
- >
31
- ${domains.map(d => html `
32
- <option .value=${d.subdomain} ?selected=${d.subdomain == domain.subdomain}>${d.name}</option>
33
- `)}
34
- </select>
35
- `}
36
- </div>
37
-
38
- <ul toplevel>
39
- ${(this.menus || []).map(menu => html `
40
- <li groupmenu>
41
- <span
42
- @click=${e => {
43
- e.target.parentElement.toggleAttribute('expanded');
44
- this.renderRoot
45
- .querySelectorAll('[expanded]')
46
- .forEach(element => element !== e.target.parentElement && element.removeAttribute('expanded'));
47
- }}
48
- >${menu.name}</span
49
- >
50
-
51
- <ul grouplevel>
52
- ${menu.children.map(subMenu => {
53
- const routing = this._getFullRouting(subMenu);
54
- const favorite = this.favorites.includes(routing);
55
- const { icon } = this.routingTypes[subMenu.routingType] || {};
56
- const typeIcon = icon ? icon : favorite ? 'star' : null;
57
- return html `
58
- <li ?active=${routing === currentRouting}>
59
- <a href=${routing}>
60
- <span>${subMenu.name}</span>
61
- ${typeIcon ? html ` <md-icon menutype ?favorite=${favorite}>${typeIcon}</md-icon> ` : html ``}</a
62
- >
63
- </li>
64
- `;
65
- })}
66
- </ul>
67
- </li>
68
- `)}
69
- </ul>
70
- `;
71
- }
72
- async updated(changes) {
73
- var _a, _b;
74
- if (changes.has('user')) {
75
- this.menus = await this.getMenus();
76
- }
77
- await this.updateComplete;
78
- var active = this.renderRoot.querySelector('[active]');
79
- if (active) {
80
- (_b = (_a = active.parentElement) === null || _a === void 0 ? void 0 : _a.parentElement) === null || _b === void 0 ? void 0 : _b.setAttribute('expanded', '');
81
- }
82
- }
83
- stateChanged(state) {
84
- this.contextPath = state.app.contextPath;
85
- this.routingTypes = state.menu.routingTypes;
86
- this.menuId = state.route.resourceId;
87
- this.page = state.route.page;
88
- this.user = state.auth.user;
89
- this.domains = state.app.domains;
90
- this.domain = state.app.domain;
91
- this.getMenus =
92
- state.menu.provider && typeof state.menu.provider === 'function' ? state.menu.provider : this.getMenus;
93
- this.favorites = state.favorite.favorites;
94
- }
95
- _getFullRouting(menu) {
96
- var { routingType, resourceUrl, titleField, name, resourceType, resourceId } = menu;
97
- if (routingType.toUpperCase() === 'STATIC') {
98
- if ((resourceType === null || resourceType === void 0 ? void 0 : resourceType.toUpperCase()) === 'BOARD') {
99
- return `${resourceUrl || 'board-viewer'}/${resourceId}?title=${name}`;
100
- }
101
- return resourceUrl;
102
- }
103
- var { page } = this.routingTypes[routingType];
104
- return titleField ? `${page}/${menu[titleField]}` : `${page}/${name}`;
105
- }
106
- _onClickRefresh(e) {
107
- this.dispatchEvent(new CustomEvent('refresh'));
108
- }
109
- async getMenus() {
110
- const response = await client.query({
111
- query: gql `
112
- query {
113
- userMenus {
114
- id
115
- name
116
- children {
117
- id
118
- name
119
- routingType
120
- idField
121
- titleField
122
- resourceType
123
- resourceId
124
- resourceName
125
- resourceUrl
126
- template
127
- }
128
- }
129
- }
130
- `
131
- });
132
- return response.data.userMenus;
133
- }
134
- };
135
- MenuTreeBar.styles = [
136
- ScrollbarStyles,
137
- css `
138
- :host {
139
- display: flex;
140
- flex-direction: column;
141
- min-width: 200px;
142
- }
143
- [domain] {
144
- background: var(--menu-domain-background-color);
145
- background: linear-gradient(180deg, var(--md-sys-color-secondary) 0%, var(--md-sys-color-primary) 120%);
146
- padding: var(--menu-domain-padding);
147
- border-bottom: 1px solid var(--md-sys-color-primary);
148
- }
149
- [domain] md-icon {
150
- margin-right: -8px;
151
- font-size: 12px;
152
- color: var(--menu-domain-icon-color);
153
- }
154
- [domain] * {
155
- vertical-align: middle;
156
- }
157
- [domain] span {
158
- padding-left: 7px;
159
- font: var(--menu-domain-font);
160
- color: var(--menu-domain-color);
161
- }
162
- [domain] select {
163
- background-color: transparent;
164
- width: -webkit-fill-available;
165
- max-width: 175px;
166
- border: none;
167
-
168
- font: var(--menu-domain-font);
169
- color: var(--menu-domain-color);
170
- }
171
- select:focus {
172
- outline: 0;
173
- }
174
-
175
- ul {
176
- list-style: none;
177
- margin: 0;
178
- padding: 0;
179
- }
180
-
181
- ul[toplevel] {
182
- overflow: auto;
183
- }
184
-
185
- li {
186
- border-bottom: var(--menu-tree-toplevel-border-bottom);
187
- }
188
-
189
- [grouplevel] li {
190
- border-bottom: var(--menu-tree-grouplevel-border-bottom);
191
- }
192
-
193
- li span,
194
- li a {
195
- display: block;
196
- text-decoration: none;
197
- position: relative;
198
- }
199
-
200
- [menutype] {
201
- position: absolute;
202
- font-size: 1.2em;
203
- right: 0;
204
- bottom: 50%;
205
- transform: translate(-5px, 50%);
206
- }
207
-
208
- [favorite] {
209
- color: var(--menu-tree-favorite-color, tomato);
210
- }
211
-
212
- [groupmenu] > span {
213
- padding: 9px 9px 7px 10px;
214
- font: var(--menu-tree-toplevel-font);
215
- color: var(--menu-tree-toplevel-color);
216
- }
217
-
218
- a {
219
- background-color: rgba(0, 0, 0, 0.4);
220
- padding: 7px 7px 6px 15px;
221
- font: var(--menu-tree-grouplevel-font);
222
- color: var(--menu-tree-grouplevel-color);
223
- }
224
-
225
- [groupmenu] > span::before {
226
- content: '';
227
- display: inline-block;
228
- width: var(--menu-tree-toplevel-icon-size);
229
- height: var(--menu-tree-toplevel-icon-size);
230
- border: var(--menu-tree-toplevel-icon-border);
231
- border-radius: 50%;
232
- margin-right: 5px;
233
- }
234
-
235
- a span::before {
236
- content: '-';
237
- margin-right: 4px;
238
- }
239
-
240
- [expanded] > span {
241
- font-weight: bold;
242
- color: var(--menu-tree-focus-color);
243
- }
244
-
245
- [grouplevel] {
246
- overflow-y: hidden;
247
- max-height: 0;
248
-
249
- transition-property: all;
250
- transition-duration: 0.7s;
251
- }
252
-
253
- [expanded] > [grouplevel] {
254
- overflow-y: auto;
255
- max-height: 500px;
256
- }
257
-
258
- li[active] a {
259
- color: var(--menu-tree-focus-color);
260
- font-weight: bold;
261
- border-left: var(--menu-tree-grouplevel-active-border-left);
262
- background-color: rgba(0, 0, 0, 0.6);
263
- padding-left: 12px;
264
- }
265
- `
266
- ];
267
- __decorate([
268
- property({ type: String }),
269
- __metadata("design:type", String)
270
- ], MenuTreeBar.prototype, "menuId", void 0);
271
- __decorate([
272
- property({ type: Array }),
273
- __metadata("design:type", Array)
274
- ], MenuTreeBar.prototype, "menus", void 0);
275
- __decorate([
276
- property({ type: Array }),
277
- __metadata("design:type", Array)
278
- ], MenuTreeBar.prototype, "favorites", void 0);
279
- __decorate([
280
- property({ type: Array }),
281
- __metadata("design:type", Array)
282
- ], MenuTreeBar.prototype, "routingTypes", void 0);
283
- __decorate([
284
- property({ type: String }),
285
- __metadata("design:type", String)
286
- ], MenuTreeBar.prototype, "page", void 0);
287
- __decorate([
288
- property({ type: Object }),
289
- __metadata("design:type", Object)
290
- ], MenuTreeBar.prototype, "user", void 0);
291
- __decorate([
292
- property({ type: String }),
293
- __metadata("design:type", String)
294
- ], MenuTreeBar.prototype, "contextPath", void 0);
295
- __decorate([
296
- property({ type: Array }),
297
- __metadata("design:type", Array)
298
- ], MenuTreeBar.prototype, "domains", void 0);
299
- __decorate([
300
- property({ type: Object }),
301
- __metadata("design:type", Object)
302
- ], MenuTreeBar.prototype, "domain", void 0);
303
- MenuTreeBar = __decorate([
304
- customElement('menu-tree-bar')
305
- ], MenuTreeBar);
306
- export default MenuTreeBar;
307
- //# sourceMappingURL=menu-tree-bar.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"menu-tree-bar.js","sourceRoot":"","sources":["../../client/viewparts/menu-tree-bar.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\n\nimport gql from 'graphql-tag'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { connect } from 'pwa-helpers/connect-mixin.js'\n\nimport { client, store } from '@things-factory/shell/client'\nimport { ScrollbarStyles } from '@operato/styles'\n\n@customElement('menu-tree-bar')\nexport default class MenuTreeBar extends connect(store)(LitElement) {\n static styles = [\n ScrollbarStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n min-width: 200px;\n }\n [domain] {\n background: var(--menu-domain-background-color);\n background: linear-gradient(180deg, var(--md-sys-color-secondary) 0%, var(--md-sys-color-primary) 120%);\n padding: var(--menu-domain-padding);\n border-bottom: 1px solid var(--md-sys-color-primary);\n }\n [domain] md-icon {\n margin-right: -8px;\n font-size: 12px;\n color: var(--menu-domain-icon-color);\n }\n [domain] * {\n vertical-align: middle;\n }\n [domain] span {\n padding-left: 7px;\n font: var(--menu-domain-font);\n color: var(--menu-domain-color);\n }\n [domain] select {\n background-color: transparent;\n width: -webkit-fill-available;\n max-width: 175px;\n border: none;\n\n font: var(--menu-domain-font);\n color: var(--menu-domain-color);\n }\n select:focus {\n outline: 0;\n }\n\n ul {\n list-style: none;\n margin: 0;\n padding: 0;\n }\n\n ul[toplevel] {\n overflow: auto;\n }\n\n li {\n border-bottom: var(--menu-tree-toplevel-border-bottom);\n }\n\n [grouplevel] li {\n border-bottom: var(--menu-tree-grouplevel-border-bottom);\n }\n\n li span,\n li a {\n display: block;\n text-decoration: none;\n position: relative;\n }\n\n [menutype] {\n position: absolute;\n font-size: 1.2em;\n right: 0;\n bottom: 50%;\n transform: translate(-5px, 50%);\n }\n\n [favorite] {\n color: var(--menu-tree-favorite-color, tomato);\n }\n\n [groupmenu] > span {\n padding: 9px 9px 7px 10px;\n font: var(--menu-tree-toplevel-font);\n color: var(--menu-tree-toplevel-color);\n }\n\n a {\n background-color: rgba(0, 0, 0, 0.4);\n padding: 7px 7px 6px 15px;\n font: var(--menu-tree-grouplevel-font);\n color: var(--menu-tree-grouplevel-color);\n }\n\n [groupmenu] > span::before {\n content: '';\n display: inline-block;\n width: var(--menu-tree-toplevel-icon-size);\n height: var(--menu-tree-toplevel-icon-size);\n border: var(--menu-tree-toplevel-icon-border);\n border-radius: 50%;\n margin-right: 5px;\n }\n\n a span::before {\n content: '-';\n margin-right: 4px;\n }\n\n [expanded] > span {\n font-weight: bold;\n color: var(--menu-tree-focus-color);\n }\n\n [grouplevel] {\n overflow-y: hidden;\n max-height: 0;\n\n transition-property: all;\n transition-duration: 0.7s;\n }\n\n [expanded] > [grouplevel] {\n overflow-y: auto;\n max-height: 500px;\n }\n\n li[active] a {\n color: var(--menu-tree-focus-color);\n font-weight: bold;\n border-left: var(--menu-tree-grouplevel-active-border-left);\n background-color: rgba(0, 0, 0, 0.6);\n padding-left: 12px;\n }\n `\n ]\n\n @property({ type: String }) menuId?: string\n @property({ type: Array }) menus: any[] = []\n @property({ type: Array }) favorites: string[] = []\n @property({ type: Array }) routingTypes: string[] = []\n @property({ type: String }) page?: string\n @property({ type: Object }) user?: any\n @property({ type: String }) contextPath?: string\n @property({ type: Array }) domains: any[] = []\n @property({ type: Object }) domain?: any\n\n render() {\n var domains = this.domains || []\n var domain = this.domain || {}\n const currentRouting = decodeURIComponent(\n location.pathname.substr(this.contextPath ? this.contextPath.length + 1 : 1)\n )\n\n return html`\n <div domain>\n <md-icon>beenhere</md-icon>\n ${domains.length <= 1\n ? html` <span>${domain.name}</span> `\n : html`\n <select\n .value=${domain.subdomain}\n @change=${e => (window.location.pathname = `/auth/checkin/${e.target.value}`)}\n >\n ${domains.map(\n d => html`\n <option .value=${d.subdomain} ?selected=${d.subdomain == domain.subdomain}>${d.name}</option>\n `\n )}\n </select>\n `}\n </div>\n\n <ul toplevel>\n ${(this.menus || []).map(\n menu => html`\n <li groupmenu>\n <span\n @click=${e => {\n e.target.parentElement.toggleAttribute('expanded')\n this.renderRoot\n .querySelectorAll('[expanded]')\n .forEach(element => element !== e.target.parentElement && element.removeAttribute('expanded'))\n }}\n >${menu.name}</span\n >\n\n <ul grouplevel>\n ${menu.children.map(subMenu => {\n const routing = this._getFullRouting(subMenu)\n const favorite = this.favorites.includes(routing)\n const { icon } = this.routingTypes[subMenu.routingType] || ({} as any)\n const typeIcon = icon ? icon : favorite ? 'star' : null\n\n return html`\n <li ?active=${routing === currentRouting}>\n <a href=${routing}>\n <span>${subMenu.name}</span>\n ${typeIcon ? html` <md-icon menutype ?favorite=${favorite}>${typeIcon}</md-icon> ` : html``}</a\n >\n </li>\n `\n })}\n </ul>\n </li>\n `\n )}\n </ul>\n `\n }\n\n async updated(changes) {\n if (changes.has('user')) {\n this.menus = await this.getMenus()\n }\n\n await this.updateComplete\n\n var active = this.renderRoot.querySelector('[active]')\n if (active) {\n active.parentElement?.parentElement?.setAttribute('expanded', '')\n }\n }\n\n stateChanged(state) {\n this.contextPath = state.app.contextPath\n this.routingTypes = state.menu.routingTypes\n this.menuId = state.route.resourceId\n this.page = state.route.page\n this.user = state.auth.user\n this.domains = state.app.domains\n this.domain = state.app.domain\n this.getMenus =\n state.menu.provider && typeof state.menu.provider === 'function' ? state.menu.provider : this.getMenus\n this.favorites = state.favorite.favorites\n }\n\n _getFullRouting(menu) {\n var { routingType, resourceUrl, titleField, name, resourceType, resourceId } = menu\n if (routingType.toUpperCase() === 'STATIC') {\n if (resourceType?.toUpperCase() === 'BOARD') {\n return `${resourceUrl || 'board-viewer'}/${resourceId}?title=${name}`\n }\n return resourceUrl\n }\n\n var { page } = this.routingTypes[routingType] as any\n return titleField ? `${page}/${menu[titleField]}` : `${page}/${name}`\n }\n\n _onClickRefresh(e) {\n this.dispatchEvent(new CustomEvent('refresh'))\n }\n\n async getMenus() {\n const response = await client.query({\n query: gql`\n query {\n userMenus {\n id\n name\n children {\n id\n name\n routingType\n idField\n titleField\n resourceType\n resourceId\n resourceName\n resourceUrl\n template\n }\n }\n }\n `\n })\n\n return response.data.userMenus\n }\n}\n"]}
File without changes
File without changes