@things-factory/menu-base 8.0.0-beta.1 → 8.0.0-beta.2

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 (33) hide show
  1. package/package.json +3 -3
  2. package/server/index.ts +0 -1
  3. package/server/service/index.ts +0 -37
  4. package/server/service/menu/index.ts +0 -6
  5. package/server/service/menu/menu-mutation.ts +0 -244
  6. package/server/service/menu/menu-query.ts +0 -249
  7. package/server/service/menu/menu-type.ts +0 -78
  8. package/server/service/menu/menu.ts +0 -183
  9. package/server/service/menu-button/index.ts +0 -6
  10. package/server/service/menu-button/menu-button-mutation.ts +0 -142
  11. package/server/service/menu-button/menu-button-query.ts +0 -59
  12. package/server/service/menu-button/menu-button-type.ts +0 -31
  13. package/server/service/menu-button/menu-button.ts +0 -86
  14. package/server/service/menu-column/index.ts +0 -6
  15. package/server/service/menu-column/menu-column-mutation.ts +0 -143
  16. package/server/service/menu-column/menu-column-query.ts +0 -59
  17. package/server/service/menu-column/menu-column-type.ts +0 -92
  18. package/server/service/menu-column/menu-column.ts +0 -200
  19. package/server/service/menu-detail/index.ts +0 -6
  20. package/server/service/menu-detail/menu-detail-mutation.ts +0 -142
  21. package/server/service/menu-detail/menu-detail-query.ts +0 -75
  22. package/server/service/menu-detail/menu-detail-type.ts +0 -46
  23. package/server/service/menu-detail/menu-detail.ts +0 -111
  24. package/server/service/menu-detail-button/index.ts +0 -6
  25. package/server/service/menu-detail-button/menu-detail-button-mutation.ts +0 -143
  26. package/server/service/menu-detail-button/menu-detail-button-query.ts +0 -61
  27. package/server/service/menu-detail-button/menu-detail-button-type.ts +0 -34
  28. package/server/service/menu-detail-button/menu-detail-button.ts +0 -86
  29. package/server/service/menu-detail-column/index.ts +0 -6
  30. package/server/service/menu-detail-column/menu-detail-column-mutation.ts +0 -145
  31. package/server/service/menu-detail-column/menu-detail-column-query.ts +0 -61
  32. package/server/service/menu-detail-column/menu-detail-column-type.ts +0 -92
  33. package/server/service/menu-detail-column/menu-detail-column.ts +0 -205
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@things-factory/menu-base",
3
- "version": "8.0.0-beta.1",
3
+ "version": "8.0.0-beta.2",
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-beta.1"
27
+ "@things-factory/auth-base": "^8.0.0-beta.2"
28
28
  },
29
- "gitHead": "36c494e587640c1490318ef7b95adab02606e0c2"
29
+ "gitHead": "f03431a09435511b2595515658f9cb8f78ba4ebb"
30
30
  }
