@things-factory/menu-base 8.0.0-alpha.2 → 8.0.0-alpha.22
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/dist-server/service/menu/menu-query.js +41 -26
- package/dist-server/service/menu/menu-query.js.map +1 -1
- package/dist-server/service/menu/menu-type.d.ts +0 -3
- package/dist-server/service/menu/menu-type.js +0 -9
- package/dist-server/service/menu/menu-type.js.map +1 -1
- package/dist-server/service/menu/menu.d.ts +1 -2
- package/dist-server/service/menu/menu.js +0 -5
- package/dist-server/service/menu/menu.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/server/service/menu/menu-query.ts +51 -32
- package/server/service/menu/menu-type.ts +0 -3
- package/server/service/menu/menu.ts +0 -4
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@things-factory/menu-base",
|
|
3
|
-
"version": "8.0.0-alpha.
|
|
3
|
+
"version": "8.0.0-alpha.22",
|
|
4
4
|
"main": "dist-server/index.js",
|
|
5
5
|
"browser": "client/index.js",
|
|
6
6
|
"things-factory": true,
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"migration:create": "node ../../node_modules/typeorm/cli.js migration:create ./server/migrations/migration"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@things-factory/auth-base": "^8.0.0-alpha.
|
|
27
|
+
"@things-factory/auth-base": "^8.0.0-alpha.22"
|
|
28
28
|
},
|
|
29
|
-
"gitHead": "
|
|
29
|
+
"gitHead": "27cd29ef5f60c8fc8a177dd52eb0f4979b463991"
|
|
30
30
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Arg, Args, Ctx, FieldResolver, Query, Resolver, Root } from 'type-graphql'
|
|
2
|
-
import { In, Repository, SelectQueryBuilder } from 'typeorm'
|
|
2
|
+
import { In, Repository, Brackets, SelectQueryBuilder } from 'typeorm'
|
|
3
3
|
|
|
4
4
|
import { Domain, getQueryBuilderFromListParams, getRepository, ListParam } from '@things-factory/shell'
|
|
5
|
-
import {
|
|
5
|
+
import { Role, User } from '@things-factory/auth-base'
|
|
6
6
|
|
|
7
7
|
import { MenuButton } from '../menu-button/menu-button'
|
|
8
8
|
import { MenuColumn } from '../menu-column/menu-column'
|
|
@@ -81,26 +81,34 @@ export class MenuQuery {
|
|
|
81
81
|
|
|
82
82
|
@Query(returns => MenuList, { description: 'To fetch my own Menus' })
|
|
83
83
|
async myMenus(@Args(type => ListParam) params: ListParam, @Ctx() context: ResolverContext): Promise<MenuList> {
|
|
84
|
-
const { domain, user
|
|
84
|
+
const { domain, user } = context.state
|
|
85
85
|
|
|
86
|
-
const
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
repository: await getRepository(Menu),
|
|
90
|
-
searchables: ['name', 'description']
|
|
86
|
+
const me = await getRepository(User).findOne({
|
|
87
|
+
where: { id: user.id },
|
|
88
|
+
relations: ['roles']
|
|
91
89
|
})
|
|
92
90
|
|
|
93
|
-
const
|
|
94
|
-
|
|
95
|
-
|
|
91
|
+
const roles = me.roles
|
|
92
|
+
.filter(role => role.domainId === domain.id || (domain.parentId && role.domainId === domain.parentId))
|
|
93
|
+
.map(role => role.id)
|
|
96
94
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
95
|
+
const [items, total] = await getQueryBuilderFromListParams({
|
|
96
|
+
repository: getRepository(Menu),
|
|
97
|
+
params,
|
|
98
|
+
domain,
|
|
99
|
+
alias: 'menu',
|
|
100
|
+
searchables: ['name', 'description']
|
|
101
|
+
})
|
|
102
|
+
.andWhere('menu.active = :active', { active: true })
|
|
103
|
+
.andWhere(
|
|
104
|
+
new Brackets(qb => {
|
|
105
|
+
qb.where('menu.role IN (:...roles)').orWhere('menu.role is null')
|
|
106
|
+
})
|
|
107
|
+
)
|
|
108
|
+
.setParameter('roles', roles)
|
|
109
|
+
.getManyAndCount()
|
|
102
110
|
|
|
103
|
-
return { items
|
|
111
|
+
return { items, total }
|
|
104
112
|
}
|
|
105
113
|
|
|
106
114
|
@Query(returns => MenuList, { description: 'To fetch Menus by role' })
|
|
@@ -174,26 +182,37 @@ export class MenuQuery {
|
|
|
174
182
|
@Arg('permittedOnly', { defaultValue: false }) permittedOnly: boolean,
|
|
175
183
|
@Ctx() context: ResolverContext
|
|
176
184
|
): Promise<Menu[]> {
|
|
177
|
-
var menus =
|
|
178
|
-
menu.children ||
|
|
179
|
-
(await getRepository(Menu).findBy({
|
|
180
|
-
parent: { id: menu.id }
|
|
181
|
-
}))
|
|
182
|
-
|
|
183
185
|
if (!permittedOnly) {
|
|
184
|
-
return
|
|
186
|
+
return (
|
|
187
|
+
menu.children ||
|
|
188
|
+
(await getRepository(Menu).findBy({
|
|
189
|
+
parent: { id: menu.id }
|
|
190
|
+
}))
|
|
191
|
+
)
|
|
185
192
|
}
|
|
186
193
|
|
|
187
|
-
const { domain, user
|
|
188
|
-
const filtered = []
|
|
194
|
+
const { domain, user } = context.state
|
|
189
195
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
}
|
|
196
|
+
const me = await getRepository(User).findOne({
|
|
197
|
+
where: { id: user.id },
|
|
198
|
+
relations: ['roles']
|
|
199
|
+
})
|
|
195
200
|
|
|
196
|
-
|
|
201
|
+
const roles = me.roles
|
|
202
|
+
.filter(role => role.domainId === domain.id || (domain.parentId && role.domainId === domain.parentId))
|
|
203
|
+
.map(role => role.id)
|
|
204
|
+
|
|
205
|
+
return await getRepository(Menu)
|
|
206
|
+
.createQueryBuilder('menu')
|
|
207
|
+
.where('menu.parent = :parentId', { id: menu.id })
|
|
208
|
+
.andWhere('menu.active = :active', { active: true })
|
|
209
|
+
.andWhere(
|
|
210
|
+
new Brackets(qb => {
|
|
211
|
+
qb.where('menu.role IN (:...roles)').orWhere('menu.role is null')
|
|
212
|
+
})
|
|
213
|
+
)
|
|
214
|
+
.setParameter('roles', roles)
|
|
215
|
+
.getMany()
|
|
197
216
|
}
|
|
198
217
|
|
|
199
218
|
@FieldResolver(type => [MenuButton])
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { Field, ID, InputType, Int, ObjectType } from 'type-graphql'
|
|
2
2
|
|
|
3
3
|
import { ObjectRef } from '@things-factory/shell'
|
|
4
|
-
import { PrivilegeInput } from '@things-factory/auth-base'
|
|
5
4
|
|
|
6
5
|
import { Menu } from './menu'
|
|
7
6
|
|
|
@@ -32,7 +31,6 @@ export class NewMenu {
|
|
|
32
31
|
@Field(type => Int, { nullable: true }) fixedColumns?: number
|
|
33
32
|
@Field({ nullable: true }) iconPath?: string
|
|
34
33
|
@Field({ nullable: true }) role?: ObjectRef
|
|
35
|
-
@Field({ nullable: true }) privilege?: PrivilegeInput
|
|
36
34
|
@Field({ nullable: true }) parent?: ObjectRef
|
|
37
35
|
@Field(type => [ObjectRef], { nullable: true }) children?: ObjectRef[]
|
|
38
36
|
@Field(type => [ObjectRef], { nullable: true }) buttons?: ObjectRef[]
|
|
@@ -66,7 +64,6 @@ export class MenuPatch {
|
|
|
66
64
|
@Field(type => Int, { nullable: true }) fixedColumns?: number
|
|
67
65
|
@Field({ nullable: true }) iconPath?: string
|
|
68
66
|
@Field({ nullable: true }) role?: ObjectRef
|
|
69
|
-
@Field({ nullable: true }) privilege?: PrivilegeInput
|
|
70
67
|
@Field({ nullable: true }) parent?: ObjectRef
|
|
71
68
|
@Field(type => [ObjectRef], { nullable: true }) children?: ObjectRef[]
|
|
72
69
|
@Field(type => [ObjectRef], { nullable: true }) buttons?: ObjectRef[]
|
|
@@ -75,10 +75,6 @@ export class Menu {
|
|
|
75
75
|
@Field(type => [Role], { nullable: true })
|
|
76
76
|
roles?: Role[]
|
|
77
77
|
|
|
78
|
-
@Column({ type: 'simple-json', nullable: true })
|
|
79
|
-
@Field(type => PrivilegeObject, { nullable: true })
|
|
80
|
-
privilege?: PrivilegeObject
|
|
81
|
-
|
|
82
78
|
@Column('int', { nullable: true })
|
|
83
79
|
@Field({ nullable: true })
|
|
84
80
|
rank?: number
|