@qlover/create-app 0.7.14 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (361) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/dist/configs/_common/.gitignore.template +6 -0
  3. package/dist/configs/_common/.prettierignore +17 -5
  4. package/dist/configs/_common/.vscode/settings.json +6 -1
  5. package/dist/index.cjs +1 -1
  6. package/dist/index.js +1 -1
  7. package/dist/templates/next-app/.env.template +1 -1
  8. package/dist/templates/next-app/README.en.md +130 -0
  9. package/dist/templates/next-app/README.md +114 -20
  10. package/dist/templates/next-app/config/Identifier/api.ts +5 -5
  11. package/dist/templates/next-app/config/Identifier/common/admint.table.ts +69 -0
  12. package/dist/templates/next-app/config/Identifier/common/common.ts +76 -0
  13. package/dist/templates/next-app/config/Identifier/common/index.ts +3 -0
  14. package/dist/templates/next-app/config/Identifier/{validator.ts → common/validators.ts} +5 -5
  15. package/dist/templates/next-app/config/Identifier/index.ts +2 -12
  16. package/dist/templates/next-app/config/Identifier/pages/index.ts +6 -0
  17. package/dist/templates/next-app/config/Identifier/pages/page.admin.home.ts +27 -0
  18. package/dist/templates/next-app/config/Identifier/pages/page.admin.locales.ts +266 -0
  19. package/dist/templates/next-app/config/Identifier/pages/page.admin.user.ts +293 -0
  20. package/dist/templates/{react-app/config/Identifier → next-app/config/Identifier/pages}/page.home.ts +15 -22
  21. package/dist/templates/next-app/config/Identifier/{page.login.ts → pages/page.login.ts} +28 -34
  22. package/dist/templates/next-app/config/Identifier/{page.register.ts → pages/page.register.ts} +30 -29
  23. package/dist/templates/next-app/config/adminNavs.ts +19 -0
  24. package/dist/templates/next-app/config/common.ts +22 -13
  25. package/dist/templates/next-app/config/i18n/HomeI18n.ts +5 -5
  26. package/dist/templates/next-app/config/i18n/admin18n.ts +61 -19
  27. package/dist/templates/next-app/config/i18n/i18nConfig.ts +2 -0
  28. package/dist/templates/next-app/config/i18n/i18nKeyScheam.ts +36 -0
  29. package/dist/templates/next-app/config/i18n/loginI18n.ts +22 -22
  30. package/dist/templates/next-app/config/i18n/register18n.ts +23 -24
  31. package/dist/templates/next-app/docs/en/api.md +387 -0
  32. package/dist/templates/next-app/docs/en/component.md +544 -0
  33. package/dist/templates/next-app/docs/en/database.md +496 -0
  34. package/dist/templates/next-app/docs/en/development-guide.md +727 -0
  35. package/dist/templates/next-app/docs/en/env.md +563 -0
  36. package/dist/templates/next-app/docs/en/i18n.md +287 -0
  37. package/dist/templates/next-app/docs/en/index.md +165 -0
  38. package/dist/templates/next-app/docs/en/page.md +457 -0
  39. package/dist/templates/next-app/docs/en/project-structure.md +176 -0
  40. package/dist/templates/next-app/docs/en/router.md +427 -0
  41. package/dist/templates/next-app/docs/en/theme.md +532 -0
  42. package/dist/templates/next-app/docs/en/validator.md +478 -0
  43. package/dist/templates/next-app/docs/zh/api.md +387 -0
  44. package/dist/templates/next-app/docs/zh/component.md +544 -0
  45. package/dist/templates/next-app/docs/zh/database.md +496 -0
  46. package/dist/templates/next-app/docs/zh/development-guide.md +727 -0
  47. package/dist/templates/next-app/docs/zh/env.md +563 -0
  48. package/dist/templates/next-app/docs/zh/i18n.md +287 -0
  49. package/dist/templates/next-app/docs/zh/index.md +165 -0
  50. package/dist/templates/next-app/docs/zh/page.md +457 -0
  51. package/dist/templates/next-app/docs/zh/project-structure.md +176 -0
  52. package/dist/templates/next-app/docs/zh/router.md +427 -0
  53. package/dist/templates/next-app/docs/zh/theme.md +532 -0
  54. package/dist/templates/next-app/docs/zh/validator.md +476 -0
  55. package/dist/templates/next-app/make/generateLocales.ts +19 -12
  56. package/dist/templates/next-app/migrations/schema/LocalesSchema.ts +15 -0
  57. package/dist/templates/next-app/migrations/sql/1694244000000.sql +11 -0
  58. package/dist/templates/next-app/package.json +7 -3
  59. package/dist/templates/next-app/public/locales/en.json +172 -207
  60. package/dist/templates/next-app/public/locales/zh.json +172 -207
  61. package/dist/templates/next-app/src/app/[locale]/admin/locales/page.tsx +153 -0
  62. package/dist/templates/next-app/src/app/[locale]/admin/users/page.tsx +48 -50
  63. package/dist/templates/next-app/src/app/[locale]/login/LoginForm.tsx +2 -2
  64. package/dist/templates/next-app/src/app/api/admin/locales/create/route.ts +34 -0
  65. package/dist/templates/next-app/src/app/api/admin/locales/import/route.ts +40 -0
  66. package/dist/templates/next-app/src/app/api/admin/locales/route.ts +42 -0
  67. package/dist/templates/next-app/src/app/api/admin/locales/update/route.ts +32 -0
  68. package/dist/templates/next-app/src/app/api/locales/json/route.ts +44 -0
  69. package/dist/templates/next-app/src/base/cases/AdminPageManager.ts +1 -13
  70. package/dist/templates/next-app/src/base/cases/Datetime.ts +18 -0
  71. package/dist/templates/next-app/src/base/cases/DialogErrorPlugin.ts +12 -6
  72. package/dist/templates/next-app/src/base/cases/ResourceState.ts +17 -0
  73. package/dist/templates/next-app/src/base/cases/TranslateI18nInterface.ts +25 -0
  74. package/dist/templates/next-app/src/base/cases/ZodColumnBuilder.ts +200 -0
  75. package/dist/templates/next-app/src/base/port/ZodBuilderInterface.ts +8 -0
  76. package/dist/templates/next-app/src/base/services/AdminLocalesService.ts +20 -0
  77. package/dist/templates/next-app/src/base/services/AdminPageEvent.ts +26 -0
  78. package/dist/templates/next-app/src/base/services/AdminPageScheduler.ts +42 -0
  79. package/dist/templates/next-app/src/base/services/ResourceService.ts +122 -0
  80. package/dist/templates/next-app/src/base/services/adminApi/AdminLocalesApi.ts +104 -0
  81. package/dist/templates/next-app/src/base/services/adminApi/AdminUserApi.ts +38 -5
  82. package/dist/templates/next-app/src/base/services/appApi/AppApiPlugin.ts +1 -1
  83. package/dist/templates/next-app/src/i18n/request.ts +30 -1
  84. package/dist/templates/next-app/src/server/PageParams.ts +2 -10
  85. package/dist/templates/next-app/src/server/port/DBBridgeInterface.ts +5 -0
  86. package/dist/templates/next-app/src/server/port/DBTableInterface.ts +2 -0
  87. package/dist/templates/next-app/src/server/port/LocalesRepositoryInterface.ts +43 -0
  88. package/dist/templates/next-app/src/server/repositorys/LocalesRepository.ts +197 -0
  89. package/dist/templates/next-app/src/server/services/ApiLocaleService.ts +122 -0
  90. package/dist/templates/next-app/src/server/sqlBridges/SupabaseBridge.ts +60 -11
  91. package/dist/templates/next-app/src/server/validators/ExtendedExecutorError.ts +6 -0
  92. package/dist/templates/next-app/src/server/validators/LocalesValidator.ts +131 -0
  93. package/dist/templates/next-app/src/server/validators/LoginValidator.ts +2 -5
  94. package/dist/templates/next-app/src/server/validators/PaginationValidator.ts +32 -16
  95. package/dist/templates/next-app/src/styles/css/antd-themes/pagination/_default.css +2 -1
  96. package/dist/templates/next-app/src/styles/css/antd-themes/pagination/dark.css +28 -29
  97. package/dist/templates/next-app/src/styles/css/antd-themes/pagination/pink.css +2 -1
  98. package/dist/templates/next-app/src/uikit/components/AdminLayout.tsx +17 -3
  99. package/dist/templates/next-app/src/uikit/components/BaseHeader.tsx +5 -4
  100. package/dist/templates/next-app/src/uikit/components/BaseLayout.tsx +5 -4
  101. package/dist/templates/next-app/src/uikit/components/BootstrapsProvider.tsx +3 -2
  102. package/dist/templates/next-app/src/uikit/components/ComboProvider.tsx +1 -1
  103. package/dist/templates/next-app/src/uikit/components/EditableCell.tsx +118 -0
  104. package/dist/templates/next-app/src/uikit/components/LogoutButton.tsx +5 -6
  105. package/dist/templates/next-app/src/uikit/components/ThemeSwitcher.tsx +1 -1
  106. package/dist/templates/next-app/src/uikit/components/With.tsx +2 -2
  107. package/dist/templates/next-app/src/uikit/components/localesImportButton/LocalesImportButton.tsx +62 -0
  108. package/dist/templates/next-app/src/uikit/components/localesImportButton/LocalesImportEvent.ts +28 -0
  109. package/dist/templates/next-app/src/uikit/components/localesImportButton/import.module.css +6 -0
  110. package/dist/templates/next-app/src/uikit/hook/useI18nInterface.ts +8 -14
  111. package/dist/templates/next-app/src/uikit/hook/useWarnTranslations.ts +25 -0
  112. package/dist/templates/react-app/.prettierignore +17 -0
  113. package/dist/templates/react-app/README.en.md +71 -54
  114. package/dist/templates/react-app/README.md +35 -18
  115. package/dist/templates/react-app/__tests__/__mocks__/BootstrapTest.ts +14 -0
  116. package/dist/templates/react-app/__tests__/__mocks__/MockAppConfit.ts +1 -1
  117. package/dist/templates/react-app/__tests__/__mocks__/MockDialogHandler.ts +2 -2
  118. package/dist/templates/react-app/__tests__/__mocks__/MockLogger.ts +1 -1
  119. package/dist/templates/react-app/__tests__/__mocks__/components/TestApp.tsx +45 -0
  120. package/dist/templates/react-app/__tests__/__mocks__/components/TestBootstrapsProvider.tsx +34 -0
  121. package/dist/templates/react-app/__tests__/__mocks__/components/TestRouter.tsx +46 -0
  122. package/dist/templates/react-app/__tests__/__mocks__/components/index.ts +12 -0
  123. package/dist/templates/react-app/__tests__/__mocks__/createMockGlobals.ts +1 -2
  124. package/dist/templates/react-app/__tests__/__mocks__/testIOC/TestIOC.ts +51 -0
  125. package/dist/templates/react-app/__tests__/__mocks__/testIOC/TestIOCRegister.ts +69 -0
  126. package/dist/templates/react-app/__tests__/setup/index.ts +1 -51
  127. package/dist/templates/react-app/__tests__/setup/setupGlobal.ts +51 -0
  128. package/dist/templates/react-app/__tests__/src/App.structure.test.tsx +115 -0
  129. package/dist/templates/react-app/__tests__/src/base/cases/AppConfig.test.ts +2 -2
  130. package/dist/templates/react-app/__tests__/src/base/cases/AppError.test.ts +1 -1
  131. package/dist/templates/react-app/__tests__/src/base/cases/DialogHandler.test.ts +3 -5
  132. package/dist/templates/react-app/__tests__/src/base/cases/I18nKeyErrorPlugin.test.ts +13 -2
  133. package/dist/templates/react-app/__tests__/src/base/cases/InversifyContainer.test.ts +1 -1
  134. package/dist/templates/react-app/__tests__/src/base/cases/PublicAssetsPath.test.ts +1 -1
  135. package/dist/templates/react-app/__tests__/src/base/cases/RequestLogger.test.ts +5 -5
  136. package/dist/templates/react-app/__tests__/src/base/cases/RequestStatusCatcher.test.ts +1 -2
  137. package/dist/templates/react-app/__tests__/src/base/cases/RouterLoader.test.ts +25 -15
  138. package/dist/templates/react-app/__tests__/src/base/services/I18nService.test.ts +29 -15
  139. package/dist/templates/react-app/__tests__/src/core/IOC.test.ts +19 -9
  140. package/dist/templates/react-app/__tests__/src/core/bootstraps/BootstrapClient.test.ts +153 -0
  141. package/dist/templates/react-app/__tests__/src/core/bootstraps/BootstrapsApp.test.ts +9 -7
  142. package/dist/templates/react-app/__tests__/src/main.integration.test.tsx +4 -5
  143. package/dist/templates/react-app/__tests__/src/main.test.tsx +4 -4
  144. package/dist/templates/react-app/__tests__/src/uikit/components/BaseHeader.test.tsx +68 -59
  145. package/dist/templates/react-app/config/IOCIdentifier.ts +8 -8
  146. package/dist/templates/react-app/config/Identifier/{common.error.ts → common/common.error.ts} +5 -5
  147. package/dist/templates/react-app/config/Identifier/{common.ts → common/common.ts} +9 -9
  148. package/dist/templates/react-app/config/Identifier/common/index.ts +2 -0
  149. package/dist/templates/react-app/config/Identifier/index.ts +1 -9
  150. package/dist/templates/react-app/config/Identifier/pages/index.ts +8 -0
  151. package/dist/templates/react-app/config/Identifier/{page.about.ts → pages/page.about.ts} +34 -26
  152. package/dist/templates/react-app/config/Identifier/{page.executor.ts → pages/page.executor.ts} +47 -39
  153. package/dist/templates/{next-app/config/Identifier → react-app/config/Identifier/pages}/page.home.ts +24 -23
  154. package/dist/templates/react-app/config/Identifier/pages/page.identifiter.ts +102 -0
  155. package/dist/templates/react-app/config/Identifier/{page.jsonStorage.ts → pages/page.jsonStorage.ts} +18 -11
  156. package/dist/templates/react-app/config/Identifier/{page.login.ts → pages/page.login.ts} +37 -27
  157. package/dist/templates/react-app/config/Identifier/{page.register.ts → pages/page.register.ts} +37 -25
  158. package/dist/templates/react-app/config/Identifier/{page.request.ts → pages/page.request.ts} +34 -44
  159. package/dist/templates/react-app/config/app.router.ts +66 -69
  160. package/dist/templates/react-app/config/i18n/PageI18nInterface.ts +51 -0
  161. package/dist/templates/react-app/config/i18n/aboutI18n.ts +42 -0
  162. package/dist/templates/react-app/config/i18n/executorI18n.ts +51 -0
  163. package/dist/templates/react-app/config/i18n/homeI18n.ts +24 -0
  164. package/dist/templates/react-app/config/i18n/i18nConfig.ts +30 -0
  165. package/dist/templates/react-app/config/i18n/identifiter18n.ts +30 -0
  166. package/dist/templates/react-app/config/i18n/jsonStorage18n.ts +27 -0
  167. package/dist/templates/react-app/config/i18n/login18n.ts +42 -0
  168. package/dist/templates/react-app/config/i18n/notFoundI18n.ts +34 -0
  169. package/dist/templates/react-app/config/i18n/register18n.ts +40 -0
  170. package/dist/templates/react-app/config/i18n/request18n.ts +41 -0
  171. package/dist/templates/react-app/config/theme.ts +14 -4
  172. package/dist/templates/react-app/docs/en/bootstrap.md +1670 -341
  173. package/dist/templates/react-app/docs/en/development-guide.md +1021 -345
  174. package/dist/templates/react-app/docs/en/env.md +1132 -278
  175. package/dist/templates/react-app/docs/en/i18n.md +858 -147
  176. package/dist/templates/react-app/docs/en/index.md +733 -104
  177. package/dist/templates/react-app/docs/en/ioc.md +1228 -287
  178. package/dist/templates/react-app/docs/en/playwright/e2e-tests.md +321 -0
  179. package/dist/templates/react-app/docs/en/playwright/index.md +19 -0
  180. package/dist/templates/react-app/docs/en/playwright/installation-summary.md +332 -0
  181. package/dist/templates/react-app/docs/en/playwright/overview.md +222 -0
  182. package/dist/templates/react-app/docs/en/playwright/quickstart.md +325 -0
  183. package/dist/templates/react-app/docs/en/playwright/reorganization-notes.md +340 -0
  184. package/dist/templates/react-app/docs/en/playwright/setup-complete.md +290 -0
  185. package/dist/templates/react-app/docs/en/playwright/testing-guide.md +565 -0
  186. package/dist/templates/react-app/docs/en/store.md +1194 -184
  187. package/dist/templates/react-app/docs/en/why-no-globals.md +797 -0
  188. package/dist/templates/react-app/docs/zh/bootstrap.md +1670 -341
  189. package/dist/templates/react-app/docs/zh/development-guide.md +1021 -345
  190. package/dist/templates/react-app/docs/zh/env.md +1132 -275
  191. package/dist/templates/react-app/docs/zh/i18n.md +858 -147
  192. package/dist/templates/react-app/docs/zh/index.md +717 -104
  193. package/dist/templates/react-app/docs/zh/ioc.md +1229 -287
  194. package/dist/templates/react-app/docs/zh/playwright/e2e-tests.md +321 -0
  195. package/dist/templates/react-app/docs/zh/playwright/index.md +19 -0
  196. package/dist/templates/react-app/docs/zh/playwright/installation-summary.md +332 -0
  197. package/dist/templates/react-app/docs/zh/playwright/overview.md +222 -0
  198. package/dist/templates/react-app/docs/zh/playwright/quickstart.md +325 -0
  199. package/dist/templates/react-app/docs/zh/playwright/reorganization-notes.md +340 -0
  200. package/dist/templates/react-app/docs/zh/playwright/setup-complete.md +290 -0
  201. package/dist/templates/react-app/docs/zh/playwright/testing-guide.md +565 -0
  202. package/dist/templates/react-app/docs/zh/store.md +1192 -184
  203. package/dist/templates/react-app/docs/zh/why-no-globals.md +797 -0
  204. package/dist/templates/react-app/e2e/App.spec.ts +319 -0
  205. package/dist/templates/react-app/e2e/fixtures/base.fixture.ts +40 -0
  206. package/dist/templates/react-app/e2e/main.spec.ts +20 -0
  207. package/dist/templates/react-app/e2e/utils/test-helpers.ts +19 -0
  208. package/dist/templates/react-app/eslint.config.mjs +247 -0
  209. package/dist/templates/react-app/makes/eslint-utils.mjs +195 -0
  210. package/dist/templates/react-app/makes/generateTs2LocalesOptions.ts +26 -0
  211. package/dist/templates/react-app/package.json +31 -3
  212. package/dist/templates/react-app/playwright.config.ts +79 -0
  213. package/dist/templates/react-app/public/locales/en/common.json +190 -179
  214. package/dist/templates/react-app/public/locales/zh/common.json +190 -179
  215. package/dist/templates/react-app/src/App.tsx +15 -42
  216. package/dist/templates/react-app/src/base/apis/AiApi.ts +5 -5
  217. package/dist/templates/react-app/src/base/apis/feApi/FeApi.ts +1 -1
  218. package/dist/templates/react-app/src/base/apis/feApi/FeApiAdapter.ts +1 -1
  219. package/dist/templates/react-app/src/base/apis/feApi/FeApiBootstarp.ts +8 -8
  220. package/dist/templates/react-app/src/base/apis/feApi/FeApiType.ts +1 -1
  221. package/dist/templates/react-app/src/base/apis/userApi/UserApi.ts +6 -6
  222. package/dist/templates/react-app/src/base/apis/userApi/UserApiAdapter.ts +1 -1
  223. package/dist/templates/react-app/src/base/apis/userApi/UserApiBootstarp.ts +12 -14
  224. package/dist/templates/react-app/src/base/apis/userApi/UserApiType.ts +1 -1
  225. package/dist/templates/react-app/src/base/cases/DialogHandler.ts +5 -2
  226. package/dist/templates/react-app/src/base/cases/I18nKeyErrorPlugin.ts +3 -3
  227. package/dist/templates/react-app/src/base/cases/InversifyContainer.ts +3 -3
  228. package/dist/templates/react-app/src/base/cases/RequestLanguages.ts +2 -2
  229. package/dist/templates/react-app/src/base/cases/RequestLogger.ts +4 -4
  230. package/dist/templates/react-app/src/base/cases/RequestStatusCatcher.ts +1 -1
  231. package/dist/templates/react-app/src/base/cases/ResourceState.ts +23 -0
  232. package/dist/templates/react-app/src/base/cases/RouterLoader.ts +4 -4
  233. package/dist/templates/react-app/src/base/cases/TranslateI18nInterface.ts +26 -0
  234. package/dist/templates/react-app/src/base/port/ExecutorPageBridgeInterface.ts +2 -3
  235. package/dist/templates/react-app/src/base/port/I18nServiceInterface.ts +1 -1
  236. package/dist/templates/react-app/src/base/port/IOCInterface.ts +36 -0
  237. package/dist/templates/react-app/src/base/port/JSONStoragePageBridgeInterface.ts +2 -1
  238. package/dist/templates/react-app/src/base/port/ProcesserExecutorInterface.ts +1 -1
  239. package/dist/templates/react-app/src/base/port/RequestPageBridgeInterface.ts +2 -2
  240. package/dist/templates/react-app/src/base/port/RouteServiceInterface.ts +9 -5
  241. package/dist/templates/react-app/src/base/port/UserServiceInterface.ts +1 -1
  242. package/dist/templates/react-app/src/base/services/I18nService.ts +29 -29
  243. package/dist/templates/react-app/src/base/services/IdentifierService.ts +143 -0
  244. package/dist/templates/react-app/src/base/services/ProcesserExecutor.ts +3 -3
  245. package/dist/templates/react-app/src/base/services/RouteService.ts +27 -8
  246. package/dist/templates/react-app/src/base/services/UserService.ts +8 -8
  247. package/dist/templates/react-app/src/base/types/Page.ts +14 -2
  248. package/dist/templates/react-app/src/base/types/global.d.ts +1 -1
  249. package/dist/templates/react-app/src/core/IOC.ts +5 -46
  250. package/dist/templates/react-app/src/core/bootstraps/{BootstrapApp.ts → BootstrapClient.ts} +44 -17
  251. package/dist/templates/react-app/src/core/bootstraps/BootstrapsRegistry.ts +14 -7
  252. package/dist/templates/react-app/src/core/bootstraps/IocIdentifierTest.ts +1 -1
  253. package/dist/templates/react-app/src/core/bootstraps/PrintBootstrap.ts +1 -1
  254. package/dist/templates/react-app/src/core/clientIoc/ClientIOC.ts +40 -0
  255. package/dist/templates/react-app/src/core/{IocRegisterImpl.ts → clientIoc/ClientIOCRegister.ts} +35 -24
  256. package/dist/templates/react-app/src/core/globals.ts +9 -9
  257. package/dist/templates/react-app/src/main.tsx +4 -4
  258. package/dist/templates/react-app/src/pages/404.tsx +6 -3
  259. package/dist/templates/react-app/src/pages/500.tsx +5 -2
  260. package/dist/templates/react-app/src/pages/NoRouteFound.tsx +5 -0
  261. package/dist/templates/react-app/src/pages/auth/Layout.tsx +9 -6
  262. package/dist/templates/react-app/src/pages/auth/LoginPage.tsx +46 -56
  263. package/dist/templates/react-app/src/pages/auth/RegisterPage.tsx +46 -58
  264. package/dist/templates/react-app/src/pages/base/AboutPage.tsx +35 -40
  265. package/dist/templates/react-app/src/pages/base/ExecutorPage.tsx +51 -51
  266. package/dist/templates/react-app/src/pages/base/HomePage.tsx +14 -15
  267. package/dist/templates/react-app/src/pages/base/IdentifierPage.tsx +70 -11
  268. package/dist/templates/react-app/src/pages/base/JSONStoragePage.tsx +24 -25
  269. package/dist/templates/react-app/src/pages/base/Layout.tsx +2 -2
  270. package/dist/templates/react-app/src/pages/base/RedirectPathname.tsx +3 -2
  271. package/dist/templates/react-app/src/pages/base/RequestPage.tsx +41 -59
  272. package/dist/templates/react-app/src/styles/css/antd-themes/{_default.css → _common/_default.css} +85 -0
  273. package/dist/templates/react-app/src/styles/css/antd-themes/{dark.css → _common/dark.css} +99 -0
  274. package/dist/templates/react-app/src/styles/css/antd-themes/_common/index.css +3 -0
  275. package/dist/templates/react-app/src/styles/css/antd-themes/{pink.css → _common/pink.css} +86 -0
  276. package/dist/templates/react-app/src/styles/css/antd-themes/index.css +4 -3
  277. package/dist/templates/react-app/src/styles/css/antd-themes/menu/_default.css +108 -0
  278. package/dist/templates/react-app/src/styles/css/antd-themes/menu/dark.css +67 -0
  279. package/dist/templates/react-app/src/styles/css/antd-themes/menu/index.css +3 -0
  280. package/dist/templates/react-app/src/styles/css/antd-themes/menu/pink.css +67 -0
  281. package/dist/templates/react-app/src/styles/css/antd-themes/pagination/_default.css +34 -0
  282. package/dist/templates/react-app/src/styles/css/antd-themes/pagination/dark.css +31 -0
  283. package/dist/templates/react-app/src/styles/css/antd-themes/pagination/index.css +3 -0
  284. package/dist/templates/react-app/src/styles/css/antd-themes/pagination/pink.css +36 -0
  285. package/dist/templates/react-app/src/styles/css/antd-themes/table/_default.css +44 -0
  286. package/dist/templates/react-app/src/styles/css/antd-themes/table/dark.css +43 -0
  287. package/dist/templates/react-app/src/styles/css/antd-themes/table/index.css +3 -0
  288. package/dist/templates/react-app/src/styles/css/antd-themes/table/pink.css +43 -0
  289. package/dist/templates/react-app/src/styles/css/page.css +4 -3
  290. package/dist/templates/react-app/src/styles/css/themes/_default.css +1 -0
  291. package/dist/templates/react-app/src/styles/css/themes/dark.css +1 -0
  292. package/dist/templates/react-app/src/styles/css/themes/pink.css +1 -0
  293. package/dist/templates/react-app/src/styles/css/zIndex.css +1 -1
  294. package/dist/templates/react-app/src/uikit/bridges/ExecutorPageBridge.ts +3 -3
  295. package/dist/templates/react-app/src/uikit/bridges/JSONStoragePageBridge.ts +2 -2
  296. package/dist/templates/react-app/src/uikit/bridges/NavigateBridge.ts +1 -1
  297. package/dist/templates/react-app/src/uikit/bridges/RequestPageBridge.ts +3 -3
  298. package/dist/templates/react-app/src/uikit/components/AppRouterProvider.tsx +35 -0
  299. package/dist/templates/react-app/src/uikit/components/BaseHeader.tsx +15 -11
  300. package/dist/templates/react-app/src/uikit/components/BaseRouteProvider.tsx +14 -11
  301. package/dist/templates/react-app/src/uikit/components/BaseRouteSeo.tsx +18 -0
  302. package/dist/templates/react-app/src/uikit/components/BootstrapsProvider.tsx +13 -0
  303. package/dist/templates/react-app/src/uikit/components/ClientSeo.tsx +62 -0
  304. package/dist/templates/react-app/src/uikit/components/ComboProvider.tsx +38 -0
  305. package/dist/templates/react-app/src/uikit/components/LanguageSwitcher.tsx +48 -27
  306. package/dist/templates/react-app/src/uikit/components/Loading.tsx +4 -2
  307. package/dist/templates/react-app/src/uikit/components/LocaleLink.tsx +4 -5
  308. package/dist/templates/react-app/src/uikit/components/LogoutButton.tsx +34 -11
  309. package/dist/templates/react-app/src/uikit/components/ProcessExecutorProvider.tsx +9 -5
  310. package/dist/templates/react-app/src/uikit/components/RouterRenderComponent.tsx +6 -3
  311. package/dist/templates/react-app/src/uikit/components/ThemeSwitcher.tsx +97 -40
  312. package/dist/templates/react-app/src/uikit/components/UserAuthProvider.tsx +5 -5
  313. package/dist/templates/react-app/src/uikit/components/With.tsx +17 -0
  314. package/dist/templates/react-app/src/uikit/contexts/BaseRouteContext.ts +17 -11
  315. package/dist/templates/react-app/src/uikit/contexts/IOCContext.ts +13 -0
  316. package/dist/templates/react-app/src/uikit/hooks/useAppTranslation.ts +26 -0
  317. package/dist/templates/react-app/src/uikit/hooks/useI18nGuard.ts +8 -11
  318. package/dist/templates/react-app/src/uikit/hooks/useI18nInterface.ts +25 -0
  319. package/dist/templates/react-app/src/uikit/hooks/useIOC.ts +35 -0
  320. package/dist/templates/react-app/src/uikit/hooks/useNavigateBridge.ts +3 -3
  321. package/dist/templates/react-app/src/uikit/hooks/useStrictEffect.ts +0 -1
  322. package/dist/templates/react-app/tsconfig.e2e.json +21 -0
  323. package/dist/templates/react-app/tsconfig.json +8 -1
  324. package/dist/templates/react-app/tsconfig.node.json +1 -1
  325. package/dist/templates/react-app/tsconfig.test.json +3 -1
  326. package/dist/templates/react-app/vite.config.ts +50 -34
  327. package/package.json +2 -1
  328. package/dist/configs/react-app/eslint.config.js +0 -94
  329. package/dist/templates/next-app/config/Identifier/common.error.ts +0 -41
  330. package/dist/templates/next-app/config/Identifier/common.ts +0 -69
  331. package/dist/templates/next-app/config/Identifier/page.about.ts +0 -181
  332. package/dist/templates/next-app/config/Identifier/page.admin.ts +0 -48
  333. package/dist/templates/next-app/config/Identifier/page.executor.ts +0 -272
  334. package/dist/templates/next-app/config/Identifier/page.identifiter.ts +0 -39
  335. package/dist/templates/next-app/config/Identifier/page.jsonStorage.ts +0 -72
  336. package/dist/templates/next-app/config/Identifier/page.request.ts +0 -182
  337. package/dist/templates/next-app/docs/env.md +0 -94
  338. package/dist/templates/next-app/src/base/cases/ChatAction.ts +0 -21
  339. package/dist/templates/next-app/src/base/cases/FocusBarAction.ts +0 -36
  340. package/dist/templates/next-app/src/base/cases/RequestState.ts +0 -20
  341. package/dist/templates/next-app/src/base/port/AdminPageInterface.ts +0 -85
  342. package/dist/templates/next-app/src/base/port/AsyncStateInterface.ts +0 -7
  343. package/dist/templates/next-app/src/base/services/AdminUserService.ts +0 -45
  344. package/dist/templates/next-app/src/uikit/components/ChatRoot.tsx +0 -17
  345. package/dist/templates/next-app/src/uikit/components/chat/ChatActionInterface.ts +0 -30
  346. package/dist/templates/next-app/src/uikit/components/chat/ChatFocusBar.tsx +0 -65
  347. package/dist/templates/next-app/src/uikit/components/chat/ChatMessages.tsx +0 -59
  348. package/dist/templates/next-app/src/uikit/components/chat/ChatWrap.tsx +0 -28
  349. package/dist/templates/next-app/src/uikit/components/chat/FocusBarActionInterface.ts +0 -19
  350. package/dist/templates/next-app/src/uikit/hook/useMountedClient.ts +0 -17
  351. package/dist/templates/next-app/src/uikit/hook/useStore.ts +0 -15
  352. package/dist/templates/react-app/__tests__/__mocks__/I18nService.ts +0 -13
  353. package/dist/templates/react-app/__tests__/src/App.test.tsx +0 -139
  354. package/dist/templates/react-app/config/Identifier/page.identifiter.ts +0 -39
  355. package/dist/templates/react-app/config/i18n.ts +0 -15
  356. package/dist/templates/react-app/docs/en/project-structure.md +0 -434
  357. package/dist/templates/react-app/docs/zh/project-structure.md +0 -434
  358. package/dist/templates/react-app/src/base/cases/RequestState.ts +0 -20
  359. package/dist/templates/react-app/src/base/port/AsyncStateInterface.ts +0 -7
  360. package/dist/templates/react-app/src/uikit/hooks/useDocumentTitle.ts +0 -15
  361. package/dist/templates/react-app/src/uikit/hooks/useStore.ts +0 -15
