@things-factory/menu-base 8.0.0-alpha.8 → 8.0.0-beta.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.
- package/dist-server/service/menu/menu-query.d.ts +2 -1
- package/dist-server/service/menu/menu-query.js +49 -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 +54 -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-
|
|
3
|
+
"version": "8.0.0-beta.0",
|
|
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-
|
|
27
|
+
"@things-factory/auth-base": "^8.0.0-beta.0"
|
|
28
28
|
},
|
|
29
|
-
"gitHead": "
|
|
29
|
+
"gitHead": "add6fb8224b2cb19cbea47bed6a5ecb0424c9a28"
|
|
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,33 @@ 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(
|
|
103
|
+
new Brackets(qb => {
|
|
104
|
+
qb.where('menu.role IN (:...roles)').orWhere('menu.role is null')
|
|
105
|
+
})
|
|
106
|
+
)
|
|
107
|
+
.setParameter('roles', roles)
|
|
108
|
+
.getManyAndCount()
|
|
102
109
|
|
|
103
|
-
return { items
|
|
110
|
+
return { items, total }
|
|
104
111
|
}
|
|
105
112
|
|
|
106
113
|
@Query(returns => MenuList, { description: 'To fetch Menus by role' })
|
|
@@ -174,26 +181,36 @@ export class MenuQuery {
|
|
|
174
181
|
@Arg('permittedOnly', { defaultValue: false }) permittedOnly: boolean,
|
|
175
182
|
@Ctx() context: ResolverContext
|
|
176
183
|
): Promise<Menu[]> {
|
|
177
|
-
var menus =
|
|
178
|
-
menu.children ||
|
|
179
|
-
(await getRepository(Menu).findBy({
|
|
180
|
-
parent: { id: menu.id }
|
|
181
|
-
}))
|
|
182
|
-
|
|
183
184
|
if (!permittedOnly) {
|
|
184
|
-
return
|
|
185
|
+
return (
|
|
186
|
+
menu.children ||
|
|
187
|
+
(await getRepository(Menu).findBy({
|
|
188
|
+
parent: { id: menu.id }
|
|
189
|
+
}))
|
|
190
|
+
)
|
|
185
191
|
}
|
|
186
192
|
|
|
187
|
-
const { domain, user
|
|
188
|
-
const filtered = []
|
|
193
|
+
const { domain, user } = context.state
|
|
189
194
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
}
|
|
195
|
+
const me = await getRepository(User).findOne({
|
|
196
|
+
where: { id: user.id },
|
|
197
|
+
relations: ['roles']
|
|
198
|
+
})
|
|
195
199
|
|
|
196
|
-
|
|
200
|
+
const roles = me.roles
|
|
201
|
+
.filter(role => role.domainId === domain.id || (domain.parentId && role.domainId === domain.parentId))
|
|
202
|
+
.map(role => role.id)
|
|
203
|
+
|
|
204
|
+
return await getRepository(Menu)
|
|
205
|
+
.createQueryBuilder('menu')
|
|
206
|
+
.where('menu.parent = :parentId', { parentId: menu.id })
|
|
207
|
+
.andWhere(
|
|
208
|
+
new Brackets(qb => {
|
|
209
|
+
qb.where('menu.role IN (:...roles)').orWhere('menu.role is null')
|
|
210
|
+
})
|
|
211
|
+
)
|
|
212
|
+
.setParameter('roles', roles)
|
|
213
|
+
.getMany()
|
|
197
214
|
}
|
|
198
215
|
|
|
199
216
|
@FieldResolver(type => [MenuButton])
|
|
@@ -210,6 +227,11 @@ export class MenuQuery {
|
|
|
210
227
|
})
|
|
211
228
|
}
|
|
212
229
|
|
|
230
|
+
@FieldResolver(type => Role)
|
|
231
|
+
async role(@Root() menu: Menu) {
|
|
232
|
+
return menu.roleId && (await getRepository(Role).findOneBy({ id: menu.roleId }))
|
|
233
|
+
}
|
|
234
|
+
|
|
213
235
|
@FieldResolver(type => Domain)
|
|
214
236
|
async domain(@Root() menu: Menu): Promise<Domain> {
|
|
215
237
|
return await getRepository(Domain).findOneBy({ id: menu.domainId })
|
|
@@ -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
|