@things-factory/menu-ui 8.0.0-alpha.27 → 8.0.0-alpha.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.
- package/client/apptools/{favorite-tool.js → favorite-tool.ts} +24 -30
- package/client/{bootstrap.js → bootstrap.ts} +1 -1
- package/client/components/{child-menus-selector.js → child-menus-selector.ts} +51 -57
- package/client/components/{role-select-popup.js → role-select-popup.ts} +38 -48
- package/client/pages/{menu-list-page.js → menu-list-page.ts} +37 -37
- package/client/pages/{menu-management-detail.js → menu-management-detail.ts} +55 -65
- package/client/pages/{menu-management.js → menu-management.ts} +33 -41
- package/client/pages/{role-menus-management.js → role-menus-management.ts} +56 -62
- package/client/viewparts/menu-bar.ts +110 -0
- package/client/viewparts/menu-tile-list.ts +216 -0
- package/client/viewparts/{menu-tree-bar.js → menu-tree-bar.ts} +133 -139
- package/dist-client/apptools/favorite-tool.d.ts +28 -0
- package/dist-client/apptools/favorite-tool.js +139 -0
- package/dist-client/apptools/favorite-tool.js.map +1 -0
- package/dist-client/bootstrap.d.ts +4 -0
- package/dist-client/bootstrap.js +52 -0
- package/dist-client/bootstrap.js.map +1 -0
- package/dist-client/components/child-menus-selector.d.ts +1 -0
- package/dist-client/components/child-menus-selector.js +146 -0
- package/dist-client/components/child-menus-selector.js.map +1 -0
- package/dist-client/components/role-select-popup.d.ts +1 -0
- package/dist-client/components/role-select-popup.js +180 -0
- package/dist-client/components/role-select-popup.js.map +1 -0
- package/dist-client/index.d.ts +0 -0
- package/dist-client/index.js +2 -0
- package/dist-client/index.js.map +1 -0
- package/dist-client/pages/menu-list-page.d.ts +2 -0
- package/dist-client/pages/menu-list-page.js +204 -0
- package/dist-client/pages/menu-list-page.js.map +1 -0
- package/dist-client/pages/menu-management-detail.d.ts +2 -0
- package/dist-client/pages/menu-management-detail.js +376 -0
- package/dist-client/pages/menu-management-detail.js.map +1 -0
- package/dist-client/pages/menu-management.d.ts +3 -0
- package/dist-client/pages/menu-management.js +280 -0
- package/dist-client/pages/menu-management.js.map +1 -0
- package/dist-client/pages/role-menus-management.d.ts +4 -0
- package/dist-client/pages/role-menus-management.js +215 -0
- package/dist-client/pages/role-menus-management.js.map +1 -0
- package/dist-client/route.d.ts +1 -0
- package/dist-client/route.js +14 -0
- package/dist-client/route.js.map +1 -0
- package/dist-client/themes/menu-theme.css +31 -0
- package/dist-client/tsconfig.tsbuildinfo +1 -0
- package/dist-client/viewparts/menu-bar.d.ts +12 -0
- package/dist-client/viewparts/menu-bar.js +108 -0
- package/dist-client/viewparts/menu-bar.js.map +1 -0
- package/dist-client/viewparts/menu-tile-list.d.ts +13 -0
- package/dist-client/viewparts/menu-tile-list.js +234 -0
- package/dist-client/viewparts/menu-tile-list.js.map +1 -0
- package/dist-client/viewparts/menu-tree-bar.d.ts +28 -0
- package/dist-client/viewparts/menu-tree-bar.js +307 -0
- package/dist-client/viewparts/menu-tree-bar.js.map +1 -0
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +15 -12
- package/things-factory.config.js +5 -14
- package/client/viewparts/menu-bar.js +0 -114
- package/client/viewparts/menu-tile-list.js +0 -222
- /package/client/{index.js → index.ts} +0 -0
- /package/client/{route.js → route.ts} +0 -0
|
@@ -1,45 +1,41 @@
|
|
|
1
1
|
import '@material/web/icon/icon.js'
|
|
2
2
|
|
|
3
3
|
import { LitElement, html, css } from 'lit'
|
|
4
|
+
import { customElement, property } from 'lit/decorators.js'
|
|
4
5
|
import { connect } from 'pwa-helpers/connect-mixin.js'
|
|
5
6
|
import gql from 'graphql-tag'
|
|
6
7
|
|
|
7
|
-
import { store, client } from '@things-factory/shell'
|
|
8
|
-
import { UPDATE_FAVORITES } from '@things-factory/fav-base'
|
|
8
|
+
import { store, client } from '@things-factory/shell/client'
|
|
9
|
+
import { UPDATE_FAVORITES } from '@things-factory/fav-base/client'
|
|
9
10
|
|
|
11
|
+
@customElement('favorite-tool')
|
|
10
12
|
export class FavoriteTool extends connect(store)(LitElement) {
|
|
11
|
-
static
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
resourceId: String,
|
|
17
|
-
favored: Boolean,
|
|
18
|
-
routingTypes: Object,
|
|
19
|
-
blackList: Array
|
|
13
|
+
static styles = css`
|
|
14
|
+
:host {
|
|
15
|
+
display: inline-block;
|
|
16
|
+
vertical-align: middle;
|
|
17
|
+
line-height: 0;
|
|
20
18
|
}
|
|
21
|
-
}
|
|
22
19
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
}
|
|
20
|
+
[favorable] {
|
|
21
|
+
opacity: 0.5;
|
|
22
|
+
}
|
|
23
|
+
`
|
|
24
|
+
|
|
25
|
+
@property({ type: Array }) favorites: any
|
|
26
|
+
@property({ type: Object }) user: any
|
|
27
|
+
@property({ type: String }) page?: string
|
|
28
|
+
@property({ type: String }) resourceId?: string
|
|
29
|
+
@property({ type: Boolean }) favored: boolean = false
|
|
30
|
+
@property({ type: Array }) routingTypes: any[] = []
|
|
31
|
+
@property({ type: Array }) blackList: string[] = []
|
|
36
32
|
|
|
37
33
|
render() {
|
|
38
|
-
var renderable = (this.blackList || []).indexOf(this.page) == -1
|
|
34
|
+
var renderable = (this.blackList || []).indexOf(this.page!) == -1
|
|
39
35
|
|
|
40
36
|
return renderable
|
|
41
37
|
? html`
|
|
42
|
-
<md-icon @click=${this.
|
|
38
|
+
<md-icon @click=${this.onClick.bind(this)} ?favorable=${!this.favored}
|
|
43
39
|
>${this.favored ? 'star' : 'star_border'}</md-icon
|
|
44
40
|
>
|
|
45
41
|
`
|
|
@@ -62,7 +58,7 @@ export class FavoriteTool extends connect(store)(LitElement) {
|
|
|
62
58
|
this.routingTypes = state.menu.routingTypes
|
|
63
59
|
}
|
|
64
60
|
|
|
65
|
-
|
|
61
|
+
onClick(event) {
|
|
66
62
|
if (this.favored) {
|
|
67
63
|
this.removeFavorite(this.getFullRouting())
|
|
68
64
|
} else {
|
|
@@ -126,5 +122,3 @@ export class FavoriteTool extends connect(store)(LitElement) {
|
|
|
126
122
|
return routingType ? `${this.page}/${this.resourceId}` : this.page
|
|
127
123
|
}
|
|
128
124
|
}
|
|
129
|
-
|
|
130
|
-
customElements.define('favorite-tool', FavoriteTool)
|
|
@@ -40,7 +40,7 @@ export default function bootstrap() {
|
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
function appendRoleMenusManagementMorenda() {
|
|
43
|
-
const useRoleByMenusManagementMenu = store.getState()?.menu?.useRoleByMenusManagementMenu || false
|
|
43
|
+
const useRoleByMenusManagementMenu = (store.getState() as any)?.menu?.useRoleByMenusManagementMenu || false
|
|
44
44
|
|
|
45
45
|
if (useRoleByMenusManagementMenu) {
|
|
46
46
|
store.dispatch({
|
|
@@ -2,65 +2,61 @@ import { i18next, localize } from '@operato/i18n'
|
|
|
2
2
|
import { client } from '@operato/graphql'
|
|
3
3
|
import gql from 'graphql-tag'
|
|
4
4
|
import { css, html, LitElement } from 'lit'
|
|
5
|
+
import { customElement, property } from 'lit/decorators.js'
|
|
5
6
|
|
|
7
|
+
@customElement('child-menus-selector')
|
|
6
8
|
class ChildMenusSelector extends localize(i18next)(LitElement) {
|
|
7
|
-
static
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
:
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
9
|
+
static styles = [
|
|
10
|
+
css`
|
|
11
|
+
:host {
|
|
12
|
+
display: flex;
|
|
13
|
+
flex-direction: column;
|
|
14
|
+
border: 1px solid var(--md-sys-color-primary);
|
|
15
|
+
font: normal 15px var(--theme-font);
|
|
16
|
+
color: var(--md-sys-color-secondary);
|
|
17
|
+
}
|
|
18
|
+
div {
|
|
19
|
+
margin: var(--spacing-medium);
|
|
20
|
+
}
|
|
21
|
+
ul {
|
|
22
|
+
flex: 1;
|
|
23
|
+
background-color: var(--md-sys-color-surface);
|
|
24
|
+
overflow: auto;
|
|
25
|
+
display: grid;
|
|
26
|
+
grid-template-columns: 1fr 1fr;
|
|
27
|
+
margin: 0;
|
|
28
|
+
padding: var(--spacing-medium);
|
|
29
|
+
list-style: none;
|
|
30
|
+
border: 1px dashed rgba(0, 0, 0, 0.1);
|
|
31
|
+
border-width: 1px 0;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
input[type='checkbox'] {
|
|
35
|
+
display: inline;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
li {
|
|
39
|
+
padding: var(--spacing-small);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
#checkAll,
|
|
43
|
+
[for='checkAll'] {
|
|
44
|
+
margin-bottom: var(--spacing-medium);
|
|
45
|
+
padding-bottom: var(--spacing-small);
|
|
46
|
+
font-weight: bold;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
@media screen and (max-width: 480px) {
|
|
20
50
|
ul {
|
|
21
|
-
|
|
22
|
-
background-color: var(--md-sys-color-surface);
|
|
23
|
-
overflow: auto;
|
|
24
|
-
display: grid;
|
|
25
|
-
grid-template-columns: 1fr 1fr;
|
|
26
|
-
margin: 0;
|
|
27
|
-
padding: var(--spacing-medium);
|
|
28
|
-
list-style: none;
|
|
29
|
-
border: 1px dashed rgba(0, 0, 0, 0.1);
|
|
30
|
-
border-width: 1px 0;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
input[type='checkbox'] {
|
|
34
|
-
display: inline;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
li {
|
|
38
|
-
padding: var(--spacing-small);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
#checkAll,
|
|
42
|
-
[for='checkAll'] {
|
|
43
|
-
margin-bottom: var(--spacing-medium);
|
|
44
|
-
padding-bottom: var(--spacing-small);
|
|
45
|
-
font-weight: bold;
|
|
51
|
+
grid-template-columns: 1fr;
|
|
46
52
|
}
|
|
53
|
+
}
|
|
54
|
+
`
|
|
55
|
+
]
|
|
47
56
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
`
|
|
54
|
-
]
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
static get properties() {
|
|
58
|
-
return {
|
|
59
|
-
parentMenu: Object,
|
|
60
|
-
roleMenus: Array,
|
|
61
|
-
targetRole: Object
|
|
62
|
-
}
|
|
63
|
-
}
|
|
57
|
+
@property({ type: Object }) parentMenu: any
|
|
58
|
+
@property({ type: Array }) roleMenus: any[] = []
|
|
59
|
+
@property({ type: Object }) targetRole: any
|
|
64
60
|
|
|
65
61
|
render() {
|
|
66
62
|
const parentMenu = this.parentMenu || {}
|
|
@@ -101,7 +97,7 @@ class ChildMenusSelector extends localize(i18next)(LitElement) {
|
|
|
101
97
|
async onCheckAll(e) {
|
|
102
98
|
const checked = e.currentTarget.checked
|
|
103
99
|
|
|
104
|
-
Array.from(this.menuList).forEach(checkbox => (checkbox.checked = checked))
|
|
100
|
+
Array.from(this.menuList).forEach(checkbox => ((checkbox as HTMLInputElement).checked = checked))
|
|
105
101
|
|
|
106
102
|
const response = await client.mutate({
|
|
107
103
|
mutation: gql`
|
|
@@ -146,5 +142,3 @@ class ChildMenusSelector extends localize(i18next)(LitElement) {
|
|
|
146
142
|
document.dispatchEvent(new CustomEvent('notify', { detail: { message, option: { timer: 1000 } } }))
|
|
147
143
|
}
|
|
148
144
|
}
|
|
149
|
-
|
|
150
|
-
customElements.define('child-menus-selector', ChildMenusSelector)
|
|
@@ -2,50 +2,50 @@ import { i18next, localize } from '@operato/i18n'
|
|
|
2
2
|
import { client } from '@operato/graphql'
|
|
3
3
|
import gql from 'graphql-tag'
|
|
4
4
|
import { css, html, LitElement } from 'lit'
|
|
5
|
+
import { customElement, property, state, query } from 'lit/decorators.js'
|
|
5
6
|
import { isMobileDevice } from '@operato/utils'
|
|
6
7
|
import '@operato/data-grist'
|
|
7
8
|
import { CommonHeaderStyles } from '@operato/styles'
|
|
9
|
+
import { DataGrist, FetchOption } from '@operato/data-grist'
|
|
8
10
|
|
|
11
|
+
@customElement('role-select-popup')
|
|
9
12
|
class RoleSelectPopup extends localize(i18next)(LitElement) {
|
|
10
|
-
static
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
:
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
13
|
+
static styles = [
|
|
14
|
+
CommonHeaderStyles,
|
|
15
|
+
css`
|
|
16
|
+
:host {
|
|
17
|
+
display: flex;
|
|
18
|
+
flex-direction: column;
|
|
19
|
+
overflow: hidden;
|
|
20
|
+
background-color: var(--md-sys-color-surface);
|
|
21
|
+
}
|
|
20
22
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
.container {
|
|
24
|
+
flex: 1;
|
|
25
|
+
display: flex;
|
|
26
|
+
overflow-y: auto;
|
|
27
|
+
min-height: 20vh;
|
|
28
|
+
}
|
|
27
29
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
30
|
+
.grist {
|
|
31
|
+
display: flex;
|
|
32
|
+
flex-direction: column;
|
|
33
|
+
flex: 1;
|
|
34
|
+
overflow-y: auto;
|
|
35
|
+
}
|
|
34
36
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
}
|
|
37
|
+
ox-grist {
|
|
38
|
+
overflow-y: hidden;
|
|
39
|
+
flex: 1;
|
|
40
|
+
}
|
|
41
|
+
`
|
|
42
|
+
]
|
|
42
43
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
}
|
|
44
|
+
@property({ type: Array }) _searchFields: any[] = []
|
|
45
|
+
@property({ type: Object }) config: any
|
|
46
|
+
|
|
47
|
+
@query('ox-grist') dataGrist!: DataGrist
|
|
48
|
+
@query('search-form') searchForm!: HTMLFormElement
|
|
49
49
|
|
|
50
50
|
render() {
|
|
51
51
|
return html`
|
|
@@ -56,7 +56,7 @@ class RoleSelectPopup extends localize(i18next)(LitElement) {
|
|
|
56
56
|
<ox-grist
|
|
57
57
|
.mode=${isMobileDevice() ? 'LIST' : 'GRID'}
|
|
58
58
|
.config=${this.config}
|
|
59
|
-
.fetchHandler
|
|
59
|
+
.fetchHandler=${this.fetchHandler.bind(this)}
|
|
60
60
|
></ox-grist>
|
|
61
61
|
</div>
|
|
62
62
|
</div>
|
|
@@ -68,14 +68,6 @@ class RoleSelectPopup extends localize(i18next)(LitElement) {
|
|
|
68
68
|
`
|
|
69
69
|
}
|
|
70
70
|
|
|
71
|
-
get searchForm() {
|
|
72
|
-
return this.shadowRoot.querySelector('search-form')
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
get dataGrist() {
|
|
76
|
-
return this.shadowRoot.querySelector('ox-grist')
|
|
77
|
-
}
|
|
78
|
-
|
|
79
71
|
firstUpdated() {
|
|
80
72
|
this._searchFields = [
|
|
81
73
|
{
|
|
@@ -131,8 +123,8 @@ class RoleSelectPopup extends localize(i18next)(LitElement) {
|
|
|
131
123
|
}
|
|
132
124
|
}
|
|
133
125
|
|
|
134
|
-
async fetchHandler({ page, limit, sorters = [] }) {
|
|
135
|
-
const filters = this.searchForm?.queryFilters || []
|
|
126
|
+
async fetchHandler({ page, limit, sorters = [] }: FetchOption) {
|
|
127
|
+
const filters = (this.searchForm as any)?.queryFilters || []
|
|
136
128
|
|
|
137
129
|
const response = await client.query({
|
|
138
130
|
query: gql`
|
|
@@ -175,5 +167,3 @@ class RoleSelectPopup extends localize(i18next)(LitElement) {
|
|
|
175
167
|
document.dispatchEvent(new CustomEvent('notify', { detail: { message, option: { timer: 1000 } } }))
|
|
176
168
|
}
|
|
177
169
|
}
|
|
178
|
-
|
|
179
|
-
window.customElements.define('role-select-popup', RoleSelectPopup)
|
|
@@ -3,46 +3,48 @@ import '../viewparts/menu-tile-list'
|
|
|
3
3
|
|
|
4
4
|
import gql from 'graphql-tag'
|
|
5
5
|
import { css, html } from 'lit'
|
|
6
|
+
import { customElement, property, state } from 'lit/decorators.js'
|
|
6
7
|
import { connect } from 'pwa-helpers/connect-mixin.js'
|
|
7
8
|
|
|
8
|
-
import {
|
|
9
|
+
import { navigate, PageView, store } from '@operato/shell'
|
|
10
|
+
import { client } from '@operato/graphql'
|
|
9
11
|
import { ScrollbarStyles } from '@operato/styles'
|
|
10
|
-
import { pulltorefresh
|
|
12
|
+
import { pulltorefresh } from '@operato/pull-to-refresh'
|
|
13
|
+
import { swipe } from '@things-factory/utils/src/index.js'
|
|
11
14
|
|
|
15
|
+
@customElement('menu-list-page')
|
|
12
16
|
class MenuListPage extends connect(store)(PageView) {
|
|
13
|
-
static
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
:
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}
|
|
17
|
+
static styles = [
|
|
18
|
+
ScrollbarStyles,
|
|
19
|
+
css`
|
|
20
|
+
:host {
|
|
21
|
+
display: flex;
|
|
22
|
+
flex-direction: column;
|
|
23
|
+
|
|
24
|
+
overflow: hidden;
|
|
25
|
+
}
|
|
23
26
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
+
menu-bar {
|
|
28
|
+
z-index: 1;
|
|
29
|
+
}
|
|
27
30
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
}
|
|
31
|
+
menu-tile-list {
|
|
32
|
+
flex: 1;
|
|
33
|
+
overflow-y: auto;
|
|
34
|
+
}
|
|
35
|
+
`
|
|
36
|
+
]
|
|
35
37
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
38
|
+
@property({ type: String }) menuId?: string
|
|
39
|
+
@property({ type: Array }) menus: any[] = []
|
|
40
|
+
@property({ type: Object }) routingTypes: any
|
|
41
|
+
@property({ type: Array }) favorites: any[] = []
|
|
42
|
+
@property({ type: Object }) user: any
|
|
43
|
+
@property({ type: Boolean }) showSpinner: boolean = false
|
|
44
|
+
|
|
45
|
+
@state() private page?: string
|
|
46
|
+
|
|
47
|
+
private getMenus: any
|
|
46
48
|
|
|
47
49
|
render() {
|
|
48
50
|
return html`
|
|
@@ -125,10 +127,10 @@ class MenuListPage extends connect(store)(PageView) {
|
|
|
125
127
|
}
|
|
126
128
|
|
|
127
129
|
async firstUpdated() {
|
|
128
|
-
var list = this.
|
|
130
|
+
var list = this.renderRoot.querySelector('menu-tile-list') as HTMLElement
|
|
129
131
|
|
|
130
132
|
pulltorefresh({
|
|
131
|
-
container: this.
|
|
133
|
+
container: this.renderRoot,
|
|
132
134
|
scrollable: list,
|
|
133
135
|
refresh: () => {
|
|
134
136
|
return this.refresh()
|
|
@@ -136,7 +138,7 @@ class MenuListPage extends connect(store)(PageView) {
|
|
|
136
138
|
})
|
|
137
139
|
|
|
138
140
|
swipe({
|
|
139
|
-
container: this.
|
|
141
|
+
container: this.renderRoot.querySelector('menu-tile-list'),
|
|
140
142
|
animates: {
|
|
141
143
|
dragging: async (d, opts) => {
|
|
142
144
|
var currentIndex = Number(this.menuId)
|
|
@@ -196,5 +198,3 @@ class MenuListPage extends connect(store)(PageView) {
|
|
|
196
198
|
this.refresh()
|
|
197
199
|
}
|
|
198
200
|
}
|
|
199
|
-
|
|
200
|
-
window.customElements.define('menu-list-page', MenuListPage)
|
|
@@ -3,68 +3,68 @@ import '@operato/data-grist'
|
|
|
3
3
|
|
|
4
4
|
import gql from 'graphql-tag'
|
|
5
5
|
import { css, html, LitElement } from 'lit'
|
|
6
|
+
import { customElement, property, query } from 'lit/decorators.js'
|
|
6
7
|
|
|
7
|
-
import { getEditor, getRenderer } from '@operato/data-grist'
|
|
8
|
+
import { DataGrist, FetchOption, getEditor, getRenderer } from '@operato/data-grist'
|
|
8
9
|
import { i18next, localize } from '@operato/i18n'
|
|
9
10
|
import { client } from '@operato/graphql'
|
|
10
11
|
import { ScrollbarStyles } from '@operato/styles'
|
|
11
|
-
import {
|
|
12
|
+
import { isMobileDevice } from '@operato/utils'
|
|
13
|
+
import { gqlBuilder } from '@things-factory/utils'
|
|
12
14
|
|
|
13
15
|
import { OxPrompt } from '@operato/popup/ox-prompt.js'
|
|
14
16
|
|
|
17
|
+
@customElement('menu-management-detail')
|
|
15
18
|
class MenuManagementDetail extends localize(i18next)(LitElement) {
|
|
16
|
-
static
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
:
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
]
|
|
59
|
-
}
|
|
19
|
+
static styles = [
|
|
20
|
+
ScrollbarStyles,
|
|
21
|
+
css`
|
|
22
|
+
:host {
|
|
23
|
+
display: flex;
|
|
24
|
+
flex-direction: column;
|
|
25
|
+
overflow: hidden;
|
|
26
|
+
background-color: var(--md-sys-color-surface);
|
|
27
|
+
}
|
|
28
|
+
search-form {
|
|
29
|
+
overflow: visible;
|
|
30
|
+
}
|
|
31
|
+
.grist {
|
|
32
|
+
display: flex;
|
|
33
|
+
flex-direction: column;
|
|
34
|
+
flex: 1;
|
|
35
|
+
overflow-y: auto;
|
|
36
|
+
}
|
|
37
|
+
ox-grist {
|
|
38
|
+
overflow-y: hidden;
|
|
39
|
+
flex: 1;
|
|
40
|
+
}
|
|
41
|
+
.button-container {
|
|
42
|
+
padding: 10px 0 12px 0;
|
|
43
|
+
text-align: center;
|
|
44
|
+
}
|
|
45
|
+
.button-container > button {
|
|
46
|
+
background-color: var(--button-background-color);
|
|
47
|
+
border: var(--button-border);
|
|
48
|
+
border-radius: var(--button-border-radius);
|
|
49
|
+
margin: var(--button-margin);
|
|
50
|
+
padding: var(--button-padding);
|
|
51
|
+
color: var(--button-color);
|
|
52
|
+
font: var(--button-font);
|
|
53
|
+
text-transform: var(--button-text-transform);
|
|
54
|
+
}
|
|
55
|
+
.button-container > button:hover,
|
|
56
|
+
.button-container > button:active {
|
|
57
|
+
background-color: var(--button-background-focus-color);
|
|
58
|
+
}
|
|
59
|
+
`
|
|
60
|
+
]
|
|
60
61
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
}
|
|
62
|
+
@property({ type: String }) menuId?: string
|
|
63
|
+
@property({ type: Object }) searchFields: any
|
|
64
|
+
@property({ type: Object }) config: any
|
|
65
|
+
|
|
66
|
+
@query('ox-grist') dataGrist!: DataGrist
|
|
67
|
+
@query('search-form') searchForm!: HTMLFormElement
|
|
68
68
|
|
|
69
69
|
render() {
|
|
70
70
|
return html`
|
|
@@ -85,14 +85,6 @@ class MenuManagementDetail extends localize(i18next)(LitElement) {
|
|
|
85
85
|
`
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
-
get searchForm() {
|
|
89
|
-
return this.shadowRoot.querySelector('search-form')
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
get dataGrist() {
|
|
93
|
-
return this.shadowRoot.querySelector('ox-grist')
|
|
94
|
-
}
|
|
95
|
-
|
|
96
88
|
firstUpdated() {
|
|
97
89
|
this.searchFields = [
|
|
98
90
|
{
|
|
@@ -258,7 +250,7 @@ class MenuManagementDetail extends localize(i18next)(LitElement) {
|
|
|
258
250
|
}
|
|
259
251
|
}
|
|
260
252
|
|
|
261
|
-
async fetchHandler({ page, limit, sorters = [{ name: 'rank' }, { name: 'name' }] }) {
|
|
253
|
+
async fetchHandler({ page, limit, sorters = [{ name: 'rank' }, { name: 'name' }] }: FetchOption) {
|
|
262
254
|
const response = await client.query({
|
|
263
255
|
query: gql`
|
|
264
256
|
query {
|
|
@@ -362,7 +354,7 @@ class MenuManagementDetail extends localize(i18next)(LitElement) {
|
|
|
362
354
|
let patches = this.dataGrist.dirtyRecords
|
|
363
355
|
if (patches && patches.length) {
|
|
364
356
|
patches = patches.map(menu => {
|
|
365
|
-
let patchField = menu.id ? { id: menu.id } : {}
|
|
357
|
+
let patchField: any = menu.id ? { id: menu.id } : {}
|
|
366
358
|
patchField = { ...patchField, routingType: menu.routingType, menuType: menu.menuType }
|
|
367
359
|
const dirtyFields = menu.__dirtyfields__
|
|
368
360
|
for (let key in dirtyFields) {
|
|
@@ -380,5 +372,3 @@ class MenuManagementDetail extends localize(i18next)(LitElement) {
|
|
|
380
372
|
return patches
|
|
381
373
|
}
|
|
382
374
|
}
|
|
383
|
-
|
|
384
|
-
customElements.define('menu-management-detail', MenuManagementDetail)
|