@things-factory/menu-ui 8.0.0 → 9.0.0-beta.3

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 (56) hide show
  1. package/dist-client/apptools/favorite-tool.d.ts +28 -0
  2. package/dist-client/apptools/favorite-tool.js +139 -0
  3. package/dist-client/apptools/favorite-tool.js.map +1 -0
  4. package/dist-client/bootstrap.d.ts +4 -0
  5. package/dist-client/bootstrap.js +52 -0
  6. package/dist-client/bootstrap.js.map +1 -0
  7. package/dist-client/components/child-menus-selector.d.ts +1 -0
  8. package/dist-client/components/child-menus-selector.js +146 -0
  9. package/dist-client/components/child-menus-selector.js.map +1 -0
  10. package/dist-client/components/role-select-popup.d.ts +1 -0
  11. package/dist-client/components/role-select-popup.js +180 -0
  12. package/dist-client/components/role-select-popup.js.map +1 -0
  13. package/dist-client/index.js +2 -0
  14. package/dist-client/index.js.map +1 -0
  15. package/dist-client/pages/menu-list-page.d.ts +2 -0
  16. package/dist-client/pages/menu-list-page.js +204 -0
  17. package/dist-client/pages/menu-list-page.js.map +1 -0
  18. package/dist-client/pages/menu-management-detail.d.ts +2 -0
  19. package/dist-client/pages/menu-management-detail.js +376 -0
  20. package/dist-client/pages/menu-management-detail.js.map +1 -0
  21. package/dist-client/pages/menu-management.d.ts +3 -0
  22. package/dist-client/pages/menu-management.js +280 -0
  23. package/dist-client/pages/menu-management.js.map +1 -0
  24. package/dist-client/pages/role-menus-management.d.ts +4 -0
  25. package/dist-client/pages/role-menus-management.js +215 -0
  26. package/dist-client/pages/role-menus-management.js.map +1 -0
  27. package/dist-client/route.d.ts +1 -0
  28. package/dist-client/route.js +14 -0
  29. package/dist-client/route.js.map +1 -0
  30. package/dist-client/tsconfig.tsbuildinfo +1 -0
  31. package/dist-client/viewparts/menu-bar.d.ts +12 -0
  32. package/dist-client/viewparts/menu-bar.js +108 -0
  33. package/dist-client/viewparts/menu-bar.js.map +1 -0
  34. package/dist-client/viewparts/menu-tile-list.d.ts +13 -0
  35. package/dist-client/viewparts/menu-tile-list.js +234 -0
  36. package/dist-client/viewparts/menu-tile-list.js.map +1 -0
  37. package/dist-client/viewparts/menu-tree-bar.d.ts +28 -0
  38. package/dist-client/viewparts/menu-tree-bar.js +307 -0
  39. package/dist-client/viewparts/menu-tree-bar.js.map +1 -0
  40. package/package.json +21 -18
  41. package/things-factory.config.js +5 -14
  42. package/client/apptools/favorite-tool.js +0 -130
  43. package/client/bootstrap.js +0 -57
  44. package/client/components/child-menus-selector.js +0 -150
  45. package/client/components/role-select-popup.js +0 -179
  46. package/client/pages/menu-list-page.js +0 -200
  47. package/client/pages/menu-management-detail.js +0 -384
  48. package/client/pages/menu-management.js +0 -294
  49. package/client/pages/role-menus-management.js +0 -215
  50. package/client/route.js +0 -15
  51. package/client/viewparts/menu-bar.js +0 -114
  52. package/client/viewparts/menu-tile-list.js +0 -222
  53. package/client/viewparts/menu-tree-bar.js +0 -295
  54. package/server/index.ts +0 -0
  55. /package/{client/index.js → dist-client/index.d.ts} +0 -0
  56. /package/{client → dist-client}/themes/menu-theme.css +0 -0
@@ -0,0 +1,234 @@
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
@@ -0,0 +1 @@
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"]}
@@ -0,0 +1,28 @@
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 {};
@@ -0,0 +1,307 @@
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
@@ -0,0 +1 @@
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"]}
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@things-factory/menu-ui",
3
- "version": "8.0.0",
3
+ "version": "9.0.0-beta.3",
4
4
  "main": "dist-server/index.js",
5
- "browser": "client/index.js",
5
+ "browser": "dist-client/index.js",
6
6
  "things-factory": true,
7
- "author": "",
7
+ "author": "heartyoh <heartyoh@hatiolab.com>",
8
8
  "description": "User interface for menu.",
9
9
  "license": "MIT",
10
10
  "publishConfig": {
@@ -17,23 +17,26 @@
17
17
  "directory": "packages/menu-ui"
18
18
  },
19
19
  "scripts": {
20
- "build": "tsc --p tsconfig.json",
21
- "build:server": "npm run clean:server && tsc",
22
- "clean:server": "rm -rf dist-server",
23
- "clean": "npm run clean:server",
20
+ "build": "npm run build:server && npm run build:client",
21
+ "copy:files": "copyfiles -e \"./client/**/*.{ts,js,json}\" -u 1 \"./client/**/*\" dist-client",
22
+ "build:client": "npm run copy:files && npx tsc --p ./client/tsconfig.json",
23
+ "build:server": "npx tsc --p ./server/tsconfig.json",
24
+ "clean:client": "npx rimraf dist-client",
25
+ "clean:server": "npx rimraf dist-server",
26
+ "clean": "npm run clean:server && npm run clean:client",
24
27
  "migration:create": "node ../../node_modules/typeorm/cli.js migration:create ./server/migrations/migration"
25
28
  },
26
29
  "dependencies": {
27
- "@operato/data-grist": "^8.0.0",
28
- "@operato/i18n": "^8.0.0",
29
- "@operato/layout": "^8.0.0",
30
- "@operato/oops": "^8.0.0",
31
- "@things-factory/apptool-base": "^8.0.0",
32
- "@things-factory/component-ui": "^8.0.0",
33
- "@things-factory/fav-base": "^8.0.0",
34
- "@things-factory/form-ui": "^8.0.0",
35
- "@things-factory/i18n-base": "^8.0.0",
36
- "@things-factory/menu-base": "^8.0.0"
30
+ "@operato/data-grist": "^9.0.0-beta",
31
+ "@operato/i18n": "^9.0.0-beta",
32
+ "@operato/layout": "^9.0.0-beta",
33
+ "@operato/oops": "^9.0.0-beta",
34
+ "@things-factory/apptool-base": "^9.0.0-beta.0",
35
+ "@things-factory/component-ui": "^8.0.0-beta.4",
36
+ "@things-factory/fav-base": "^9.0.0-beta.3",
37
+ "@things-factory/form-ui": "^9.0.0-beta.0",
38
+ "@things-factory/i18n-base": "^9.0.0-beta.3",
39
+ "@things-factory/menu-base": "^9.0.0-beta.3"
37
40
  },
38
- "gitHead": "07ef27d272dd9a067a9648ac7013748510556a18"
41
+ "gitHead": "1d7e0dd4c88f3c3f3bd311c00e4b1d1542d53634"
39
42
  }