diff --git a/scripts/generate-i18n-messages.ts b/scripts/generate-i18n-messages.ts index 9d721740..aedc357d 100644 --- a/scripts/generate-i18n-messages.ts +++ b/scripts/generate-i18n-messages.ts @@ -17,7 +17,7 @@ const isSilent = true; const logger = getLogger({ isSilent }); async function main() { - const keycloakVersion = "24.0.2"; + const keycloakVersion = "24.0.4"; const thisCodebaseRootDirPath = getThisCodebaseRootDirPath(); diff --git a/src/bin/keycloakify/generateFtl/pageId.ts b/src/bin/keycloakify/generateFtl/pageId.ts index cd1083c8..3bbb1c43 100644 --- a/src/bin/keycloakify/generateFtl/pageId.ts +++ b/src/bin/keycloakify/generateFtl/pageId.ts @@ -24,7 +24,8 @@ export const loginThemePageIds = [ "idp-review-user-profile.ftl", "update-email.ftl", "select-authenticator.ftl", - "saml-post-form.ftl" + "saml-post-form.ftl", + "delete-credential.ftl" ] as const; export const accountThemePageIds = [ diff --git a/src/login/Fallback.tsx b/src/login/Fallback.tsx index 58e36c98..89a9cb75 100644 --- a/src/login/Fallback.tsx +++ b/src/login/Fallback.tsx @@ -31,6 +31,7 @@ const IdpReviewUserProfile = lazy(() => import("keycloakify/login/pages/IdpRevie const UpdateEmail = lazy(() => import("keycloakify/login/pages/UpdateEmail")); const SelectAuthenticator = lazy(() => import("keycloakify/login/pages/SelectAuthenticator")); const SamlPostForm = lazy(() => import("keycloakify/login/pages/SamlPostForm")); +const DeleteCredential = lazy(() => import("keycloakify/login/pages/DeleteCredential")); type FallbackProps = PageProps & { UserProfileFormFields: LazyOrNot<(props: UserProfileFormFieldsProps) => JSX.Element>; @@ -94,6 +95,8 @@ export default function Fallback(props: FallbackProps) { return ; case "saml-post-form.ftl": return ; + case "delete-credential.ftl": + return ; } assert>(false); })()} diff --git a/src/login/kcContext/KcContext.ts b/src/login/kcContext/KcContext.ts index 02959caf..49aa1754 100644 --- a/src/login/kcContext/KcContext.ts +++ b/src/login/kcContext/KcContext.ts @@ -34,7 +34,8 @@ export type KcContext = | KcContext.IdpReviewUserProfile | KcContext.UpdateEmail | KcContext.SelectAuthenticator - | KcContext.SamlPostForm; + | KcContext.SamlPostForm + | KcContext.DeleteCredential; assert(); @@ -489,6 +490,17 @@ export declare namespace KcContext { | "kcAuthenticatorWebAuthnPasswordlessClass"; }; } + + export type DeleteCredential = Common & { + pageId: "delete-credential.ftl"; + credentialLabel: string; + /* + credential: { + id: string; + userLabel: string; + }; + */ + }; } export type Attribute = { diff --git a/src/login/pages/DeleteCredential.tsx b/src/login/pages/DeleteCredential.tsx new file mode 100644 index 00000000..799dee7c --- /dev/null +++ b/src/login/pages/DeleteCredential.tsx @@ -0,0 +1,45 @@ +import { clsx } from "keycloakify/tools/clsx"; +import type { PageProps } from "keycloakify/login/pages/PageProps"; +import type { KcContext } from "../kcContext"; +import type { I18n } from "../i18n"; +import { useGetClassName } from "keycloakify/login/lib/useGetClassName"; + +export default function DeleteCredential(props: PageProps, I18n>) { + const { kcContext, i18n, doUseDefaultCss, Template, classes } = props; + + const { msgStr, msg } = i18n; + + const { getClassName } = useGetClassName({ + doUseDefaultCss, + classes + }); + + const { url, credentialLabel } = kcContext; + + return ( + + ); +}