diff --git a/src/bin/build-keycloak-theme/generateFtl/generateFtl.ts b/src/bin/build-keycloak-theme/generateFtl/generateFtl.ts index 1c625b361..ebbd32af8 100644 --- a/src/bin/build-keycloak-theme/generateFtl/generateFtl.ts +++ b/src/bin/build-keycloak-theme/generateFtl/generateFtl.ts @@ -5,6 +5,7 @@ import { join as pathJoin } from "path"; import { objectKeys } from "tsafe/objectKeys"; import { ftlValuesGlobalName } from "../ftlValuesGlobalName"; +// https://github.com/keycloak/keycloak/blob/main/services/src/main/java/org/keycloak/forms/login/freemarker/Templates.java export const pageIds = [ "login.ftl", "register.ftl", @@ -21,6 +22,7 @@ export const pageIds = [ "login-idp-link-email.ftl", "login-page-expired.ftl", "login-config-totp.ftl", + "logout-confirm.ftl", ] as const; export type PageId = typeof pageIds[number]; diff --git a/src/lib/components/KcApp.tsx b/src/lib/components/KcApp.tsx index e157c5ec0..cb149415f 100644 --- a/src/lib/components/KcApp.tsx +++ b/src/lib/components/KcApp.tsx @@ -16,6 +16,7 @@ import { LoginIdpLinkConfirm } from "./LoginIdpLinkConfirm"; import { LoginPageExpired } from "./LoginPageExpired"; import { LoginIdpLinkEmail } from "./LoginIdpLinkEmail"; import { LoginConfigTotp } from "./LoginConfigTotp"; +import { LogoutConfirm } from "./LogoutConfirm"; export const KcApp = memo(({ kcContext, ...props }: { kcContext: KcContextBase } & KcProps) => { switch (kcContext.pageId) { @@ -49,5 +50,7 @@ export const KcApp = memo(({ kcContext, ...props }: { kcContext: KcContextBase } return ; case "login-config-totp.ftl": return ; + case "logout-confirm.ftl": + return ; } }); diff --git a/src/lib/components/LogoutConfirm.tsx b/src/lib/components/LogoutConfirm.tsx new file mode 100644 index 000000000..820a0f463 --- /dev/null +++ b/src/lib/components/LogoutConfirm.tsx @@ -0,0 +1,61 @@ +import { memo } from "react"; +import { useCssAndCx } from "tss-react"; + +import { Template } from "./Template"; +import type { KcProps } from "./KcProps"; +import type { KcContextBase } from "../getKcContext/KcContextBase"; +import { getMsg } from "../i18n"; + +export const LogoutConfirm = memo(({ kcContext, ...props }: { kcContext: KcContextBase.LogoutConfirm } & KcProps) => { + const { url, client, logoutConfirm } = kcContext; + + const { cx } = useCssAndCx(); + + const { msg, msgStr } = getMsg(kcContext); + + return ( +