@gadmin2n/schematics 0.0.55

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 (320) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +9 -0
  3. package/dist/collection.json +122 -0
  4. package/dist/index.d.ts +2 -0
  5. package/dist/index.js +18 -0
  6. package/dist/lib/application/application.factory.d.ts +3 -0
  7. package/dist/lib/application/application.factory.js +92 -0
  8. package/dist/lib/application/files/gadmin2-game-angle-demo/.dockerignore +33 -0
  9. package/dist/lib/application/files/gadmin2-game-angle-demo/Dockerfile +14 -0
  10. package/dist/lib/application/files/gadmin2-game-angle-demo/Jenkinsfile +44 -0
  11. package/dist/lib/application/files/gadmin2-game-angle-demo/build.sh +18 -0
  12. package/dist/lib/application/files/gadmin2-game-angle-demo/config/.types.d.ts +143 -0
  13. package/dist/lib/application/files/gadmin2-game-angle-demo/config/prisma/sample.prisma +65 -0
  14. package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/Game.ts +58 -0
  15. package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/Log.ts +56 -0
  16. package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/Role.ts +58 -0
  17. package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/Source.ts +76 -0
  18. package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/Tasklog.ts +76 -0
  19. package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/_common.ts +16 -0
  20. package/dist/lib/application/files/gadmin2-game-angle-demo/readme.md +49 -0
  21. package/dist/lib/application/files/gadmin2-game-angle-demo/server/.env +20 -0
  22. package/dist/lib/application/files/gadmin2-game-angle-demo/server/.eslintrc.js +25 -0
  23. package/dist/lib/application/files/gadmin2-game-angle-demo/server/.prettierrc +4 -0
  24. package/dist/lib/application/files/gadmin2-game-angle-demo/server/README.md +71 -0
  25. package/dist/lib/application/files/gadmin2-game-angle-demo/server/config/ac.config.ts +24 -0
  26. package/dist/lib/application/files/gadmin2-game-angle-demo/server/config/index.ts +60 -0
  27. package/dist/lib/application/files/gadmin2-game-angle-demo/server/gadmin-cli.json +17 -0
  28. package/dist/lib/application/files/gadmin2-game-angle-demo/server/package.json +106 -0
  29. package/dist/lib/application/files/gadmin2-game-angle-demo/server/prisma/.generator.prisma +32 -0
  30. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/games.ts +71 -0
  31. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/index.ts +27 -0
  32. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/roles.ts +4 -0
  33. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/app.controller.spec.ts +22 -0
  34. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/app.controller.ts +52 -0
  35. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/app.module.ts +75 -0
  36. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/app.service.ts +50 -0
  37. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/lib/auth.guard.ts +108 -0
  38. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/lib/roles.guard.ts +47 -0
  39. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/lib/utils.ts +54 -0
  40. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/lib/woaAuth.ts +82 -0
  41. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/lib/yufuid.ts +160 -0
  42. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/main.ts +119 -0
  43. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/index.ts +3 -0
  44. package/dist/lib/application/files/gadmin2-game-angle-demo/server/test/app.e2e-spec.ts +24 -0
  45. package/dist/lib/application/files/gadmin2-game-angle-demo/server/test/jest-e2e.json +9 -0
  46. package/dist/lib/application/files/gadmin2-game-angle-demo/server/tsconfig.build.json +4 -0
  47. package/dist/lib/application/files/gadmin2-game-angle-demo/server/tsconfig.json +21 -0
  48. package/dist/lib/application/files/gadmin2-game-angle-demo/web/README.MD +48 -0
  49. package/dist/lib/application/files/gadmin2-game-angle-demo/web/craco.config.js +27 -0
  50. package/dist/lib/application/files/gadmin2-game-angle-demo/web/package.json +81 -0
  51. package/dist/lib/application/files/gadmin2-game-angle-demo/web/public/favicon.ico +0 -0
  52. package/dist/lib/application/files/gadmin2-game-angle-demo/web/public/images/flags/en.svg +1 -0
  53. package/dist/lib/application/files/gadmin2-game-angle-demo/web/public/images/flags/zh_CN.svg +11 -0
  54. package/dist/lib/application/files/gadmin2-game-angle-demo/web/public/index.html +53 -0
  55. package/dist/lib/application/files/gadmin2-game-angle-demo/web/public/locales/en/common.json +128 -0
  56. package/dist/lib/application/files/gadmin2-game-angle-demo/web/public/locales/zh_CN/common.json +130 -0
  57. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/App.tsx +185 -0
  58. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/auditLogProvider.ts +87 -0
  59. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/authProvider.ts +124 -0
  60. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/BulkActions.tsx +236 -0
  61. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/ListPageHeader.tsx +56 -0
  62. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/RowActions.tsx +292 -0
  63. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/SearchBar.tsx +294 -0
  64. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/VanillaJSONEditor/index.css +10 -0
  65. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/VanillaJSONEditor/index.js +53 -0
  66. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/AgentContext.tsx +201 -0
  67. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/AgentPanel.tsx +497 -0
  68. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/ElementInspector.tsx +282 -0
  69. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/agentAttributes.ts +61 -0
  70. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/index.ts +18 -0
  71. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/inspectorActions.ts +111 -0
  72. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/promptGenerator.ts +75 -0
  73. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/skills.ts +464 -0
  74. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/eventList/index.tsx +62 -0
  75. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/index.ts +4 -0
  76. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/logButton/index.tsx +96 -0
  77. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/logList/index.tsx +73 -0
  78. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/modalDiffViewer/index.tsx +104 -0
  79. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/index.tsx +2 -0
  80. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/contexts/business/index.tsx +65 -0
  81. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/contexts/color-mode/index.tsx +60 -0
  82. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/index.ts +4 -0
  83. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/header/index.tsx +130 -0
  84. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/index.ts +2 -0
  85. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/sider.tsx +218 -0
  86. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/styles.ts +10 -0
  87. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/offLayoutArea/index.tsx +5 -0
  88. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/form.tsx +419 -0
  89. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/index.tsx +3 -0
  90. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/list.tsx +465 -0
  91. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/login.ts +124 -0
  92. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/show.tsx +182 -0
  93. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/utils.ts +76 -0
  94. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/index.ts +7 -0
  95. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/types.ts +138 -0
  96. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useBatchDelete.ts +191 -0
  97. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useBatchOperations.ts +152 -0
  98. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useBatchOperationsCore.ts +193 -0
  99. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useBatchUpdate.ts +182 -0
  100. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useListPageState.ts +303 -0
  101. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useRowSelection.ts +38 -0
  102. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/i18n.ts +19 -0
  103. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/index.tsx +28 -0
  104. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/meta.json +4 -0
  105. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/react-app-env.d.ts +1 -0
  106. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/reportWebVitals.ts +15 -0
  107. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/setupTests.ts +5 -0
  108. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/antd.less +79 -0
  109. package/dist/lib/application/files/gadmin2-game-angle-demo/web/tsconfig.json +27 -0
  110. package/dist/lib/application/schema.json +99 -0
  111. package/dist/lib/class/class.factory.d.ts +3 -0
  112. package/dist/lib/class/class.factory.js +42 -0
  113. package/dist/lib/class/files/js/__name__.js +1 -0
  114. package/dist/lib/class/files/js/__name__.spec.js +7 -0
  115. package/dist/lib/class/files/ts/__name__.spec.ts +7 -0
  116. package/dist/lib/class/files/ts/__name__.ts +1 -0
  117. package/dist/lib/class/schema.json +45 -0
  118. package/dist/lib/client-app/angular/angular.factory.d.ts +3 -0
  119. package/dist/lib/client-app/angular/angular.factory.js +98 -0
  120. package/dist/lib/client-app/angular/files/angular.constants.ts +4 -0
  121. package/dist/lib/client-app/angular/files/angular.module.ts +41 -0
  122. package/dist/lib/client-app/angular/files/angular.providers.ts +27 -0
  123. package/dist/lib/client-app/angular/files/angular.utils.ts +19 -0
  124. package/dist/lib/client-app/angular/files/interfaces/angular-options.interface.ts +87 -0
  125. package/dist/lib/client-app/angular/files/loaders/abstract.loader.ts +16 -0
  126. package/dist/lib/client-app/angular/files/loaders/express.loader.ts +25 -0
  127. package/dist/lib/client-app/angular/files/loaders/fastify.loader.ts +34 -0
  128. package/dist/lib/client-app/angular/files/loaders/noop.loader.ts +12 -0
  129. package/dist/lib/client-app/angular/schema.json +24 -0
  130. package/dist/lib/configuration/configuration.factory.d.ts +3 -0
  131. package/dist/lib/configuration/configuration.factory.js +24 -0
  132. package/dist/lib/configuration/files/js/nest-cli.json +6 -0
  133. package/dist/lib/configuration/files/ts/nest-cli.json +5 -0
  134. package/dist/lib/controller/controller.factory.d.ts +3 -0
  135. package/dist/lib/controller/controller.factory.js +118 -0
  136. package/dist/lib/controller/files/js/__name__.controller.js +4 -0
  137. package/dist/lib/controller/files/js/__name__.controller.spec.js +18 -0
  138. package/dist/lib/controller/files/ts/__name__.controller.spec.ts +18 -0
  139. package/dist/lib/controller/files/ts/__name__.controller.ts +137 -0
  140. package/dist/lib/controller/schema.json +51 -0
  141. package/dist/lib/decorator/decorator.factory.d.ts +3 -0
  142. package/dist/lib/decorator/decorator.factory.js +33 -0
  143. package/dist/lib/decorator/files/js/__name__.decorator.js +3 -0
  144. package/dist/lib/decorator/files/ts/__name__.decorator.ts +3 -0
  145. package/dist/lib/decorator/schema.json +36 -0
  146. package/dist/lib/defaults.d.ts +16 -0
  147. package/dist/lib/defaults.js +19 -0
  148. package/dist/lib/filter/files/js/__name__.filter.js +6 -0
  149. package/dist/lib/filter/files/js/__name__.filter.spec.js +7 -0
  150. package/dist/lib/filter/files/ts/__name__.filter.spec.ts +7 -0
  151. package/dist/lib/filter/files/ts/__name__.filter.ts +6 -0
  152. package/dist/lib/filter/filter.factory.d.ts +3 -0
  153. package/dist/lib/filter/filter.factory.js +34 -0
  154. package/dist/lib/filter/schema.json +41 -0
  155. package/dist/lib/gateway/files/js/__name__.gateway.js +9 -0
  156. package/dist/lib/gateway/files/js/__name__.gateway.spec.js +18 -0
  157. package/dist/lib/gateway/files/ts/__name__.gateway.spec.ts +18 -0
  158. package/dist/lib/gateway/files/ts/__name__.gateway.ts +9 -0
  159. package/dist/lib/gateway/gateway.factory.d.ts +3 -0
  160. package/dist/lib/gateway/gateway.factory.js +62 -0
  161. package/dist/lib/gateway/schema.json +41 -0
  162. package/dist/lib/guard/files/js/__name__.guard.js +8 -0
  163. package/dist/lib/guard/files/js/__name__.guard.spec.js +7 -0
  164. package/dist/lib/guard/files/ts/__name__.guard.spec.ts +7 -0
  165. package/dist/lib/guard/files/ts/__name__.guard.ts +11 -0
  166. package/dist/lib/guard/guard.factory.d.ts +3 -0
  167. package/dist/lib/guard/guard.factory.js +34 -0
  168. package/dist/lib/guard/schema.json +41 -0
  169. package/dist/lib/interceptor/files/js/__name__.interceptor.js +8 -0
  170. package/dist/lib/interceptor/files/js/__name__.interceptor.spec.js +7 -0
  171. package/dist/lib/interceptor/files/ts/default/__name__.interceptor.spec.ts +7 -0
  172. package/dist/lib/interceptor/files/ts/default/__name__.interceptor.ts +9 -0
  173. package/dist/lib/interceptor/files/ts/generated/__name__.interceptor.spec.ts +7 -0
  174. package/dist/lib/interceptor/files/ts/generated/__name__.interceptor.ts +13 -0
  175. package/dist/lib/interceptor/interceptor.factory.d.ts +3 -0
  176. package/dist/lib/interceptor/interceptor.factory.js +116 -0
  177. package/dist/lib/interceptor/schema.json +50 -0
  178. package/dist/lib/interface/files/__name__.interface.ts +1 -0
  179. package/dist/lib/interface/interface.factory.d.ts +3 -0
  180. package/dist/lib/interface/interface.factory.js +32 -0
  181. package/dist/lib/interface/schema.json +32 -0
  182. package/dist/lib/library/files/js/.babelrc +4 -0
  183. package/dist/lib/library/files/js/jsconfig.json +9 -0
  184. package/dist/lib/library/files/js/src/__name__.module.js +8 -0
  185. package/dist/lib/library/files/js/src/__name__.service.js +4 -0
  186. package/dist/lib/library/files/js/src/__name__.service.spec.js +18 -0
  187. package/dist/lib/library/files/js/src/index.js +2 -0
  188. package/dist/lib/library/files/ts/src/__name__.module.ts +8 -0
  189. package/dist/lib/library/files/ts/src/__name__.service.spec.ts +18 -0
  190. package/dist/lib/library/files/ts/src/__name__.service.ts +4 -0
  191. package/dist/lib/library/files/ts/src/index.ts +2 -0
  192. package/dist/lib/library/files/ts/tsconfig.lib.json +9 -0
  193. package/dist/lib/library/library.factory.d.ts +3 -0
  194. package/dist/lib/library/library.factory.js +190 -0
  195. package/dist/lib/library/schema.json +37 -0
  196. package/dist/lib/middleware/files/js/__name__.middleware.js +8 -0
  197. package/dist/lib/middleware/files/js/__name__.middleware.spec.js +7 -0
  198. package/dist/lib/middleware/files/ts/__name__.middleware.spec.ts +7 -0
  199. package/dist/lib/middleware/files/ts/__name__.middleware.ts +8 -0
  200. package/dist/lib/middleware/middleware.factory.d.ts +3 -0
  201. package/dist/lib/middleware/middleware.factory.js +34 -0
  202. package/dist/lib/middleware/schema.json +41 -0
  203. package/dist/lib/module/files/js/__name__.module.js +4 -0
  204. package/dist/lib/module/files/ts/__name__.module.ts +4 -0
  205. package/dist/lib/module/module.factory.d.ts +3 -0
  206. package/dist/lib/module/module.factory.js +58 -0
  207. package/dist/lib/module/schema.json +46 -0
  208. package/dist/lib/pipe/files/js/__name__.pipe.js +8 -0
  209. package/dist/lib/pipe/files/js/__name__.pipe.spec.js +7 -0
  210. package/dist/lib/pipe/files/ts/__name__.pipe.spec.ts +7 -0
  211. package/dist/lib/pipe/files/ts/__name__.pipe.ts +8 -0
  212. package/dist/lib/pipe/pipe.factory.d.ts +3 -0
  213. package/dist/lib/pipe/pipe.factory.js +34 -0
  214. package/dist/lib/pipe/schema.json +41 -0
  215. package/dist/lib/prisma-resource/files/ts/__name__.controller.spec.ts +20 -0
  216. package/dist/lib/prisma-resource/files/ts/__name__.controller.ts +63 -0
  217. package/dist/lib/prisma-resource/files/ts/__name__.module.ts +9 -0
  218. package/dist/lib/prisma-resource/files/ts/__name__.service.spec.ts +18 -0
  219. package/dist/lib/prisma-resource/files/ts/__name__.service.ts +28 -0
  220. package/dist/lib/prisma-resource/files/ts/dto/create-__name@singular__.dto.ts +1 -0
  221. package/dist/lib/prisma-resource/files/ts/dto/create-__name@singular__.input.ts +7 -0
  222. package/dist/lib/prisma-resource/files/ts/dto/update-__name@singular__.dto.ts +6 -0
  223. package/dist/lib/prisma-resource/files/ts/dto/update-__name@singular__.input.ts +13 -0
  224. package/dist/lib/prisma-resource/files/ts/entities/__name@singular@ent__.ts +7 -0
  225. package/dist/lib/prisma-resource/prisma-resource.factory.d.ts +3 -0
  226. package/dist/lib/prisma-resource/prisma-resource.factory.js +131 -0
  227. package/dist/lib/prisma-resource/schema.json +91 -0
  228. package/dist/lib/provider/files/js/__name__.js +4 -0
  229. package/dist/lib/provider/files/js/__name__.spec.js +18 -0
  230. package/dist/lib/provider/files/ts/__name__.spec.ts +18 -0
  231. package/dist/lib/provider/files/ts/__name__.ts +4 -0
  232. package/dist/lib/provider/provider.factory.d.ts +3 -0
  233. package/dist/lib/provider/provider.factory.js +67 -0
  234. package/dist/lib/provider/schema.json +45 -0
  235. package/dist/lib/resolver/files/js/__name__.resolver.js +4 -0
  236. package/dist/lib/resolver/files/js/__name__.resolver.spec.js +18 -0
  237. package/dist/lib/resolver/files/ts/__name__.resolver.spec.ts +18 -0
  238. package/dist/lib/resolver/files/ts/__name__.resolver.ts +4 -0
  239. package/dist/lib/resolver/resolver.factory.d.ts +3 -0
  240. package/dist/lib/resolver/resolver.factory.js +62 -0
  241. package/dist/lib/resolver/schema.json +41 -0
  242. package/dist/lib/resource/files/ts/__name__.controller.spec.ts +20 -0
  243. package/dist/lib/resource/files/ts/__name__.controller.ts +63 -0
  244. package/dist/lib/resource/files/ts/__name__.gateway.spec.ts +19 -0
  245. package/dist/lib/resource/files/ts/__name__.gateway.ts +34 -0
  246. package/dist/lib/resource/files/ts/__name__.graphql +24 -0
  247. package/dist/lib/resource/files/ts/__name__.module.ts +9 -0
  248. package/dist/lib/resource/files/ts/__name__.resolver.spec.ts +19 -0
  249. package/dist/lib/resource/files/ts/__name__.resolver.ts +60 -0
  250. package/dist/lib/resource/files/ts/__name__.service.spec.ts +18 -0
  251. package/dist/lib/resource/files/ts/__name__.service.ts +28 -0
  252. package/dist/lib/resource/files/ts/dto/create-__name@singular__.dto.ts +1 -0
  253. package/dist/lib/resource/files/ts/dto/create-__name@singular__.input.ts +7 -0
  254. package/dist/lib/resource/files/ts/dto/update-__name@singular__.dto.ts +6 -0
  255. package/dist/lib/resource/files/ts/dto/update-__name@singular__.input.ts +13 -0
  256. package/dist/lib/resource/files/ts/entities/__name@singular@ent__.ts +7 -0
  257. package/dist/lib/resource/resource.factory.d.ts +3 -0
  258. package/dist/lib/resource/resource.factory.js +131 -0
  259. package/dist/lib/resource/schema.json +90 -0
  260. package/dist/lib/service/files/js/__name__.service.js +4 -0
  261. package/dist/lib/service/files/js/__name__.service.spec.js +18 -0
  262. package/dist/lib/service/files/ts/__name__.service.spec.ts +18 -0
  263. package/dist/lib/service/files/ts/__name__.service.ts +4 -0
  264. package/dist/lib/service/schema.json +41 -0
  265. package/dist/lib/service/service.factory.d.ts +3 -0
  266. package/dist/lib/service/service.factory.js +63 -0
  267. package/dist/lib/sub-app/files/js/.babelrc +4 -0
  268. package/dist/lib/sub-app/files/js/index.js +2 -0
  269. package/dist/lib/sub-app/files/js/jsconfig.json +10 -0
  270. package/dist/lib/sub-app/files/js/src/app.controller.js +15 -0
  271. package/dist/lib/sub-app/files/js/src/app.controller.spec.js +22 -0
  272. package/dist/lib/sub-app/files/js/src/app.module.js +10 -0
  273. package/dist/lib/sub-app/files/js/src/app.service.js +8 -0
  274. package/dist/lib/sub-app/files/js/src/main.js +8 -0
  275. package/dist/lib/sub-app/files/js/test/app.e2e-spec.js +23 -0
  276. package/dist/lib/sub-app/files/js/test/jest-e2e.json +5 -0
  277. package/dist/lib/sub-app/files/ts/src/__name__.controller.spec.ts +22 -0
  278. package/dist/lib/sub-app/files/ts/src/__name__.controller.ts +12 -0
  279. package/dist/lib/sub-app/files/ts/src/__name__.module.ts +10 -0
  280. package/dist/lib/sub-app/files/ts/src/__name__.service.ts +8 -0
  281. package/dist/lib/sub-app/files/ts/src/main.ts +8 -0
  282. package/dist/lib/sub-app/files/ts/test/app.e2e-spec.ts +24 -0
  283. package/dist/lib/sub-app/files/ts/test/jest-e2e.json +9 -0
  284. package/dist/lib/sub-app/files/ts/tsconfig.app.json +9 -0
  285. package/dist/lib/sub-app/schema.json +32 -0
  286. package/dist/lib/sub-app/sub-app.factory.d.ts +3 -0
  287. package/dist/lib/sub-app/sub-app.factory.js +245 -0
  288. package/dist/lib/sub-app/workspace/js/.babelrc +4 -0
  289. package/dist/lib/sub-app/workspace/js/index.js +2 -0
  290. package/dist/lib/sub-app/workspace/js/jsconfig.json +10 -0
  291. package/dist/lib/sub-app/workspace/ts/tsconfig.app.json +9 -0
  292. package/dist/utils/change.d.ts +46 -0
  293. package/dist/utils/change.js +95 -0
  294. package/dist/utils/dependencies.utils.d.ts +15 -0
  295. package/dist/utils/dependencies.utils.js +42 -0
  296. package/dist/utils/export-from.declarator.d.ts +10 -0
  297. package/dist/utils/export-from.declarator.js +39 -0
  298. package/dist/utils/formatting.d.ts +1 -0
  299. package/dist/utils/formatting.js +12 -0
  300. package/dist/utils/index.d.ts +9 -0
  301. package/dist/utils/index.js +25 -0
  302. package/dist/utils/json-file.util.d.ts +15 -0
  303. package/dist/utils/json-file.util.js +68 -0
  304. package/dist/utils/metadata.manager.d.ts +13 -0
  305. package/dist/utils/metadata.manager.js +162 -0
  306. package/dist/utils/module-import.declarator.d.ts +10 -0
  307. package/dist/utils/module-import.declarator.js +39 -0
  308. package/dist/utils/module-metadata.declarator.d.ts +4 -0
  309. package/dist/utils/module-metadata.declarator.js +12 -0
  310. package/dist/utils/module.declarator.d.ts +23 -0
  311. package/dist/utils/module.declarator.js +32 -0
  312. package/dist/utils/module.finder.d.ts +13 -0
  313. package/dist/utils/module.finder.js +24 -0
  314. package/dist/utils/name.parser.d.ts +12 -0
  315. package/dist/utils/name.parser.js +17 -0
  316. package/dist/utils/path.solver.d.ts +4 -0
  317. package/dist/utils/path.solver.js +14 -0
  318. package/dist/utils/source-root.helpers.d.ts +8 -0
  319. package/dist/utils/source-root.helpers.js +35 -0
  320. package/package.json +99 -0