package/server/index.ts DELETED
@@ -1 +0,0 @@
1
- export * from './service'
@@ -1,37 +0,0 @@
1
- /* EXPORT ENTITY TYPES */
2
- export * from './menu-detail-column/menu-detail-column'
3
- export * from './menu-detail-button/menu-detail-button'
4
- export * from './menu-column/menu-column'
5
- export * from './menu-button/menu-button'
6
- export * from './menu-detail/menu-detail'
7
- export * from './menu/menu'
8
-
9
- /* IMPORT ENTITIES AND RESOLVERS */
10
- import { entities as MenuDetailColumnEntities, resolvers as MenuDetailColumnResolvers } from './menu-detail-column'
11
- import { entities as MenuDetailButtonEntities, resolvers as MenuDetailButtonResolvers } from './menu-detail-button'
12
- import { entities as MenuColumnEntities, resolvers as MenuColumnResolvers } from './menu-column'
13
- import { entities as MenuButtonEntities, resolvers as MenuButtonResolvers } from './menu-button'
14
- import { entities as MenuDetailEntities, resolvers as MenuDetailResolvers } from './menu-detail'
15
- import { entities as MenuEntities, resolvers as MenuResolvers } from './menu'
16
-
17
- export const entities = [
18
- /* ENTITIES */
19
- ...MenuDetailColumnEntities,
20
- ...MenuDetailButtonEntities,
21
- ...MenuColumnEntities,
22
- ...MenuButtonEntities,
23
- ...MenuDetailEntities,
24
- ...MenuEntities
25
- ]
26
-
27
- export const schema = {
28
- resolverClasses: [
29
- /* RESOLVER CLASSES */
30
- ...MenuDetailColumnResolvers,
31
- ...MenuDetailButtonResolvers,
32
- ...MenuColumnResolvers,
33
- ...MenuButtonResolvers,
34
- ...MenuDetailResolvers,
35
- ...MenuResolvers
36
- ]
37
- }
@@ -1,6 +0,0 @@
1
- import { Menu } from './menu'
2
- import { MenuQuery } from './menu-query'
3
- import { MenuMutation } from './menu-mutation'
4
-
5
- export const entities = [Menu]
6
- export const resolvers = [MenuQuery, MenuMutation]
@@ -1,244 +0,0 @@
1
- import { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'
2
- import { In, Repository } from 'typeorm'
3
-
4
- import { Role } from '@things-factory/auth-base'
5
-
6
- import { Menu } from './menu'
7
- import { MenuPatch, NewMenu } from './menu-type'
8
-
9
- async function appendRoleToMenu(roleRepo, roles, targetRole) {
10
- let roleIds: string[] = roles.map(role => role.id)
11
- roleIds = Array.from(new Set([...roleIds, targetRole.id]))
12
-
13
- return await roleRepo.findByIds(roleIds)
14
- }
15
-
16
- function removeRoleToMenu(roles, targetRole) {
17
- return roles.filter(role => targetRole.id !== role.id)
18
- }
19
-
20
- @Resolver(Menu)
21
- export class MenuMutation {
22
- @Directive('@transaction')
23
- @Mutation(returns => Menu, { description: 'To create new Menu' })
24
- async createMenu(@Arg('menu') menu: NewMenu, @Ctx() context: ResolverContext): Promise<Menu> {
25
- const { domain, user, tx } = context.state
26
- const menuRepo = tx?.getRepository(Menu)
27
-
28
- if (menu?.parent?.id) {
29
- menu.parent = await menuRepo.findOneBy({
30
- domain: { id: domain.id },
31
- id: menu.parent.id
32
- })
33
- }
34
-
35
- return await tx.getRepository(Menu).save({
36
- ...menu,
37
- domain,
38
- creator: user,
39
- updater: user
40
- })
41
- }
42
-
43
- @Directive('@transaction')
44
- @Mutation(returns => Menu, { description: 'To modify Menu information' })
45
- async updateMenu(
46
- @Arg('id') id: string,
47
- @Arg('patch') patch: MenuPatch,
48
- @Ctx() context: ResolverContext
49
- ): Promise<Menu> {
50
- const { domain, user, tx } = context.state
51
-
52
- const menuRepo = tx.getRepository(Menu)
53
-
54
- const menu: Menu = await menuRepo.findOne({
55
- where: { domain: { id: domain.id }, id },
56
- relations: ['children', 'parent']
57
- })
58
-
59
- if (patch?.parent?.id) {
60
- patch.parent = await menuRepo.findOneBy({ id: patch.parent.id })
61
- }
62
-
63
- if (patch?.children?.length) {
64
- const childrenIds: string[] = patch.children.map((children: Menu) => children.id)
65
- patch.children = await menuRepo.findByIds(childrenIds)
66
- }
67
-
68
- return await menuRepo.save({
69
- ...menu,
70
- ...patch,
71
- updater: user
72
- })
73
- }
74
-
75
- @Directive('@transaction')
76
- @Mutation(returns => [Menu], { description: "To modify multiple Menus' information" })
77
- async updateMultipleMenu(
78
- @Arg('patches', type => [MenuPatch]) patches: MenuPatch[],
79
- @Ctx() context: ResolverContext
80
- ): Promise<Menu[]> {
81
- const { domain, user, tx } = context.state
82
-
83
- let results = []
84
- const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')
85
- const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')
86
- const menuRepo = tx.getRepository(Menu)
87
-
88
- if (_createRecords.length > 0) {
89
- for (let i = 0; i < _createRecords.length; i++) {
90
- const newRecord = _createRecords[i]
91
-
92
- if (newRecord?.parent?.id) {
93
- newRecord.parent = await menuRepo.findOneBy({
94
- domain: { id: domain.id },
95
- id: newRecord.parent.id
96
- })
97
- }
98
-
99
- const result = await menuRepo.save({
100
- ...newRecord,
101
- domain,
102
- creator: user,
103
- updater: user
104
- })
105
-
106
- results.push({ ...result, cuFlag: '+' })
107
- }
108
- }
109
-
110
- if (_updateRecords.length > 0) {
111
- for (let i = 0; i < _updateRecords.length; i++) {
112
- const updateRecord = _updateRecords[i]
113
- const { id } = updateRecord
114
-
115
- const menu: Menu = await menuRepo.findOne({
116
- where: { domain: { id: domain.id }, id },
117
- relations: ['children', 'parent']
118
- })
119
-
120
- if (updateRecord?.parent?.id) {
121
- updateRecord.parent = await menuRepo.findOneBy({ id: updateRecord.parent.id })
122
- }
123
-
124
- if (updateRecord?.children?.length) {
125
- const childrenIds: string[] = updateRecord.children.map((children: Menu) => children.id)
126
- updateRecord.children = await menuRepo.findBy({ id: In(childrenIds) })
127
- }
128
-
129
- const result = await menuRepo.save({
130
- ...menu,
131
- ...updateRecord,
132
- updater: user
133
- })
134
-
135
- results.push({ ...result, cuFlag: 'M' })
136
- }
137
- }
138
-
139
- return results
140
- }
141
-
142
- @Directive('@transaction')
143
- @Mutation(returns => Boolean, { description: 'To delete Menu' })
144
- async deleteMenu(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<boolean> {
145
- const { domain, tx } = context.state
146
-
147
- await tx.getRepository(Menu).delete({ domain: { id: domain.id }, id })
148
- return true
149
- }
150
-
151
- @Directive('@transaction')
152
- @Mutation(returns => Boolean, { description: 'To delete multiple Menus' })
153
- async deleteMenus(@Arg('ids', type => [String]) ids: string[], @Ctx() context: ResolverContext): Promise<boolean> {
154
- const { domain, tx } = context.state
155
-
156
- await tx.getRepository(Menu).delete({
157
- domain: { id: domain.id },
158
- id: In(ids)
159
- })
160
-
161
- return true
162
- }
163
-
164
- @Directive('@transaction')
165
- @Mutation(returns => Menu, { description: 'To update role Menu' })
166
- async updateRoleMenu(
167
- @Arg('roleId') roleId: string,
168
- @Arg('targetMenuId') targetMenuId: string,
169
- @Arg('isCheckedMenu') isCheckedMenu: boolean,
170
- @Ctx() context: ResolverContext
171
- ): Promise<Menu> {
172
- const { domain, tx } = context.state
173
-
174
- const menuRepo: Repository<Menu> = tx?.getRepository(Menu)
175
- const roleRepo: Repository<Role> = tx?.getRepository(Role)
176
-
177
- const menu: Menu = await menuRepo.findOne({
178
- where: { domain: { id: domain.id }, id: targetMenuId },
179
- relations: ['roles']
180
- })
181
- const targetRole: Role = await roleRepo.findOne({ where: { domain: { id: domain.id }, id: roleId } })
182
-
183
- if (isCheckedMenu) {
184
- menu.roles = await appendRoleToMenu(roleRepo, menu.roles, targetRole)
185
- } else {
186
- menu.roles = removeRoleToMenu(menu.roles, targetRole)
187
- }
188
-
189
- return await menuRepo.save({
190
- ...menu
191
- })
192
- }
193
-
194
- @Directive('@transaction')
195
- @Mutation(returns => [Menu], { description: 'To update role Menu' })
196
- async updateRoleMenus(
197
- @Arg('roleId') roleId: string,
198
- @Arg('parentMenuId') parentMenuId: string,
199
- @Arg('isCheckedAll') isCheckedAll: boolean,
200
- @Ctx() context: ResolverContext
201
- ): Promise<Menu[]> {
202
- const { domain, tx } = context.state
203
-
204
- const menuRepo: Repository<Menu> = tx?.getRepository(Menu)
205
- const roleRepo: Repository<Role> = tx?.getRepository(Role)
206
-
207
- const targetParentMenu: Menu = await menuRepo.findOne({
208
- where: { domain: { id: domain.id }, id: parentMenuId },
209
- relations: ['children', 'children.roles']
210
- })
211
- let childMenus: Menu[] = targetParentMenu.children
212
-
213
- const targetRole: Role = await roleRepo.findOne({ where: { domain: { id: domain.id }, id: roleId } })
214
-
215
- if (isCheckedAll) {
216
- childMenus.forEach(async child => {
217
- child.roles = await appendRoleToMenu(roleRepo, child.roles, targetRole)
218
- })
219
- } else {
220
- childMenus.forEach(child => {
221
- child.roles = removeRoleToMenu(child.roles, targetRole)
222
- })
223
- }
224
-
225
- return await menuRepo.save([...childMenus])
226
- }
227
-
228
- @Directive('@transaction')
229
- @Mutation(returns => Boolean, { description: 'To import multiple Menus' })
230
- async importMenus(
231
- @Arg('menus', type => [MenuPatch]) menus: MenuPatch[],
232
- @Ctx() context: ResolverContext
233
- ): Promise<boolean> {
234
- const { domain, tx } = context.state
235
-
236
- await Promise.all(
237
- menus.map(async (menu: MenuPatch) => {
238
- const createdMenu: Menu = await tx.getRepository(Menu).save({ domain, ...menu })
239
- })
240
- )
241
-
242
- return true
243
- }
244
- }
@@ -1,249 +0,0 @@
1
- import { Arg, Args, Ctx, FieldResolver, Query, Resolver, Root } from 'type-graphql'
2
- import { In, Repository, Brackets, SelectQueryBuilder } from 'typeorm'
3
-
4
- import { Domain, getQueryBuilderFromListParams, getRepository, ListParam } from '@things-factory/shell'
5
- import { Role, User } from '@things-factory/auth-base'
6
-
7
- import { MenuButton } from '../menu-button/menu-button'
8
- import { MenuColumn } from '../menu-column/menu-column'
9
- import { Menu } from './menu'
10
- import { MenuList } from './menu-type'
11
-
12
- async function getNonRestrictedMenus(domain: Domain): Promise<Menu[]> {
13
- const menus: Menu[] = await getRepository(Menu).find({
14
- where: { domain: { id: domain.id }, hiddenFlag: false, menuType: 'MENU' },
15
- relations: ['parent', 'children', 'children.roles'],
16
- order: { rank: 'ASC' }
17
- })
18
-
19
- menus.forEach(menu => {
20
- menu.children = menu.children.filter(child => !child.roles?.length)
21
- })
22
-
23
- return menus
24
- }
25
-
26
- async function getRestrictedMenus(roleIds: string[], domain: Domain): Promise<Menu[]> {
27
- const menus: Menu[] = await getRepository(Menu).find({
28
- where: { domain: { id: domain.id }, hiddenFlag: false, menuType: 'MENU' },
29
- relations: ['parent', 'children', 'children.roles'],
30
- order: { rank: 'ASC' }
31
- })
32
- const userRoles: Role[] = await getRepository(Role).find({ where: { domain: { id: domain.id }, id: In(roleIds) } })
33
-
34
- menus.forEach(menu => {
35
- menu.children = menu.children.filter(child => {
36
- const childRoleIds = child.roles?.map(role => role.id) || []
37
-
38
- return userRoles.find(role => childRoleIds.includes(role.id)) || false
39
- })
40
- })
41
-
42
- return menus
43
- }
44
-
45
- @Resolver(Menu)
46
- export class MenuQuery {
47
- @Query(returns => Menu, { description: 'To fetch a Menu' })
48
- async menu(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<Menu> {
49
- const { domain } = context.state
50
-
51
- return await getRepository(Menu).findOne({
52
- where: { domain: { id: domain.id }, id },
53
- relations: ['roles']
54
- })
55
- }
56
-
57
- @Query(returns => Menu, { description: 'To fetch a Menu by routing' })
58
- async menuByRouting(@Arg('routing') routing: string, context) {
59
- const { domain } = context.state
60
-
61
- return await getRepository(Menu).findOne({
62
- where: { domain: { id: domain.id }, routing }
63
- })
64
- }
65
-
66
- @Query(returns => MenuList, { description: 'To fetch multiple Menus' })
67
- async menus(@Args(type => ListParam) params: ListParam, @Ctx() context: ResolverContext): Promise<MenuList> {
68
- const { domain } = context.state
69
-
70
- const queryBuilder = getQueryBuilderFromListParams({
71
- domain,
72
- params,
73
- repository: await getRepository(Menu),
74
- searchables: ['name', 'description']
75
- })
76
-
77
- const [items, total] = await queryBuilder.getManyAndCount()
78
-
79
- return { items, total }
80
- }
81
-
82
- @Query(returns => MenuList, { description: 'To fetch my own Menus' })
83
- async myMenus(@Args(type => ListParam) params: ListParam, @Ctx() context: ResolverContext): Promise<MenuList> {
84
- const { domain, user } = context.state
85
-
86
- const me = await getRepository(User).findOne({
87
- where: { id: user.id },
88
- relations: ['roles']
89
- })
90
-
91
- const roles = me.roles
92
- .filter(role => role.domainId === domain.id || (domain.parentId && role.domainId === domain.parentId))
93
- .map(role => role.id)
94
-
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()
109
-
110
- return { items, total }
111
- }
112
-
113
- @Query(returns => MenuList, { description: 'To fetch Menus by role' })
114
- async roleMenus(@Arg('roleId') roleId: string, @Ctx() context: ResolverContext) {
115
- const { domain } = context.state
116
-
117
- const menuRepo: Repository<Menu> = getRepository(Menu)
118
- const menus: Menu[] = await menuRepo.find({
119
- where: { domain: { id: domain.id } },
120
- relations: ['parent', 'roles']
121
- })
122
- const role: Role = await getRepository(Role).findOne({ where: { domain: { id: domain.id }, id: roleId } })
123
-
124
- let newChildMenus: Menu[] = []
125
-
126
- menus.forEach(menu => {
127
- if (menu.roles) {
128
- const menuRoleIds = menu.roles.map(role => role.id)
129
-
130
- if (menuRoleIds.includes(role.id)) {
131
- newChildMenus.push(menu)
132
- }
133
- }
134
- })
135
-
136
- return { items: newChildMenus, total: newChildMenus.length }
137
- }
138
-
139
- @Query(returns => [Menu], { description: 'To fetch Menus by role' })
140
- async userMenus(@Ctx() context: ResolverContext): Promise<Menu[]> {
141
- const { domain, user } = context.state
142
-
143
- var menus: Menu[] = []
144
-
145
- try {
146
- const qb: SelectQueryBuilder<User> = getRepository(User).createQueryBuilder('USER')
147
- const user: User = await qb
148
- .leftJoinAndSelect('USER.roles', 'ROLES')
149
- .leftJoinAndSelect('ROLES.domain', 'ROLES_DOMAIN')
150
- .where('USER.id = :userId', { userId: context.state.user.id })
151
- .andWhere('ROLES_DOMAIN.id = :domainId', { domainId: context.state.domain.id })
152
- .getOne()
153
-
154
- // get menus which are non-restricted by any role.
155
- menus.push(...(await getNonRestrictedMenus(context.state.domain)))
156
-
157
- const userRoleIds: string[] = user.roles.map((role: Role) => role.id)
158
- let restrictedMenus: Menu[] = []
159
- if (userRoleIds?.length) {
160
- // get menus which are restricted by role ()
161
- restrictedMenus = [...(await getRestrictedMenus(userRoleIds, context.state.domain))]
162
- }
163
-
164
- const restrictedMenuIds: string[] = restrictedMenus.map((restrictedMenu: Menu) => restrictedMenu.id)
165
- menus.forEach(menu => {
166
- const idx = restrictedMenuIds.indexOf(menu.id)
167
- if (idx !== -1) {
168
- menu.children = Array.from(new Set([...restrictedMenus[idx].children, ...menu.children]))
169
- }
170
- })
171
-
172
- return menus.filter((groupMenu: Menu) => groupMenu?.children?.length)
173
- } catch (e) {
174
- throw e
175
- }
176
- }
177
-
178
- @FieldResolver(type => [Menu])
179
- async children(
180
- @Root() menu: Menu,
181
- @Arg('permittedOnly', { defaultValue: false }) permittedOnly: boolean,
182
- @Ctx() context: ResolverContext
183
- ): Promise<Menu[]> {
184
- if (!permittedOnly) {
185
- return (
186
- menu.children ||
187
- (await getRepository(Menu).findBy({
188
- parent: { id: menu.id }
189
- }))
190
- )
191
- }
192
-
193
- const { domain, user } = context.state
194
-
195
- const me = await getRepository(User).findOne({
196
- where: { id: user.id },
197
- relations: ['roles']
198
- })
199
-
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()
214
- }
215
-
216
- @FieldResolver(type => [MenuButton])
217
- async buttons(@Root() menu: Menu): Promise<MenuButton[]> {
218
- return await getRepository(MenuButton).findBy({
219
- menu: { id: menu.id }
220
- })
221
- }
222
-
223
- @FieldResolver(type => [MenuColumn])
224
- async columns(@Root() menu: Menu): Promise<MenuColumn[]> {
225
- return await getRepository(MenuColumn).findBy({
226
- menu: { id: menu.id }
227
- })
228
- }
229
-
230
- @FieldResolver(type => Role)
231
- async role(@Root() menu: Menu) {
232
- return menu.roleId && (await getRepository(Role).findOneBy({ id: menu.roleId }))
233
- }
234
-
235
- @FieldResolver(type => Domain)
236
- async domain(@Root() menu: Menu): Promise<Domain> {
237
- return await getRepository(Domain).findOneBy({ id: menu.domainId })
238
- }
239
-
240
- @FieldResolver(type => User)
241
- async updater(@Root() menu: Menu): Promise<User> {
242
- return await getRepository(User).findOneBy({ id: menu.updaterId })
243
- }
244
-
245
- @FieldResolver(type => User)
246
- async creator(@Root() menu: Menu): Promise<User> {
247
- return await getRepository(User).findOneBy({ id: menu.creatorId })
248
- }
249
- }
@@ -1,78 +0,0 @@
1
- import { Field, ID, InputType, Int, ObjectType } from 'type-graphql'
2
-
3
- import { ObjectRef } from '@things-factory/shell'
4
-
5
- import { Menu } from './menu'
6
-
7
- @InputType()
8
- export class NewMenu {
9
- @Field() name: string
10
- @Field() menuType: string
11
-
12
- @Field({ nullable: true }) description?: string
13
- @Field({ nullable: true }) category: string
14
- @Field(type => Int, { nullable: true }) rank?: number
15
- @Field({ nullable: true }) routing?: string
16
- @Field({ nullable: true }) routingType?: string
17
- @Field({ nullable: true }) resourceType?: string
18
- @Field({ nullable: true }) resourceId?: string
19
- @Field({ nullable: true }) resourceUrl?: string
20
- @Field({ nullable: true }) resourceName?: string
21
- @Field({ nullable: true }) idField?: string
22
- @Field({ nullable: true }) titleField?: string
23
- @Field({ nullable: true }) gridSaveUrl?: string
24
- @Field({ nullable: true }) pagination?: boolean
25
- @Field({ nullable: true }) detailFormId?: string
26
- @Field({ nullable: true }) detailLayout?: string
27
- @Field({ nullable: true }) template?: string
28
- @Field({ nullable: true }) hiddenFlag?: boolean
29
- @Field({ nullable: true }) itemsProp?: string
30
- @Field({ nullable: true }) totalProp?: string
31
- @Field(type => Int, { nullable: true }) fixedColumns?: number
32
- @Field({ nullable: true }) iconPath?: string
33
- @Field({ nullable: true }) role?: ObjectRef
34
- @Field({ nullable: true }) parent?: ObjectRef
35
- @Field(type => [ObjectRef], { nullable: true }) children?: ObjectRef[]
36
- @Field(type => [ObjectRef], { nullable: true }) buttons?: ObjectRef[]
37
- @Field(type => [ObjectRef], { nullable: true }) columns?: ObjectRef[]
38
- }
39
-
40
- @InputType()
41
- export class MenuPatch {
42
- @Field(type => ID, { nullable: true }) id?: string
43
- @Field({ nullable: true }) category?: string
44
- @Field({ nullable: true }) name?: string
45
- @Field({ nullable: true }) description?: string
46
- @Field({ nullable: true }) menuType?: string
47
- @Field(type => Int, { nullable: true }) rank?: number
48
- @Field({ nullable: true }) routing?: string
49
- @Field({ nullable: true }) routingType?: string
50
- @Field({ nullable: true }) resourceType?: string
51
- @Field({ nullable: true }) resourceId?: string
52
- @Field({ nullable: true }) resourceUrl?: string
53
- @Field({ nullable: true }) resourceName?: string
54
- @Field({ nullable: true }) idField?: string
55
- @Field({ nullable: true }) titleField?: string
56
- @Field({ nullable: true }) gridSaveUrl?: string
57
- @Field({ nullable: true }) pagination?: boolean
58
- @Field({ nullable: true }) detailFormId?: string
59
- @Field({ nullable: true }) detailLayout?: string
60
- @Field({ nullable: true }) template?: string
61
- @Field({ nullable: true }) hiddenFlag?: boolean
62
- @Field({ nullable: true }) itemsProp?: string
63
- @Field({ nullable: true }) totalProp?: string
64
- @Field(type => Int, { nullable: true }) fixedColumns?: number
65
- @Field({ nullable: true }) iconPath?: string
66
- @Field({ nullable: true }) role?: ObjectRef
67
- @Field({ nullable: true }) parent?: ObjectRef
68
- @Field(type => [ObjectRef], { nullable: true }) children?: ObjectRef[]
69
- @Field(type => [ObjectRef], { nullable: true }) buttons?: ObjectRef[]
70
- @Field(type => [ObjectRef], { nullable: true }) columns?: ObjectRef[]
71
- @Field({ nullable: true }) cuFlag?: string
72
- }
73
-
74
- @ObjectType()
75
- export class MenuList {
76
- @Field(type => [Menu]) items: Menu[]
77
- @Field(type => Int) total: number
78
- }