@gadmin2n/cli 0.0.81 → 0.0.83

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 (282) hide show
  1. package/.yalc/@gadmin2n/schematics/LICENSE +21 -0
  2. package/.yalc/@gadmin2n/schematics/README.md +9 -0
  3. package/.yalc/@gadmin2n/schematics/dist/collection.json +122 -0
  4. package/.yalc/@gadmin2n/schematics/dist/index.d.ts +2 -0
  5. package/.yalc/@gadmin2n/schematics/dist/index.js +18 -0
  6. package/.yalc/@gadmin2n/schematics/dist/lib/application/application.factory.d.ts +3 -0
  7. package/.yalc/@gadmin2n/schematics/dist/lib/application/application.factory.js +92 -0
  8. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/.dockerignore +33 -0
  9. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/Dockerfile +63 -0
  10. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/Jenkinsfile +70 -0
  11. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/config/.types.d.ts +143 -0
  12. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/config/prisma/default-schema.prisma +46 -0
  13. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/config/prisma/page.prisma +116 -0
  14. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/readme.md +49 -0
  15. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/server/.env +31 -0
  16. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/server/.env.local +1 -0
  17. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/server/.prettierignore +1 -0
  18. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/server/README.md +55 -0
  19. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/server/gadmin-cli.json +17 -0
  20. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/server/migrate-between-pg-schemas.js +1232 -0
  21. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/server/package.json +141 -0
  22. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/server/prisma/.generator.prisma +34 -0
  23. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/server/start-prod.sh +130 -0
  24. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/server/test/jest-e2e.json +9 -0
  25. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/server/tsconfig.build.json +4 -0
  26. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/README.MD +48 -0
  27. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/index.html +19 -0
  28. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/package.json +81 -0
  29. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/postcss.config.cjs +6 -0
  30. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/public/favicon.ico +0 -0
  31. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/public/images/flags/en.svg +1 -0
  32. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/public/images/flags/zh_CN.svg +11 -0
  33. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/App.tsx +111 -0
  34. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/BulkActions.tsx +236 -0
  35. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/ListPageHeader.tsx +56 -0
  36. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/RowActions.tsx +292 -0
  37. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/SearchBar.tsx +294 -0
  38. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/VanillaJSONEditor/index.css +10 -0
  39. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/VanillaJSONEditor/index.jsx +53 -0
  40. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/AgentContext.tsx +201 -0
  41. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/AgentPanel.tsx +497 -0
  42. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/ElementInspector.tsx +282 -0
  43. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/eventList/index.tsx +62 -0
  44. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/logButton/index.tsx +96 -0
  45. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/logList/index.tsx +73 -0
  46. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/modalDiffViewer/index.tsx +104 -0
  47. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/index.tsx +2 -0
  48. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/contexts/business/index.tsx +65 -0
  49. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/contexts/color-mode/index.tsx +58 -0
  50. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/custom-avatar.tsx +38 -0
  51. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/header.tsx +121 -0
  52. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/layout.tsx +32 -0
  53. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/logo.tsx +19 -0
  54. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/sider.tsx +383 -0
  55. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/title.tsx +61 -0
  56. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/offLayoutArea/index.tsx +5 -0
  57. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/pagination-total.tsx +21 -0
  58. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/tags/role-tag.tsx +44 -0
  59. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/text.tsx +74 -0
  60. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/config/routeRegistry.tsx +175 -0
  61. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/form.tsx +421 -0
  62. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/index.tsx +3 -0
  63. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/list.tsx +465 -0
  64. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/show.tsx +182 -0
  65. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useDynamicResources.tsx +211 -0
  66. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/index.tsx +20 -0
  67. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/locales/en/common.json +128 -0
  68. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/locales/zh_CN/common.json +130 -0
  69. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/meta.json +4 -0
  70. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/components/action-cell.css +3 -0
  71. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/components/action-cell.tsx +134 -0
  72. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/create.tsx +113 -0
  73. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/edit.tsx +122 -0
  74. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/index.tsx +6 -0
  75. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/list.tsx +213 -0
  76. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/show.tsx +61 -0
  77. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/Components/AssignRolesModal.tsx +168 -0
  78. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/Components/CreatePageModal.tsx +42 -0
  79. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/Components/EditPageModal.tsx +42 -0
  80. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/Components/PageDetailDrawer.tsx +101 -0
  81. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/Components/PageFormModal.tsx +731 -0
  82. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/create.tsx +113 -0
  83. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/edit.tsx +122 -0
  84. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/index.tsx +6 -0
  85. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/list.tsx +1113 -0
  86. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/show.tsx +61 -0
  87. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/pageResource/create.tsx +113 -0
  88. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/pageResource/edit.tsx +122 -0
  89. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/pageResource/index.tsx +6 -0
  90. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/pageResource/list.tsx +243 -0
  91. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/pageResource/show.tsx +61 -0
  92. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/permission-readme/index.tsx +1088 -0
  93. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/Components/CreateModal.tsx +25 -0
  94. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/Components/EditModal.tsx +28 -0
  95. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/Components/ResourceDetailDrawer.tsx +160 -0
  96. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/Components/modal.tsx +202 -0
  97. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/create.tsx +113 -0
  98. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/edit.tsx +122 -0
  99. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/index.tsx +6 -0
  100. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/list.tsx +184 -0
  101. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/show.tsx +61 -0
  102. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/Components/CreateModal.tsx +30 -0
  103. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/Components/EditModal.tsx +47 -0
  104. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/Components/RoleDetailDrawer.tsx +56 -0
  105. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/Components/modal.tsx +302 -0
  106. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/create.tsx +113 -0
  107. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/edit.tsx +122 -0
  108. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/index.tsx +6 -0
  109. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/list.tsx +382 -0
  110. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/show.tsx +61 -0
  111. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/rolePages/create.tsx +113 -0
  112. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/rolePages/edit.tsx +122 -0
  113. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/rolePages/index.tsx +6 -0
  114. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/rolePages/list.tsx +243 -0
  115. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/rolePages/show.tsx +61 -0
  116. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/roleResource/create.tsx +113 -0
  117. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/roleResource/edit.tsx +122 -0
  118. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/roleResource/index.tsx +6 -0
  119. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/roleResource/list.tsx +243 -0
  120. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/roleResource/show.tsx +61 -0
  121. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/create-modal.tsx +17 -0
  122. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/edit-modal.tsx +19 -0
  123. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/form-modal.tsx +188 -0
  124. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/role-tag.tsx +48 -0
  125. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/show-drawer.tsx +140 -0
  126. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/create.tsx +113 -0
  127. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/edit.tsx +122 -0
  128. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/index.tsx +6 -0
  129. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/list.tsx +342 -0
  130. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/show.tsx +61 -0
  131. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/antd.css +132 -0
  132. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/fc.css +58 -0
  133. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/index.css +128 -0
  134. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/show-drawer.module.css +18 -0
  135. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/show-page.module.css +21 -0
  136. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/utilities/utils.tsx +5 -0
  137. package/.yalc/@gadmin2n/schematics/dist/lib/application/files/gadmin2-game-angle-demo/web/src/vite-env.d.ts +1 -0
  138. package/.yalc/@gadmin2n/schematics/dist/lib/application/schema.json +99 -0
  139. package/.yalc/@gadmin2n/schematics/dist/lib/class/class.factory.d.ts +3 -0
  140. package/.yalc/@gadmin2n/schematics/dist/lib/class/class.factory.js +42 -0
  141. package/.yalc/@gadmin2n/schematics/dist/lib/class/files/js/__name__.js +1 -0
  142. package/.yalc/@gadmin2n/schematics/dist/lib/class/files/js/__name__.spec.js +7 -0
  143. package/.yalc/@gadmin2n/schematics/dist/lib/class/schema.json +45 -0
  144. package/.yalc/@gadmin2n/schematics/dist/lib/client-app/angular/angular.factory.d.ts +3 -0
  145. package/.yalc/@gadmin2n/schematics/dist/lib/client-app/angular/angular.factory.js +98 -0
  146. package/.yalc/@gadmin2n/schematics/dist/lib/client-app/angular/schema.json +24 -0
  147. package/.yalc/@gadmin2n/schematics/dist/lib/configuration/configuration.factory.d.ts +3 -0
  148. package/.yalc/@gadmin2n/schematics/dist/lib/configuration/configuration.factory.js +24 -0
  149. package/.yalc/@gadmin2n/schematics/dist/lib/configuration/files/js/nest-cli.json +6 -0
  150. package/.yalc/@gadmin2n/schematics/dist/lib/configuration/files/ts/nest-cli.json +5 -0
  151. package/.yalc/@gadmin2n/schematics/dist/lib/controller/controller.factory.d.ts +3 -0
  152. package/.yalc/@gadmin2n/schematics/dist/lib/controller/controller.factory.js +118 -0
  153. package/.yalc/@gadmin2n/schematics/dist/lib/controller/files/js/__name__.controller.js +4 -0
  154. package/.yalc/@gadmin2n/schematics/dist/lib/controller/files/js/__name__.controller.spec.js +18 -0
  155. package/.yalc/@gadmin2n/schematics/dist/lib/controller/schema.json +51 -0
  156. package/.yalc/@gadmin2n/schematics/dist/lib/decorator/decorator.factory.d.ts +3 -0
  157. package/.yalc/@gadmin2n/schematics/dist/lib/decorator/decorator.factory.js +33 -0
  158. package/.yalc/@gadmin2n/schematics/dist/lib/decorator/files/js/__name__.decorator.js +3 -0
  159. package/.yalc/@gadmin2n/schematics/dist/lib/decorator/schema.json +36 -0
  160. package/.yalc/@gadmin2n/schematics/dist/lib/defaults.d.ts +16 -0
  161. package/.yalc/@gadmin2n/schematics/dist/lib/defaults.js +19 -0
  162. package/.yalc/@gadmin2n/schematics/dist/lib/filter/files/js/__name__.filter.js +6 -0
  163. package/.yalc/@gadmin2n/schematics/dist/lib/filter/files/js/__name__.filter.spec.js +7 -0
  164. package/.yalc/@gadmin2n/schematics/dist/lib/filter/filter.factory.d.ts +3 -0
  165. package/.yalc/@gadmin2n/schematics/dist/lib/filter/filter.factory.js +34 -0
  166. package/.yalc/@gadmin2n/schematics/dist/lib/filter/schema.json +41 -0
  167. package/.yalc/@gadmin2n/schematics/dist/lib/gateway/files/js/__name__.gateway.js +9 -0
  168. package/.yalc/@gadmin2n/schematics/dist/lib/gateway/files/js/__name__.gateway.spec.js +18 -0
  169. package/.yalc/@gadmin2n/schematics/dist/lib/gateway/gateway.factory.d.ts +3 -0
  170. package/.yalc/@gadmin2n/schematics/dist/lib/gateway/gateway.factory.js +62 -0
  171. package/.yalc/@gadmin2n/schematics/dist/lib/gateway/schema.json +41 -0
  172. package/.yalc/@gadmin2n/schematics/dist/lib/guard/files/js/__name__.guard.js +8 -0
  173. package/.yalc/@gadmin2n/schematics/dist/lib/guard/files/js/__name__.guard.spec.js +7 -0
  174. package/.yalc/@gadmin2n/schematics/dist/lib/guard/guard.factory.d.ts +3 -0
  175. package/.yalc/@gadmin2n/schematics/dist/lib/guard/guard.factory.js +34 -0
  176. package/.yalc/@gadmin2n/schematics/dist/lib/guard/schema.json +41 -0
  177. package/.yalc/@gadmin2n/schematics/dist/lib/interceptor/files/js/__name__.interceptor.js +8 -0
  178. package/.yalc/@gadmin2n/schematics/dist/lib/interceptor/files/js/__name__.interceptor.spec.js +7 -0
  179. package/.yalc/@gadmin2n/schematics/dist/lib/interceptor/interceptor.factory.d.ts +3 -0
  180. package/.yalc/@gadmin2n/schematics/dist/lib/interceptor/interceptor.factory.js +116 -0
  181. package/.yalc/@gadmin2n/schematics/dist/lib/interceptor/schema.json +50 -0
  182. package/.yalc/@gadmin2n/schematics/dist/lib/interface/interface.factory.d.ts +3 -0
  183. package/.yalc/@gadmin2n/schematics/dist/lib/interface/interface.factory.js +32 -0
  184. package/.yalc/@gadmin2n/schematics/dist/lib/interface/schema.json +32 -0
  185. package/.yalc/@gadmin2n/schematics/dist/lib/library/files/js/.babelrc +4 -0
  186. package/.yalc/@gadmin2n/schematics/dist/lib/library/files/js/jsconfig.json +9 -0
  187. package/.yalc/@gadmin2n/schematics/dist/lib/library/files/js/src/__name__.module.js +8 -0
  188. package/.yalc/@gadmin2n/schematics/dist/lib/library/files/js/src/__name__.service.js +4 -0
  189. package/.yalc/@gadmin2n/schematics/dist/lib/library/files/js/src/__name__.service.spec.js +18 -0
  190. package/.yalc/@gadmin2n/schematics/dist/lib/library/files/js/src/index.js +2 -0
  191. package/.yalc/@gadmin2n/schematics/dist/lib/library/files/ts/tsconfig.lib.json +9 -0
  192. package/.yalc/@gadmin2n/schematics/dist/lib/library/library.factory.d.ts +3 -0
  193. package/.yalc/@gadmin2n/schematics/dist/lib/library/library.factory.js +190 -0
  194. package/.yalc/@gadmin2n/schematics/dist/lib/library/schema.json +37 -0
  195. package/.yalc/@gadmin2n/schematics/dist/lib/middleware/files/js/__name__.middleware.js +8 -0
  196. package/.yalc/@gadmin2n/schematics/dist/lib/middleware/files/js/__name__.middleware.spec.js +7 -0
  197. package/.yalc/@gadmin2n/schematics/dist/lib/middleware/middleware.factory.d.ts +3 -0
  198. package/.yalc/@gadmin2n/schematics/dist/lib/middleware/middleware.factory.js +34 -0
  199. package/.yalc/@gadmin2n/schematics/dist/lib/middleware/schema.json +41 -0
  200. package/.yalc/@gadmin2n/schematics/dist/lib/module/files/js/__name__.module.js +4 -0
  201. package/.yalc/@gadmin2n/schematics/dist/lib/module/module.factory.d.ts +3 -0
  202. package/.yalc/@gadmin2n/schematics/dist/lib/module/module.factory.js +58 -0
  203. package/.yalc/@gadmin2n/schematics/dist/lib/module/schema.json +46 -0
  204. package/.yalc/@gadmin2n/schematics/dist/lib/pipe/files/js/__name__.pipe.js +8 -0
  205. package/.yalc/@gadmin2n/schematics/dist/lib/pipe/files/js/__name__.pipe.spec.js +7 -0
  206. package/.yalc/@gadmin2n/schematics/dist/lib/pipe/pipe.factory.d.ts +3 -0
  207. package/.yalc/@gadmin2n/schematics/dist/lib/pipe/pipe.factory.js +34 -0
  208. package/.yalc/@gadmin2n/schematics/dist/lib/pipe/schema.json +41 -0
  209. package/.yalc/@gadmin2n/schematics/dist/lib/prisma-resource/prisma-resource.factory.d.ts +3 -0
  210. package/.yalc/@gadmin2n/schematics/dist/lib/prisma-resource/prisma-resource.factory.js +131 -0
  211. package/.yalc/@gadmin2n/schematics/dist/lib/prisma-resource/schema.json +91 -0
  212. package/.yalc/@gadmin2n/schematics/dist/lib/provider/files/js/__name__.js +4 -0
  213. package/.yalc/@gadmin2n/schematics/dist/lib/provider/files/js/__name__.spec.js +18 -0
  214. package/.yalc/@gadmin2n/schematics/dist/lib/provider/provider.factory.d.ts +3 -0
  215. package/.yalc/@gadmin2n/schematics/dist/lib/provider/provider.factory.js +67 -0
  216. package/.yalc/@gadmin2n/schematics/dist/lib/provider/schema.json +45 -0
  217. package/.yalc/@gadmin2n/schematics/dist/lib/resolver/files/js/__name__.resolver.js +4 -0
  218. package/.yalc/@gadmin2n/schematics/dist/lib/resolver/files/js/__name__.resolver.spec.js +18 -0
  219. package/.yalc/@gadmin2n/schematics/dist/lib/resolver/resolver.factory.d.ts +3 -0
  220. package/.yalc/@gadmin2n/schematics/dist/lib/resolver/resolver.factory.js +62 -0
  221. package/.yalc/@gadmin2n/schematics/dist/lib/resolver/schema.json +41 -0
  222. package/.yalc/@gadmin2n/schematics/dist/lib/resource/files/ts/__name__.graphql +24 -0
  223. package/.yalc/@gadmin2n/schematics/dist/lib/resource/resource.factory.d.ts +3 -0
  224. package/.yalc/@gadmin2n/schematics/dist/lib/resource/resource.factory.js +131 -0
  225. package/.yalc/@gadmin2n/schematics/dist/lib/resource/schema.json +90 -0
  226. package/.yalc/@gadmin2n/schematics/dist/lib/service/files/js/__name__.service.js +4 -0
  227. package/.yalc/@gadmin2n/schematics/dist/lib/service/files/js/__name__.service.spec.js +18 -0
  228. package/.yalc/@gadmin2n/schematics/dist/lib/service/schema.json +41 -0
  229. package/.yalc/@gadmin2n/schematics/dist/lib/service/service.factory.d.ts +3 -0
  230. package/.yalc/@gadmin2n/schematics/dist/lib/service/service.factory.js +63 -0
  231. package/.yalc/@gadmin2n/schematics/dist/lib/sub-app/files/js/.babelrc +4 -0
  232. package/.yalc/@gadmin2n/schematics/dist/lib/sub-app/files/js/index.js +2 -0
  233. package/.yalc/@gadmin2n/schematics/dist/lib/sub-app/files/js/jsconfig.json +10 -0
  234. package/.yalc/@gadmin2n/schematics/dist/lib/sub-app/files/js/src/app.controller.js +15 -0
  235. package/.yalc/@gadmin2n/schematics/dist/lib/sub-app/files/js/src/app.controller.spec.js +22 -0
  236. package/.yalc/@gadmin2n/schematics/dist/lib/sub-app/files/js/src/app.module.js +10 -0
  237. package/.yalc/@gadmin2n/schematics/dist/lib/sub-app/files/js/src/app.service.js +8 -0
  238. package/.yalc/@gadmin2n/schematics/dist/lib/sub-app/files/js/src/main.js +8 -0
  239. package/.yalc/@gadmin2n/schematics/dist/lib/sub-app/files/js/test/app.e2e-spec.js +23 -0
  240. package/.yalc/@gadmin2n/schematics/dist/lib/sub-app/files/js/test/jest-e2e.json +5 -0
  241. package/.yalc/@gadmin2n/schematics/dist/lib/sub-app/files/ts/test/jest-e2e.json +9 -0
  242. package/.yalc/@gadmin2n/schematics/dist/lib/sub-app/files/ts/tsconfig.app.json +9 -0
  243. package/.yalc/@gadmin2n/schematics/dist/lib/sub-app/schema.json +32 -0
  244. package/.yalc/@gadmin2n/schematics/dist/lib/sub-app/sub-app.factory.d.ts +3 -0
  245. package/.yalc/@gadmin2n/schematics/dist/lib/sub-app/sub-app.factory.js +245 -0
  246. package/.yalc/@gadmin2n/schematics/dist/lib/sub-app/workspace/js/.babelrc +4 -0
  247. package/.yalc/@gadmin2n/schematics/dist/lib/sub-app/workspace/js/index.js +2 -0
  248. package/.yalc/@gadmin2n/schematics/dist/lib/sub-app/workspace/js/jsconfig.json +10 -0
  249. package/.yalc/@gadmin2n/schematics/dist/lib/sub-app/workspace/ts/tsconfig.app.json +9 -0
  250. package/.yalc/@gadmin2n/schematics/dist/utils/change.d.ts +46 -0
  251. package/.yalc/@gadmin2n/schematics/dist/utils/change.js +95 -0
  252. package/.yalc/@gadmin2n/schematics/dist/utils/dependencies.utils.d.ts +15 -0
  253. package/.yalc/@gadmin2n/schematics/dist/utils/dependencies.utils.js +42 -0
  254. package/.yalc/@gadmin2n/schematics/dist/utils/export-from.declarator.d.ts +10 -0
  255. package/.yalc/@gadmin2n/schematics/dist/utils/export-from.declarator.js +39 -0
  256. package/.yalc/@gadmin2n/schematics/dist/utils/formatting.d.ts +1 -0
  257. package/.yalc/@gadmin2n/schematics/dist/utils/formatting.js +12 -0
  258. package/.yalc/@gadmin2n/schematics/dist/utils/index.d.ts +9 -0
  259. package/.yalc/@gadmin2n/schematics/dist/utils/index.js +25 -0
  260. package/.yalc/@gadmin2n/schematics/dist/utils/json-file.util.d.ts +15 -0
  261. package/.yalc/@gadmin2n/schematics/dist/utils/json-file.util.js +68 -0
  262. package/.yalc/@gadmin2n/schematics/dist/utils/metadata.manager.d.ts +13 -0
  263. package/.yalc/@gadmin2n/schematics/dist/utils/metadata.manager.js +162 -0
  264. package/.yalc/@gadmin2n/schematics/dist/utils/module-import.declarator.d.ts +10 -0
  265. package/.yalc/@gadmin2n/schematics/dist/utils/module-import.declarator.js +39 -0
  266. package/.yalc/@gadmin2n/schematics/dist/utils/module-metadata.declarator.d.ts +4 -0
  267. package/.yalc/@gadmin2n/schematics/dist/utils/module-metadata.declarator.js +12 -0
  268. package/.yalc/@gadmin2n/schematics/dist/utils/module.declarator.d.ts +23 -0
  269. package/.yalc/@gadmin2n/schematics/dist/utils/module.declarator.js +32 -0
  270. package/.yalc/@gadmin2n/schematics/dist/utils/module.finder.d.ts +13 -0
  271. package/.yalc/@gadmin2n/schematics/dist/utils/module.finder.js +24 -0
  272. package/.yalc/@gadmin2n/schematics/dist/utils/name.parser.d.ts +12 -0
  273. package/.yalc/@gadmin2n/schematics/dist/utils/name.parser.js +17 -0
  274. package/.yalc/@gadmin2n/schematics/dist/utils/path.solver.d.ts +4 -0
  275. package/.yalc/@gadmin2n/schematics/dist/utils/path.solver.js +14 -0
  276. package/.yalc/@gadmin2n/schematics/dist/utils/source-root.helpers.d.ts +8 -0
  277. package/.yalc/@gadmin2n/schematics/dist/utils/source-root.helpers.js +35 -0
  278. package/.yalc/@gadmin2n/schematics/package.json +78 -0
  279. package/.yalc/@gadmin2n/schematics/yalc.sig +1 -0
  280. package/actions/prisma.action.js +2 -2
  281. package/package.json +2 -2
  282. package/yalc.lock +10 -0
