diff --git a/src/account/KcContext.ts b/src/account/KcContext.ts new file mode 100644 index 0000000..a043f25 --- /dev/null +++ b/src/account/KcContext.ts @@ -0,0 +1,12 @@ +/* eslint-disable @typescript-eslint/ban-types */ +import type { ExtendKcContext } from "keycloakify/account"; +import type { KcEnvName, ThemeName } from "../kc.gen"; + +export type KcContextExtension = { + themeName: ThemeName; + properties: Record & {}; +}; + +export type KcContextExtensionPerPage = {}; + +export type KcContext = ExtendKcContext; diff --git a/src/account/KcPage.tsx b/src/account/KcPage.tsx new file mode 100644 index 0000000..6f86dc7 --- /dev/null +++ b/src/account/KcPage.tsx @@ -0,0 +1,25 @@ +import { Suspense } from "react"; +import type { ClassKey } from "keycloakify/account"; +import type { KcContext } from "./KcContext"; +import { useI18n } from "./i18n"; +import DefaultPage from "keycloakify/account/DefaultPage"; +import Template from "keycloakify/account/Template"; + +export default function KcPage(props: { kcContext: KcContext }) { + const { kcContext } = props; + + const { i18n } = useI18n({ kcContext }); + + return ( + + {(() => { + switch (kcContext.pageId) { + default: + return ; + } + })()} + + ); +} + +const classes = {} satisfies { [key in ClassKey]?: string }; diff --git a/src/account/KcPageStory.tsx b/src/account/KcPageStory.tsx new file mode 100644 index 0000000..c059547 --- /dev/null +++ b/src/account/KcPageStory.tsx @@ -0,0 +1,38 @@ +import type { DeepPartial } from "keycloakify/tools/DeepPartial"; +import type { KcContext } from "./KcContext"; +import { createGetKcContextMock } from "keycloakify/account/KcContext"; +import type { KcContextExtension, KcContextExtensionPerPage } from "./KcContext"; +import KcPage from "./KcPage"; +import { themeNames, kcEnvDefaults } from "../kc.gen"; + +const kcContextExtension: KcContextExtension = { + themeName: themeNames[0], + properties: { + ...kcEnvDefaults + } +}; +const kcContextExtensionPerPage: KcContextExtensionPerPage = {}; + +export const { getKcContextMock } = createGetKcContextMock({ + kcContextExtension, + kcContextExtensionPerPage, + overrides: {}, + overridesPerPage: {} +}); + +export function createKcPageStory(params: { pageId: PageId }) { + const { pageId } = params; + + function KcPageStory(props: { kcContext?: DeepPartial> }) { + const { kcContext: overrides } = props; + + const kcContextMock = getKcContextMock({ + pageId, + overrides + }); + + return ; + } + + return { KcPageStory }; +} diff --git a/src/account/i18n.ts b/src/account/i18n.ts new file mode 100644 index 0000000..d753b3b --- /dev/null +++ b/src/account/i18n.ts @@ -0,0 +1,10 @@ +/* eslint-disable @typescript-eslint/no-unused-vars */ +import { i18nBuilder } from "keycloakify/account"; +import type { ThemeName } from "../kc.gen"; + +/** @see: https://docs.keycloakify.dev/features/i18n */ +const { useI18n, ofTypeI18n } = i18nBuilder.withThemeName().build(); + +type I18n = typeof ofTypeI18n; + +export { useI18n, type I18n }; diff --git a/vite.config.ts b/vite.config.ts index 752e777..fec821c 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -7,7 +7,7 @@ export default defineConfig({ plugins: [ react(), keycloakify({ - accountThemeImplementation: "none" + accountThemeImplementation: "Multi-Page" }) ] });