@@ -1,182 +0,0 @@
1
- /**
2
- * @description Request page title
3
- * @localZh 请求示例
4
- * @localEn Request Examples
5
- */
6
- export const PAGE_REQUEST_TITLE = 'page__request__title';
7
-
8
- /**
9
- * @description Request page description
10
- * @localZh 展示各种请求示例和用法
11
- * @localEn Demonstrate various request examples and usage
12
- */
13
- export const PAGE_REQUEST_DESCRIPTION = 'page__request__description';
14
-
15
- /**
16
- * @description Request timeout message
17
- * @localZh 请求超时
18
- * @localEn Request Timeout
19
- */
20
- export const REQUEST_TIMEOUT = 'request__requestTimeout';
21
- /**
22
- * @description Hello result message
23
- * @localZh Hello 结果是
24
- * @localEn Hello result is
25
- */
26
- export const REQUEST_HELLO_RESULT = 'request__helloResult';
27
- /**
28
- * @description Hello error message
29
- * @localZh Hello 错误是
30
- * @localEn Hello error is
31
- */
32
- export const REQUEST_HELLO_ERROR = 'request__helloError';
33
- /**
34
- * @description IpInfo result message
35
- * @localZh IpInfo 结果是
36
- * @localEn IpInfo result is
37
- */
38
- export const REQUEST_IP_INFO_RESULT = 'request__ipInfoResult';
39
- /**
40
- * @description IpInfo title
41
- * @localZh IpInfo
42
- * @localEn IpInfo
43
- */
44
- export const REQUEST_IP_INFO = 'request__ipInfo';
45
- /**
46
- * @description Random user title
47
- * @localZh 随机用户
48
- * @localEn RandomUser
49
- */
50
- export const REQUEST_RANDOM_USER = 'request__randomUser';
51
- /**
52
- * @description Loading message
53
- * @localZh 加载中______
54
- * @localEn Loading______
55
- */
56
- export const REQUEST_LOADING = 'request__loading';
57
- /**
58
- * @description Random user result message
59
- * @localZh 随机用户 结果是
60
- * @localEn RandomUser result is
61
- */
62
- export const REQUEST_RANDOM_USER_RESULT = 'request__randomUserResult';
63
- /**
64
- * @description Random user error message
65
- * @localZh 随机用户 错误是
66
- * @localEn RandomUser error is
67
- */
68
- export const REQUEST_RANDOM_USER_ERROR = 'request__randomUserError';
69
- /**
70
- * @description Trigger abort request button text
71
- * @localZh 触发中止请求
72
- * @localEn Trigger Abort Request
73
- */
74
- export const REQUEST_TRIGGER_ABORT = 'request__triggerAbortRequest';
75
- /**
76
- * @description Stop abort request button text
77
- * @localZh 停止中止请求
78
- * @localEn Stop Abort Request
79
- */
80
- export const REQUEST_STOP_ABORT = 'request__stopAbortRequest';
81
- /**
82
- * @description Abort request result message
83
- * @localZh 中止请求 结果是
84
- * @localEn Abort Request Result
85
- */
86
- export const REQUEST_ABORT_RESULT = 'request__abortRequestResult';
87
- /**
88
- * @description Abort request error message
89
- * @localZh 中止请求 错误是
90
- * @localEn Abort Request Error
91
- */
92
- export const REQUEST_ABORT_ERROR = 'request__abortRequestError';
93
-
94
- /**
95
- * @description Request page timeout title
96
- * @localZh 请求超时时间
97
- * @localEn Request Timeout
98
- */
99
- export const PAGE_REQUEST_TIMEOUT = 'page__request__timeout';
100
- /**
101
- * @description Request page hello api title
102
- * @localZh AI API: Hello
103
- * @localEn AI API: Hello
104
- */
105
- export const PAGE_REQUEST_HELLO_TITLE = 'page__request__hello__title';
106
- /**
107
- * @description Request page hello api description
108
- * @localZh 函数式 api, 使用了 FetchURLPlugin, RequestCommonPlugin, ApiMockPlugin, RequestLogger 插件
109
- * @localEn Functional API using FetchURLPlugin, RequestCommonPlugin, ApiMockPlugin, RequestLogger plugins
110
- */
111
- export const PAGE_REQUEST_HELLO_DESCRIPTION =
112
- 'page__request__hello__description';
113
- /**
114
- * @description Request page hello button text
115
- * @localZh Hello
116
- * @localEn Hello
117
- */
118
- export const PAGE_REQUEST_HELLO_BUTTON = 'page__request__hello__button';
119
- /**
120
- * @description Request page ip info title
121
- * @localZh FeApi: IP Information
122
- * @localEn FeApi: IP Information
123
- */
124
- export const PAGE_REQUEST_IP_INFO_TITLE = 'page__request__ip_info__title';
125
- /**
126
- * @description Request page ip info description
127
- * @localZh RequestScheduler 类式 api, 使用了 FetchURLPlugin, RequestCommonPlugin, RequestLogger, ApiPickDataPlugin 插件, 其中 ApiPickDataPlugin 插件可以将返回类型统一扁平到 data 字段
128
- * @localEn RequestScheduler class API using FetchURLPlugin, RequestCommonPlugin, RequestLogger, ApiPickDataPlugin plugins, where ApiPickDataPlugin can flatten return types to data field
129
- */
130
- export const PAGE_REQUEST_IP_INFO_DESCRIPTION =
131
- 'page__request__ip_info__description';
132
- /**
133
- * @description Request page random user title
134
- * @localZh UserApi: Random User
135
- * @localEn UserApi: Random User
136
- */
137
- export const PAGE_REQUEST_RANDOM_USER_TITLE =
138
- 'page__request__random_user__title';
139
- /**
140
- * @description Request page random user description
141
- * @localZh RequestTransaction 类式 api, 使用了 FetchURLPlugin, RequestCommonPlugin, ApiMockPlugin, FetchAbortPlugin, RequestLogger, ApiCatchPlugin 插件, 其中 FetchAbortPlugin 可以中止请求, ApiCatchPlugin 可以将捕获的错误统一到 apiCatchResult 字段
142
- * @localEn RequestTransaction class API using FetchURLPlugin, RequestCommonPlugin, ApiMockPlugin, FetchAbortPlugin, RequestLogger, ApiCatchPlugin plugins, where FetchAbortPlugin can abort requests, ApiCatchPlugin can unify caught errors to apiCatchResult field
143
- */
144
- export const PAGE_REQUEST_RANDOM_USER_DESCRIPTION =
145
- 'page__request__random_user__description';
146
- /**
147
- * @description Request page api catch result title
148
- * @localZh UserApi: Api Catch Result
149
- * @localEn UserApi: Api Catch Result
150
- */
151
- export const PAGE_REQUEST_API_CATCH_TITLE = 'page__request__api_catch__title';
152
- /**
153
- * @description Request page abort request title
154
- * @localZh UserApi: Abort Request
155
- * @localEn UserApi: Abort Request
156
- */
157
- export const PAGE_REQUEST_ABORT_TITLE = 'page__request__abort__title';
158
- /**
159
- * @description Request page trigger abort request button
160
- * @localZh 触发中止请求
161
- * @localEn Trigger Abort Request
162
- */
163
- export const PAGE_REQUEST_TRIGGER_ABORT = 'page__request__trigger_abort';
164
- /**
165
- * @description Request page stop abort request button
166
- * @localZh 停止中止请求
167
- * @localEn Stop Abort Request
168
- */
169
- export const PAGE_REQUEST_STOP_ABORT = 'page__request__stop_abort';
170
- /**
171
- * @description Request page trigger api catch result button
172
- * @localZh 触发 API 捕获结果
173
- * @localEn Trigger API Catch Result
174
- */
175
- export const PAGE_REQUEST_TRIGGER_API_CATCH =
176
- 'page__request__trigger_api_catch';
177
- /**
178
- * @description Request page stop api catch result button
179
- * @localZh 停止 API 捕获结果
180
- * @localEn Stop API Catch Result
181
- */
182
- export const PAGE_REQUEST_STOP_API_CATCH = 'page__request__stop_api_catch';
@@ -1,94 +0,0 @@
1
- # 环境配置指南
2
-
3
- 本项目使用 Next.js 内置的环境变量系统来管理不同环境的配置。
4
-
5
- ## 环境文件
6
-
7
- 项目支持以下环境配置文件:
8
-
9
- - `.env` - 默认环境配置,适用于所有环境
10
- - `.env.local` - 本地环境配置,会覆盖 `.env`(不应提交到版本控制)
11
- - `.env.development` - 开发环境配置
12
- - `.env.production` - 生产环境配置
13
- - `.env.test` - 测试环境配置
14
-
15
- 加载优先级(从高到低):
16
-
17
- 1. `.env.local`
18
- 2. `.env.[environment]`
19
- 3. `.env`
20
-
21
- ## 使用方法
22
-
23
- 1. 复制 `.env.template` 创建对应环境的配置文件:
24
-
25
- ```bash
26
- # 开发环境
27
- cp .env.template .env.development
28
-
29
- # 生产环境
30
- cp .env.template .env.production
31
-
32
- # 测试环境
33
- cp .env.template .env.test
34
- ```
35
-
36
- 2. 修改对应环境的配置文件内容
37
-
38
- 3. 启动应用时指定环境:
39
-
40
- ```bash
41
- # 开发环境
42
- APP_ENV=development npm run dev
43
-
44
- # 生产环境
45
- APP_ENV=production npm run build
46
- APP_ENV=production npm run start
47
-
48
- # 测试环境
49
- APP_ENV=test npm run test
50
- ```
51
-
52
- ## 在代码中使用环境变量
53
-
54
- 1. 服务端和客户端都可访问的变量:
55
-
56
- ```typescript
57
- // 在 .env 文件中定义
58
- PUBLIC_API_URL=http://api.example.com
59
-
60
- // 在代码中使用
61
- console.log(process.env.PUBLIC_API_URL)
62
- ```
63
-
64
- 2. 仅服务端可访问的变量:
65
-
66
- ```typescript
67
- // 在 .env 文件中定义(以 PRIVATE_ 开头)
68
- PRIVATE_API_KEY = secret_key;
69
-
70
- // 在服务端代码中使用
71
- console.log(process.env.PRIVATE_API_KEY);
72
- ```
73
-
74
- 3. 使用运行时配置:
75
-
76
- ```typescript
77
- import getConfig from 'next/config';
78
-
79
- const { serverRuntimeConfig, publicRuntimeConfig } = getConfig();
80
-
81
- // 服务端配置
82
- console.log(serverRuntimeConfig.mySecret);
83
-
84
- // 公共配置
85
- console.log(publicRuntimeConfig.appEnv);
86
- ```
87
-
88
- ## 注意事项
89
-
90
- 1. 不要将包含敏感信息的 `.env` 文件提交到版本控制
91
- 2. 确保 `.env.local` 和 `*.env` 文件在 `.gitignore` 中
92
- 3. 使用 `.env.template` 作为配置模板
93
- 4. 环境变量命名推荐使用大写字母和下划线
94
- 5. 在 CI/CD 中使用环境变量时,直接在平台中配置,不要使用 .env 文件
@@ -1,21 +0,0 @@
1
- import { injectable } from 'inversify';
2
- import {
3
- ChatActionInterface,
4
- type MessageInterface,
5
- type ChatStateInterface
6
- } from '@/uikit/components/chat/ChatActionInterface';
7
-
8
- class ChatState implements ChatStateInterface {
9
- messages: MessageInterface[] = [];
10
- }
11
-
12
- @injectable()
13
- export class ChatAction extends ChatActionInterface<ChatStateInterface> {
14
- constructor() {
15
- super(() => new ChatState());
16
- }
17
-
18
- focus(): void {
19
- console.log('focus');
20
- }
21
- }
@@ -1,36 +0,0 @@
1
- import { injectable } from 'inversify';
2
-
3
- import type { FocusBarStateInterface } from '@/uikit/components/chat/FocusBarActionInterface';
4
- import { FocusBarActionInterface } from '@/uikit/components/chat/FocusBarActionInterface';
5
- import { RequestState } from './RequestState';
6
-
7
- class FocusBarState implements FocusBarStateInterface {
8
- showHistoryArea = false;
9
- inputValue = '';
10
- sendState = new RequestState();
11
- }
12
-
13
- @injectable()
14
- export class FocusBarAction extends FocusBarActionInterface<FocusBarStateInterface> {
15
- constructor() {
16
- super(() => new FocusBarState());
17
- }
18
-
19
- sendMessage(_message: string): Promise<void> {
20
- return new Promise((resolve) => {
21
- this.emit(this.cloneState({ sendState: new RequestState(true) }));
22
- setTimeout(() => {
23
- this.emit(this.cloneState({ sendState: new RequestState().end() }));
24
- resolve();
25
- }, 1000);
26
- });
27
- }
28
-
29
- setInputValue(value: string): void {
30
- this.emit(this.cloneState({ inputValue: value }));
31
- }
32
-
33
- clearInput(): void {
34
- this.emit(this.cloneState({ inputValue: '' }));
35
- }
36
- }
@@ -1,20 +0,0 @@
1
- import type { AsyncStateInterface } from '@/base/port/AsyncStateInterface';
2
-
3
- export class RequestState<T = unknown> implements AsyncStateInterface<T> {
4
- startTime: number;
5
- endTime: number;
6
-
7
- constructor(
8
- public loading: boolean = false,
9
- public result: T | null = null,
10
- public error: unknown | null = null
11
- ) {
12
- this.startTime = Date.now();
13
- this.endTime = 0;
14
- }
15
-
16
- end(): this {
17
- this.endTime = Date.now();
18
- return this;
19
- }
20
- }
@@ -1,85 +0,0 @@
1
- import { StoreInterface } from '@qlover/corekit-bridge';
2
- import { RequestState } from '../cases/RequestState';
3
- import type { PaginationInterface } from '../../server/port/PaginationInterface';
4
- import type { StoreStateInterface } from '@qlover/corekit-bridge';
5
-
6
- export interface AdminPageListParams {
7
- page: number;
8
- pageSize: number;
9
- }
10
-
11
- export class AdminPageState implements StoreStateInterface {
12
- listParams: AdminPageListParams = {
13
- page: 1,
14
- pageSize: 10
15
- };
16
- initState = new RequestState<unknown>();
17
- listState = new RequestState<PaginationInterface<unknown>>();
18
- }
19
-
20
- export abstract class AdminPageInterface<
21
- S extends AdminPageState
22
- > extends StoreInterface<S> {
23
- /**
24
- * 初始化
25
- * @returns
26
- */
27
- async initialize(): Promise<unknown> {
28
- this.emit(
29
- this.cloneState({
30
- initState: new RequestState(true)
31
- } as Partial<S>)
32
- );
33
-
34
- try {
35
- const result = await this.fetchList(this.state.listParams);
36
-
37
- this.emit(
38
- this.cloneState({
39
- initState: new RequestState(false, result).end()
40
- } as Partial<S>)
41
- );
42
- return result;
43
- } catch (error) {
44
- this.emit(
45
- this.cloneState({
46
- initState: new RequestState(false, null, error).end()
47
- } as Partial<S>)
48
- );
49
-
50
- return error;
51
- }
52
- }
53
-
54
- /**
55
- * 销毁
56
- */
57
- destroy(): void {
58
- this.reset();
59
- }
60
-
61
- /**
62
- * 获取列表
63
- * @param params
64
- * @returns
65
- */
66
- abstract fetchList(
67
- params: Partial<AdminPageListParams>
68
- ): Promise<PaginationInterface<unknown>>;
69
-
70
- changeListState(state: RequestState<unknown>): void {
71
- this.emit(
72
- this.cloneState({
73
- listState: state
74
- } as Partial<S>)
75
- );
76
- }
77
-
78
- changeListParams(params: Partial<AdminPageListParams>): void {
79
- this.emit(
80
- this.cloneState({
81
- listParams: params
82
- } as Partial<S>)
83
- );
84
- }
85
- }
@@ -1,7 +0,0 @@
1
- export interface AsyncStateInterface<T> {
2
- loading: boolean;
3
- result: T | null;
4
- error: unknown | null;
5
- startTime: number;
6
- endTime: number;
7
- }
@@ -1,45 +0,0 @@
1
- import { inject, injectable } from 'inversify';
2
- import type { PaginationInterface } from '@/server/port/PaginationInterface';
3
- import {
4
- AdminPageInterface,
5
- type AdminPageListParams,
6
- AdminPageState
7
- } from '../port/AdminPageInterface';
8
- import { AdminUserApi } from './adminApi/AdminUserApi';
9
- import { RequestState } from '../cases/RequestState';
10
-
11
- @injectable()
12
- export class AdminUserService extends AdminPageInterface<AdminPageState> {
13
- constructor(@inject(AdminUserApi) protected adminUserApi: AdminUserApi) {
14
- super(() => new AdminPageState());
15
- }
16
-
17
- override async fetchList(
18
- params: Partial<AdminPageListParams>
19
- ): Promise<PaginationInterface<unknown>> {
20
- this.changeListState(new RequestState(true));
21
-
22
- try {
23
- const response = await this.adminUserApi.getUserList(
24
- Object.assign({}, this.state.listParams, params)
25
- );
26
-
27
- if (response.data.success) {
28
- const paginationData = response.data
29
- .data as PaginationInterface<unknown>;
30
-
31
- this.changeListState(new RequestState(false, paginationData));
32
-
33
- return paginationData;
34
- }
35
-
36
- this.changeListState(
37
- new RequestState(false, null, response.data.message)
38
- );
39
- } catch (error) {
40
- this.changeListState(new RequestState(false, null, error));
41
- }
42
-
43
- return this.state.listState.result!;
44
- }
45
- }
@@ -1,17 +0,0 @@
1
- 'use client';
2
-
3
- import { ChatAction } from '@/base/cases/ChatAction';
4
- import { FocusBarAction } from '@/base/cases/FocusBarAction';
5
- import { useIOC } from '../hook/useIOC';
6
- import { ChatWrap } from './chat/ChatWrap';
7
-
8
- export function ChatRoot() {
9
- const chatAction = useIOC(ChatAction);
10
- const focusBarAction = useIOC(FocusBarAction);
11
-
12
- return (
13
- <div data-testid="ChatRoot" className="fixed bottom-0 right-0 ">
14
- <ChatWrap chatAction={chatAction} focusBarAction={focusBarAction} />
15
- </div>
16
- );
17
- }
@@ -1,30 +0,0 @@
1
- import {
2
- StoreInterface,
3
- type StoreStateInterface
4
- } from '@qlover/corekit-bridge';
5
-
6
- export const MessageType = Object.freeze({
7
- USER: 'user',
8
- ASSISTANT: 'assistant'
9
- });
10
-
11
- export type MessageTypeValue = (typeof MessageType)[keyof typeof MessageType];
12
-
13
- export interface MessageInterface {
14
- id: string;
15
- content: unknown;
16
- role: MessageTypeValue;
17
- createdAt: string;
18
-
19
- loading?: boolean;
20
- }
21
-
22
- export interface ChatStateInterface extends StoreStateInterface {
23
- messages: MessageInterface[];
24
- }
25
-
26
- export abstract class ChatActionInterface<
27
- S extends ChatStateInterface
28
- > extends StoreInterface<S> {
29
- abstract focus(): void;
30
- }
@@ -1,65 +0,0 @@
1
- import { SendOutlined } from '@ant-design/icons';
2
- import { Button, Input } from 'antd';
3
- import { useCallback, useRef } from 'react';
4
- import { useStore } from '../../hook/useStore';
5
- import type {
6
- FocusBarActionInterface,
7
- FocusBarStateInterface
8
- } from './FocusBarActionInterface';
9
-
10
- export function ChatFocusBar({
11
- focusBarAction
12
- }: {
13
- focusBarAction: FocusBarActionInterface<FocusBarStateInterface>;
14
- }) {
15
- const inputRef = useRef<HTMLTextAreaElement>(null);
16
- const { inputValue } = useStore(focusBarAction);
17
- const sendState = useStore(focusBarAction, (state) => state.sendState);
18
-
19
- const handleInputChange = useCallback(
20
- (e: React.ChangeEvent<HTMLTextAreaElement>) => {
21
- focusBarAction.setInputValue(e.target.value);
22
- },
23
- [focusBarAction]
24
- );
25
-
26
- const handleKeyDown = useCallback(
27
- (e: React.KeyboardEvent<HTMLTextAreaElement>) => {
28
- if (e.key === 'Enter' && !e.shiftKey) {
29
- e.preventDefault();
30
- focusBarAction.sendMessage(inputValue);
31
- }
32
- },
33
- [focusBarAction, inputValue]
34
- );
35
-
36
- const sending = sendState.loading;
37
-
38
- return (
39
- <div
40
- data-testid="ChatFocusBarInput"
41
- className="flex items-end gap-2 p-4 bg-elevated border-t border-c-border"
42
- >
43
- <Input.TextArea
44
- ref={inputRef}
45
- disabled={sending}
46
- value={inputValue}
47
- onChange={handleInputChange}
48
- onKeyDown={handleKeyDown}
49
- placeholder="Type your message..."
50
- rows={1}
51
- />
52
- <Button
53
- data-testid="ChatFocusBarSendButton"
54
- onClick={() => {
55
- focusBarAction.sendMessage(inputValue);
56
- }}
57
- type="primary"
58
- className="flex items-center justify-center !h-10 !w-10 !rounded-full !bg-c-brand !text-white hover:!bg-c-brand-hover transition-colors"
59
- icon={<SendOutlined />}
60
- loading={sending}
61
- disabled={sending}
62
- />
63
- </div>
64
- );
65
- }
@@ -1,59 +0,0 @@
1
- import { useEffect, useRef } from 'react';
2
- import { MessageType } from './ChatActionInterface';
3
- import { useStore } from '../../hook/useStore';
4
- import type {
5
- ChatActionInterface,
6
- ChatStateInterface,
7
- MessageInterface
8
- } from './ChatActionInterface';
9
-
10
- function MessageItem({ message }: { message: MessageInterface }) {
11
- return (
12
- <div
13
- data-testid="MessageItem"
14
- className={`flex ${
15
- message.role === MessageType.USER ? 'justify-end' : 'justify-start'
16
- } mb-4`}
17
- >
18
- <div
19
- data-testid="MessageItemContent"
20
- className={`max-w-[70%] rounded-lg p-3 ${
21
- message.role === MessageType.USER
22
- ? 'bg-blue-500 text-white'
23
- : 'bg-gray-100 dark:bg-gray-700'
24
- }`}
25
- >
26
- <p className="whitespace-pre-wrap break-words">{message.content}</p>
27
- <div className="mt-1 text-xs opacity-70">
28
- {new Date(message.createdAt).toLocaleTimeString()}
29
- </div>
30
- </div>
31
- </div>
32
- );
33
- }
34
-
35
- export function ChatMessages({
36
- chatAction
37
- }: {
38
- chatAction: ChatActionInterface<ChatStateInterface>;
39
- }) {
40
- const messagesEndRef = useRef<HTMLDivElement>(null);
41
- const { messages } = useStore(chatAction);
42
-
43
- useEffect(() => {
44
- messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' });
45
- }, [messages]);
46
-
47
- return (
48
- <div data-testid="ChatMessages" className="flex-1 overflow-y-auto p-4">
49
- {messages.map((message: MessageInterface) => (
50
- <MessageItem
51
- data-testid="MessageItem"
52
- key={message.id}
53
- message={message}
54
- />
55
- ))}
56
- <div ref={messagesEndRef} />
57
- </div>
58
- );
59
- }
@@ -1,28 +0,0 @@
1
- import { ChatFocusBar } from './ChatFocusBar';
2
- import { ChatMessages } from './ChatMessages';
3
- import type {
4
- ChatActionInterface,
5
- ChatStateInterface
6
- } from './ChatActionInterface';
7
- import type {
8
- FocusBarActionInterface,
9
- FocusBarStateInterface
10
- } from './FocusBarActionInterface';
11
-
12
- export function ChatWrap({
13
- chatAction,
14
- focusBarAction
15
- }: {
16
- chatAction: ChatActionInterface<ChatStateInterface>;
17
- focusBarAction: FocusBarActionInterface<FocusBarStateInterface>;
18
- }) {
19
- return (
20
- <div
21
- data-testid="ChatWrap"
22
- className="flex h-full flex-col p-2 bg-primary shadow-2xl"
23
- >
24
- <ChatMessages chatAction={chatAction} />
25
- <ChatFocusBar focusBarAction={focusBarAction} />
26
- </div>
27
- );
28
- }