@qlover/create-app 0.10.1 → 0.10.3
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.
- package/CHANGELOG.md +178 -0
- package/dist/configs/_common/.github/workflows/general-check.yml +1 -1
- package/dist/configs/_common/.github/workflows/release.yml +2 -2
- package/dist/index.cjs +4 -4
- package/dist/index.js +4 -4
- package/dist/templates/next-app/config/IOCIdentifier.ts +2 -2
- package/dist/templates/next-app/config/Identifier/common/common.ts +14 -0
- package/dist/templates/next-app/config/Identifier/pages/index.ts +1 -0
- package/dist/templates/next-app/config/Identifier/pages/page.about.ts +20 -0
- package/dist/templates/next-app/config/common.ts +1 -1
- package/dist/templates/next-app/config/cookies.ts +23 -0
- package/dist/templates/next-app/config/i18n/AboutI18n.ts +14 -0
- package/dist/templates/next-app/config/i18n/i18nConfig.ts +3 -1
- package/dist/templates/next-app/config/i18n/index.ts +1 -0
- package/dist/templates/next-app/config/i18n/loginI18n.ts +8 -0
- package/dist/templates/next-app/config/theme.ts +4 -0
- package/dist/templates/next-app/eslint.config.mjs +9 -2
- package/dist/templates/next-app/next.config.ts +1 -0
- package/dist/templates/next-app/package.json +17 -6
- package/dist/templates/next-app/public/locales/en.json +5 -0
- package/dist/templates/next-app/public/locales/zh.json +5 -0
- package/dist/templates/next-app/src/app/[locale]/admin/AdminI18nProvider.tsx +37 -0
- package/dist/templates/next-app/src/app/[locale]/admin/layout.tsx +30 -6
- package/dist/templates/next-app/src/app/[locale]/admin/locales/page.tsx +1 -1
- package/dist/templates/next-app/src/app/[locale]/layout.tsx +47 -10
- package/dist/templates/next-app/src/app/[locale]/login/LoginForm.tsx +1 -1
- package/dist/templates/next-app/src/app/[locale]/login/page.tsx +22 -10
- package/dist/templates/next-app/src/app/[locale]/page.tsx +23 -8
- package/dist/templates/next-app/src/app/[locale]/register/page.tsx +21 -9
- package/dist/templates/next-app/src/app/api/admin/locales/create/route.ts +7 -28
- package/dist/templates/next-app/src/app/api/admin/locales/import/route.ts +7 -34
- package/dist/templates/next-app/src/app/api/admin/locales/route.ts +12 -34
- package/dist/templates/next-app/src/app/api/admin/locales/update/route.ts +7 -26
- package/dist/templates/next-app/src/app/api/admin/users/route.ts +14 -33
- package/dist/templates/next-app/src/app/api/locales/json/route.ts +13 -25
- package/dist/templates/next-app/src/app/api/user/login/route.ts +6 -46
- package/dist/templates/next-app/src/app/api/user/logout/route.ts +5 -24
- package/dist/templates/next-app/src/app/api/user/register/route.ts +6 -45
- package/dist/templates/next-app/src/app/manifest.ts +16 -0
- package/dist/templates/next-app/src/app/robots.txt +2 -0
- package/dist/templates/next-app/src/base/cases/AdminPageManager.ts +3 -3
- package/dist/templates/next-app/src/base/cases/AppConfig.ts +14 -13
- package/dist/templates/next-app/src/base/cases/Datetime.ts +3 -3
- package/dist/templates/next-app/src/base/cases/DialogErrorPlugin.ts +8 -2
- package/dist/templates/next-app/src/base/cases/DialogHandler.ts +30 -4
- package/dist/templates/next-app/src/base/cases/InversifyContainer.ts +16 -4
- package/dist/templates/next-app/src/base/cases/NavigateBridge.ts +20 -4
- package/dist/templates/next-app/src/base/cases/RequestEncryptPlugin.ts +8 -2
- package/dist/templates/next-app/src/base/cases/ResourceState.ts +3 -3
- package/dist/templates/next-app/src/base/cases/RouterService.ts +28 -10
- package/dist/templates/next-app/src/base/cases/StringEncryptor.ts +14 -2
- package/dist/templates/next-app/src/base/cases/TranslateI18nInterface.ts +1 -1
- package/dist/templates/next-app/src/base/cases/UserServiceApi.ts +20 -5
- package/dist/templates/next-app/src/base/cases/ZodColumnBuilder.ts +31 -8
- package/dist/templates/next-app/src/base/port/AdminLayoutInterface.ts +4 -1
- package/dist/templates/next-app/src/base/port/AppApiInterface.ts +22 -0
- package/dist/templates/next-app/src/base/port/I18nServiceInterface.ts +27 -7
- package/dist/templates/next-app/src/base/port/IOCInterface.ts +9 -0
- package/dist/templates/next-app/src/base/services/AdminPageEvent.ts +1 -1
- package/dist/templates/next-app/src/base/services/AdminPageScheduler.ts +3 -3
- package/dist/templates/next-app/src/base/services/I18nService.ts +20 -10
- package/dist/templates/next-app/src/base/services/ResourceService.ts +32 -11
- package/dist/templates/next-app/src/base/services/UserService.ts +12 -3
- package/dist/templates/next-app/src/base/services/adminApi/AdminLocalesApi.ts +9 -6
- package/dist/templates/next-app/src/base/services/adminApi/AdminUserApi.ts +20 -5
- package/dist/templates/next-app/src/base/services/appApi/AppApiPlugin.ts +21 -4
- package/dist/templates/next-app/src/base/services/appApi/AppUserApi.ts +12 -3
- package/dist/templates/next-app/src/base/services/appApi/AppUserApiBootstrap.ts +10 -2
- package/dist/templates/next-app/src/base/types/{PageProps.ts → AppPageRouter.ts} +4 -1
- package/dist/templates/next-app/src/base/types/PagesRouter.ts +9 -0
- package/dist/templates/next-app/src/core/bootstraps/BootstrapClient.ts +20 -6
- package/dist/templates/next-app/src/core/bootstraps/BootstrapServer.ts +27 -9
- package/dist/templates/next-app/src/core/bootstraps/BootstrapsRegistry.ts +6 -4
- package/dist/templates/next-app/src/core/clientIoc/ClientIOC.ts +39 -9
- package/dist/templates/next-app/src/core/clientIoc/ClientIOCRegister.ts +9 -2
- package/dist/templates/next-app/src/core/serverIoc/ServerIOC.ts +37 -10
- package/dist/templates/next-app/src/core/serverIoc/ServerIOCRegister.ts +9 -2
- package/dist/templates/next-app/src/i18n/loadMessages.ts +103 -0
- package/dist/templates/next-app/src/i18n/request.ts +3 -22
- package/dist/templates/next-app/src/pages/[locale]/about.tsx +61 -0
- package/dist/templates/next-app/src/pages/_app.tsx +50 -0
- package/dist/templates/next-app/src/pages/_document.tsx +13 -0
- package/dist/templates/next-app/src/{middleware.ts → proxy.ts} +2 -1
- package/dist/templates/next-app/src/server/AppErrorApi.ts +1 -1
- package/dist/templates/next-app/src/server/AppPageRouteParams.ts +107 -0
- package/dist/templates/next-app/src/server/AppSuccessApi.ts +1 -1
- package/dist/templates/next-app/src/server/NextApiServer.ts +62 -0
- package/dist/templates/next-app/src/server/PagesRouteParams.ts +146 -0
- package/dist/templates/next-app/src/server/PasswordEncrypt.ts +8 -2
- package/dist/templates/next-app/src/server/ServerAuth.ts +20 -5
- package/dist/templates/next-app/src/server/{sqlBridges/SupabaseBridge.ts → SupabaseBridge.ts} +50 -8
- package/dist/templates/next-app/src/server/UserCredentialToken.ts +8 -2
- package/dist/templates/next-app/src/server/controllers/AdminLocalesController.ts +86 -0
- package/dist/templates/next-app/src/server/controllers/AdminUserController.ts +42 -0
- package/dist/templates/next-app/src/server/controllers/LocalesController.ts +36 -0
- package/dist/templates/next-app/src/server/controllers/UserController.ts +86 -0
- package/dist/templates/next-app/src/server/port/AIControllerInterface.ts +8 -0
- package/dist/templates/next-app/src/server/port/AdminLocalesControllerInterface.ts +21 -0
- package/dist/templates/next-app/src/server/port/AdminUserControllerInterface.ts +11 -0
- package/dist/templates/next-app/src/server/port/LocalesControllerInterface.ts +10 -0
- package/dist/templates/next-app/src/server/port/{ParamsHandlerInterface.ts → RouteParamsnHandlerInterface.ts} +9 -2
- package/dist/templates/next-app/src/server/port/ServerInterface.ts +2 -2
- package/dist/templates/next-app/src/server/port/UserControllerInerface.ts +8 -0
- package/dist/templates/next-app/src/server/port/UserServiceInterface.ts +1 -1
- package/dist/templates/next-app/src/server/port/ValidatorInterface.ts +2 -2
- package/dist/templates/next-app/src/server/repositorys/LocalesRepository.ts +31 -9
- package/dist/templates/next-app/src/server/repositorys/UserRepository.ts +15 -6
- package/dist/templates/next-app/src/server/services/AIService.ts +3 -1
- package/dist/templates/next-app/src/server/services/AdminAuthPlugin.ts +5 -2
- package/dist/templates/next-app/src/{base → server}/services/AdminLocalesService.ts +2 -2
- package/dist/templates/next-app/src/server/services/ApiLocaleService.ts +29 -14
- package/dist/templates/next-app/src/server/services/ApiUserService.ts +6 -3
- package/dist/templates/next-app/src/server/services/UserService.ts +12 -3
- package/dist/templates/next-app/src/server/validators/LocalesValidator.ts +24 -7
- package/dist/templates/next-app/src/server/validators/LoginValidator.ts +17 -5
- package/dist/templates/next-app/src/server/validators/PaginationValidator.ts +17 -11
- package/dist/templates/next-app/src/styles/css/antd-themes/_common/_default.css +0 -44
- package/dist/templates/next-app/src/styles/css/antd-themes/_common/dark.css +0 -44
- package/dist/templates/next-app/src/styles/css/antd-themes/_common/pink.css +0 -44
- package/dist/templates/next-app/src/styles/css/index.css +1 -1
- package/dist/templates/next-app/src/styles/css/scrollbar.css +34 -0
- package/dist/templates/next-app/src/uikit/components/AdminLayout.tsx +34 -11
- package/dist/templates/next-app/src/uikit/components/BootstrapsProvider.tsx +69 -39
- package/dist/templates/next-app/src/uikit/components/ClientRootProvider.tsx +64 -0
- package/dist/templates/next-app/src/uikit/components/ClinetRenderProvider.tsx +42 -0
- package/dist/templates/next-app/src/uikit/components/IOCProvider.tsx +34 -0
- package/dist/templates/next-app/src/uikit/components/localesImportButton/LocalesImportEvent.ts +7 -1
- package/dist/templates/next-app/src/uikit/components-app/AppBridge.tsx +17 -0
- package/dist/templates/next-app/src/uikit/components-app/AppRoutePage.tsx +112 -0
- package/dist/templates/next-app/src/uikit/{components → components-app}/LanguageSwitcher.tsx +15 -19
- package/dist/templates/next-app/src/uikit/{components → components-app}/ThemeSwitcher.tsx +53 -52
- package/dist/templates/next-app/src/uikit/components-pages/LanguageSwitcher.tsx +98 -0
- package/dist/templates/next-app/src/uikit/components-pages/PagesRoutePage.tsx +93 -0
- package/dist/templates/next-app/src/uikit/context/IOCContext.ts +16 -4
- package/dist/templates/next-app/src/uikit/hook/useStrictEffect.ts +32 -0
- package/dist/templates/next-app/tsconfig.json +3 -2
- package/dist/templates/react-app/__tests__/__mocks__/BootstrapTest.ts +3 -1
- package/dist/templates/react-app/__tests__/__mocks__/MockAppConfig.ts +19 -19
- package/dist/templates/react-app/__tests__/__mocks__/MockDialogHandler.ts +8 -8
- package/dist/templates/react-app/__tests__/__mocks__/MockLogger.ts +9 -9
- package/dist/templates/react-app/__tests__/__mocks__/components/TestBootstrapsProvider.tsx +1 -1
- package/dist/templates/react-app/__tests__/__mocks__/i18nextHttpBackend.ts +5 -5
- package/dist/templates/react-app/__tests__/__mocks__/testIOC/TestIOC.ts +9 -5
- package/dist/templates/react-app/__tests__/__mocks__/testIOC/TestIOCRegister.ts +8 -4
- package/dist/templates/react-app/__tests__/src/base/cases/I18nKeyErrorPlugin.test.ts +4 -4
- package/dist/templates/react-app/__tests__/src/base/cases/InversifyContainer.test.ts +5 -5
- package/dist/templates/react-app/__tests__/src/core/bootstraps/BootstrapClient.test.ts +3 -3
- package/dist/templates/react-app/__tests__/src/uikit/components/chatMessage/ChatRoot.test.tsx +1 -1
- package/dist/templates/react-app/docs/en/components/chat-message-component.md +35 -29
- package/dist/templates/react-app/docs/en/components/chat-message-refactor.md +18 -5
- package/dist/templates/react-app/docs/en/components/message-base-list-component.md +11 -12
- package/dist/templates/react-app/docs/en/request.md +1 -3
- package/dist/templates/react-app/docs/zh/components/chat-message-component.md +35 -29
- package/dist/templates/react-app/docs/zh/components/chat-message-refactor.md +18 -5
- package/dist/templates/react-app/docs/zh/components/message-base-list-component.md +11 -12
- package/dist/templates/react-app/docs/zh/request.md +1 -3
- package/dist/templates/react-app/eslint.config.mjs +10 -5
- package/dist/templates/react-app/src/App.tsx +1 -1
- package/dist/templates/react-app/src/base/apis/feApi/FeApi.ts +2 -2
- package/dist/templates/react-app/src/base/apis/feApi/FeApiBootstarp.ts +14 -11
- package/dist/templates/react-app/src/base/apis/userApi/UserApi.ts +10 -16
- package/dist/templates/react-app/src/base/apis/userApi/UserApiBootstarp.ts +12 -10
- package/dist/templates/react-app/src/base/cases/AppConfig.ts +19 -19
- package/dist/templates/react-app/src/base/cases/DialogHandler.ts +28 -5
- package/dist/templates/react-app/src/base/cases/I18nKeyErrorPlugin.ts +5 -2
- package/dist/templates/react-app/src/base/cases/InversifyContainer.ts +16 -4
- package/dist/templates/react-app/src/base/cases/PublicAssetsPath.ts +1 -1
- package/dist/templates/react-app/src/base/cases/RequestLanguages.ts +6 -3
- package/dist/templates/react-app/src/base/cases/RequestLogger.ts +17 -8
- package/dist/templates/react-app/src/base/cases/RequestStatusCatcher.ts +4 -6
- package/dist/templates/react-app/src/base/cases/ResourceState.ts +3 -3
- package/dist/templates/react-app/src/base/cases/RouterLoader.ts +3 -3
- package/dist/templates/react-app/src/base/cases/TranslateI18nInterface.ts +1 -1
- package/dist/templates/react-app/src/base/port/ExecutorPageBridgeInterface.ts +2 -2
- package/dist/templates/react-app/src/base/port/IOCInterface.ts +4 -2
- package/dist/templates/react-app/src/base/port/JSONStoragePageBridgeInterface.ts +5 -5
- package/dist/templates/react-app/src/base/port/RequestPageBridgeInterface.ts +7 -7
- package/dist/templates/react-app/src/base/port/RouteServiceInterface.ts +8 -8
- package/dist/templates/react-app/src/base/port/UserServiceInterface.ts +4 -2
- package/dist/templates/react-app/src/base/services/BaseLayoutService.ts +3 -3
- package/dist/templates/react-app/src/base/services/I18nService.ts +24 -13
- package/dist/templates/react-app/src/base/services/IdentifierService.ts +21 -26
- package/dist/templates/react-app/src/base/services/RouteService.ts +8 -8
- package/dist/templates/react-app/src/base/services/UserBootstrap.ts +2 -2
- package/dist/templates/react-app/src/base/services/UserGatewayPlugin.ts +9 -5
- package/dist/templates/react-app/src/base/services/UserService.ts +10 -4
- package/dist/templates/react-app/src/core/bootstraps/BootstrapClient.ts +3 -1
- package/dist/templates/react-app/src/core/bootstraps/BootstrapsRegistry.ts +5 -2
- package/dist/templates/react-app/src/core/clientIoc/ClientIOC.ts +11 -4
- package/dist/templates/react-app/src/core/clientIoc/ClientIOCRegister.ts +5 -4
- package/dist/templates/react-app/src/pages/base/Layout.tsx +1 -1
- package/dist/templates/react-app/src/styles/css/antd-themes/_common/_default.css +0 -44
- package/dist/templates/react-app/src/styles/css/antd-themes/_common/dark.css +0 -44
- package/dist/templates/react-app/src/styles/css/antd-themes/_common/pink.css +0 -44
- package/dist/templates/react-app/src/styles/css/index.css +1 -1
- package/dist/templates/react-app/src/styles/css/scrollbar.css +34 -0
- package/dist/templates/react-app/src/uikit/bridges/ExecutorPageBridge.ts +2 -2
- package/dist/templates/react-app/src/uikit/bridges/JSONStoragePageBridge.ts +4 -4
- package/dist/templates/react-app/src/uikit/bridges/NavigateBridge.ts +8 -2
- package/dist/templates/react-app/src/uikit/bridges/RequestPageBridge.ts +6 -6
- package/dist/templates/react-app/src/uikit/components/AppRouterProvider.tsx +1 -1
- package/dist/templates/react-app/src/uikit/components/BootstrapsProvider.tsx +1 -3
- package/dist/templates/react-app/src/uikit/components/MessageBaseList.tsx +4 -1
- package/dist/templates/react-app/src/uikit/components/chatMessage/ChatMessageBridge.ts +39 -16
- package/dist/templates/react-app/src/uikit/components/chatMessage/MessageApi.ts +4 -2
- package/package.json +3 -3
- package/dist/templates/next-app/src/server/PageParams.ts +0 -66
- package/dist/templates/next-app/src/uikit/components/BaseHeader.tsx +0 -80
- package/dist/templates/next-app/src/uikit/components/BaseLayout.tsx +0 -65
- package/dist/templates/next-app/src/uikit/components/ComboProvider.tsx +0 -58
- package/dist/templates/next-app/src/uikit/components/NextIntlProvider.tsx +0 -21
- package/dist/templates/react-app/makes/eslint-utils.mjs +0 -195
- /package/dist/templates/next-app/{src/app/[locale] → public}/favicon.ico +0 -0
- /package/dist/templates/next-app/src/uikit/{components → components-app}/LogoutButton.tsx +0 -0
|
@@ -9,15 +9,22 @@ import type { IOCIdentifierMap } from '@config/IOCIdentifier';
|
|
|
9
9
|
import { ClientIOCRegister } from './ClientIOCRegister';
|
|
10
10
|
import { appConfig } from '../globals';
|
|
11
11
|
|
|
12
|
-
export class ClientIOC
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
export class ClientIOC implements IOCInterface<
|
|
13
|
+
IOCIdentifierMap,
|
|
14
|
+
IOCContainerInterface
|
|
15
|
+
> {
|
|
15
16
|
protected ioc: IOCFunctionInterface<
|
|
16
17
|
IOCIdentifierMap,
|
|
17
18
|
IOCContainerInterface
|
|
18
19
|
> | null = null;
|
|
19
20
|
|
|
20
|
-
|
|
21
|
+
/**
|
|
22
|
+
* @override
|
|
23
|
+
*/
|
|
24
|
+
public create(): IOCFunctionInterface<
|
|
25
|
+
IOCIdentifierMap,
|
|
26
|
+
IOCContainerInterface
|
|
27
|
+
> {
|
|
21
28
|
if (this.ioc) {
|
|
22
29
|
return this.ioc;
|
|
23
30
|
}
|
|
@@ -30,9 +30,10 @@ import type {
|
|
|
30
30
|
} from '@qlover/corekit-bridge';
|
|
31
31
|
import type { LoggerInterface } from '@qlover/logger';
|
|
32
32
|
|
|
33
|
-
export class ClientIOCRegister
|
|
34
|
-
|
|
35
|
-
|
|
33
|
+
export class ClientIOCRegister implements IOCRegisterInterface<
|
|
34
|
+
IOCContainerInterface,
|
|
35
|
+
IocRegisterOptions
|
|
36
|
+
> {
|
|
36
37
|
constructor(protected options: IocRegisterOptions) {}
|
|
37
38
|
|
|
38
39
|
/**
|
|
@@ -131,7 +132,7 @@ export class ClientIOCRegister
|
|
|
131
132
|
/**
|
|
132
133
|
* @override
|
|
133
134
|
*/
|
|
134
|
-
register(
|
|
135
|
+
public register(
|
|
135
136
|
ioc: IOCContainerInterface,
|
|
136
137
|
_manager: IOCManagerInterface<IOCContainerInterface>
|
|
137
138
|
): void {
|
|
@@ -277,48 +277,4 @@ html,
|
|
|
277
277
|
--fe-layout-light-trigger-bg: rgb(var(--color-bg-base));
|
|
278
278
|
--fe-layout-light-trigger-color: rgb(var(--text-primary));
|
|
279
279
|
}
|
|
280
|
-
|
|
281
|
-
/* 滚动条样式变量 */
|
|
282
|
-
--fe-scrollbar-size: 6px;
|
|
283
|
-
--fe-scrollbar-thumb-bg: rgba(15 23 42 / 0.2);
|
|
284
|
-
--fe-scrollbar-thumb-hover-bg: rgba(15 23 42 / 0.3);
|
|
285
|
-
--fe-scrollbar-track-bg: transparent;
|
|
286
|
-
|
|
287
|
-
/* 滚动条样式 */
|
|
288
|
-
::-webkit-scrollbar {
|
|
289
|
-
width: var(--fe-scrollbar-size);
|
|
290
|
-
height: var(--fe-scrollbar-size);
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
::-webkit-scrollbar-track {
|
|
294
|
-
background: var(--fe-scrollbar-track-bg);
|
|
295
|
-
border-radius: var(--fe-scrollbar-size);
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
::-webkit-scrollbar-thumb {
|
|
299
|
-
background: var(--fe-scrollbar-thumb-bg);
|
|
300
|
-
border-radius: var(--fe-scrollbar-size);
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
::-webkit-scrollbar-thumb:hover {
|
|
304
|
-
background: var(--fe-scrollbar-thumb-hover-bg);
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
::-webkit-scrollbar-corner {
|
|
308
|
-
background: transparent;
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
/* 可选的细滚动条样式 */
|
|
312
|
-
.scrollbar-thin {
|
|
313
|
-
--fe-scrollbar-size: 4px;
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
/* 隐藏滚动条但保持可滚动 */
|
|
317
|
-
.scrollbar-hidden {
|
|
318
|
-
-ms-overflow-style: none;
|
|
319
|
-
scrollbar-width: none;
|
|
320
|
-
&::-webkit-scrollbar {
|
|
321
|
-
display: none;
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
280
|
}
|
|
@@ -230,48 +230,4 @@
|
|
|
230
230
|
--fe-layout-light-trigger-bg: rgb(30 41 59);
|
|
231
231
|
--fe-layout-light-trigger-color: rgb(var(--text-primary));
|
|
232
232
|
}
|
|
233
|
-
|
|
234
|
-
/* 滚动条样式变量 */
|
|
235
|
-
--fe-scrollbar-size: 6px;
|
|
236
|
-
--fe-scrollbar-thumb-bg: rgba(255 255 255 / 0.2);
|
|
237
|
-
--fe-scrollbar-thumb-hover-bg: rgba(255 255 255 / 0.3);
|
|
238
|
-
--fe-scrollbar-track-bg: transparent;
|
|
239
|
-
|
|
240
|
-
/* 滚动条样式 */
|
|
241
|
-
::-webkit-scrollbar {
|
|
242
|
-
width: var(--fe-scrollbar-size);
|
|
243
|
-
height: var(--fe-scrollbar-size);
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
::-webkit-scrollbar-track {
|
|
247
|
-
background: var(--fe-scrollbar-track-bg);
|
|
248
|
-
border-radius: var(--fe-scrollbar-size);
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
::-webkit-scrollbar-thumb {
|
|
252
|
-
background: var(--fe-scrollbar-thumb-bg);
|
|
253
|
-
border-radius: var(--fe-scrollbar-size);
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
::-webkit-scrollbar-thumb:hover {
|
|
257
|
-
background: var(--fe-scrollbar-thumb-hover-bg);
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
::-webkit-scrollbar-corner {
|
|
261
|
-
background: transparent;
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
/* 可选的细滚动条样式 */
|
|
265
|
-
.scrollbar-thin {
|
|
266
|
-
--fe-scrollbar-size: 4px;
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
/* 隐藏滚动条但保持可滚动 */
|
|
270
|
-
.scrollbar-hidden {
|
|
271
|
-
-ms-overflow-style: none;
|
|
272
|
-
scrollbar-width: none;
|
|
273
|
-
&::-webkit-scrollbar {
|
|
274
|
-
display: none;
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
233
|
}
|
|
@@ -243,48 +243,4 @@
|
|
|
243
243
|
--fe-layout-light-trigger-bg: var(--ant-color-bg-container);
|
|
244
244
|
--fe-layout-light-trigger-color: var(--ant-color-text);
|
|
245
245
|
}
|
|
246
|
-
|
|
247
|
-
/* 滚动条样式变量 */
|
|
248
|
-
--fe-scrollbar-size: 6px;
|
|
249
|
-
--fe-scrollbar-thumb-bg: rgba(244 114 182 / 0.3);
|
|
250
|
-
--fe-scrollbar-thumb-hover-bg: rgba(244 114 182 / 0.4);
|
|
251
|
-
--fe-scrollbar-track-bg: transparent;
|
|
252
|
-
|
|
253
|
-
/* 滚动条样式 */
|
|
254
|
-
::-webkit-scrollbar {
|
|
255
|
-
width: var(--fe-scrollbar-size);
|
|
256
|
-
height: var(--fe-scrollbar-size);
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
::-webkit-scrollbar-track {
|
|
260
|
-
background: var(--fe-scrollbar-track-bg);
|
|
261
|
-
border-radius: var(--fe-scrollbar-size);
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
::-webkit-scrollbar-thumb {
|
|
265
|
-
background: var(--fe-scrollbar-thumb-bg);
|
|
266
|
-
border-radius: var(--fe-scrollbar-size);
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
::-webkit-scrollbar-thumb:hover {
|
|
270
|
-
background: var(--fe-scrollbar-thumb-hover-bg);
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
::-webkit-scrollbar-corner {
|
|
274
|
-
background: transparent;
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
/* 可选的细滚动条样式 */
|
|
278
|
-
.scrollbar-thin {
|
|
279
|
-
--fe-scrollbar-size: 4px;
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
/* 隐藏滚动条但保持可滚动 */
|
|
283
|
-
.scrollbar-hidden {
|
|
284
|
-
-ms-overflow-style: none;
|
|
285
|
-
scrollbar-width: none;
|
|
286
|
-
&::-webkit-scrollbar {
|
|
287
|
-
display: none;
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
246
|
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
html,
|
|
2
|
+
.fe-theme {
|
|
3
|
+
--scrollbar-track-color: var(--color-secondary);
|
|
4
|
+
--scrollbar-thumb-color: var(--color-text-secondary);
|
|
5
|
+
--scrollbar-thumb-hover-color: var(--color-brand-hover);
|
|
6
|
+
|
|
7
|
+
/* Webkit browsers (Chrome, Safari, Edge) - 全局样式,使用最高优先级 */
|
|
8
|
+
body *::-webkit-scrollbar,
|
|
9
|
+
*::-webkit-scrollbar {
|
|
10
|
+
width: 10px;
|
|
11
|
+
height: 10px;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
body *::-webkit-scrollbar-track,
|
|
15
|
+
*::-webkit-scrollbar-track {
|
|
16
|
+
background: var(--scrollbar-track-color);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
body *::-webkit-scrollbar-thumb,
|
|
20
|
+
*::-webkit-scrollbar-thumb {
|
|
21
|
+
background-color: var(--scrollbar-thumb-color);
|
|
22
|
+
border-radius: 6px;
|
|
23
|
+
border: 1px solid var(--scrollbar-track-color);
|
|
24
|
+
transition: background-color 0.2s ease;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
body *::-webkit-scrollbar-thumb:hover {
|
|
28
|
+
background-color: var(--scrollbar-thumb-hover-color) !important;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
*::-webkit-scrollbar-thumb:hover {
|
|
32
|
+
background-color: var(--scrollbar-thumb-hover-color) !important;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
} from '@/base/port/ExecutorPageBridgeInterface';
|
|
14
14
|
|
|
15
15
|
class ExecutorPageBridgeState implements ExecutorPageStateInterface {
|
|
16
|
-
helloState = new RequestState();
|
|
16
|
+
public helloState = new RequestState();
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
const TestPlugin: ExecutorPlugin<RequestAdapterFetchConfig> = {
|
|
@@ -41,7 +41,7 @@ export class ExecutorPageBridge extends ExecutorPageBridgeInterface {
|
|
|
41
41
|
this.feApi.usePlugin(TestPlugin);
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
override onTestPlugins = async () => {
|
|
44
|
+
public override onTestPlugins = async () => {
|
|
45
45
|
this.emit({
|
|
46
46
|
...this.state,
|
|
47
47
|
helloState: new RequestState(true)
|
|
@@ -18,23 +18,23 @@ export class JSONStoragePageBridge extends JSONStoragePageBridgeInterface {
|
|
|
18
18
|
}));
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
override changeRandomTestKey1 = (): void => {
|
|
21
|
+
public override changeRandomTestKey1 = (): void => {
|
|
22
22
|
const value = random(100, 9000);
|
|
23
23
|
this.storage.setItem('testKey1', value);
|
|
24
24
|
this.emit({ ...this.state, testKey1: value });
|
|
25
25
|
};
|
|
26
26
|
|
|
27
|
-
override onChangeRandomTestKey2 = (): void => {
|
|
27
|
+
public override onChangeRandomTestKey2 = (): void => {
|
|
28
28
|
const value = random(100, 9000);
|
|
29
29
|
this.storage.setItem('testKey2', value, Date.now() + this.state.expireTime);
|
|
30
30
|
this.emit({ ...this.state, testKey2: value });
|
|
31
31
|
};
|
|
32
32
|
|
|
33
|
-
override changeExpireTime = (expireTime: number): void => {
|
|
33
|
+
public override changeExpireTime = (expireTime: number): void => {
|
|
34
34
|
this.emit({ ...this.state, expireTime });
|
|
35
35
|
};
|
|
36
36
|
|
|
37
|
-
override changeRequestTimeout = (requestTimeout: number): void => {
|
|
37
|
+
public override changeRequestTimeout = (requestTimeout: number): void => {
|
|
38
38
|
this.storage.setItem('requestTimeout', requestTimeout);
|
|
39
39
|
this.emit({ ...this.state, requestTimeout });
|
|
40
40
|
};
|
|
@@ -6,11 +6,17 @@ import { NavigateFunction } from 'react-router-dom';
|
|
|
6
6
|
export class NavigateBridge implements UIBridgeInterface<NavigateFunction> {
|
|
7
7
|
protected navigate: NavigateFunction | null = null;
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
/**
|
|
10
|
+
* @override
|
|
11
|
+
*/
|
|
12
|
+
public setUIBridge(ui: NavigateFunction): void {
|
|
10
13
|
this.navigate = ui;
|
|
11
14
|
}
|
|
12
15
|
|
|
13
|
-
|
|
16
|
+
/**
|
|
17
|
+
* @override
|
|
18
|
+
*/
|
|
19
|
+
public getUIBridge(): NavigateFunction | null {
|
|
14
20
|
return this.navigate;
|
|
15
21
|
}
|
|
16
22
|
}
|
|
@@ -32,7 +32,7 @@ export class RequestPageBridge extends RequestPageBridgeInterface {
|
|
|
32
32
|
super(createDefaultState);
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
override onHello = async () => {
|
|
35
|
+
public override onHello = async () => {
|
|
36
36
|
if (this.state.helloState.loading) {
|
|
37
37
|
return;
|
|
38
38
|
}
|
|
@@ -52,7 +52,7 @@ export class RequestPageBridge extends RequestPageBridgeInterface {
|
|
|
52
52
|
}
|
|
53
53
|
};
|
|
54
54
|
|
|
55
|
-
override onIpInfo = async () => {
|
|
55
|
+
public override onIpInfo = async () => {
|
|
56
56
|
if (this.state.ipInfoState.loading) {
|
|
57
57
|
return;
|
|
58
58
|
}
|
|
@@ -70,7 +70,7 @@ export class RequestPageBridge extends RequestPageBridgeInterface {
|
|
|
70
70
|
}
|
|
71
71
|
};
|
|
72
72
|
|
|
73
|
-
override onRandomUser = async () => {
|
|
73
|
+
public override onRandomUser = async () => {
|
|
74
74
|
if (this.state.randomUserState.loading) {
|
|
75
75
|
return;
|
|
76
76
|
}
|
|
@@ -89,7 +89,7 @@ export class RequestPageBridge extends RequestPageBridgeInterface {
|
|
|
89
89
|
}
|
|
90
90
|
};
|
|
91
91
|
|
|
92
|
-
override onTriggerApiCatchResult = async () => {
|
|
92
|
+
public override onTriggerApiCatchResult = async () => {
|
|
93
93
|
if (this.state.apiCatchResultState.loading) {
|
|
94
94
|
return;
|
|
95
95
|
}
|
|
@@ -107,7 +107,7 @@ export class RequestPageBridge extends RequestPageBridgeInterface {
|
|
|
107
107
|
}
|
|
108
108
|
};
|
|
109
109
|
|
|
110
|
-
override onTriggerAbortRequest = async () => {
|
|
110
|
+
public override onTriggerAbortRequest = async () => {
|
|
111
111
|
if (this.state.abortState.loading) {
|
|
112
112
|
this.stopAbortRequest();
|
|
113
113
|
return;
|
|
@@ -128,7 +128,7 @@ export class RequestPageBridge extends RequestPageBridgeInterface {
|
|
|
128
128
|
}
|
|
129
129
|
};
|
|
130
130
|
|
|
131
|
-
override stopAbortRequest = async () => {
|
|
131
|
+
public override stopAbortRequest = async () => {
|
|
132
132
|
this.userApi.stop({
|
|
133
133
|
requestId: 'onTriggerAbortRequest'
|
|
134
134
|
});
|
|
@@ -6,8 +6,6 @@ export function BootstrapsProvider(props: { children: React.ReactNode }) {
|
|
|
6
6
|
const IOC = clientIOC.create();
|
|
7
7
|
|
|
8
8
|
return (
|
|
9
|
-
<IOCContext.Provider
|
|
10
|
-
{props.children}
|
|
11
|
-
</IOCContext.Provider>
|
|
9
|
+
<IOCContext.Provider value={IOC}>{props.children}</IOCContext.Provider>
|
|
12
10
|
);
|
|
13
11
|
}
|
|
@@ -29,7 +29,10 @@ function createMessagesState(): MessagesStateInterface<MessageBaseMsg> {
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
class MessageBaseApi implements MessageGetwayInterface {
|
|
32
|
-
|
|
32
|
+
/**
|
|
33
|
+
* @override
|
|
34
|
+
*/
|
|
35
|
+
public async sendMessage<M extends MessageStoreMsg<string>>(
|
|
33
36
|
message: M
|
|
34
37
|
): Promise<unknown> {
|
|
35
38
|
const times = random(200, 1000);
|
|
@@ -14,9 +14,9 @@ import type {
|
|
|
14
14
|
} from '@qlover/corekit-bridge';
|
|
15
15
|
import type { TextAreaRef } from 'antd/es/input/TextArea';
|
|
16
16
|
|
|
17
|
-
export class ChatMessageBridge<
|
|
18
|
-
|
|
19
|
-
{
|
|
17
|
+
export class ChatMessageBridge<
|
|
18
|
+
T = string
|
|
19
|
+
> implements ChatMessageBridgeInterface<T> {
|
|
20
20
|
protected ref: TextAreaRef | null = null;
|
|
21
21
|
protected readonly messageSender: MessageSender<ChatMessage<T>>;
|
|
22
22
|
|
|
@@ -27,7 +27,12 @@ export class ChatMessageBridge<T = string>
|
|
|
27
27
|
this.messageSender = new MessageSender(messages, config);
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
/**
|
|
31
|
+
* @override
|
|
32
|
+
*/
|
|
33
|
+
public use(
|
|
34
|
+
plugin: ChatMessageBridgePlugin<T> | ChatMessageBridgePlugin<T>[]
|
|
35
|
+
): this {
|
|
31
36
|
if (Array.isArray(plugin)) {
|
|
32
37
|
plugin.forEach((p) => this.messageSender.use(p));
|
|
33
38
|
} else {
|
|
@@ -37,7 +42,10 @@ export class ChatMessageBridge<T = string>
|
|
|
37
42
|
return this;
|
|
38
43
|
}
|
|
39
44
|
|
|
40
|
-
|
|
45
|
+
/**
|
|
46
|
+
* @override
|
|
47
|
+
*/
|
|
48
|
+
public getMessageStore(): ChatMessageStore<T> {
|
|
41
49
|
return this.messages;
|
|
42
50
|
}
|
|
43
51
|
|
|
@@ -45,8 +53,10 @@ export class ChatMessageBridge<T = string>
|
|
|
45
53
|
* Disable rules
|
|
46
54
|
* 1. If streaming, don't allow sending
|
|
47
55
|
* 2. If sending, don't allow sending
|
|
48
|
-
|
|
49
|
-
|
|
56
|
+
|
|
57
|
+
* @override
|
|
58
|
+
*/
|
|
59
|
+
public getDisabledSend(params?: DisabledSendParams<T>): boolean {
|
|
50
60
|
const disabledSend =
|
|
51
61
|
params?.disabledSend || this.messages.state.disabledSend;
|
|
52
62
|
|
|
@@ -62,7 +72,10 @@ export class ChatMessageBridge<T = string>
|
|
|
62
72
|
return false;
|
|
63
73
|
}
|
|
64
74
|
|
|
65
|
-
|
|
75
|
+
/**
|
|
76
|
+
* @override
|
|
77
|
+
*/
|
|
78
|
+
public onChangeContent(content: T): void {
|
|
66
79
|
const firstDraft = this.getFirstDraftMessage();
|
|
67
80
|
|
|
68
81
|
// If draft message exists, update its content
|
|
@@ -79,21 +92,24 @@ export class ChatMessageBridge<T = string>
|
|
|
79
92
|
}
|
|
80
93
|
}
|
|
81
94
|
|
|
82
|
-
|
|
95
|
+
/**
|
|
96
|
+
* @override
|
|
97
|
+
*/
|
|
98
|
+
public getFirstDraftMessage(): ChatMessage<T> | null {
|
|
83
99
|
return this.messages.getFirstDraftMessage();
|
|
84
100
|
}
|
|
85
101
|
|
|
86
|
-
setRef(ref: unknown): void {
|
|
102
|
+
public setRef(ref: unknown): void {
|
|
87
103
|
this.ref = ref as TextAreaRef;
|
|
88
104
|
}
|
|
89
105
|
|
|
90
|
-
focus(): void {
|
|
106
|
+
public focus(): void {
|
|
91
107
|
requestAnimationFrame(() => {
|
|
92
108
|
this.ref?.focus();
|
|
93
109
|
});
|
|
94
110
|
}
|
|
95
111
|
|
|
96
|
-
sendMessage(
|
|
112
|
+
public sendMessage(
|
|
97
113
|
messages: ChatMessage<T>,
|
|
98
114
|
gatewayOptions?: GatewayOptions<ChatMessage<T>>
|
|
99
115
|
): Promise<ChatMessage<T>> {
|
|
@@ -112,10 +128,11 @@ export class ChatMessageBridge<T = string>
|
|
|
112
128
|
* - If loading, sending is not allowed
|
|
113
129
|
* - If no message to send, sending is not allowed
|
|
114
130
|
*
|
|
131
|
+
* @override
|
|
115
132
|
* @param message - Message object
|
|
116
133
|
* @param gatewayOptions - Gateway options
|
|
117
134
|
*/
|
|
118
|
-
send(
|
|
135
|
+
public send(
|
|
119
136
|
message?: ChatMessage<T>,
|
|
120
137
|
gatewayOptions?: GatewayOptions<ChatMessage<T>>
|
|
121
138
|
): Promise<ChatMessage<T>> {
|
|
@@ -140,7 +157,10 @@ export class ChatMessageBridge<T = string>
|
|
|
140
157
|
return this.sendMessage(targetMessage, gatewayOptions);
|
|
141
158
|
}
|
|
142
159
|
|
|
143
|
-
|
|
160
|
+
/**
|
|
161
|
+
* @override
|
|
162
|
+
*/
|
|
163
|
+
public getSendingMessage(messages?: ChatMessage<T>[]): ChatMessage<T> | null {
|
|
144
164
|
messages = messages || this.messages.getMessages();
|
|
145
165
|
|
|
146
166
|
return (
|
|
@@ -152,7 +172,10 @@ export class ChatMessageBridge<T = string>
|
|
|
152
172
|
);
|
|
153
173
|
}
|
|
154
174
|
|
|
155
|
-
|
|
175
|
+
/**
|
|
176
|
+
* @override
|
|
177
|
+
*/
|
|
178
|
+
public stop(messageId?: string): boolean {
|
|
156
179
|
if (!messageId) {
|
|
157
180
|
const sendingMessage = this.getSendingMessage();
|
|
158
181
|
if (sendingMessage) {
|
|
@@ -170,7 +193,7 @@ export class ChatMessageBridge<T = string>
|
|
|
170
193
|
/**
|
|
171
194
|
* Stop all sending messages
|
|
172
195
|
*/
|
|
173
|
-
stopAll(): void {
|
|
196
|
+
public stopAll(): void {
|
|
174
197
|
this.messageSender.stopAll();
|
|
175
198
|
}
|
|
176
199
|
}
|
|
@@ -21,8 +21,10 @@ export class MessageApi implements MessageGetwayInterface {
|
|
|
21
21
|
* - If options.stream === true, use streaming mode (progressive output)
|
|
22
22
|
* - If options provided but stream !== true, use interruptible normal mode
|
|
23
23
|
* - If no options, use fast normal mode (non-interruptible)
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
|
|
25
|
+
* @override
|
|
26
|
+
*/
|
|
27
|
+
public async sendMessage<M extends MessageStoreMsg<string>>(
|
|
26
28
|
message: M,
|
|
27
29
|
options?: GatewayOptions<M>
|
|
28
30
|
): Promise<M> {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@qlover/create-app",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.3",
|
|
4
4
|
"description": "Create a new app with a single command",
|
|
5
5
|
"private": false,
|
|
6
6
|
"type": "module",
|
|
@@ -33,12 +33,12 @@
|
|
|
33
33
|
"ignore": "^7.0.3",
|
|
34
34
|
"lodash": "^4.17.21",
|
|
35
35
|
"ora": "^8.1.1",
|
|
36
|
-
"@qlover/logger": "0.3.
|
|
36
|
+
"@qlover/logger": "0.3.1"
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
39
|
"commander": "^13.1.0",
|
|
40
40
|
"inquirer": "^12.3.2",
|
|
41
|
-
"@qlover/scripts-context": "1.2.
|
|
41
|
+
"@qlover/scripts-context": "1.2.1"
|
|
42
42
|
},
|
|
43
43
|
"scripts": {
|
|
44
44
|
"lint": "eslint src --fix",
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { notFound } from 'next/navigation';
|
|
2
|
-
import { getMessages, getTranslations } from 'next-intl/server';
|
|
3
|
-
import { TranslateI18nInterface } from '@/base/cases/TranslateI18nInterface';
|
|
4
|
-
import { i18nConfig } from '@config/i18n';
|
|
5
|
-
import type { LocaleType, PageI18nInterface } from '@config/i18n';
|
|
6
|
-
import type { ParamsHandlerInterface as ParamsHandlerInterface } from './port/ParamsHandlerInterface';
|
|
7
|
-
|
|
8
|
-
export interface PageWithParams {
|
|
9
|
-
params?: Promise<PageParamsType>;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export interface PageParamsType {
|
|
13
|
-
locale?: string;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Handler Page Params
|
|
18
|
-
*/
|
|
19
|
-
export class PageParams implements ParamsHandlerInterface {
|
|
20
|
-
private locale: string | null;
|
|
21
|
-
|
|
22
|
-
constructor(protected readonly params: PageParamsType) {
|
|
23
|
-
this.locale = this.params.locale || i18nConfig.fallbackLng;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
public getLocale(defaultLocale?: string): string {
|
|
27
|
-
if (this.locale) {
|
|
28
|
-
return this.locale;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
this.locale = this.params.locale || defaultLocale || i18nConfig.fallbackLng;
|
|
32
|
-
|
|
33
|
-
return this.locale;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
public getI18nWithNotFound(): string {
|
|
37
|
-
const locale = this.getLocale();
|
|
38
|
-
|
|
39
|
-
if (!i18nConfig.supportedLngs.includes(locale as LocaleType)) {
|
|
40
|
-
notFound();
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
return locale;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
public async getI18nMessages(): Promise<Record<string, string>> {
|
|
47
|
-
const locale = this.getLocale();
|
|
48
|
-
|
|
49
|
-
const messages = await getMessages({ locale });
|
|
50
|
-
|
|
51
|
-
return messages;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
public async getI18nInterface<T extends PageI18nInterface>(
|
|
55
|
-
i18nInterface: T,
|
|
56
|
-
namespace?: string
|
|
57
|
-
): Promise<T> {
|
|
58
|
-
// Load translation messages from the HomePage namespace
|
|
59
|
-
const t = await getTranslations({
|
|
60
|
-
locale: this.getLocale(),
|
|
61
|
-
namespace: namespace
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
return TranslateI18nInterface.translate<T>(i18nInterface, t);
|
|
65
|
-
}
|
|
66
|
-
}
|