@gadmin2n/schematics 0.0.68 → 0.0.70

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 (223) hide show
  1. package/dist/lib/application/files/gadmin2-game-angle-demo/config/prisma/canvas.prisma +45 -0
  2. package/dist/lib/application/files/gadmin2-game-angle-demo/config/prisma/example.prisma +24 -23
  3. package/dist/lib/application/files/gadmin2-game-angle-demo/config/prisma/system.prisma +93 -90
  4. package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/Audit.ts +70 -0
  5. package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/Event.ts +3 -3
  6. package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/Page.ts +70 -0
  7. package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/PageResource.ts +70 -0
  8. package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/Resource.ts +70 -0
  9. package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/RolePages.ts +70 -0
  10. package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/RoleResource.ts +70 -0
  11. package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/SavedQuery.ts +70 -0
  12. package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/User.ts +70 -0
  13. package/dist/lib/application/files/gadmin2-game-angle-demo/readme.md +95 -2
  14. package/dist/lib/application/files/gadmin2-game-angle-demo/server/.eslintrc.js +4 -2
  15. package/dist/lib/application/files/gadmin2-game-angle-demo/server/.prettierignore +7 -1
  16. package/dist/lib/application/files/gadmin2-game-angle-demo/server/config/index.ts +1 -3
  17. package/dist/lib/application/files/gadmin2-game-angle-demo/server/gadmin-cli.json +2 -2
  18. package/dist/lib/application/files/gadmin2-game-angle-demo/server/package.json +6 -5
  19. package/dist/lib/application/files/gadmin2-game-angle-demo/server/scripts/lib/page-helpers.ts +157 -0
  20. package/dist/lib/application/files/gadmin2-game-angle-demo/server/scripts/page-manage.ts +290 -0
  21. package/dist/lib/application/files/gadmin2-game-angle-demo/server/scripts/permission-manage.ts +184 -0
  22. package/dist/lib/application/files/gadmin2-game-angle-demo/server/scripts/prismaModels.ts +143 -0
  23. package/dist/lib/application/files/gadmin2-game-angle-demo/server/scripts/sync-resources.ts +100 -0
  24. package/dist/lib/application/files/gadmin2-game-angle-demo/server/scripts/syncDataMngtPages.ts +119 -0
  25. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/index.ts +1 -3
  26. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/permissions.ts +109 -143
  27. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/main.ts +5 -2
  28. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/canvas/canvas.controller.spec.ts +20 -0
  29. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/canvas/canvas.controller.ts +81 -0
  30. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/canvas/canvas.dto.ts +49 -0
  31. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/canvas/canvas.module.ts +11 -0
  32. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/canvas/canvas.service.spec.ts +334 -0
  33. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/canvas/canvas.service.ts +249 -0
  34. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/index.ts +2 -1
  35. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/page/page.service.ts +2 -2
  36. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/role/role.service.ts +17 -4
  37. package/dist/lib/application/files/gadmin2-game-angle-demo/server/yarn.lock +7737 -0
  38. package/dist/lib/application/files/gadmin2-game-angle-demo/web/.env +1 -0
  39. package/dist/lib/application/files/gadmin2-game-angle-demo/web/.eslintrc.json +38 -0
  40. package/dist/lib/application/files/gadmin2-game-angle-demo/web/.prettierignore +2 -0
  41. package/dist/lib/application/files/gadmin2-game-angle-demo/web/dev-shell-entry.html +49 -0
  42. package/dist/lib/application/files/gadmin2-game-angle-demo/web/package.json +13 -2
  43. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/App.tsx +137 -111
  44. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/auditLogProvider.ts +46 -44
  45. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/authProvider.ts +32 -12
  46. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/BulkActions.tsx +74 -23
  47. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/ListPageHeader.tsx +9 -9
  48. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/RowActions.tsx +57 -31
  49. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/SearchBar.tsx +53 -24
  50. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/SqlModal.tsx +148 -72
  51. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/AgentContext.tsx +190 -16
  52. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/ElementInspector.tsx +914 -63
  53. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/agentAttributes.ts +17 -8
  54. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/index.ts +0 -10
  55. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/inspectorActions.ts +969 -46
  56. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/pagePathUtils.ts +66 -0
  57. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/promptGenerator.ts +85 -25
  58. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/propPatcher.ts +84 -0
  59. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/eventList/index.tsx +16 -20
  60. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/index.ts +4 -4
  61. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/logButton/index.tsx +13 -13
  62. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/logList/index.tsx +15 -16
  63. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/modalDiffViewer/index.tsx +15 -15
  64. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/index.tsx +2 -2
  65. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/BarChart/index.tsx +896 -0
  66. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/ChartSwitcher/index.tsx +219 -0
  67. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/ChartViewer/index.tsx +159 -0
  68. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/Filter/index.tsx +192 -0
  69. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/LineChart/index.tsx +1034 -0
  70. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/NumCard/NumCard.module.css +8 -0
  71. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/NumCard/index.tsx +509 -0
  72. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/NumLineCard/index.tsx +66 -0
  73. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/PieChart/index.tsx +552 -0
  74. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/RadarChart/index.tsx +263 -0
  75. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/Section/index.tsx +35 -0
  76. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/Table/index.tsx +207 -0
  77. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/TreemapChart/index.tsx +382 -0
  78. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/WorldMap/index.tsx +135 -0
  79. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/chart-constants.ts +53 -0
  80. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/icon/InfoIcon.tsx +8 -0
  81. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/icon/index.ts +1 -0
  82. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/map/config.ts +31 -0
  83. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/map/nameMap.json +9 -0
  84. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/map/world.geo.json +39349 -0
  85. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/metric-info-tooltip/index.tsx +19 -0
  86. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/contexts/business/index.tsx +12 -12
  87. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/contexts/color-mode/index.tsx +22 -26
  88. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/custom-avatar.tsx +13 -9
  89. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/index.ts +4 -4
  90. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/header.tsx +22 -37
  91. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/index.ts +4 -4
  92. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/layout.tsx +10 -10
  93. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/logo.tsx +1 -1
  94. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/sider.tsx +113 -65
  95. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/title.tsx +14 -14
  96. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/offLayoutArea/index.tsx +1 -1
  97. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/pagination-total.tsx +2 -2
  98. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/tags/index.ts +1 -1
  99. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/tags/role-tag.tsx +21 -21
  100. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/text.tsx +17 -13
  101. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/config/http.ts +26 -5
  102. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/config/routeRegistry.tsx +221 -51
  103. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/constants/layout.ts +3 -3
  104. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/AddDataModal.tsx +199 -0
  105. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/AddPageModal.tsx +335 -0
  106. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/DeleteDataConfirm.tsx +56 -0
  107. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/DevShell.tsx +401 -0
  108. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/EditDataModal.tsx +129 -0
  109. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/SkillMenu.tsx +202 -0
  110. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/UndoConfirm.tsx +36 -0
  111. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/index.tsx +8 -0
  112. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/style.css +835 -0
  113. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/enums/audit-log.enum.ts +8 -8
  114. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/enums/index.ts +1 -1
  115. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/form.tsx +120 -70
  116. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/get-name-initials.ts +3 -3
  117. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/get-random-color.ts +11 -11
  118. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/http.ts +16 -19
  119. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/index.tsx +1 -1
  120. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/list.tsx +99 -73
  121. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/login.ts +22 -27
  122. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/page-tree.ts +74 -0
  123. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/show.tsx +95 -51
  124. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/utils.tsx +7 -3
  125. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/types.ts +15 -15
  126. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useBatchDelete.ts +10 -10
  127. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useBatchOperations.ts +8 -7
  128. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useBatchOperationsCore.ts +10 -10
  129. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useBatchUpdate.ts +10 -10
  130. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useDynamicResources.tsx +36 -27
  131. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useECharts.tsx +144 -0
  132. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useFetchData.ts +4 -4
  133. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useListPageState.ts +34 -34
  134. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useRoles.ts +8 -4
  135. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useRowSelection.ts +1 -1
  136. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useUserPageAccess.ts +55 -41
  137. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/i18n.ts +8 -8
  138. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/index.tsx +9 -2
  139. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/locales/en/common.json +193 -0
  140. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/locales/zh_CN/common.json +194 -0
  141. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/plugins/devShellPlugin.ts +81 -0
  142. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/components/action-cell.tsx +37 -37
  143. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/create.tsx +23 -31
  144. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/edit.tsx +34 -35
  145. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/index.ts +1 -1
  146. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/index.tsx +4 -6
  147. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/list.tsx +41 -34
  148. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/show.tsx +33 -20
  149. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasCell.tsx +87 -0
  150. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasEditPage.tsx +192 -0
  151. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasListPage.tsx +409 -0
  152. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasPage.tsx +1372 -0
  153. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasToolbar.tsx +384 -0
  154. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CodeFloatWindow.tsx +476 -0
  155. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/ComponentThumbnail.tsx +135 -0
  156. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/IsolatedLivePreview.tsx +101 -0
  157. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/LivePreview.tsx +236 -0
  158. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/PublishModal.tsx +200 -0
  159. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/canvasApi.ts +92 -0
  160. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/canvasConfigRegistry.tsx +25 -0
  161. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/canvasContextMenuRegistry.tsx +875 -0
  162. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/canvasDefaults.ts +126 -0
  163. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/canvasI18n.ts +11 -0
  164. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/BarChartDataSourceModal.tsx +115 -0
  165. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/ChartViewerConfigModal.tsx +217 -0
  166. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/LineChartDataSourceModal.tsx +153 -0
  167. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/NumCardDataSourceModal.tsx +211 -0
  168. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/PromptModal.tsx +90 -0
  169. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/RadarChartDataSourceModal.tsx +87 -0
  170. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/TableDataSourceModal.tsx +204 -0
  171. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/demos.ts +1153 -0
  172. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/index.tsx +2 -0
  173. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/sectionCompactor.ts +45 -0
  174. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/types.ts +45 -0
  175. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas-page/index.tsx +108 -0
  176. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/game/create.tsx +105 -0
  177. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/game/edit.tsx +121 -0
  178. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/game/index.tsx +4 -0
  179. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/game/list.tsx +237 -0
  180. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/game/show.tsx +74 -0
  181. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/Components/AssignRolesModal.tsx +29 -20
  182. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/Components/CreatePageModal.tsx +3 -3
  183. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/Components/EditPageModal.tsx +7 -3
  184. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/Components/PageDetailDrawer.tsx +58 -23
  185. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/Components/PageFormModal.tsx +206 -122
  186. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/hooks/usePageManagement.ts +8 -4
  187. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/index.ts +1 -1
  188. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/list.tsx +345 -190
  189. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/types.ts +1 -1
  190. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/permissionReadme/index.tsx +341 -340
  191. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/Components/CreateModal.tsx +2 -2
  192. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/Components/EditModal.tsx +2 -2
  193. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/Components/ResourceDetailDrawer.tsx +41 -24
  194. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/Components/modal.tsx +64 -36
  195. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/index.ts +2 -2
  196. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/list.tsx +78 -40
  197. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/Components/CreateModal.tsx +3 -3
  198. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/Components/EditModal.tsx +4 -4
  199. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/Components/RoleDetailDrawer.tsx +19 -9
  200. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/Components/modal.tsx +45 -47
  201. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/hooks/useRolePage.ts +4 -4
  202. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/index.ts +1 -1
  203. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/list.tsx +121 -147
  204. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/types.ts +1 -1
  205. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/create-modal.tsx +2 -2
  206. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/edit-modal.tsx +2 -2
  207. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/form-modal.tsx +25 -19
  208. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/index.ts +5 -5
  209. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/role-tag.tsx +10 -10
  210. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/show-drawer.tsx +31 -26
  211. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/index.ts +1 -1
  212. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/list.tsx +76 -71
  213. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/setupTests.ts +1 -1
  214. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/types/audit-log.ts +1 -1
  215. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/types/index.ts +3 -3
  216. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/types/role.ts +1 -1
  217. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/types/user.ts +1 -1
  218. package/dist/lib/application/files/gadmin2-game-angle-demo/web/vite.config.ts +42 -25
  219. package/dist/lib/application/files/gadmin2-game-angle-demo/web/yarn.lock +1193 -32
  220. package/package.json +1 -1
  221. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/seedDataMngtPages.ts +0 -258
  222. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/AgentPanel.tsx +0 -497
  223. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/skills.ts +0 -464