@@ -0,0 +1,464 @@
1
+ /**
2
+ * Gadmin2 Skills Metadata
3
+ * Generated from gadmin2-llm-coding-plugin/skills/
4
+ */
5
+
6
+ export interface SubSkill {
7
+ id: string;
8
+ name: string;
9
+ description: string;
10
+ }
11
+
12
+ export interface Skill {
13
+ id: string;
14
+ name: string;
15
+ description: string;
16
+ category: 'page' | 'project';
17
+ /** Page types this skill applies to */
18
+ pageTypes?: ('list' | 'create' | 'edit' | 'show')[];
19
+ /** Sub-skills (references) */
20
+ subSkills?: SubSkill[];
21
+ }
22
+
23
+ export const skills: Skill[] = [
24
+ // ==================== 页面级技能 ====================
25
+
26
+ // 列表页定制
27
+ {
28
+ id: 'list-customization',
29
+ name: '列表页定制',
30
+ description:
31
+ '定制 Gadmin2 列表页 (web/src/pages/{model}/list.tsx)。适用场景:添加永久筛选器、自定义表格列、添加行操作、自定义导入/导出、添加批量操作、渲染 JSON 字段、转换为树形结构、添加外部链接、创建自定义页面(仪表盘、统计)、应用设计模式、添加弹窗调用 API、筛选关联选择器选项、搜索时重置分页、跨资源查询,或修改列表页行为。',
32
+ category: 'page',
33
+ pageTypes: ['list'],
34
+ subSkills: [
35
+ {
36
+ id: 'permanent-filter',
37
+ name: '添加永久数据筛选器',
38
+ description: '基于 Context 值(如 gameId)为列表页添加永久筛选器。',
39
+ },
40
+ {
41
+ id: 'filter-transform',
42
+ name: '筛选值类型转换',
43
+ description: '将筛选值从字符串转换为数字,以兼容 Prisma。',
44
+ },
45
+ {
46
+ id: 'relation-select-filter',
47
+ name: '自定义关联选择器筛选',
48
+ description: '根据当前上下文,用筛选后的数据覆盖默认的关联选择器选项。',
49
+ },
50
+ {
51
+ id: 'search-reset-pagination',
52
+ name: '搜索时重置分页',
53
+ description: '执行搜索筛选时,将表格分页重置到第一页。',
54
+ },
55
+ {
56
+ id: 'export-customization',
57
+ name: '自定义 CSV 导出',
58
+ description: '自定义导出 CSV 的字段名称、顺序和值格式化。',
59
+ },
60
+ {
61
+ id: 'import-customization',
62
+ name: '自定义 CSV 导入(含错误弹窗)',
63
+ description: '自定义导入字段映射,并为导入失败显示错误弹窗。',
64
+ },
65
+ {
66
+ id: 'batch-modify-modal',
67
+ name: '添加批量修改弹窗',
68
+ description: '添加弹窗,批量修改选中行的某个字段。',
69
+ },
70
+ {
71
+ id: 'batch-delete-promise',
72
+ name: '自定义批量删除(Promise 循环)',
73
+ description: '用 Promise 循环替代默认批量删除,提供详细反馈。',
74
+ },
75
+ {
76
+ id: 'column-render',
77
+ name: '自定义表格列渲染',
78
+ description: '使用 TagField、BooleanField、颜色、图标等自定义列显示。',
79
+ },
80
+ {
81
+ id: 'json-badge-render',
82
+ name: '将 JSON 字段渲染为 Badge 状态',
83
+ description: '解析 JSON 字符串并渲染为带状态指示器的 Badge。',
84
+ },
85
+ {
86
+ id: 'row-action-link',
87
+ name: '添加行操作跳转链接',
88
+ description: '在行操作中添加链接,跳转到带筛选条件的关联资源列表。',
89
+ },
90
+ {
91
+ id: 'row-action-external',
92
+ name: '添加外部系统链接',
93
+ description: '在行操作中添加外部系统链接(如云日志、监控)。',
94
+ },
95
+ {
96
+ id: 'row-action-modal-api',
97
+ name: '行操作弹窗调用 API',
98
+ description: '添加自定义行操作,打开弹窗并调用外部 API。',
99
+ },
100
+ {
101
+ id: 'custom-row-actions',
102
+ name: '通过配置添加自定义行操作',
103
+ description: '使用 rowActions 配置添加自定义行操作。',
104
+ },
105
+ {
106
+ id: 'tree-structure',
107
+ name: '扁平数据转树形结构',
108
+ description: '将层级数据显示为可展开的树形表格。',
109
+ },
110
+ {
111
+ id: 'extend-prisma-select',
112
+ name: '扩展 Prisma Select 字段',
113
+ description: '添加默认 select 中没有的额外查询字段。',
114
+ },
115
+ {
116
+ id: 'conditional-create-button',
117
+ name: '条件显示/隐藏创建按钮',
118
+ description: '仅在满足特定条件时显示 CreateButton。',
119
+ },
120
+ {
121
+ id: 'readonly-mode',
122
+ name: '简化为只读模式',
123
+ description: '移除创建/编辑/删除操作,仅保留查看功能。',
124
+ },
125
+ {
126
+ id: 'cross-resource-query',
127
+ name: '跨资源数据查询',
128
+ description: '通过名称或字段查询其他资源,获取 ID 用于 API 调用。',
129
+ },
130
+ {
131
+ id: 'custom-page',
132
+ name: '添加自定义页面',
133
+ description: '在模型目录中创建新的自定义页面(统计、仪表盘等)。',
134
+ },
135
+ {
136
+ id: 'design-patterns',
137
+ name: '定制化设计模式',
138
+ description: '组织自定义代码的常用 React 模式。',
139
+ },
140
+ {
141
+ id: 'column-visibility',
142
+ name: '列显示/隐藏控制',
143
+ description: '通过 UI Config 或自定义实现(含 localStorage 持久化)控制表格列的显示/隐藏。',
144
+ },
145
+ {
146
+ id: 'conditional-row-style',
147
+ name: '条件行样式',
148
+ description: '根据记录数据(如状态颜色、优先级指示器)为表格行应用条件样式。',
149
+ },
150
+ {
151
+ id: 'fixed-column',
152
+ name: '固定列',
153
+ description: '将表格列固定在左侧或右侧,支持水平滚动。',
154
+ },
155
+ {
156
+ id: 'inline-edit',
157
+ name: '行内编辑',
158
+ description: '启用表格单元格的行内编辑(Input、Select、Switch、点击编辑)。',
159
+ },
160
+ ],
161
+ },
162
+
163
+ // 表单页定制
164
+ {
165
+ id: 'form-customization',
166
+ name: '表单页定制',
167
+ description:
168
+ '定制 Gadmin2 创建/编辑表单页 (web/src/pages/{model}/create.tsx 和 edit.tsx)。适用场景:添加级联选择器、添加字段提示、添加自定义校验器、添加帮助提示、自定义表单组件、提交时转换表单数据、添加字段依赖(条件显示/隐藏字段)、添加业务隔离(studio_id)、创建单例表单(自动创建/编辑)、添加自动补全搜索、加载关联数据、添加外部帮助链接、添加保存后提示,或修改表单行为。',
169
+ category: 'page',
170
+ pageTypes: ['create', 'edit'],
171
+ subSkills: [
172
+ {
173
+ id: 'cascader-component',
174
+ name: '用级联选择器替换下拉框',
175
+ description: '使用 Cascader 进行层级选择(如 来源 -> 类型)。',
176
+ },
177
+ {
178
+ id: 'field-tooltip',
179
+ name: '为表单字段标签添加提示',
180
+ description: '在表单字段标签旁添加带 tooltip 的帮助图标。',
181
+ },
182
+ {
183
+ id: 'custom-validator',
184
+ name: '添加自定义表单校验器',
185
+ description: '添加自定义校验规则,如 cron 表达式、URL 格式等。',
186
+ },
187
+ {
188
+ id: 'help-alert',
189
+ name: '在表单上方添加帮助提示',
190
+ description: '在表单上方添加带说明的 Alert 组件。',
191
+ },
192
+ {
193
+ id: 'form-field-dependencies',
194
+ name: '添加表单字段依赖',
195
+ description: '根据其他字段的值显示/隐藏表单字段。',
196
+ },
197
+ {
198
+ id: 'form-data-transform',
199
+ name: '提交前转换数据',
200
+ description: '在发送到 API 之前转换表单值。',
201
+ },
202
+ {
203
+ id: 'business-isolation',
204
+ name: '业务隔离(多租户)',
205
+ description: '在表单提交时添加 studio_id 或 tenant_id 实现数据隔离。',
206
+ },
207
+ {
208
+ id: 'singleton-form',
209
+ name: '单例表单(动态创建/编辑)',
210
+ description: '根据已有记录自动判断是创建还是编辑。',
211
+ },
212
+ {
213
+ id: 'autocomplete-search',
214
+ name: '自动补全搜索',
215
+ description: '用 AutoComplete + Search 替换默认输入框,支持外部 API 查询。',
216
+ },
217
+ {
218
+ id: 'load-related-data',
219
+ name: '加载关联数据',
220
+ description: '从其他资源获取数据用于表单(选项、校验等)。',
221
+ },
222
+ {
223
+ id: 'external-help-links',
224
+ name: '外部帮助链接',
225
+ description: '在表单下方添加文档链接和帮助文本。',
226
+ },
227
+ {
228
+ id: 'post-save-alert',
229
+ name: '保存后提示与引导',
230
+ description: '保存成功后显示提示,引导用户进行下一步操作。',
231
+ },
232
+ ],
233
+ },
234
+
235
+ // 详情页定制
236
+ {
237
+ id: 'show-customization',
238
+ name: '详情页定制',
239
+ description:
240
+ '定制 Gadmin2 详情页 (web/src/pages/{model}/show.tsx)。适用场景:自定义字段显示、将 JSON 渲染为 Badge、添加自定义字段渲染、格式化字段值、简化为只读模式(移除编辑/删除按钮),或修改详情页布局。',
241
+ category: 'page',
242
+ pageTypes: ['show'],
243
+ subSkills: [
244
+ {
245
+ id: 'field-render',
246
+ name: '自定义字段显示',
247
+ description: '自定义详情页上字段的显示方式。',
248
+ },
249
+ {
250
+ id: 'json-field-render',
251
+ name: '将 JSON 字段渲染为结构化显示',
252
+ description: '解析并以合适的格式显示 JSON 字段。',
253
+ },
254
+ {
255
+ id: 'readonly-header',
256
+ name: '只读头部按钮',
257
+ description: '简化只读资源的详情页头部。',
258
+ },
259
+ ],
260
+ },
261
+
262
+ // ==================== 项目级技能 ====================
263
+
264
+ // 后端定制
265
+ {
266
+ id: 'backend-customization',
267
+ name: '后端定制',
268
+ description:
269
+ '定制 Gadmin2 NestJS 后端代码。适用场景:多数据库连接、级联创建/更新/删除、禁用/添加自定义接口、字段加密、API Key 认证、创建者权限检查、公开接口、强制分页、返回实体、聚合查询、Swagger 增强、业务状态机、乐观锁。适用于 server/src/modules/。',
270
+ category: 'project',
271
+ subSkills: [
272
+ {
273
+ id: 'multi-database',
274
+ name: '多数据库连接',
275
+ description: '使用 CustomPrismaService 连接多个数据库。',
276
+ },
277
+ {
278
+ id: 'cascade-create',
279
+ name: '级联创建',
280
+ description: '创建主记录时同时创建关联记录。',
281
+ },
282
+ {
283
+ id: 'cascade-update',
284
+ name: '级联更新',
285
+ description: '更新主记录时同时更新关联记录。',
286
+ },
287
+ {
288
+ id: 'cascade-delete',
289
+ name: '级联删除',
290
+ description: '删除主记录时同时删除关联记录。',
291
+ },
292
+ {
293
+ id: 'disable-endpoint',
294
+ name: '禁用接口',
295
+ description: '移除或禁用默认的 CRUD 接口。',
296
+ },
297
+ {
298
+ id: 'custom-endpoint',
299
+ name: '添加自定义接口',
300
+ description: '添加业务相关的 API 接口。',
301
+ },
302
+ {
303
+ id: 'field-encryption',
304
+ name: '字段加密',
305
+ description: '存储前对敏感字段进行加密。',
306
+ },
307
+ {
308
+ id: 'api-key-auth',
309
+ name: 'API Key 认证',
310
+ description: '除用户登录外,还支持通过 API Key 访问 API。',
311
+ },
312
+ {
313
+ id: 'owner-permission',
314
+ name: '创建者权限检查',
315
+ description: '仅允许创建者或管理员修改/删除记录。',
316
+ },
317
+ {
318
+ id: 'public-endpoint',
319
+ name: '公开接口(免认证)',
320
+ description: '使接口无需认证即可公开访问。',
321
+ },
322
+ {
323
+ id: 'force-pagination',
324
+ name: '强制分页参数',
325
+ description: '覆盖或修正分页参数。',
326
+ },
327
+ {
328
+ id: 'return-entity',
329
+ name: '返回实体而非计数',
330
+ description: '更新操作返回完整实体数据。',
331
+ },
332
+ {
333
+ id: 'aggregation-endpoint',
334
+ name: '聚合查询接口',
335
+ description: '添加 groupBy/aggregate 查询接口。',
336
+ },
337
+ {
338
+ id: 'swagger-enhancement',
339
+ name: 'Swagger 文档增强',
340
+ description: '添加包含示例的详细 API 文档。',
341
+ },
342
+ {
343
+ id: 'business-state-machine',
344
+ name: '业务状态机',
345
+ description: '基于状态变更触发操作。',
346
+ },
347
+ {
348
+ id: 'optimistic-lock',
349
+ name: '乐观锁',
350
+ description: '使用版本字段防止并发更新冲突。',
351
+ },
352
+ ],
353
+ },
354
+
355
+ // 国际化
356
+ {
357
+ id: 'i18n',
358
+ name: '国际化',
359
+ description:
360
+ '为 React 应用添加国际化(i18n)支持。适用场景:添加多语言支持、翻译菜单/资源、翻译页面内容标签/图例/提示、重构组件以支持 i18n、添加语言切换,或实现 react-i18next 翻译。',
361
+ category: 'project',
362
+ subSkills: [
363
+ {
364
+ id: 'menu-i18n',
365
+ name: '菜单国际化实现',
366
+ description: '在 Refine resources 配置中翻译菜单标签。',
367
+ },
368
+ {
369
+ id: 'page-i18n',
370
+ name: '图表/数据国际化实现',
371
+ description: '翻译图表图例、提示、系列名称、表格和表单标签。',
372
+ },
373
+ ],
374
+ },
375
+
376
+ // Prisma Schema
377
+ {
378
+ id: 'prisma-schema',
379
+ name: 'Prisma Schema 编写',
380
+ description:
381
+ '编写带 Gadmin2 注解的 Prisma schema。适用场景:定义模型、添加字段、创建/编辑 schema.prisma、使用 @FormItem(Select、Boolean、Text、JSON、Image 等)、@IgnoreAutoField、@IgnoreReactCode、@IgnoreNestCode、添加校验器(@Min、@Max、@Length、@IsByteLength、@IsEmail、@IsPhoneNumber)、添加索引(@@index、@@unique),或在 config/prisma/*.prisma 或 config/schema.prisma 文件中配置数据模型。',
382
+ category: 'project',
383
+ },
384
+
385
+ // UI 配置
386
+ {
387
+ id: 'ui-config',
388
+ name: 'UI 配置',
389
+ description:
390
+ '通过 config/ui.config.ts 配置 Gadmin2 UI。适用场景:配置表格列、设置表单字段、自定义列表/详情页、编辑 ui.config.ts、使用字段选择 glob 模式、配置表格操作、筛选器、排序器、批量操作、行操作,或表单联动。',
391
+ category: 'project',
392
+ },
393
+
394
+ // 使用指南
395
+ {
396
+ id: 'guide',
397
+ name: 'Gadmin2 使用指南',
398
+ description:
399
+ 'Gadmin2 低代码管理面板生成器通用指南。适用场景:了解 gadmin2、如何使用 gadmin、创建管理面板、低代码工具、生成 CRUD、项目结构、快速开始流程、添加模型,或获取 Gadmin2 通用指导。',
400
+ category: 'project',
401
+ },
402
+ ];
403
+
404
+ /**
405
+ * Get skills by category
406
+ */
407
+ export function getSkillsByCategory(category: 'page' | 'project'): Skill[] {
408
+ return skills.filter((s) => s.category === category);
409
+ }
410
+
411
+ /**
412
+ * Get page skills filtered by current page type
413
+ */
414
+ export function getPageSkills(
415
+ pageType?: 'list' | 'create' | 'edit' | 'show',
416
+ ): Skill[] {
417
+ const pageSkills = getSkillsByCategory('page');
418
+ if (!pageType) return pageSkills;
419
+ return pageSkills.filter((s) => s.pageTypes?.includes(pageType));
420
+ }
421
+
422
+ /**
423
+ * Get project-level skills
424
+ */
425
+ export function getProjectSkills(): Skill[] {
426
+ return getSkillsByCategory('project');
427
+ }
428
+
429
+ /**
430
+ * Get all sub-skills from a skill
431
+ */
432
+ export function getSubSkills(skillId: string): SubSkill[] {
433
+ const skill = skills.find((s) => s.id === skillId);
434
+ return skill?.subSkills || [];
435
+ }
436
+
437
+ /**
438
+ * Find a skill or sub-skill by ID
439
+ */
440
+ export function findSkillById(id: string): Skill | SubSkill | undefined {
441
+ // First check main skills
442
+ const mainSkill = skills.find((s) => s.id === id);
443
+ if (mainSkill) return mainSkill;
444
+
445
+ // Then check sub-skills
446
+ for (const skill of skills) {
447
+ const subSkill = skill.subSkills?.find((sub) => sub.id === id);
448
+ if (subSkill) return subSkill;
449
+ }
450
+
451
+ return undefined;
452
+ }
453
+
454
+ /**
455
+ * Get parent skill ID for a sub-skill
456
+ */
457
+ export function getParentSkillId(subSkillId: string): string | undefined {
458
+ for (const skill of skills) {
459
+ if (skill.subSkills?.some((sub) => sub.id === subSkillId)) {
460
+ return skill.id;
461
+ }
462
+ }
463
+ return undefined;
464
+ }
@@ -0,0 +1,62 @@
1
+ import React from "react";
2
+ import { UseQueryResult } from "@tanstack/react-query";
3
+ import {
4
+ List as AntdList,
5
+ Button,
6
+ Badge,
7
+ Typography,
8
+ } from "antd";
9
+ import { ILog, ILogData } from "@refinedev/core";
10
+ import dayjs from "dayjs";
11
+
12
+ const { Text } = Typography;
13
+
14
+ interface EventListProps {
15
+ logQueryResult?: UseQueryResult<ILogData>;
16
+ showModal: () => void;
17
+ setSelectedLog: React.Dispatch<React.SetStateAction<ILog | undefined>>;
18
+ selectedLog: ILog | undefined;
19
+ }
20
+
21
+ export const EventList: React.FC<EventListProps> = ({
22
+ logQueryResult,
23
+ showModal,
24
+ setSelectedLog,
25
+ selectedLog,
26
+ }) => {
27
+ return (
28
+ <AntdList
29
+ dataSource={logQueryResult?.data}
30
+ renderItem={(log: any) => {
31
+ const { creator, action, timestamp } = log;
32
+
33
+ return (
34
+ <AntdList.Item
35
+ style={{
36
+ alignItems: "flex-start",
37
+ padding: "8px 0px 8px 8px",
38
+ }}
39
+ >
40
+ <Button
41
+ type="text"
42
+ style={{
43
+ display: "flex",
44
+ flexDirection: "column",
45
+ height: "100%",
46
+ }}
47
+ onClick={() => {
48
+ showModal();
49
+ setSelectedLog(log);
50
+ }}
51
+ >
52
+ <Badge color={selectedLog?.id === log.id ? "blue" : "gray"} text={`${action} by ${creator}`} />
53
+ <Text>
54
+ Date: {dayjs(timestamp).format("MM/DD/YYYY, hh:mm")}
55
+ </Text>
56
+ </Button>
57
+ </AntdList.Item>
58
+ );
59
+ }}
60
+ />
61
+ );
62
+ };
@@ -0,0 +1,4 @@
1
+ export * from "./logButton";
2
+ export * from "./logList";
3
+ export * from "./modalDiffViewer";
4
+ export * from "./eventList";
@@ -0,0 +1,96 @@
1
+ import React, { useState } from "react";
2
+ import { useModal } from "@refinedev/antd";
3
+ import { Button, ButtonProps, ModalProps, message } from "antd";
4
+ import * as Icons from "@ant-design/icons";
5
+ import {
6
+ useRouterContext,
7
+ useTranslate,
8
+ ResourceRouterParams,
9
+ BaseKey,
10
+ useLogList,
11
+ ILog,
12
+ ILogData,
13
+ useResource,
14
+ } from "@refinedev/core";
15
+ import { ReactDiffViewerProps } from "react-diff-viewer";
16
+ import { ModalDiffViewer } from "../modalDiffViewer";
17
+
18
+ export type LogButtonProps = ButtonProps & {
19
+ recordItemId?: BaseKey;
20
+ resourceName?: string;
21
+ hideText?: boolean;
22
+ reactDiffViewerProps?: ReactDiffViewerProps;
23
+ modalProps?: ModalProps;
24
+ };
25
+
26
+ export const LogButton: React.FC<LogButtonProps> = ({
27
+ resourceName: propResourceName,
28
+ recordItemId,
29
+ hideText = false,
30
+ onClick,
31
+ reactDiffViewerProps,
32
+ modalProps: propModalProps,
33
+ children,
34
+ ...rest
35
+ }) => {
36
+ const [selectedLog, setSelectedLog] = useState<ILog>();
37
+
38
+ const translate = useTranslate();
39
+ const { modalProps, show } = useModal();
40
+ const [messageApi, contextHolder] = message.useMessage();
41
+
42
+ const { useParams } = useRouterContext();
43
+ const { id: idFromRoute, } =
44
+ useParams<ResourceRouterParams>();
45
+
46
+ const resourceWithRoute = useResource();
47
+
48
+ const resourceName = propResourceName ?? resourceWithRoute?.resource?.name ?? "";
49
+ const id = recordItemId ?? idFromRoute;
50
+
51
+ const logQueryResult = useLogList<ILogData>({
52
+ resource: resourceName,
53
+ meta: { id },
54
+ queryOptions: {
55
+ enabled: modalProps.open,
56
+ onSuccess: (result) => {
57
+ if (result?.length) {
58
+ setSelectedLog(result[0]);
59
+ } else {
60
+ messageApi.open({
61
+ type: "warning",
62
+ content: "There is no history.",
63
+ });
64
+ }
65
+ },
66
+ },
67
+ });
68
+
69
+ return (
70
+ <>
71
+ <Button
72
+ onClick={(e): void =>
73
+ onClick
74
+ ? onClick(e as React.MouseEvent<HTMLButtonElement, MouseEvent>)
75
+ : show()
76
+ }
77
+ icon={<Icons.HistoryOutlined />}
78
+ {...rest}
79
+ >
80
+ {!hideText && (children ?? translate("buttons.logs", "History"))}
81
+ </Button>
82
+ {selectedLog ? (
83
+ <ModalDiffViewer
84
+ modalProps={{ ...modalProps, ...propModalProps }}
85
+ showModal={show}
86
+ selectedLog={selectedLog}
87
+ setSelectedLog={setSelectedLog}
88
+ logQueryResult={logQueryResult}
89
+ reactDiffViewerProps={reactDiffViewerProps}
90
+ />
91
+ ) : (
92
+ <>{contextHolder}</>
93
+ )}
94
+ </>
95
+ );
96
+ };
@@ -0,0 +1,73 @@
1
+ import React, { useState } from "react";
2
+ import { useModal } from "@refinedev/antd";
3
+ import { Card, ModalProps } from "antd";
4
+ import {
5
+ BaseKey,
6
+ ILog,
7
+ ILogData,
8
+ pickNotDeprecated,
9
+ ResourceRouterParams,
10
+ useLogList,
11
+ useResourceWithRoute,
12
+ useRouterContext,
13
+ } from "@refinedev/core";
14
+ import { ReactDiffViewerProps } from "react-diff-viewer";
15
+
16
+ import { ModalDiffViewer } from "../modalDiffViewer";
17
+ import { EventList } from "../eventList";
18
+
19
+ export interface LogListProps {
20
+ recordItemId?: BaseKey;
21
+ reactDiffViewerProps?: ReactDiffViewerProps;
22
+ modalProps?: ModalProps;
23
+ resource?: string;
24
+ }
25
+
26
+ export const LogList: React.FC<LogListProps> = ({
27
+ recordItemId,
28
+ reactDiffViewerProps,
29
+ modalProps: propModalProps,
30
+ resource: propResourceName,
31
+ }) => {
32
+ const [selectedLog, setSelectedLog] = useState<ILog>();
33
+
34
+ const { modalProps, show } = useModal();
35
+
36
+ const { useParams } = useRouterContext();
37
+ const { resource: routeResourceName, id: idFromRoute } =
38
+ useParams<ResourceRouterParams>();
39
+
40
+ const resourceWithRoute = useResourceWithRoute();
41
+ const resource = resourceWithRoute(routeResourceName);
42
+
43
+ const resourceName = propResourceName ?? resource.name;
44
+ const id = recordItemId ?? idFromRoute;
45
+
46
+ const logQueryResult = useLogList<ILogData>({
47
+ resource: resourceName,
48
+ meta: { id },
49
+ metaData: pickNotDeprecated(resource.meta, resource.options),
50
+ });
51
+
52
+ return (
53
+ <>
54
+ <Card loading={logQueryResult?.isLoading} bodyStyle={{ padding: 0 }}>
55
+ <EventList
56
+ logQueryResult={logQueryResult}
57
+ setSelectedLog={setSelectedLog}
58
+ showModal={show}
59
+ selectedLog={selectedLog}
60
+ />
61
+ </Card>
62
+ <ModalDiffViewer
63
+ modalProps={{ ...modalProps, ...propModalProps }}
64
+ showModal={show}
65
+ selectedLog={selectedLog}
66
+ setSelectedLog={setSelectedLog}
67
+ logQueryResult={logQueryResult}
68
+ reactDiffViewerProps={reactDiffViewerProps}
69
+ />
70
+
71
+ </>
72
+ );
73
+ };