2023-02-26 11:32:22 +00:00
|
|
|
import "./KcApp.css";
|
|
|
|
import { lazy, Suspense } from "react";
|
|
|
|
import type { KcContext } from "./kcContext";
|
2023-02-26 13:07:11 +00:00
|
|
|
import { useI18n } from "./i18n";
|
|
|
|
import Fallback, { defaultKcProps, type KcProps, type PageProps } from "keycloakify";
|
|
|
|
// Here we have overloaded the default template, however you could use the default one with:
|
|
|
|
//import Template from "keycloakify/lib/Template";
|
2023-02-26 11:32:22 +00:00
|
|
|
import Template from "./Template";
|
|
|
|
|
2023-02-26 13:07:11 +00:00
|
|
|
const Login = lazy(() => import("keycloakify/lib/pages/Login"));
|
2023-02-26 11:32:22 +00:00
|
|
|
const Register = lazy(() => import("./pages/Register"));
|
|
|
|
const Terms = lazy(() => import("./pages/Terms"));
|
|
|
|
const MyExtraPage1 = lazy(() => import("./pages/MyExtraPage1"));
|
|
|
|
const MyExtraPage2 = lazy(() => import("./pages/MyExtraPage2"));
|
|
|
|
|
2023-02-26 13:07:11 +00:00
|
|
|
// This is like editing the theme.properties
|
|
|
|
// https://github.com/keycloak/keycloak/blob/11.0.3/themes/src/main/resources/theme/keycloak/login/theme.properties
|
|
|
|
const kcProps: KcProps = {
|
|
|
|
...defaultKcProps,
|
|
|
|
// NOTE: The classes are defined in ./KcApp.css
|
|
|
|
"kcHeaderWrapperClass": "my-color my-font",
|
|
|
|
"kcHtmlClass": [...defaultKcProps.kcHtmlClass, "my-root-class"],
|
2023-02-26 11:32:22 +00:00
|
|
|
};
|
|
|
|
|
2023-02-26 13:07:11 +00:00
|
|
|
export default function App(props: { kcContext: KcContext; }) {
|
|
|
|
|
|
|
|
const { kcContext } = props;
|
|
|
|
|
2023-02-26 11:32:22 +00:00
|
|
|
const i18n = useI18n({ kcContext });
|
|
|
|
|
|
|
|
//NOTE: Locales not yet downloaded
|
|
|
|
if (i18n === null) {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
2023-02-26 13:07:11 +00:00
|
|
|
const pageProps: Omit<PageProps<any, typeof i18n>, "kcContext"> = {
|
2023-02-26 11:32:22 +00:00
|
|
|
i18n,
|
|
|
|
Template,
|
2023-02-26 13:07:11 +00:00
|
|
|
doFetchDefaultThemeResources: true,
|
|
|
|
...kcProps,
|
|
|
|
};
|
2023-02-26 11:32:22 +00:00
|
|
|
|
|
|
|
return (
|
|
|
|
<Suspense>
|
|
|
|
{(() => {
|
|
|
|
switch (kcContext.pageId) {
|
2023-02-26 13:07:11 +00:00
|
|
|
case "login.ftl": return <Login {...{ kcContext, ...pageProps }} />;
|
|
|
|
case "register.ftl": return <Register {...{ kcContext, ...pageProps }} />;
|
|
|
|
case "terms.ftl": return <Terms {...{ kcContext, ...pageProps }} />;
|
|
|
|
case "my-extra-page-1.ftl": return <MyExtraPage1 {...{ kcContext, ...pageProps }} />;
|
|
|
|
case "my-extra-page-2.ftl": return <MyExtraPage2 {...{ kcContext, ...pageProps }} />;
|
|
|
|
default: return <Fallback {...{ kcContext, ...pageProps }} />;
|
2023-02-26 11:32:22 +00:00
|
|
|
}
|
|
|
|
})()}
|
|
|
|
</Suspense>
|
|
|
|
);
|
|
|
|
|
|
|
|
}
|