@@ -1,12 +1,9 @@
1
- import { useMemo, useRef } from "react";
2
- import type { IResourceItem, ResourceProps } from "@refinedev/core";
3
- import {
4
- DashboardOutlined,
5
- SettingOutlined,
6
- } from "@ant-design/icons";
7
- import { getRoutePath } from "config/routeRegistry";
8
- import { useUserPageAccess } from "./useUserPageAccess";
9
- import generatedResources from "generated/resources";
1
+ import { useMemo, useRef } from 'react';
2
+ import type { IResourceItem, ResourceProps } from '@refinedev/core';
3
+ import { DashboardOutlined, SettingOutlined } from '@ant-design/icons';
4
+ import { getRoutePath } from 'config/routeRegistry';
5
+ import { useUserPageAccess } from './useUserPageAccess';
6
+ import generatedResources from 'generated/resources';
10
7
 
11
8
  /**
12
9
  * Dynamic Resources Hook for erp-backend/web
@@ -46,7 +43,8 @@ const PAGES_WITH_TABS: string[] = [];
46
43
 
47
44
  export const useDynamicResources = (): IResourceItem[] => {
48
45
  // Use shared page access data (single call, reused below)
49
- const { accessiblePageIds, pagesData, pageMap, isLoading, roleNames } = useUserPageAccess();
46
+ const { accessiblePageIds, pagesData, pageMap, isLoading, roleNames } =
47
+ useUserPageAccess();
50
48
 
51
49
  // If we already have cached resources, return immediately
52
50
  if (cachedResources !== null) {
@@ -66,11 +64,13 @@ export const useDynamicResources = (): IResourceItem[] => {
66
64
  }
67
65
 
68
66
  // Filter accessible pages and build hierarchical sorted list
69
- const accessiblePages = pagesData.filter(page => accessiblePageIds.has(page.id));
67
+ const accessiblePages = pagesData.filter((page) =>
68
+ accessiblePageIds.has(page.id),
69
+ );
70
70
 
71
71
  // Group pages by parentId
72
72
  const pagesByParent = new Map<number | null, typeof accessiblePages>();
73
- accessiblePages.forEach(page => {
73
+ accessiblePages.forEach((page) => {
74
74
  const parentId = page.parentId ?? null;
75
75
  if (!pagesByParent.has(parentId)) {
76
76
  pagesByParent.set(parentId, []);
@@ -79,7 +79,7 @@ export const useDynamicResources = (): IResourceItem[] => {
79
79
  });
80
80
 
81
81
  // Sort each group by sortOrder
82
- pagesByParent.forEach(pages => {
82
+ pagesByParent.forEach((pages) => {
83
83
  pages.sort((a, b) => (a.sortOrder ?? Infinity) - (b.sortOrder ?? Infinity));
84
84
  });
85
85
 
@@ -89,7 +89,7 @@ export const useDynamicResources = (): IResourceItem[] => {
89
89
 
90
90
  const addPageWithChildren = (parentId: number | null) => {
91
91
  const children = pagesByParent.get(parentId) || [];
92
- children.forEach(page => {
92
+ children.forEach((page) => {
93
93
  if (visited.has(page.id)) return;
94
94
  visited.add(page.id);
95
95
  sortedAccessiblePages.push(page);
@@ -101,7 +101,7 @@ export const useDynamicResources = (): IResourceItem[] => {
101
101
  addPageWithChildren(null);
102
102
 
103
103
  // Add any orphaned pages
104
- accessiblePages.forEach(page => {
104
+ accessiblePages.forEach((page) => {
105
105
  if (!visited.has(page.id)) {
106
106
  sortedAccessiblePages.push(page);
107
107
  }
@@ -111,7 +111,7 @@ export const useDynamicResources = (): IResourceItem[] => {
111
111
  // 这类父页面应作为纯分组节点(不注册 list 路径),否则 Refine 会优先选中父节点
112
112
  // 导致 "全部" 等 index 子菜单项无法高亮
113
113
  const parentIdsWithIndexChild = new Set<number>();
114
- accessiblePages.forEach(childPage => {
114
+ accessiblePages.forEach((childPage) => {
115
115
  if (!childPage.parentId) return;
116
116
  const childPath = getRoutePath(childPage.code);
117
117
  if (!childPath) return;
@@ -127,7 +127,7 @@ export const useDynamicResources = (): IResourceItem[] => {
127
127
  const resultResources: IResourceItem[] = [];
128
128
  const addedResourceNames = new Set<string>();
129
129
 
130
- sortedAccessiblePages.forEach(page => {
130
+ sortedAccessiblePages.forEach((page) => {
131
131
  if (!page) return;
132
132
 
133
133
  // Skip virtual pages
@@ -158,7 +158,9 @@ export const useDynamicResources = (): IResourceItem[] => {
158
158
  // fallback 到 page.path(用于 gadmin2 页面)
159
159
  const registryPath = getRoutePath(page.code);
160
160
  const dbPath = page.path
161
- ? page.path.startsWith("/") ? page.path : `/${page.path}`
161
+ ? page.path.startsWith('/')
162
+ ? page.path
163
+ : `/${page.path}`
162
164
  : undefined;
163
165
  const normalizedPath = registryPath ?? dbPath;
164
166
 
@@ -170,17 +172,19 @@ export const useDynamicResources = (): IResourceItem[] => {
170
172
  // Store both zhLabel/enLabel in meta; Sider resolves at render time
171
173
  const resource: IResourceItem = {
172
174
  name: permissionRes,
173
- ...(!isGroupParent && normalizedPath && {
174
- list: normalizedPath,
175
- show: `${normalizedPath}/show/:id`,
176
- edit: `${normalizedPath}/edit/:id`,
177
- create: `${normalizedPath}/create`,
178
- }),
175
+ ...(!isGroupParent &&
176
+ normalizedPath && {
177
+ list: normalizedPath,
178
+ show: `${normalizedPath}/show/:id`,
179
+ edit: `${normalizedPath}/edit/:id`,
180
+ create: `${normalizedPath}/create`,
181
+ clone: `${normalizedPath}/clone/:id`,
182
+ }),
179
183
  meta: {
180
184
  label: page.enName || page.code,
181
185
  zhLabel: page.zhName || page.code,
182
186
  enLabel: page.enName || page.code,
183
- icon: iconMapping[page.code] || "",
187
+ icon: iconMapping[page.code] || '',
184
188
  parent: parentPermissionRes,
185
189
  route: normalizedPath,
186
190
  pageCode: page.code,
@@ -203,8 +207,13 @@ export const useDynamicResources = (): IResourceItem[] => {
203
207
  isComputing = false;
204
208
 
205
209
  if (import.meta.env.DEV) {
206
- console.log('[useDynamicResources] ✅ Resources cached. Count:', cachedResources.length);
207
- console.log('[useDynamicResources] 📌 This reference will be reused for all future calls');
210
+ console.log(
211
+ '[useDynamicResources] Resources cached. Count:',
212
+ cachedResources.length,
213
+ );
214
+ console.log(
215
+ '[useDynamicResources] 📌 This reference will be reused for all future calls',
216
+ );
208
217
  }
209
218
 
210
219
  return cachedResources;
@@ -0,0 +1,144 @@
1
+ import { useEffect, useLayoutEffect, useRef, useCallback } from 'react';
2
+ import * as echarts from 'echarts';
3
+
4
+ type UseEChartsOpts = {
5
+ option: echarts.EChartsCoreOption;
6
+ theme?: string;
7
+ renderer?: 'canvas' | 'svg';
8
+ onEvents?: Record<string, (params: any, chart: echarts.ECharts) => void>;
9
+ shouldUpdate?: (
10
+ prev: echarts.EChartsCoreOption,
11
+ next: echarts.EChartsCoreOption,
12
+ ) => boolean;
13
+ };
14
+
15
+ function hasSize(el: HTMLElement): boolean {
16
+ return el.clientWidth > 0 && el.clientHeight > 0;
17
+ }
18
+
19
+ export function useECharts<T extends HTMLDivElement>({
20
+ option,
21
+ theme,
22
+ renderer = 'canvas',
23
+ onEvents,
24
+ shouldUpdate,
25
+ }: UseEChartsOpts) {
26
+ const domRef = useRef<T | null>(null);
27
+ const chartRef = useRef<echarts.ECharts | null>(null);
28
+ const lastOptionRef = useRef<echarts.EChartsCoreOption | null>(null);
29
+ const roRef = useRef<ResizeObserver | null>(null);
30
+ const pendingOptionRef = useRef<echarts.EChartsCoreOption | null>(null);
31
+ const mountedRef = useRef(true);
32
+
33
+ const applyOption = useCallback(
34
+ (chart: echarts.ECharts, opt: echarts.EChartsCoreOption) => {
35
+ const need =
36
+ !lastOptionRef.current ||
37
+ (shouldUpdate ? shouldUpdate(lastOptionRef.current, opt) : true);
38
+ if (need) {
39
+ chart.setOption(opt, { notMerge: false, lazyUpdate: true });
40
+ lastOptionRef.current = opt;
41
+ }
42
+ },
43
+ [shouldUpdate],
44
+ );
45
+
46
+ const initChart = useCallback(() => {
47
+ if (!domRef.current) return;
48
+ if (!hasSize(domRef.current)) return;
49
+
50
+ const existing = echarts.getInstanceByDom(domRef.current as any);
51
+ if (existing) {
52
+ chartRef.current = existing;
53
+ if (pendingOptionRef.current) {
54
+ applyOption(existing, pendingOptionRef.current);
55
+ pendingOptionRef.current = null;
56
+ }
57
+ return;
58
+ }
59
+
60
+ const chart = echarts.init(domRef.current, theme, { renderer });
61
+ chartRef.current = chart;
62
+
63
+ if (onEvents) {
64
+ Object.entries(onEvents).forEach(([evt, handler]) => {
65
+ chart.on(evt as any, (p: any) => handler(p, chart));
66
+ });
67
+ }
68
+
69
+ if (pendingOptionRef.current) {
70
+ applyOption(chart, pendingOptionRef.current);
71
+ pendingOptionRef.current = null;
72
+ }
73
+ }, [theme, renderer, onEvents, applyOption]);
74
+
75
+ useLayoutEffect(() => {
76
+ mountedRef.current = true;
77
+ if (chartRef.current) {
78
+ chartRef.current.dispose();
79
+ chartRef.current = null;
80
+ }
81
+
82
+ initChart();
83
+
84
+ if (!chartRef.current) {
85
+ const timers = [
86
+ window.setTimeout(() => {
87
+ if (mountedRef.current) initChart();
88
+ }, 50),
89
+ window.setTimeout(() => {
90
+ if (mountedRef.current) initChart();
91
+ }, 200),
92
+ window.setTimeout(() => {
93
+ if (mountedRef.current) initChart();
94
+ }, 500),
95
+ ];
96
+ return () => {
97
+ mountedRef.current = false;
98
+ timers.forEach(clearTimeout);
99
+ if (chartRef.current) {
100
+ chartRef.current.dispose();
101
+ chartRef.current = null;
102
+ }
103
+ };
104
+ }
105
+
106
+ return () => {
107
+ mountedRef.current = false;
108
+ if (chartRef.current) {
109
+ chartRef.current.dispose();
110
+ chartRef.current = null;
111
+ }
112
+ };
113
+ }, [initChart]);
114
+
115
+ useEffect(() => {
116
+ if (!domRef.current) return;
117
+
118
+ roRef.current = new ResizeObserver(() => {
119
+ requestAnimationFrame(() => {
120
+ if (!chartRef.current) {
121
+ initChart();
122
+ } else {
123
+ chartRef.current.resize();
124
+ }
125
+ });
126
+ });
127
+ roRef.current.observe(domRef.current);
128
+
129
+ return () => {
130
+ roRef.current?.disconnect();
131
+ roRef.current = null;
132
+ };
133
+ }, [initChart]);
134
+
135
+ useEffect(() => {
136
+ if (!chartRef.current) {
137
+ pendingOptionRef.current = option;
138
+ return;
139
+ }
140
+ applyOption(chartRef.current, option);
141
+ }, [option, applyOption]);
142
+
143
+ return { domRef, chartRef };
144
+ }
@@ -1,13 +1,13 @@
1
- import { useEffect, useState } from "react";
1
+ import { useEffect, useState } from 'react';
2
2
 
3
- import { customRequest } from "helpers/login";
3
+ import { customRequest } from 'helpers/http';
4
4
 
5
5
  export const useFetchData = (
6
6
  url: string,
7
- type: "post" | "get",
7
+ type: 'post' | 'get',
8
8
  defaultQuery?: any,
9
9
  disableReq?: any,
10
- errorCallBack?: () => void
10
+ errorCallBack?: () => void,
11
11
  ) => {
12
12
  const [data, setData] = useState<any>();
13
13
  const [reqQuery, setReqQuery] = useState<any>(defaultQuery);
@@ -1,5 +1,5 @@
1
- import { useMemo, useCallback } from "react";
2
- import { useLocation } from "react-router-dom";
1
+ import { useMemo, useCallback } from 'react';
2
+ import { useLocation } from 'react-router-dom';
3
3
  import {
4
4
  CrudFilters,
5
5
  HttpError,
@@ -10,18 +10,18 @@ import {
10
10
  useUpdate,
11
11
  useApiUrl,
12
12
  BaseRecord,
13
- } from "@refinedev/core";
14
- import { useTable, useImport } from "@refinedev/antd";
15
- import dayjs from "dayjs";
16
- import { useBatchOperations } from "./useBatchOperations";
17
- import { ListPageConfig, UseListPageStateResult } from "./types";
13
+ } from '@refinedev/core';
14
+ import { useTable, useImport } from '@refinedev/antd';
15
+ import dayjs from 'dayjs';
16
+ import { useBatchOperations } from './useBatchOperations';
17
+ import { ListPageConfig, UseListPageStateResult } from './types';
18
18
  import {
19
19
  ModelType,
20
20
  FieldDataType,
21
21
  produceModel,
22
22
  getColumns,
23
23
  tableSearchBar,
24
- } from "@gadmin2n/react-common";
24
+ } from '@gadmin2n/react-common';
25
25
 
26
26
  export interface UseListPageStateConfig {
27
27
  resourceName: string;
@@ -29,16 +29,16 @@ export interface UseListPageStateConfig {
29
29
  rawModel: ModelType;
30
30
  /** Model customizations */