@@ -0,0 +1,58 @@
1
+ import { RefineThemes } from "@refinedev/antd";
2
+ import { ConfigProvider } from "antd";
3
+ import type { ThemeConfig } from "antd";
4
+ import { PropsWithChildren } from "react";
5
+
6
+ const themeConfig: ThemeConfig = {
7
+ ...RefineThemes.Blue,
8
+ token: {
9
+ ...RefineThemes.Blue.token,
10
+ colorPrimary: "#1677FF",
11
+ colorError: "#fa541c",
12
+ colorPrimaryText: "rgba(0, 0, 0, 0.85)",
13
+ colorTextSecondary: "rgba(0, 0, 0, 0.65)",
14
+ colorTextTertiary: "rgba(0, 0, 0, 0.45)",
15
+ colorBgContainer: "#F7F8F9",
16
+ colorBgLayout: "#F0F2F5",
17
+ colorBorderBg: "#E8E9EA",
18
+ borderRadius: 6,
19
+ fontFamily:
20
+ "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'",
21
+ },
22
+ components: {
23
+ Typography: {
24
+ colorText: "rgba(0, 0, 0, 0.85)",
25
+ colorTextDescription: "rgba(0, 0, 0, 0.65)",
26
+ colorTextDisabled: "rgba(0, 0, 0, 0.45)",
27
+ },
28
+ Card: {
29
+ colorBgContainer: "#FFFFFF",
30
+ headerBg: "#FAFAFA",
31
+ },
32
+ Table: {
33
+ colorBgContainer: "#fff",
34
+ },
35
+ Input: {
36
+ colorBgContainer: "#fff",
37
+ },
38
+ InputNumber: {
39
+ colorBgContainer: "#fff",
40
+ },
41
+ Select: {
42
+ colorBgContainer: "#fff",
43
+ },
44
+ Form: {
45
+ labelFontSize: 14,
46
+ },
47
+ },
48
+ };
49
+
50
+ export const ColorModeContextProvider: React.FC<PropsWithChildren> = ({
51
+ children,
52
+ }) => {
53
+ return (
54
+ <ConfigProvider theme={themeConfig}>
55
+ {children}
56
+ </ConfigProvider>
57
+ );
58
+ };
@@ -0,0 +1,38 @@
1
+ import React, { memo } from "react";
2
+
3
+ import type { AvatarProps } from "antd";
4
+ import { Avatar as AntdAvatar } from "antd";
5
+
6
+ import { getNameInitials, getRandomColorFromString } from "utilities";
7
+
8
+ type Props = AvatarProps & {
9
+ name?: string;
10
+ };
11
+
12
+ const CustomAvatarComponent: React.FC<Props> = ({ name = "", style, ...rest }) => {
13
+ return (
14
+ <AntdAvatar
15
+ alt={name}
16
+ size="small"
17
+ style={{
18
+ backgroundColor: rest?.src
19
+ ? "transparent"
20
+ : getRandomColorFromString(name),
21
+ display: "flex",
22
+ alignItems: "center",
23
+ border: "none",
24
+ ...style,
25
+ }}
26
+ {...rest}
27
+ >
28
+ {getNameInitials(name)}
29
+ </AntdAvatar>
30
+ );
31
+ };
32
+
33
+ export const CustomAvatar = memo(
34
+ CustomAvatarComponent,
35
+ (prevProps, nextProps) => {
36
+ return prevProps.name === nextProps.name && prevProps.src === nextProps.src;
37
+ },
38
+ );
@@ -0,0 +1,121 @@
1
+ import { useGetLocale, useSetLocale, useGetIdentity } from "@refinedev/core";
2
+ import {
3
+ Layout,
4
+ Space,
5
+ Button,
6
+ Dropdown,
7
+ Avatar,
8
+ Typography,
9
+ theme,
10
+ Select,
11
+ Tooltip,
12
+ } from "antd";
13
+ import { DownOutlined, RobotOutlined } from "@ant-design/icons";
14
+ import { useTranslation } from "react-i18next";
15
+ import { useContext } from "react";
16
+ import { BusinessContext } from "components/contexts/business";
17
+ import { useAgent } from "components/agentPanel";
18
+ import type { MenuProps } from "antd";
19
+
20
+ type IUser = {
21
+ id: number;
22
+ name: string;
23
+ avatar: string;
24
+ };
25
+
26
+ const { Text } = Typography;
27
+ const { useToken } = theme;
28
+
29
+ const isDev = import.meta.env.DEV;
30
+
31
+ export const Header: React.FC = () => {
32
+ const { i18n } = useTranslation();
33
+ const locale = useGetLocale();
34
+ const changeLanguage = useSetLocale();
35
+ const { token } = useToken();
36
+ const { data: user } = useGetIdentity<IUser>();
37
+ const { business, setBusiness, businessList } = useContext(BusinessContext);
38
+ const agent = useAgent();
39
+ const openAgentPanel = agent?.open;
40
+
41
+ const currentLocale = locale();
42
+
43
+ const langMenu: MenuProps = {
44
+ selectedKeys: currentLocale ? [currentLocale] : [],
45
+ items: [...(i18n.languages || [])].sort().map((lang: string) => ({
46
+ key: lang,
47
+ icon: (
48
+ <span style={{ marginRight: 8 }}>
49
+ <Avatar size={16} src={`/images/flags/${lang}.svg`} />
50
+ </span>
51
+ ),
52
+ label: lang === "en" ? "English" : "中文",
53
+ })),
54
+ onClick: ({ key: lang }) => changeLanguage(lang),
55
+ };
56
+
57
+ const headerStyles: React.CSSProperties = {
58
+ backgroundColor: token.colorBgElevated,
59
+ display: "flex",
60
+ justifyContent: "flex-end",
61
+ alignItems: "center",
62
+ padding: "0px 24px",
63
+ height: "64px",
64
+ position: "sticky",
65
+ top: 0,
66
+ zIndex: 999,
67
+ };
68
+
69
+ return (
70
+ <Layout.Header style={headerStyles}>
71
+ {isDev && (
72
+ <Tooltip title="AI Agent (Dev Only)">
73
+ <Button
74
+ type="text"
75
+ icon={<RobotOutlined style={{ fontSize: 18 }} />}
76
+ onClick={openAgentPanel}
77
+ style={{ marginRight: 8 }}
78
+ />
79
+ </Tooltip>
80
+ )}
81
+ <Select
82
+ showSearch
83
+ defaultValue={business.gameId}
84
+ style={{ width: 160 }}
85
+ variant="borderless"
86
+ options={[
87
+ ...businessList.map((item) => ({
88
+ label: item.gameName,
89
+ value: item.gameId,
90
+ })),
91
+ {
92
+ label: "管理员专用",
93
+ options: [{ value: "-1", label: "All games" }],
94
+ },
95
+ ]}
96
+ optionFilterProp="label"
97
+ onChange={(gameId) => {
98
+ const gameInfo =
99
+ gameId === "-1"
100
+ ? { gameId: "-1", gameName: "All games" }
101
+ : businessList.find((item) => item.gameId === gameId)!;
102
+ setBusiness(gameInfo);
103
+ window.location.reload();
104
+ }}
105
+ />
106
+ <Dropdown menu={langMenu}>
107
+ <Button type="link">
108
+ <Space>
109
+ <Avatar size={16} src={`/images/flags/${currentLocale}.svg`} />
110
+ {currentLocale === "en" ? "English" : "中文"}
111
+ <DownOutlined />
112
+ </Space>
113
+ </Button>
114
+ </Dropdown>
115
+ <Space style={{ marginLeft: "8px" }} size="middle">
116
+ {user?.name && <Text strong>{user.name}</Text>}
117
+ {user?.avatar && <Avatar src={user?.avatar} alt={user?.name} />}
118
+ </Space>
119
+ </Layout.Header>
120
+ );
121
+ };
@@ -0,0 +1,32 @@
1
+ import React from "react";
2
+ import { ThemedLayoutContextProvider } from "@refinedev/antd";
3
+ import { Grid, Layout as AntdLayout } from "antd";
4
+ import { Header } from "./header";
5
+ import { Sider } from "./sider";
6
+ import { OffLayoutArea } from "components/offLayoutArea";
7
+
8
+ export const Layout: React.FC<React.PropsWithChildren> = ({ children }) => {
9
+ const breakpoint = Grid.useBreakpoint();
10
+ const isSmall = typeof breakpoint.sm === "undefined" ? true : breakpoint.sm;
11
+
12
+ return (
13
+ <ThemedLayoutContextProvider>
14
+ <AntdLayout hasSider style={{ minHeight: "100vh" }}>
15
+ <Sider />
16
+ <AntdLayout>
17
+ <Header />
18
+ <AntdLayout.Content
19
+ style={{
20
+ padding: isSmall ? 32 : 16,
21
+ height: "calc(100vh - 64px)",
22
+ overflowY: "auto",
23
+ }}
24
+ >
25
+ {children}
26
+ </AntdLayout.Content>
27
+ </AntdLayout>
28
+ </AntdLayout>
29
+ <OffLayoutArea />
30
+ </ThemedLayoutContextProvider>
31
+ );
32
+ };
@@ -0,0 +1,19 @@
1
+ import React from "react";
2
+
3
+ export const Logo = (props: React.SVGProps<SVGSVGElement>) => (
4
+ <svg
5
+ xmlns="http://www.w3.org/2000/svg"
6
+ width={24}
7
+ height={24}
8
+ viewBox="0 0 24 24"
9
+ fill="none"
10
+ {...props}
11
+ >
12
+ <path
13
+ fill="#1677FF"
14
+ fillRule="evenodd"
15
+ d="M12 24c6.627 0 12-5.373 12-12S18.627 0 12 0 0 5.373 0 12s5.373 12 12 12Zm3.744-18.41c.182-.647-.446-1.03-1.02-.621l-8.008 5.705c-.622.443-.524 1.326.147 1.326h2.109v-.016h4.11l-3.35 1.181-1.476 5.245c-.182.647.446 1.03 1.02.621l8.008-5.705c.622-.443.524-1.326-.147-1.326H13.94l1.805-6.41Z"
16
+ clipRule="evenodd"
17
+ />
18
+ </svg>
19
+ );
@@ -0,0 +1,383 @@
1
+ import React, { useMemo, useEffect, useRef, useCallback, type CSSProperties } from "react";
2
+
3
+ import { useThemedLayoutContext } from "@refinedev/antd";
4
+ import {
5
+ type ITreeMenu,
6
+ pickNotDeprecated,
7
+ useLink,
8
+ useMenu,
9
+ useNavigation,
10
+ useGo,
11
+ } from "@refinedev/core";
12
+ import { useTranslation } from "react-i18next";
13
+
14
+ import {
15
+ BarsOutlined,
16
+ LeftOutlined,
17
+ RightOutlined,
18
+ UnorderedListOutlined,
19
+ } from "@ant-design/icons";
20
+ import { Button, Drawer, Grid, Layout, Menu, theme, type MenuProps } from "antd";
21
+ import { Title } from "./title";
22
+
23
+ const drawerButtonStyles: CSSProperties = {
24
+ borderTopLeftRadius: 0,
25
+ borderBottomLeftRadius: 0,
26
+ position: "fixed",
27
+ top: 64,
28
+ zIndex: 1001,
29
+ };
30
+
31
+ let reRouteNum = 0;
32
+
33
+ const { SubMenu } = Menu;
34
+ const { useToken } = theme;
35
+
36
+ const getParentKeysFromMenuTree = (
37
+ items: ITreeMenu[],
38
+ targetKey: string,
39
+ parentKeys: string[] = [],
40
+ ): string[] | null => {
41
+ for (const item of items) {
42
+ const currentKey = item.key || "";
43
+
44
+ if (currentKey === targetKey) {
45
+ return parentKeys;
46
+ }
47
+
48
+ if (item.children && item.children.length > 0) {
49
+ const found = getParentKeysFromMenuTree(item.children, targetKey, [
50
+ ...parentKeys,
51
+ currentKey,
52
+ ]);
53
+ if (found) {
54
+ return found;
55
+ }
56
+ }
57
+ }
58
+ return null;
59
+ };
60
+
61
+ const getMenuLabel = (name: string, meta: Record<string, any>, locale: string): string => {
62
+ const isZh = locale === "zh_CN" || locale === "zh";
63
+ if (isZh && meta?.zhLabel) return meta.zhLabel;
64
+ if (!isZh && meta?.enLabel) return meta.enLabel;
65
+ return meta?.label || name;
66
+ };
67
+
68
+ export const Sider: React.FC = () => {
69
+ const { token } = useToken();
70
+ const { menuItems, selectedKey, defaultOpenKeys } = useMenu();
71
+ const { t, i18n } = useTranslation();
72
+ const currentLocale = i18n.language;
73
+
74
+ const [openKeys, setOpenKeys] = React.useState<string[]>(defaultOpenKeys);
75
+
76
+ const lastSelectedKeyRef = useRef<string | undefined>(undefined);
77
+
78
+ useEffect(() => {
79
+ if (selectedKey && selectedKey !== lastSelectedKeyRef.current && menuItems.length > 0) {
80
+ lastSelectedKeyRef.current = selectedKey;
81
+
82
+ const parentKeys = getParentKeysFromMenuTree(menuItems, selectedKey);
83
+
84
+ if (parentKeys !== null) {
85
+ setOpenKeys(parentKeys);
86
+ }
87
+ }
88
+ }, [selectedKey, menuItems]);
89
+
90
+ const { siderCollapsed, setSiderCollapsed, mobileSiderOpen, setMobileSiderOpen } =
91
+ useThemedLayoutContext();
92
+
93
+ const Link = useLink();
94
+ const go = useGo();
95
+
96
+ const breakpoint = Grid.useBreakpoint();
97
+ const { listUrl } = useNavigation();
98
+
99
+ const isMobile = typeof breakpoint.lg === "undefined" ? false : !breakpoint.lg;
100
+
101
+ const renderTreeView = useCallback(
102
+ (tree: ITreeMenu[], currentSelectedKey?: string): MenuProps["items"] => {
103
+ return tree
104
+ .map((item: ITreeMenu) => {
105
+ const { key, name, children, meta = {}, list } = item;
106
+ const { icon, parent: parentName } = meta;
107
+
108
+ const route = typeof list === "string" ? list : listUrl(name);
109
+
110
+ if (children.length > 0) {
111
+ return {
112
+ key: item.key || Math.random().toString(),
113
+ label: getMenuLabel(name, meta, currentLocale),
114
+ icon: icon ?? <UnorderedListOutlined />,
115
+ children: renderTreeView(children, currentSelectedKey),
116
+ };
117
+ }
118
+
119
+ const menuItemKey = item.key || Math.random().toString();
120
+ const isSelected = menuItemKey === currentSelectedKey;
121
+ const isRoute = !(
122
+ pickNotDeprecated(meta?.parent, meta?.parent, parentName) !== undefined &&
123
+ children.length === 0
124
+ );
125
+
126
+ return {
127
+ key: menuItemKey,
128
+ label: (
129
+ <>
130
+ <Link to={route ?? ""}>{getMenuLabel(name, meta, currentLocale)}</Link>
131
+ {!siderCollapsed && isSelected && <div className="ant-menu-tree-arrow" />}
132
+ </>
133
+ ),
134
+ icon: icon ?? (isRoute && <UnorderedListOutlined />),
135
+ };
136
+ })
137
+ .filter(Boolean);
138
+ },
139
+ [listUrl, Link, siderCollapsed, currentLocale],
140
+ );
141
+
142
+ const items = useMemo(() => {
143
+ return renderTreeView(menuItems, selectedKey)?.filter(Boolean);
144
+ }, [menuItems, selectedKey, renderTreeView]);
145
+
146
+ // Auto-redirect to first available menu item if current selectedKey is not in the menu
147
+ useEffect(() => {
148
+ if (reRouteNum > 5) return;
149
+
150
+ const isKeyInMenuItems = (menuItems: MenuProps["items"], key: string): boolean => {
151
+ if (!menuItems) return false;
152
+ for (const item of menuItems) {
153
+ if (!item) continue;
154
+ if (item.key === key) return true;
155
+ if ("children" in item && item.children) {
156
+ if (isKeyInMenuItems(item.children as MenuProps["items"], key)) return true;
157
+ }
158
+ }
159
+ return false;
160
+ };
161
+
162
+ // If selectedKey is in the menu, no need to redirect
163
+ if (selectedKey && isKeyInMenuItems(items, selectedKey)) {
164
+ return;
165
+ }
166
+
167
+ // Skip auto-redirect for CRUD detail pages (edit/show/create)
168
+ // These pages are not in the menu but are valid navigation targets
169
+ if (selectedKey && (
170
+ selectedKey.includes('/edit/') ||
171
+ selectedKey.includes('/show/') ||
172
+ selectedKey.endsWith('/create')
173
+ )) {
174
+ return;
175
+ }
176
+
177
+ const timer = setTimeout(() => {
178
+ reRouteNum++;
179
+
180
+ const firstKey = items?.[0]?.key;
181
+ if (firstKey && firstKey !== "/dashboard") {
182
+ setOpenKeys([String(firstKey)]);
183
+ const firstItem = items?.find(item => item?.key === firstKey) as any;
184
+ if (firstItem?.children?.length > 0) {
185
+ let childItem = firstItem?.children?.find(
186
+ (item: any) => selectedKey.indexOf(item?.key) !== -1,
187
+ );
188
+ if (!childItem) {
189
+ childItem = firstItem?.children?.[0];
190
+ }
191
+ const childKey = childItem?.key;
192
+ if (childItem?.children?.length > 0) {
193
+ setOpenKeys([String(firstKey), String(childKey)]);
194
+ const grandsonItem = childItem?.children?.find(
195
+ (item: any) => selectedKey.indexOf(item?.key) !== -1,
196
+ );
197
+ const grandsonKey = grandsonItem?.key || firstItem?.children?.[0]?.children?.[0]?.key;
198
+ go({ to: grandsonKey, type: "replace" });
199
+ } else {
200
+ go({ to: childKey, type: "replace" });
201
+ }
202
+ } else {
203
+ go({ to: String(firstKey), type: "replace" });
204
+ }
205
+ }
206
+ }, 300);
207
+
208
+ return () => clearTimeout(timer);
209
+ }, [items, selectedKey, go]);
210
+
211
+ const handleOpenChange = useCallback(
212
+ (keys: string[]) => {
213
+ const latestOpenKey = keys.find(key => !openKeys.includes(key));
214
+
215
+ if (latestOpenKey) {
216
+ const parentKeys = getParentKeysFromMenuTree(menuItems, latestOpenKey) || [];
217
+ setOpenKeys([...parentKeys, latestOpenKey]);
218
+ } else {
219
+ setOpenKeys(keys);
220
+ }
221
+ },
222
+ [openKeys, menuItems],
223
+ );
224
+
225
+ const handleMenuClick = useCallback(
226
+ ({ key }: { key: string }) => {
227
+ const clickedItem = menuItems.find(item => item.key === key);
228
+ if (clickedItem && clickedItem.children.length === 0) {
229
+ setOpenKeys([]);
230
+ }
231
+ setMobileSiderOpen(false);
232
+ },
233
+ [menuItems, setMobileSiderOpen],
234
+ );
235
+
236
+ const renderMenu = useCallback(() => {
237
+ return (
238
+ <Menu
239
+ selectedKeys={selectedKey ? [selectedKey] : []}
240
+ defaultOpenKeys={defaultOpenKeys}
241
+ openKeys={openKeys}
242
+ onOpenChange={handleOpenChange}
243
+ mode="inline"
244
+ items={items}
245
+ style={{
246
+ paddingTop: "8px",
247
+ border: "none",
248
+ overflow: "auto",
249
+ height: "calc(100% - 72px)",
250
+ background: "transparent",
251
+ }}
252
+ onClick={handleMenuClick}
253
+ ></Menu>
254
+ );
255
+ }, [selectedKey, defaultOpenKeys, openKeys, handleOpenChange, items, handleMenuClick]);
256
+
257
+ const renderDrawerSider = () => {
258
+ return (
259
+ <>
260
+ <Drawer
261
+ open={mobileSiderOpen}
262
+ onClose={() => setMobileSiderOpen(false)}
263
+ placement="left"
264
+ closable={false}
265
+ width={256}
266
+ styles={{
267
+ body: {
268
+ padding: 0,
269
+ },
270
+ }}
271
+ maskClosable={true}
272
+ >
273
+ <Layout>
274
+ <Layout.Sider
275
+ width={500}
276
+ style={{
277
+ height: "100vh",
278
+ backgroundColor: token.colorBgContainer,
279
+ borderRight: `1px solid ${token.colorBorderBg}`,
280
+ }}
281
+ >
282
+ <div
283
+ style={{
284
+ width: "256px",
285
+ padding: "0 16px",
286
+ display: "flex",
287
+ justifyContent: "flex-start",
288
+ alignItems: "center",
289
+ height: "64px",
290
+ backgroundColor: token.colorBgElevated,
291
+ borderBottom: "none",
292
+ }}
293
+ >
294
+ <Title collapsed={false} />
295
+ </div>
296
+ {renderMenu()}
297
+ </Layout.Sider>
298
+ </Layout>
299
+ </Drawer>
300
+ <Button
301
+ style={drawerButtonStyles}
302
+ size="large"
303
+ onClick={() => setMobileSiderOpen(true)}
304
+ icon={<BarsOutlined />}
305
+ />
306
+ </>
307
+ );
308
+ };
309
+
310
+ if (isMobile) {
311
+ return renderDrawerSider();
312
+ }
313
+
314
+ const siderStyles: React.CSSProperties = {
315
+ backgroundColor: token.colorBgContainer,
316
+ borderRight: `1px solid ${token.colorBorderBg}`,
317
+ position: "sticky",
318
+ top: 0,
319
+ left: 0,
320
+ height: "100vh",
321
+ zIndex: 999,
322
+ };
323
+
324
+ return (
325
+ <>
326
+ <Layout.Sider
327
+ style={siderStyles}
328
+ width={256}
329
+ collapsible
330
+ collapsed={siderCollapsed}
331
+ onCollapse={(collapsed, type) => {
332
+ if (type === "clickTrigger") {
333
+ setSiderCollapsed(collapsed);
334
+ }
335
+ }}
336
+ collapsedWidth={80}
337
+ breakpoint="lg"
338
+ trigger={
339
+ <Button
340
+ type="text"
341
+ style={{
342
+ borderRadius: 0,
343
+ height: "100%",
344
+ width: "100%",
345
+ backgroundColor: token.colorBgElevated,
346
+ borderRight: `1px solid ${token.colorBorderBg}`,
347
+ }}
348
+ >
349
+ {siderCollapsed ? (
350
+ <RightOutlined
351
+ style={{
352
+ color: token.colorPrimary,
353
+ }}
354
+ />
355
+ ) : (
356
+ <LeftOutlined
357
+ style={{
358
+ color: token.colorPrimary,
359
+ }}
360
+ />
361
+ )}
362
+ </Button>
363
+ }
364
+ >
365
+ <div
366
+ style={{
367
+ width: siderCollapsed ? "80px" : "256px",
368
+ padding: siderCollapsed ? "0" : "0 16px",
369
+ display: "flex",
370
+ justifyContent: siderCollapsed ? "center" : "flex-start",
371
+ alignItems: "center",
372
+ height: "64px",
373
+ backgroundColor: token.colorBgElevated,
374
+ fontSize: "14px",
375
+ }}
376
+ >
377
+ <Title collapsed={siderCollapsed} />
378
+ </div>
379
+ {renderMenu()}
380
+ </Layout.Sider>
381
+ </>
382
+ );
383
+ };