31
31
  modelOverrides?: Record<string, Partial<FieldDataType>>;
32
- tableConfig: ListPageConfig["tableConfig"];
32
+ tableConfig: ListPageConfig['tableConfig'];
33
33
  prismaSelect?: any;
34
- modelsMap: ListPageConfig["modelsMap"];
35
- modelsEnum: ListPageConfig["modelsEnum"];
34
+ modelsMap: ListPageConfig['modelsMap'];
35
+ modelsEnum: ListPageConfig['modelsEnum'];
36
36
  /** API URL, will use useApiUrl() if not provided */
37
37
  apiUrl?: string;
38
38
  /** Function to get request headers for batch operations */
39
39
  requestHeaders?: () => Record<string, string>;
40
40
  /** Hook to get relation select props */
41
- useRelation?: (modelsMap: ListPageConfig["modelsMap"]) => Record<string, any>;
41
+ useRelation?: (modelsMap: ListPageConfig['modelsMap']) => Record<string, any>;
42
42
  /** Search fields configuration */
43
43
  searchFields?: {
44
44
  keyword?: string;
@@ -60,7 +60,7 @@ export function useListPageState<T extends BaseRecord = any>({
60
60
  apiUrl: customApiUrl,
61
61
  requestHeaders,
62
62
  useRelation,
63
- searchFields = { keyword: "q", dateRange: ["createdAt"] },
63
+ searchFields = { keyword: 'q', dateRange: ['createdAt'] },
64
64
  }: UseListPageStateConfig): UseListPageStateResult {
65
65
  const t = useTranslate();
66
66
  const defaultApiUrl = useApiUrl();
@@ -87,7 +87,7 @@ export function useListPageState<T extends BaseRecord = any>({
87
87
  // Get search bar configuration
88
88
  const { placeholder: searchPlaceholder, getSearchFilters } = useMemo(
89
89
  () => tableSearchBar(tableConfig.toolbar.searchBar, rawModel),
90
- [tableConfig.toolbar.searchBar, rawModel]
90
+ [tableConfig.toolbar.searchBar, rawModel],
91
91
  );
92
92
 
93
93
  // Table hook
@@ -106,7 +106,7 @@ export function useListPageState<T extends BaseRecord = any>({
106
106
  },
107
107
  filters: {
108
108
  initial: parsedFilters,
109
- defaultBehavior: "merge",
109
+ defaultBehavior: 'merge',
110
110
  },
111
111
  sorters: {
112
112
  initial: parsedSorter,
@@ -114,59 +114,59 @@ export function useListPageState<T extends BaseRecord = any>({
114
114
  });
115
115
 
116
116
  // Initialize search form values
117
- const keywordField = searchFields.keyword || "q";
118
- const dateRangeField = searchFields.dateRange?.[0] || "createdAt";
117
+ const keywordField = searchFields.keyword || 'q';
118
+ const dateRangeField = searchFields.dateRange?.[0] || 'createdAt';
119
119
 
120
120
  searchFormProps.initialValues = useMemo(
121
121
  () => ({
122
122
  [keywordField]: parsedFilters.find((f: any) => f.field === keywordField)
123
123
  ?.value,
124
124
  [dateRangeField]: parsedFilters.find(
125
- (f: any) => f.field === dateRangeField && f.operator === "gte"
125
+ (f: any) => f.field === dateRangeField && f.operator === 'gte',
126
126
  )
127
127
  ? [
128
128
  dayjs(
129
129
  parsedFilters.find(
130
- (f: any) => f.field === dateRangeField && f.operator === "gte"
131
- )?.value
130
+ (f: any) => f.field === dateRangeField && f.operator === 'gte',
131
+ )?.value,
132
132
  ),
133
133
  dayjs(
134
134
  parsedFilters.find(
135
- (f: any) => f.field === dateRangeField && f.operator === "lte"
136
- )?.value
135
+ (f: any) => f.field === dateRangeField && f.operator === 'lte',
136
+ )?.value,
137
137
  ),
138
138
  ]
139
139
  : [undefined, undefined],
140
140
  }),
141
- [parsedFilters, keywordField, dateRangeField]
141
+ [parsedFilters, keywordField, dateRangeField],
142
142
  );
143
143
 
144
144
  // Search form submit handler
145
145
  searchFormProps.onFinish = useCallback(
146
146
  (values: any) => {
147
147
  const fs: CrudFilters = [];
148
- const keyword = (values[keywordField] || "").trim();
148
+ const keyword = (values[keywordField] || '').trim();
149
149
  const dateRange = values[dateRangeField];
150
150
 
151
151
  if (dateRange && dateRange[0]) {
152
152
  fs.push(
153
153
  {
154
154
  field: dateRangeField,
155
- operator: "gte",
155
+ operator: 'gte',
156
156
  value: dateRange[0]?.toISOString?.(),
157
157
  },
158
158
  {
159
159
  field: dateRangeField,
160
- operator: "lte",
160
+ operator: 'lte',
161
161
  value: dateRange[1]?.toISOString?.(),
162
- }
162
+ },
163
163
  );
164
164
  }
165
165
 
166
166
  if (keyword) {
167
167
  fs.push({
168
168
  field: keywordField,
169
- operator: "eq",
169
+ operator: 'eq',
170
170
  value: keyword,
171
171
  });
172
172
  }
@@ -177,12 +177,12 @@ export function useListPageState<T extends BaseRecord = any>({
177
177
  [],
178
178
  fs,
179
179
  prevFilters.filter(
180
- (item: any) => ![keywordField, dateRangeField].includes(item.field)
181
- )
182
- )
180
+ (item: any) => ![keywordField, dateRangeField].includes(item.field),
181
+ ),
182
+ ),
183
183
  );
184
184
  },
185
- [keywordField, dateRangeField, setCurrent, setFilters]
185
+ [keywordField, dateRangeField, setCurrent, setFilters],
186
186
  );
187
187
 
188
188
  // Batch operations
@@ -227,7 +227,7 @@ export function useListPageState<T extends BaseRecord = any>({
227
227
  values,
228
228
  });
229
229
  },
230
- [updateRow, resourceName]
230
+ [updateRow, resourceName],
231
231
  );
232
232
 
233
233
  // Get relation select props
@@ -257,7 +257,7 @@ export function useListPageState<T extends BaseRecord = any>({
257
257
  apiUrl,
258
258
  relationSelectProps,
259
259
  searchPlaceholder,
260
- ]
260
+ ],
261
261
  );
262
262
 
263
263
  return {
@@ -1,6 +1,6 @@
1
- import { useEffect, useState } from "react";
1
+ import { useEffect, useState } from 'react';
2
2
 
3
- import { useFetchData } from "./useFetchData";
3
+ import { useFetchData } from './useFetchData';
4
4
 
5
5
  export interface RoleOption {
6
6
  label: string;
@@ -8,14 +8,18 @@ export interface RoleOption {
8
8
  }
9
9
 
10
10
  export const useRoles = () => {
11
- const { data: rolesData, loading } = useFetchData("role/findMany", "post", {});
11
+ const { data: rolesData, loading } = useFetchData(
12
+ 'role/findMany',
13
+ 'post',
14
+ {},
15
+ );
12
16
  const [roleOptions, setRoleOptions] = useState<RoleOption[]>([]);
13
17
 
14
18
  useEffect(() => {
15
19
  if (rolesData?.data) {
16
20
  const roles = Array.isArray(rolesData.data) ? rolesData.data : [];
17
21
  const options = roles.map((role: any) => ({
18
- label: `${role.name} (${role.description || ""})`,
22
+ label: `${role.name} (${role.description || ''})`,
19
23
  value: role.name,
20
24
  }));
21
25
  setRoleOptions(options);
@@ -1,4 +1,4 @@
1
- import { useState, useCallback } from "react";
1
+ import { useState, useCallback } from 'react';
2
2
 
3
3
  export interface UseRowSelectionResult {
4
4
  selectedRowKeys: React.Key[];