keycloakify 10.0.0-rc.8 → 10.0.0-rc.80
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/PUBLIC_URL.d.ts +1 -1
- package/PUBLIC_URL.js +3 -3
- package/PUBLIC_URL.js.map +1 -1
- package/README.md +2 -3
- package/account/DefaultPage.d.ts +5 -0
- package/account/{Fallback.js → DefaultPage.js} +3 -3
- package/account/DefaultPage.js.map +1 -0
- package/account/{kcContext → KcContext}/KcContext.d.ts +13 -0
- package/account/KcContext/KcContext.js.map +1 -0
- package/account/KcContext/getKcContextMock.d.ts +24 -0
- package/account/KcContext/getKcContextMock.js +28 -0
- package/account/KcContext/getKcContextMock.js.map +1 -0
- package/account/KcContext/index.d.ts +2 -0
- package/account/KcContext/index.js +2 -0
- package/account/KcContext/index.js.map +1 -0
- package/account/{kcContext → KcContext}/kcContextMocks.d.ts +1 -1
- package/account/KcContext/kcContextMocks.js +143 -0
- package/account/KcContext/kcContextMocks.js.map +1 -0
- package/account/Template.d.ts +2 -2
- package/account/Template.js +12 -12
- package/account/Template.js.map +1 -1
- package/account/TemplateProps.d.ts +3 -5
- package/account/i18n/baseMessages/ar.d.ts +2 -0
- package/account/i18n/baseMessages/ar.js +3 -1
- package/account/i18n/baseMessages/ar.js.map +1 -1
- package/account/i18n/baseMessages/ca.d.ts +2 -0
- package/account/i18n/baseMessages/ca.js +3 -1
- package/account/i18n/baseMessages/ca.js.map +1 -1
- package/account/i18n/baseMessages/cs.d.ts +2 -0
- package/account/i18n/baseMessages/cs.js +3 -1
- package/account/i18n/baseMessages/cs.js.map +1 -1
- package/account/i18n/baseMessages/da.d.ts +2 -0
- package/account/i18n/baseMessages/da.js +3 -1
- package/account/i18n/baseMessages/da.js.map +1 -1
- package/account/i18n/baseMessages/de.d.ts +2 -0
- package/account/i18n/baseMessages/de.js +3 -1
- package/account/i18n/baseMessages/de.js.map +1 -1
- package/account/i18n/baseMessages/el.d.ts +2 -0
- package/account/i18n/baseMessages/el.js +3 -1
- package/account/i18n/baseMessages/el.js.map +1 -1
- package/account/i18n/baseMessages/en.d.ts +2 -0
- package/account/i18n/baseMessages/en.js +3 -1
- package/account/i18n/baseMessages/en.js.map +1 -1
- package/account/i18n/baseMessages/es.d.ts +2 -0
- package/account/i18n/baseMessages/es.js +3 -1
- package/account/i18n/baseMessages/es.js.map +1 -1
- package/account/i18n/baseMessages/fa.d.ts +2 -0
- package/account/i18n/baseMessages/fa.js +3 -1
- package/account/i18n/baseMessages/fa.js.map +1 -1
- package/account/i18n/baseMessages/fi.d.ts +2 -0
- package/account/i18n/baseMessages/fi.js +3 -1
- package/account/i18n/baseMessages/fi.js.map +1 -1
- package/account/i18n/baseMessages/fr.d.ts +2 -0
- package/account/i18n/baseMessages/fr.js +3 -1
- package/account/i18n/baseMessages/fr.js.map +1 -1
- package/account/i18n/baseMessages/hu.d.ts +2 -0
- package/account/i18n/baseMessages/hu.js +3 -1
- package/account/i18n/baseMessages/hu.js.map +1 -1
- package/account/i18n/baseMessages/index.d.ts +18 -0
- package/account/i18n/baseMessages/index.js.map +1 -1
- package/account/i18n/baseMessages/it.d.ts +2 -0
- package/account/i18n/baseMessages/it.js +3 -1
- package/account/i18n/baseMessages/it.js.map +1 -1
- package/account/i18n/baseMessages/ja.d.ts +2 -0
- package/account/i18n/baseMessages/ja.js +3 -1
- package/account/i18n/baseMessages/ja.js.map +1 -1
- package/account/i18n/baseMessages/lt.d.ts +2 -0
- package/account/i18n/baseMessages/lt.js +3 -1
- package/account/i18n/baseMessages/lt.js.map +1 -1
- package/account/i18n/baseMessages/lv.d.ts +2 -0
- package/account/i18n/baseMessages/lv.js +3 -1
- package/account/i18n/baseMessages/lv.js.map +1 -1
- package/account/i18n/baseMessages/nl.d.ts +2 -0
- package/account/i18n/baseMessages/nl.js +3 -1
- package/account/i18n/baseMessages/nl.js.map +1 -1
- package/account/i18n/baseMessages/no.d.ts +2 -0
- package/account/i18n/baseMessages/no.js +3 -1
- package/account/i18n/baseMessages/no.js.map +1 -1
- package/account/i18n/baseMessages/pl.d.ts +2 -0
- package/account/i18n/baseMessages/pl.js +3 -1
- package/account/i18n/baseMessages/pl.js.map +1 -1
- package/account/i18n/baseMessages/pt-BR.d.ts +2 -0
- package/account/i18n/baseMessages/pt-BR.js +3 -1
- package/account/i18n/baseMessages/pt-BR.js.map +1 -1
- package/account/i18n/baseMessages/ru.d.ts +2 -0
- package/account/i18n/baseMessages/ru.js +3 -1
- package/account/i18n/baseMessages/ru.js.map +1 -1
- package/account/i18n/baseMessages/sk.d.ts +2 -0
- package/account/i18n/baseMessages/sk.js +3 -1
- package/account/i18n/baseMessages/sk.js.map +1 -1
- package/account/i18n/baseMessages/sv.d.ts +2 -0
- package/account/i18n/baseMessages/sv.js +3 -1
- package/account/i18n/baseMessages/sv.js.map +1 -1
- package/account/i18n/baseMessages/th.d.ts +2 -0
- package/account/i18n/baseMessages/th.js +3 -1
- package/account/i18n/baseMessages/th.js.map +1 -1
- package/account/i18n/baseMessages/tr.d.ts +2 -0
- package/account/i18n/baseMessages/tr.js +3 -1
- package/account/i18n/baseMessages/tr.js.map +1 -1
- package/account/i18n/baseMessages/uk.d.ts +2 -0
- package/account/i18n/baseMessages/uk.js +3 -1
- package/account/i18n/baseMessages/uk.js.map +1 -1
- package/account/i18n/baseMessages/zh-CN.d.ts +2 -0
- package/account/i18n/baseMessages/zh-CN.js +3 -1
- package/account/i18n/baseMessages/zh-CN.js.map +1 -1
- package/account/i18n/i18n.d.ts +34 -35
- package/account/i18n/i18n.js +116 -97
- package/account/i18n/i18n.js.map +1 -1
- package/account/i18n/index.d.ts +5 -1
- package/account/i18n/index.js +2 -1
- package/account/i18n/index.js.map +1 -1
- package/account/i18n/useI18n.d.ts +13 -0
- package/account/i18n/useI18n.js +26 -0
- package/account/i18n/useI18n.js.map +1 -0
- package/account/index.d.ts +3 -7
- package/account/index.js +1 -5
- package/account/index.js.map +1 -1
- package/account/lib/kcClsx.d.ts +9 -0
- package/account/lib/kcClsx.js +19 -0
- package/account/lib/kcClsx.js.map +1 -0
- package/account/pages/Account.d.ts +1 -1
- package/account/pages/Account.js +7 -6
- package/account/pages/Account.js.map +1 -1
- package/account/pages/Applications.d.ts +1 -1
- package/account/pages/Applications.js +7 -8
- package/account/pages/Applications.js.map +1 -1
- package/account/pages/FederatedIdentity.d.ts +3 -3
- package/account/pages/FederatedIdentity.js +1 -1
- package/account/pages/FederatedIdentity.js.map +1 -1
- package/account/pages/Log.d.ts +1 -1
- package/account/pages/Log.js +3 -3
- package/account/pages/Log.js.map +1 -1
- package/account/pages/PageProps.d.ts +4 -6
- package/account/pages/Password.d.ts +1 -1
- package/account/pages/Password.js +16 -13
- package/account/pages/Password.js.map +1 -1
- package/account/pages/Sessions.d.ts +1 -1
- package/account/pages/Sessions.js +3 -4
- package/account/pages/Sessions.js.map +1 -1
- package/account/pages/Totp.d.ts +1 -1
- package/account/pages/Totp.js +5 -10
- package/account/pages/Totp.js.map +1 -1
- package/bin/180.index.js +4664 -0
- package/bin/193.index.js +160 -0
- package/bin/266.index.js +806 -0
- package/bin/304.index.js +1108 -0
- package/bin/36.index.js +9980 -0
- package/bin/430.index.js +1349 -0
- package/bin/440.index.js +1455 -0
- package/bin/453.index.js +769 -0
- package/bin/456.index.js +6200 -0
- package/bin/490.index.js +75195 -0
- package/bin/525.index.js +41826 -0
- package/bin/526.index.js +973 -0
- package/bin/538.index.js +108 -0
- package/bin/720.index.js +243 -0
- package/bin/751.index.js +732 -0
- package/bin/837.index.js +794 -0
- package/bin/877.index.js +275 -0
- package/bin/932.index.js +269 -0
- package/bin/97.index.js +676 -0
- package/bin/main.js +7679 -146380
- package/bin/shared/KeycloakVersionRange.d.ts +5 -0
- package/bin/shared/KeycloakVersionRange.js.map +1 -0
- package/bin/shared/buildContext.d.ts +67 -0
- package/bin/shared/buildContext.js.map +1 -0
- package/bin/shared/constants.d.ts +17 -0
- package/bin/shared/constants.js +58 -0
- package/bin/shared/constants.js.map +1 -0
- package/bin/shared/copyKeycloakResourcesToPublic.d.ts +8 -0
- package/bin/shared/copyKeycloakResourcesToPublic.js.map +1 -0
- package/bin/shared/downloadKeycloakDefaultTheme.d.ts +10 -0
- package/bin/shared/downloadKeycloakDefaultTheme.js.map +1 -0
- package/bin/shared/downloadKeycloakStaticResources.d.ts +9 -0
- package/bin/shared/downloadKeycloakStaticResources.js.map +1 -0
- package/bin/shared/generateKcGenTs.d.ts +12 -0
- package/bin/shared/generateKcGenTs.js.map +1 -0
- package/bin/shared/metaInfKeycloakThemes.d.ts +13 -0
- package/bin/shared/metaInfKeycloakThemes.js.map +1 -0
- package/bin/shared/promptKeycloakVersion.d.ts +7 -0
- package/bin/shared/promptKeycloakVersion.js.map +1 -0
- package/lib/BASE_URL.js.map +1 -1
- package/lib/getKcClsx.d.ts +11 -0
- package/lib/getKcClsx.js +55 -0
- package/lib/getKcClsx.js.map +1 -0
- package/login/{Fallback.d.ts → DefaultPage.d.ts} +7 -6
- package/login/{Fallback.js → DefaultPage.js} +2 -2
- package/login/DefaultPage.js.map +1 -0
- package/login/{kcContext → KcContext}/KcContext.d.ts +36 -17
- package/login/KcContext/KcContext.js.map +1 -0
- package/login/KcContext/getKcContextMock.d.ts +24 -0
- package/login/KcContext/getKcContextMock.js +28 -0
- package/login/KcContext/getKcContextMock.js.map +1 -0
- package/login/KcContext/index.d.ts +2 -0
- package/login/KcContext/index.js +2 -0
- package/login/KcContext/index.js.map +1 -0
- package/login/{kcContext → KcContext}/kcContextMocks.d.ts +1 -1
- package/login/KcContext/kcContextMocks.js +334 -0
- package/login/KcContext/kcContextMocks.js.map +1 -0
- package/login/Template.d.ts +2 -2
- package/login/Template.js +23 -23
- package/login/Template.js.map +1 -1
- package/login/TemplateProps.d.ts +3 -5
- package/login/UserProfileFormFields.d.ts +3 -20
- package/login/UserProfileFormFields.js +78 -122
- package/login/UserProfileFormFields.js.map +1 -1
- package/login/UserProfileFormFieldsProps.d.ts +24 -0
- package/login/UserProfileFormFieldsProps.js +2 -0
- package/login/UserProfileFormFieldsProps.js.map +1 -0
- package/login/i18n/baseMessages/ar.d.ts +9 -0
- package/login/i18n/baseMessages/ar.js +10 -1
- package/login/i18n/baseMessages/ar.js.map +1 -1
- package/login/i18n/baseMessages/ca.d.ts +10 -1
- package/login/i18n/baseMessages/ca.js +11 -2
- package/login/i18n/baseMessages/ca.js.map +1 -1
- package/login/i18n/baseMessages/cs.d.ts +9 -0
- package/login/i18n/baseMessages/cs.js +10 -1
- package/login/i18n/baseMessages/cs.js.map +1 -1
- package/login/i18n/baseMessages/da.d.ts +9 -0
- package/login/i18n/baseMessages/da.js +10 -1
- package/login/i18n/baseMessages/da.js.map +1 -1
- package/login/i18n/baseMessages/de.d.ts +9 -0
- package/login/i18n/baseMessages/de.js +10 -1
- package/login/i18n/baseMessages/de.js.map +1 -1
- package/login/i18n/baseMessages/el.d.ts +9 -1
- package/login/i18n/baseMessages/el.js +10 -2
- package/login/i18n/baseMessages/el.js.map +1 -1
- package/login/i18n/baseMessages/en.d.ts +10 -1
- package/login/i18n/baseMessages/en.js +11 -2
- package/login/i18n/baseMessages/en.js.map +1 -1
- package/login/i18n/baseMessages/es.d.ts +10 -1
- package/login/i18n/baseMessages/es.js +11 -2
- package/login/i18n/baseMessages/es.js.map +1 -1
- package/login/i18n/baseMessages/fa.d.ts +9 -1
- package/login/i18n/baseMessages/fa.js +10 -2
- package/login/i18n/baseMessages/fa.js.map +1 -1
- package/login/i18n/baseMessages/fi.d.ts +9 -0
- package/login/i18n/baseMessages/fi.js +10 -1
- package/login/i18n/baseMessages/fi.js.map +1 -1
- package/login/i18n/baseMessages/fr.d.ts +9 -0
- package/login/i18n/baseMessages/fr.js +10 -1
- package/login/i18n/baseMessages/fr.js.map +1 -1
- package/login/i18n/baseMessages/hu.d.ts +10 -1
- package/login/i18n/baseMessages/hu.js +11 -2
- package/login/i18n/baseMessages/hu.js.map +1 -1
- package/login/i18n/baseMessages/index.d.ts +109 -2
- package/login/i18n/baseMessages/index.js.map +1 -1
- package/login/i18n/baseMessages/it.d.ts +9 -0
- package/login/i18n/baseMessages/it.js +10 -1
- package/login/i18n/baseMessages/it.js.map +1 -1
- package/login/i18n/baseMessages/ja.d.ts +9 -0
- package/login/i18n/baseMessages/ja.js +10 -1
- package/login/i18n/baseMessages/ja.js.map +1 -1
- package/login/i18n/baseMessages/lt.d.ts +9 -0
- package/login/i18n/baseMessages/lt.js +10 -1
- package/login/i18n/baseMessages/lt.js.map +1 -1
- package/login/i18n/baseMessages/lv.d.ts +9 -0
- package/login/i18n/baseMessages/lv.js +10 -1
- package/login/i18n/baseMessages/lv.js.map +1 -1
- package/login/i18n/baseMessages/nl.d.ts +9 -0
- package/login/i18n/baseMessages/nl.js +10 -1
- package/login/i18n/baseMessages/nl.js.map +1 -1
- package/login/i18n/baseMessages/no.d.ts +9 -0
- package/login/i18n/baseMessages/no.js +10 -1
- package/login/i18n/baseMessages/no.js.map +1 -1
- package/login/i18n/baseMessages/pl.d.ts +9 -0
- package/login/i18n/baseMessages/pl.js +10 -1
- package/login/i18n/baseMessages/pl.js.map +1 -1
- package/login/i18n/baseMessages/pt-BR.d.ts +9 -0
- package/login/i18n/baseMessages/pt-BR.js +10 -1
- package/login/i18n/baseMessages/pt-BR.js.map +1 -1
- package/login/i18n/baseMessages/ru.d.ts +9 -0
- package/login/i18n/baseMessages/ru.js +10 -1
- package/login/i18n/baseMessages/ru.js.map +1 -1
- package/login/i18n/baseMessages/sk.d.ts +9 -0
- package/login/i18n/baseMessages/sk.js +10 -1
- package/login/i18n/baseMessages/sk.js.map +1 -1
- package/login/i18n/baseMessages/sv.d.ts +9 -0
- package/login/i18n/baseMessages/sv.js +10 -1
- package/login/i18n/baseMessages/sv.js.map +1 -1
- package/login/i18n/baseMessages/th.d.ts +9 -0
- package/login/i18n/baseMessages/th.js +10 -1
- package/login/i18n/baseMessages/th.js.map +1 -1
- package/login/i18n/baseMessages/tr.d.ts +9 -0
- package/login/i18n/baseMessages/tr.js +10 -1
- package/login/i18n/baseMessages/tr.js.map +1 -1
- package/login/i18n/baseMessages/uk.d.ts +9 -0
- package/login/i18n/baseMessages/uk.js +10 -1
- package/login/i18n/baseMessages/uk.js.map +1 -1
- package/login/i18n/baseMessages/zh-CN.d.ts +10 -1
- package/login/i18n/baseMessages/zh-CN.js +11 -2
- package/login/i18n/baseMessages/zh-CN.js.map +1 -1
- package/login/i18n/i18n.d.ts +38 -37
- package/login/i18n/i18n.js +132 -99
- package/login/i18n/i18n.js.map +1 -1
- package/login/i18n/index.d.ts +5 -1
- package/login/i18n/index.js +2 -1
- package/login/i18n/index.js.map +1 -1
- package/login/i18n/useI18n.d.ts +13 -0
- package/login/i18n/useI18n.js +26 -0
- package/login/i18n/useI18n.js.map +1 -0
- package/login/index.d.ts +3 -7
- package/login/index.js +1 -5
- package/login/index.js.map +1 -1
- package/login/lib/kcClsx.d.ts +9 -0
- package/login/lib/kcClsx.js +130 -0
- package/login/lib/kcClsx.js.map +1 -0
- package/login/lib/useDownloadTerms.d.ts +15 -5
- package/login/lib/useDownloadTerms.js +37 -21
- package/login/lib/useDownloadTerms.js.map +1 -1
- package/login/lib/useUserProfileForm.d.ts +20 -8
- package/login/lib/useUserProfileForm.js +402 -295
- package/login/lib/useUserProfileForm.js.map +1 -1
- package/login/pages/Code.d.ts +1 -1
- package/login/pages/Code.js +3 -3
- package/login/pages/Code.js.map +1 -1
- package/login/pages/DeleteAccountConfirm.d.ts +1 -1
- package/login/pages/DeleteAccountConfirm.js +7 -4
- package/login/pages/DeleteAccountConfirm.js.map +1 -1
- package/login/pages/DeleteCredential.d.ts +1 -1
- package/login/pages/DeleteCredential.js +3 -4
- package/login/pages/DeleteCredential.js.map +1 -1
- package/login/pages/Error.d.ts +1 -1
- package/login/pages/Error.js +1 -1
- package/login/pages/Error.js.map +1 -1
- package/login/pages/FrontchannelLogout.d.ts +1 -1
- package/login/pages/FrontchannelLogout.js +1 -1
- package/login/pages/FrontchannelLogout.js.map +1 -1
- package/login/pages/IdpReviewUserProfile.d.ts +4 -3
- package/login/pages/IdpReviewUserProfile.js +4 -5
- package/login/pages/IdpReviewUserProfile.js.map +1 -1
- package/login/pages/Info.d.ts +1 -1
- package/login/pages/Info.js +5 -7
- package/login/pages/Info.js.map +1 -1
- package/login/pages/Login.d.ts +1 -1
- package/login/pages/Login.js +7 -7
- package/login/pages/Login.js.map +1 -1
- package/login/pages/LoginConfigTotp.d.ts +1 -1
- package/login/pages/LoginConfigTotp.js +6 -7
- package/login/pages/LoginConfigTotp.js.map +1 -1
- package/login/pages/LoginIdpLinkConfirm.d.ts +1 -1
- package/login/pages/LoginIdpLinkConfirm.js +3 -4
- package/login/pages/LoginIdpLinkConfirm.js.map +1 -1
- package/login/pages/LoginIdpLinkEmail.d.ts +2 -2
- package/login/pages/LoginIdpLinkEmail.js +1 -1
- package/login/pages/LoginIdpLinkEmail.js.map +1 -1
- package/login/pages/LoginOauth2DeviceVerifyUserCode.d.ts +3 -3
- package/login/pages/LoginOauth2DeviceVerifyUserCode.js +3 -4
- package/login/pages/LoginOauth2DeviceVerifyUserCode.js.map +1 -1
- package/login/pages/LoginOauthGrant.d.ts +3 -3
- package/login/pages/LoginOauthGrant.js +4 -5
- package/login/pages/LoginOauthGrant.js.map +1 -1
- package/login/pages/LoginOtp.d.ts +1 -1
- package/login/pages/LoginOtp.js +3 -4
- package/login/pages/LoginOtp.js.map +1 -1
- package/login/pages/LoginPageExpired.d.ts +1 -1
- package/login/pages/LoginPageExpired.js +1 -1
- package/login/pages/LoginPageExpired.js.map +1 -1
- package/login/pages/LoginPassword.d.ts +1 -1
- package/login/pages/LoginPassword.js +6 -6
- package/login/pages/LoginPassword.js.map +1 -1
- package/login/pages/LoginRecoveryAuthnCodeConfig.d.ts +1 -1
- package/login/pages/LoginRecoveryAuthnCodeConfig.js +16 -16
- package/login/pages/LoginRecoveryAuthnCodeConfig.js.map +1 -1
- package/login/pages/LoginRecoveryAuthnCodeInput.d.ts +1 -1
- package/login/pages/LoginRecoveryAuthnCodeInput.js +3 -4
- package/login/pages/LoginRecoveryAuthnCodeInput.js.map +1 -1
- package/login/pages/LoginResetOtp.d.ts +1 -1
- package/login/pages/LoginResetOtp.js +3 -4
- package/login/pages/LoginResetOtp.js.map +1 -1
- package/login/pages/LoginResetPassword.d.ts +1 -1
- package/login/pages/LoginResetPassword.js +4 -5
- package/login/pages/LoginResetPassword.js.map +1 -1
- package/login/pages/LoginUpdatePassword.d.ts +1 -1
- package/login/pages/LoginUpdatePassword.js +7 -8
- package/login/pages/LoginUpdatePassword.js.map +1 -1
- package/login/pages/LoginUpdateProfile.d.ts +4 -3
- package/login/pages/LoginUpdateProfile.js +5 -9
- package/login/pages/LoginUpdateProfile.js.map +1 -1
- package/login/pages/LoginUsername.d.ts +1 -1
- package/login/pages/LoginUsername.js +5 -5
- package/login/pages/LoginUsername.js.map +1 -1
- package/login/pages/LoginVerifyEmail.d.ts +1 -1
- package/login/pages/LoginVerifyEmail.js +1 -1
- package/login/pages/LoginVerifyEmail.js.map +1 -1
- package/login/pages/LoginX509Info.d.ts +1 -1
- package/login/pages/LoginX509Info.js +3 -4
- package/login/pages/LoginX509Info.js.map +1 -1
- package/login/pages/LogoutConfirm.d.ts +1 -1
- package/login/pages/LogoutConfirm.js +3 -4
- package/login/pages/LogoutConfirm.js.map +1 -1
- package/login/pages/PageProps.d.ts +3 -5
- package/login/pages/Register.d.ts +4 -3
- package/login/pages/Register.js +12 -17
- package/login/pages/Register.js.map +1 -1
- package/login/pages/SamlPostForm.d.ts +1 -1
- package/login/pages/SamlPostForm.js +1 -1
- package/login/pages/SamlPostForm.js.map +1 -1
- package/login/pages/SelectAuthenticator.d.ts +2 -2
- package/login/pages/SelectAuthenticator.js +3 -7
- package/login/pages/SelectAuthenticator.js.map +1 -1
- package/login/pages/Terms.d.ts +2 -2
- package/login/pages/Terms.js +8 -7
- package/login/pages/Terms.js.map +1 -1
- package/login/pages/UpdateEmail.d.ts +3 -2
- package/login/pages/UpdateEmail.js +6 -10
- package/login/pages/UpdateEmail.js.map +1 -1
- package/login/pages/WebauthnAuthenticate.d.ts +1 -1
- package/login/pages/WebauthnAuthenticate.js +25 -22
- package/login/pages/WebauthnAuthenticate.js.map +1 -1
- package/login/pages/WebauthnError.d.ts +1 -1
- package/login/pages/WebauthnError.js +4 -5
- package/login/pages/WebauthnError.js.map +1 -1
- package/login/pages/WebauthnRegister.d.ts +1 -1
- package/login/pages/WebauthnRegister.js +15 -16
- package/login/pages/WebauthnRegister.js.map +1 -1
- package/package.json +433 -319
- package/src/PUBLIC_URL.ts +3 -3
- package/src/account/{Fallback.tsx → DefaultPage.tsx} +5 -5
- package/src/account/{kcContext → KcContext}/KcContext.ts +24 -2
- package/src/account/KcContext/getKcContextMock.ts +69 -0
- package/src/account/KcContext/index.ts +2 -0
- package/src/account/KcContext/kcContextMocks.ts +190 -0
- package/src/account/Template.tsx +14 -16
- package/src/account/TemplateProps.ts +4 -5
- package/src/account/i18n/baseMessages/ar.ts +3 -1
- package/src/account/i18n/baseMessages/ca.ts +3 -1
- package/src/account/i18n/baseMessages/cs.ts +3 -1
- package/src/account/i18n/baseMessages/da.ts +3 -1
- package/src/account/i18n/baseMessages/de.ts +3 -1
- package/src/account/i18n/baseMessages/el.ts +3 -1
- package/src/account/i18n/baseMessages/en.ts +3 -1
- package/src/account/i18n/baseMessages/es.ts +3 -1
- package/src/account/i18n/baseMessages/fa.ts +3 -1
- package/src/account/i18n/baseMessages/fi.ts +3 -1
- package/src/account/i18n/baseMessages/fr.ts +3 -1
- package/src/account/i18n/baseMessages/hu.ts +3 -1
- package/src/account/i18n/baseMessages/it.ts +3 -1
- package/src/account/i18n/baseMessages/ja.ts +3 -1
- package/src/account/i18n/baseMessages/lt.ts +3 -1
- package/src/account/i18n/baseMessages/lv.ts +3 -1
- package/src/account/i18n/baseMessages/nl.ts +3 -1
- package/src/account/i18n/baseMessages/no.ts +3 -1
- package/src/account/i18n/baseMessages/pl.ts +3 -1
- package/src/account/i18n/baseMessages/pt-BR.ts +3 -1
- package/src/account/i18n/baseMessages/ru.ts +3 -1
- package/src/account/i18n/baseMessages/sk.ts +3 -1
- package/src/account/i18n/baseMessages/sv.ts +3 -1
- package/src/account/i18n/baseMessages/th.ts +3 -1
- package/src/account/i18n/baseMessages/tr.ts +3 -1
- package/src/account/i18n/baseMessages/uk.ts +3 -1
- package/src/account/i18n/baseMessages/zh-CN.ts +3 -1
- package/src/account/i18n/i18n.tsx +201 -142
- package/src/account/i18n/index.ts +5 -1
- package/src/account/i18n/useI18n.ts +44 -0
- package/src/account/index.ts +3 -10
- package/src/account/lib/kcClsx.ts +25 -0
- package/src/account/pages/Account.tsx +12 -18
- package/src/account/pages/Applications.tsx +8 -9
- package/src/account/pages/FederatedIdentity.tsx +3 -3
- package/src/account/pages/Log.tsx +5 -5
- package/src/account/pages/PageProps.ts +4 -6
- package/src/account/pages/Password.tsx +17 -19
- package/src/account/pages/Sessions.tsx +5 -6
- package/src/account/pages/Totp.tsx +18 -38
- package/src/bin/add-story.ts +104 -0
- package/src/bin/copy-keycloak-resources-to-public.ts +3 -6
- package/src/bin/eject-page.ts +256 -0
- package/src/bin/initialize-email-theme.ts +30 -26
- package/src/bin/keycloakify/buildJars/buildJar.ts +138 -77
- package/src/bin/keycloakify/buildJars/buildJars.ts +35 -31
- package/src/bin/keycloakify/buildJars/extensionVersions.ts +3 -2
- package/src/bin/keycloakify/buildJars/generatePom.ts +19 -11
- package/src/bin/keycloakify/buildJars/getKeycloakVersionRangeForJar.ts +42 -10
- package/src/bin/keycloakify/generateFtl/generateFtl.ts +64 -42
- package/src/bin/keycloakify/generateFtl/{ftl_object_to_js_code_declaring_an_object.ftl → kcContextDeclarationTemplate.ftl} +232 -193
- package/src/bin/keycloakify/generateResources/bringInAccountV1.ts +89 -0
- package/src/bin/keycloakify/{generateSrcMainResources → generateResources}/generateMessageProperties.ts +47 -53
- package/src/bin/keycloakify/generateResources/generateResources.ts +42 -0
- package/src/bin/keycloakify/generateResources/generateResourcesForMainTheme.ts +299 -0
- package/src/bin/keycloakify/generateResources/generateResourcesForThemeVariant.ts +70 -0
- package/src/bin/keycloakify/generateResources/index.ts +1 -0
- package/src/bin/keycloakify/{generateSrcMainResources → generateResources}/readExtraPageNames.ts +21 -7
- package/src/bin/keycloakify/{generateSrcMainResources → generateResources}/readFieldNameUsage.ts +34 -7
- package/src/bin/keycloakify/keycloakify.ts +50 -16
- package/src/bin/keycloakify/replacers/replaceImportsInCssCode.ts +42 -46
- package/src/bin/keycloakify/replacers/replaceImportsInJsCode/replaceImportsInJsCode.ts +14 -11
- package/src/bin/keycloakify/replacers/replaceImportsInJsCode/vite.ts +31 -16
- package/src/bin/keycloakify/replacers/replaceImportsInJsCode/webpack.ts +53 -18
- package/src/bin/main.ts +96 -44
- package/src/bin/shared/KeycloakVersionRange.ts +4 -2
- package/src/bin/shared/buildContext.ts +768 -0
- package/src/bin/shared/constants.ts +8 -4
- package/src/bin/shared/copyKeycloakResourcesToPublic.ts +35 -21
- package/src/bin/shared/downloadKeycloakDefaultTheme.ts +276 -0
- package/src/bin/shared/downloadKeycloakStaticResources.ts +30 -26
- package/src/bin/shared/generateKcGenTs.ts +68 -0
- package/src/bin/shared/metaInfKeycloakThemes.ts +25 -19
- package/src/bin/shared/promptKeycloakVersion.ts +39 -15
- package/src/bin/start-keycloak/appBuild.ts +129 -0
- package/src/bin/start-keycloak/index.ts +1 -0
- package/src/bin/start-keycloak/keycloakifyBuild.ts +42 -0
- package/src/bin/start-keycloak/myrealm-realm-18.json +2155 -0
- package/src/bin/start-keycloak/myrealm-realm-19.json +2186 -0
- package/src/bin/start-keycloak/myrealm-realm-20.json +2197 -0
- package/src/bin/start-keycloak/myrealm-realm-21.json +2201 -0
- package/src/bin/start-keycloak/myrealm-realm-23.json +2150 -0
- package/src/bin/start-keycloak/myrealm-realm-24.json +2318 -0
- package/src/bin/start-keycloak/myrealm-realm-25.json +2400 -0
- package/src/bin/start-keycloak/start-keycloak.ts +451 -0
- package/src/bin/tools/SemVer.ts +32 -13
- package/src/bin/tools/String.prototype.replaceAll.ts +9 -2
- package/src/bin/tools/crawl.ts +4 -1
- package/src/bin/tools/crc32.ts +42 -24
- package/src/bin/tools/downloadAndExtractArchive/downloadAndExtractArchive.ts +262 -0
- package/src/bin/tools/{fetchProxyOptions.ts → downloadAndExtractArchive/fetchProxyOptions.ts} +39 -8
- package/src/bin/tools/downloadAndExtractArchive/index.ts +1 -0
- package/src/bin/tools/escapeStringForPropertiesFile.ts +64 -0
- package/src/bin/tools/extractArchive.ts +140 -0
- package/src/bin/tools/getAbsoluteAndInOsFormatPath.ts +10 -2
- package/src/bin/tools/getNpmWorkspaceRootDirPath.ts +52 -6
- package/src/bin/tools/octokit-addons/getLatestsSemVersionedTag.ts +8 -2
- package/src/bin/tools/octokit-addons/listTags.ts +15 -4
- package/src/bin/tools/partitionPromiseSettledResults.ts +12 -3
- package/src/bin/tools/readThisNpmPackageVersion.ts +5 -1
- package/src/bin/tools/transformCodebase.ts +29 -10
- package/src/bin/tools/trimIndent.ts +4 -1
- package/src/bin/tsconfig.json +4 -3
- package/src/bin/update-kc-gen.ts +13 -0
- package/src/lib/getKcClsx.ts +89 -0
- package/src/login/{Fallback.tsx → DefaultPage.tsx} +7 -6
- package/src/login/{kcContext → KcContext}/KcContext.ts +58 -30
- package/src/login/KcContext/getKcContextMock.ts +69 -0
- package/src/login/KcContext/index.ts +8 -0
- package/src/login/KcContext/kcContextMocks.ts +583 -0
- package/src/login/Template.tsx +54 -57
- package/src/login/TemplateProps.ts +3 -6
- package/src/login/UserProfileFormFields.tsx +125 -210
- package/src/login/UserProfileFormFieldsProps.tsx +22 -0
- package/src/login/i18n/baseMessages/ar.ts +10 -1
- package/src/login/i18n/baseMessages/ca.ts +11 -2
- package/src/login/i18n/baseMessages/cs.ts +10 -1
- package/src/login/i18n/baseMessages/da.ts +10 -1
- package/src/login/i18n/baseMessages/de.ts +10 -1
- package/src/login/i18n/baseMessages/el.ts +10 -2
- package/src/login/i18n/baseMessages/en.ts +11 -2
- package/src/login/i18n/baseMessages/es.ts +11 -2
- package/src/login/i18n/baseMessages/fa.ts +10 -2
- package/src/login/i18n/baseMessages/fi.ts +10 -1
- package/src/login/i18n/baseMessages/fr.ts +10 -1
- package/src/login/i18n/baseMessages/hu.ts +11 -2
- package/src/login/i18n/baseMessages/it.ts +10 -1
- package/src/login/i18n/baseMessages/ja.ts +10 -1
- package/src/login/i18n/baseMessages/lt.ts +10 -1
- package/src/login/i18n/baseMessages/lv.ts +10 -1
- package/src/login/i18n/baseMessages/nl.ts +10 -1
- package/src/login/i18n/baseMessages/no.ts +10 -1
- package/src/login/i18n/baseMessages/pl.ts +10 -1
- package/src/login/i18n/baseMessages/pt-BR.ts +10 -1
- package/src/login/i18n/baseMessages/ru.ts +10 -1
- package/src/login/i18n/baseMessages/sk.ts +10 -1
- package/src/login/i18n/baseMessages/sv.ts +10 -1
- package/src/login/i18n/baseMessages/th.ts +10 -1
- package/src/login/i18n/baseMessages/tr.ts +10 -1
- package/src/login/i18n/baseMessages/uk.ts +10 -1
- package/src/login/i18n/baseMessages/zh-CN.ts +11 -2
- package/src/login/i18n/i18n.tsx +231 -143
- package/src/login/i18n/index.ts +5 -1
- package/src/login/i18n/useI18n.ts +44 -0
- package/src/login/index.ts +3 -10
- package/src/login/lib/kcClsx.ts +143 -0
- package/src/login/lib/useDownloadTerms.tsx +88 -0
- package/src/login/lib/useUserProfileForm.tsx +480 -351
- package/src/login/pages/Code.tsx +8 -5
- package/src/login/pages/DeleteAccountConfirm.tsx +15 -10
- package/src/login/pages/DeleteCredential.tsx +9 -7
- package/src/login/pages/Error.tsx +9 -2
- package/src/login/pages/FrontchannelLogout.tsx +6 -3
- package/src/login/pages/IdpReviewUserProfile.tsx +20 -21
- package/src/login/pages/Info.tsx +5 -8
- package/src/login/pages/Login.tsx +34 -53
- package/src/login/pages/LoginConfigTotp.tsx +35 -39
- package/src/login/pages/LoginIdpLinkConfirm.tsx +7 -18
- package/src/login/pages/LoginIdpLinkEmail.tsx +9 -3
- package/src/login/pages/LoginOauth2DeviceVerifyUserCode.tsx +24 -23
- package/src/login/pages/LoginOauthGrant.tsx +14 -20
- package/src/login/pages/LoginOtp.tsx +27 -30
- package/src/login/pages/LoginPageExpired.tsx +2 -2
- package/src/login/pages/LoginPassword.tsx +21 -31
- package/src/login/pages/LoginRecoveryAuthnCodeConfig.tsx +34 -34
- package/src/login/pages/LoginRecoveryAuthnCodeInput.tsx +19 -22
- package/src/login/pages/LoginResetOtp.tsx +19 -22
- package/src/login/pages/LoginResetPassword.tsx +21 -24
- package/src/login/pages/LoginUpdatePassword.tsx +40 -50
- package/src/login/pages/LoginUpdateProfile.tsx +32 -30
- package/src/login/pages/LoginUsername.tsx +23 -34
- package/src/login/pages/LoginVerifyEmail.tsx +5 -2
- package/src/login/pages/LoginX509Info.tsx +24 -33
- package/src/login/pages/LogoutConfirm.tsx +8 -14
- package/src/login/pages/PageProps.ts +3 -5
- package/src/login/pages/Register.tsx +48 -59
- package/src/login/pages/SamlPostForm.tsx +2 -2
- package/src/login/pages/SelectAuthenticator.tsx +23 -24
- package/src/login/pages/Terms.tsx +25 -24
- package/src/login/pages/UpdateEmail.tsx +30 -33
- package/src/login/pages/WebauthnAuthenticate.tsx +40 -44
- package/src/login/pages/WebauthnError.tsx +15 -19
- package/src/login/pages/WebauthnRegister.tsx +28 -37
- package/src/tools/Array.prototype.every.ts +4 -1
- package/src/tools/ExtractAfterStartingWith.ts +4 -0
- package/src/tools/LazyOrNot.ts +3 -1
- package/src/tools/Object.fromEntries.ts +23 -0
- package/src/tools/StatefulObservable/README.md +16 -0
- package/src/tools/StatefulObservable/StatefulObservable.ts +58 -0
- package/src/tools/StatefulObservable/hooks/index.ts +2 -0
- package/src/tools/StatefulObservable/hooks/useObservable.ts +25 -0
- package/src/tools/StatefulObservable/hooks/useRerenderOnChange.ts +19 -0
- package/src/tools/StatefulObservable/index.ts +2 -0
- package/src/tools/ValueOf.ts +2 -0
- package/src/tools/clsx.ts +6 -42
- package/src/tools/clsx_withTransform.ts +55 -0
- package/src/tools/deepAssign.ts +57 -19
- package/src/tools/formatNumber.ts +7 -3
- package/src/tools/react-markdown.ts +3 -0
- package/src/tools/structuredCloneButFunctions.ts +24 -0
- package/src/tools/useConstCallback.ts +3 -1
- package/src/tools/useInsertLinkTags.ts +78 -74
- package/src/tools/useInsertScriptTags.ts +69 -73
- package/src/tools/useOnFirstMount.ts +18 -0
- package/src/tools/useSetClassName.ts +4 -1
- package/src/vite-plugin/vite-plugin.ts +73 -37
- package/stories/account/pages/Account.stories.tsx +18 -0
- package/stories/account/pages/FederatedIdentity.stories.tsx +38 -0
- package/stories/account/pages/Log.stories.tsx +356 -0
- package/stories/account/pages/Password.stories.tsx +28 -0
- package/stories/account/pages/Sessions.stories.tsx +59 -0
- package/stories/account/pages/Totp.stories.tsx +182 -0
- package/stories/login/pages/Code.stories.tsx +18 -0
- package/stories/login/pages/DeleteAccountConfirm.stories.tsx +18 -0
- package/stories/login/pages/DeleteCredential.stories.tsx +18 -0
- package/stories/login/pages/Error.stories.tsx +28 -0
- package/stories/login/pages/FrontchannelLogout.stories.tsx +18 -0
- package/stories/login/pages/IdpReviewUserProfile.stories.tsx +18 -0
- package/stories/login/pages/Info.stories.tsx +52 -0
- package/stories/login/pages/Login.stories.tsx +221 -0
- package/stories/login/pages/LoginConfigTotp.stories.tsx +43 -0
- package/stories/login/pages/LoginDeviceVerifyUserCode.stories.tsx +18 -0
- package/stories/login/pages/LoginIdpLinkConfirm.stories.tsx +18 -0
- package/stories/login/pages/LoginIdpLinkEmail.stories.tsx +18 -0
- package/stories/login/pages/LoginOauth2DeviceVerifyUserCode.stories.tsx +18 -0
- package/stories/login/pages/LoginOauthGrant.stories.tsx +18 -0
- package/stories/login/pages/LoginOtp.stories.tsx +18 -0
- package/stories/login/pages/LoginPageExpired.stories.tsx +18 -0
- package/stories/login/pages/LoginPassword.stories.tsx +18 -0
- package/stories/login/pages/LoginRecoveryAuthnCodeConfig.stories.tsx +18 -0
- package/stories/login/pages/LoginRecoveryAuthnCodeInput.stories.tsx +18 -0
- package/stories/login/pages/LoginResetOtp.stories.tsx +18 -0
- package/stories/login/pages/LoginResetPassword.stories.tsx +31 -0
- package/stories/login/pages/LoginUpdatePassword.stories.tsx +18 -0
- package/stories/login/pages/LoginUpdateProfile.stories.tsx +18 -0
- package/stories/login/pages/LoginUsername.stories.tsx +31 -0
- package/stories/login/pages/LoginVerifyEmail.stories.tsx +30 -0
- package/stories/login/pages/LoginX509Info.stories.tsx +18 -0
- package/stories/login/pages/LogoutConfirm.stories.tsx +18 -0
- package/stories/login/pages/Register.stories.tsx +135 -0
- package/stories/login/pages/SamlPostForm.stories.tsx +18 -0
- package/stories/login/pages/SelectAuthenticator.stories.tsx +43 -0
- package/stories/login/pages/Terms.stories.tsx +42 -0
- package/stories/login/pages/UpdateEmail.stories.tsx +18 -0
- package/stories/login/pages/WebauthnAuthenticate.stories.tsx +18 -0
- package/stories/login/pages/WebauthnError.stories.tsx +18 -0
- package/stories/login/pages/WebauthnRegister.stories.tsx +18 -0
- package/tools/Array.prototype.every.js +2 -1
- package/tools/Array.prototype.every.js.map +1 -1
- package/tools/ExtractAfterStartingWith.d.ts +1 -0
- package/tools/ExtractAfterStartingWith.js +2 -0
- package/tools/ExtractAfterStartingWith.js.map +1 -0
- package/tools/HTMLElement.prototype.prepend.js.map +1 -1
- package/tools/Object.fromEntries.d.ts +1 -0
- package/tools/Object.fromEntries.js +17 -0
- package/tools/Object.fromEntries.js.map +1 -0
- package/tools/StatefulObservable/StatefulObservable.d.ts +8 -0
- package/tools/StatefulObservable/StatefulObservable.js +36 -0
- package/tools/StatefulObservable/StatefulObservable.js.map +1 -0
- package/tools/StatefulObservable/hooks/index.d.ts +2 -0
- package/tools/StatefulObservable/hooks/index.js +3 -0
- package/tools/StatefulObservable/hooks/index.js.map +1 -0
- package/tools/StatefulObservable/hooks/useObservable.d.ts +8 -0
- package/tools/StatefulObservable/hooks/useObservable.js +17 -0
- package/tools/StatefulObservable/hooks/useObservable.js.map +1 -0
- package/tools/StatefulObservable/hooks/useRerenderOnChange.d.ts +5 -0
- package/tools/StatefulObservable/hooks/useRerenderOnChange.js +14 -0
- package/tools/StatefulObservable/hooks/useRerenderOnChange.js.map +1 -0
- package/tools/StatefulObservable/index.d.ts +2 -0
- package/tools/StatefulObservable/index.js +3 -0
- package/tools/StatefulObservable/index.js.map +1 -0
- package/tools/ValueOf.d.ts +2 -0
- package/tools/ValueOf.js +2 -0
- package/tools/ValueOf.js.map +1 -0
- package/tools/clsx.d.ts +3 -2
- package/tools/clsx.js +5 -41
- package/tools/clsx.js.map +1 -1
- package/tools/clsx_withTransform.d.ts +5 -0
- package/tools/clsx_withTransform.js +43 -0
- package/tools/clsx_withTransform.js.map +1 -0
- package/tools/deepAssign.d.ts +1 -0
- package/tools/deepAssign.js +41 -16
- package/tools/deepAssign.js.map +1 -1
- package/tools/formatNumber.js +2 -1
- package/tools/formatNumber.js.map +1 -1
- package/tools/react-markdown.d.ts +3 -0
- package/tools/react-markdown.js +4 -0
- package/tools/react-markdown.js.map +1 -0
- package/tools/structuredCloneButFunctions.d.ts +7 -0
- package/tools/structuredCloneButFunctions.js +19 -0
- package/tools/structuredCloneButFunctions.js.map +1 -0
- package/tools/useConstCallback.js.map +1 -1
- package/tools/useInsertLinkTags.d.ts +11 -6
- package/tools/useInsertLinkTags.js +53 -52
- package/tools/useInsertLinkTags.js.map +1 -1
- package/tools/useInsertScriptTags.d.ts +15 -6
- package/tools/useInsertScriptTags.js +56 -61
- package/tools/useInsertScriptTags.js.map +1 -1
- package/tools/useOnFirstMount.d.ts +2 -0
- package/tools/useOnFirstMount.js +15 -0
- package/tools/useOnFirstMount.js.map +1 -0
- package/tools/useSetClassName.js.map +1 -1
- package/vite-plugin/index.d.ts +1 -0
- package/vite-plugin/index.js +53394 -0
- package/vite-plugin/vite-plugin.d.ts +5 -0
- package/account/Fallback.d.ts +0 -5
- package/account/Fallback.js.map +0 -1
- package/account/kcContext/KcContext.js.map +0 -1
- package/account/kcContext/createGetKcContext.d.ts +0 -19
- package/account/kcContext/createGetKcContext.js +0 -73
- package/account/kcContext/createGetKcContext.js.map +0 -1
- package/account/kcContext/getKcContext.d.ts +0 -13
- package/account/kcContext/getKcContext.js +0 -13
- package/account/kcContext/getKcContext.js.map +0 -1
- package/account/kcContext/getKcContextFromWindow.d.ts +0 -8
- package/account/kcContext/getKcContextFromWindow.js +0 -5
- package/account/kcContext/getKcContextFromWindow.js.map +0 -1
- package/account/kcContext/index.d.ts +0 -1
- package/account/kcContext/index.js +0 -2
- package/account/kcContext/index.js.map +0 -1
- package/account/kcContext/kcContextMocks.js +0 -215
- package/account/kcContext/kcContextMocks.js.map +0 -1
- package/account/lib/useGetClassName.d.ts +0 -7
- package/account/lib/useGetClassName.js +0 -19
- package/account/lib/useGetClassName.js.map +0 -1
- package/lib/isStorybook.d.ts +0 -1
- package/lib/isStorybook.js +0 -2
- package/lib/isStorybook.js.map +0 -1
- package/lib/useGetClassName.d.ts +0 -10
- package/lib/useGetClassName.js +0 -14
- package/lib/useGetClassName.js.map +0 -1
- package/login/Fallback.js.map +0 -1
- package/login/kcContext/KcContext.js.map +0 -1
- package/login/kcContext/createGetKcContext.d.ts +0 -19
- package/login/kcContext/createGetKcContext.js +0 -109
- package/login/kcContext/createGetKcContext.js.map +0 -1
- package/login/kcContext/getKcContext.d.ts +0 -13
- package/login/kcContext/getKcContext.js +0 -13
- package/login/kcContext/getKcContext.js.map +0 -1
- package/login/kcContext/getKcContextFromWindow.d.ts +0 -8
- package/login/kcContext/getKcContextFromWindow.js +0 -5
- package/login/kcContext/getKcContextFromWindow.js.map +0 -1
- package/login/kcContext/index.d.ts +0 -1
- package/login/kcContext/index.js +0 -2
- package/login/kcContext/index.js.map +0 -1
- package/login/kcContext/kcContextMocks.js +0 -390
- package/login/kcContext/kcContextMocks.js.map +0 -1
- package/login/lib/useGetClassName.d.ts +0 -7
- package/login/lib/useGetClassName.js +0 -130
- package/login/lib/useGetClassName.js.map +0 -1
- package/src/account/kcContext/createGetKcContext.ts +0 -108
- package/src/account/kcContext/getKcContext.ts +0 -21
- package/src/account/kcContext/getKcContextFromWindow.ts +0 -11
- package/src/account/kcContext/index.ts +0 -1
- package/src/account/kcContext/kcContextMocks.ts +0 -260
- package/src/account/lib/useGetClassName.ts +0 -20
- package/src/bin/download-builtin-keycloak-theme.ts +0 -30
- package/src/bin/eject-keycloak-page.ts +0 -126
- package/src/bin/keycloakify/generateSrcMainResources/bringInAccountV1.ts +0 -79
- package/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResources.ts +0 -32
- package/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResourcesForMainTheme.ts +0 -261
- package/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResourcesForThemeVariant.ts +0 -56
- package/src/bin/keycloakify/generateSrcMainResources/index.ts +0 -1
- package/src/bin/keycloakify/generateStartKeycloakTestingContainer.ts +0 -60
- package/src/bin/keycloakify/replacers/replaceImportsInInlineCssCode.ts +0 -24
- package/src/bin/shared/buildOptions.ts +0 -277
- package/src/bin/shared/downloadAndUnzip.ts +0 -203
- package/src/bin/shared/downloadBuiltinKeycloakTheme.ts +0 -264
- package/src/bin/shared/getJarFileBasename.ts +0 -9
- package/src/bin/shared/getThemeSrcDirPath.ts +0 -47
- package/src/bin/start-keycloak.ts +0 -236
- package/src/bin/tools/unzip.ts +0 -141
- package/src/lib/isStorybook.ts +0 -1
- package/src/lib/useGetClassName.ts +0 -18
- package/src/login/kcContext/createGetKcContext.ts +0 -159
- package/src/login/kcContext/getKcContext.ts +0 -21
- package/src/login/kcContext/getKcContextFromWindow.ts +0 -11
- package/src/login/kcContext/index.ts +0 -1
- package/src/login/kcContext/kcContextMocks.ts +0 -630
- package/src/login/lib/useDownloadTerms.ts +0 -57
- package/src/login/lib/useGetClassName.ts +0 -132
- package/src/tools/AndByDiscriminatingKey.ts +0 -25
- package/src/tools/Markdown.ts +0 -3
- package/src/tools/deepClone.ts +0 -17
- package/src/tools/memoize.ts +0 -55
- package/tools/AndByDiscriminatingKey.d.ts +0 -5
- package/tools/AndByDiscriminatingKey.js +0 -2
- package/tools/AndByDiscriminatingKey.js.map +0 -1
- package/tools/Markdown.d.ts +0 -2
- package/tools/Markdown.js +0 -3
- package/tools/Markdown.js.map +0 -1
- package/tools/deepClone.d.ts +0 -2
- package/tools/deepClone.js +0 -14
- package/tools/deepClone.js.map +0 -1
- package/tools/memoize.d.ts +0 -7
- package/tools/memoize.js +0 -38
- package/tools/memoize.js.map +0 -1
- /package/account/{kcContext → KcContext}/KcContext.js +0 -0
- /package/login/{kcContext → KcContext}/KcContext.js +0 -0
@@ -1,14 +1,16 @@
|
|
1
1
|
import "keycloakify/tools/Array.prototype.every";
|
2
2
|
import { useMemo, useReducer, useEffect, Fragment, type Dispatch } from "react";
|
3
|
+
import { assert, type Equals } from "tsafe/assert";
|
3
4
|
import { id } from "tsafe/id";
|
4
|
-
import
|
5
|
-
import type { Attribute, Validators } from "keycloakify/login/kcContext/KcContext";
|
5
|
+
import { structuredCloneButFunctions } from "keycloakify/tools/structuredCloneButFunctions";
|
6
6
|
import { useConstCallback } from "keycloakify/tools/useConstCallback";
|
7
7
|
import { emailRegexp } from "keycloakify/tools/emailRegExp";
|
8
|
-
import type { KcContext, PasswordPolicies } from "keycloakify/login/kcContext/KcContext";
|
9
|
-
import { assert, type Equals } from "tsafe/assert";
|
10
8
|
import { formatNumber } from "keycloakify/tools/formatNumber";
|
11
|
-
import {
|
9
|
+
import { useInsertScriptTags } from "keycloakify/tools/useInsertScriptTags";
|
10
|
+
import type { PasswordPolicies, Attribute, Validators } from "keycloakify/login/KcContext";
|
11
|
+
import type { KcContext } from "../KcContext";
|
12
|
+
import type { MessageKey } from "keycloakify/login/i18n";
|
13
|
+
import { KcContextLike as KcContextLike_i18n } from "keycloakify/login/i18n";
|
12
14
|
import type { I18n } from "../i18n";
|
13
15
|
|
14
16
|
export type FormFieldError = {
|
@@ -64,21 +66,22 @@ export type FormAction =
|
|
64
66
|
fieldIndex: number | undefined;
|
65
67
|
};
|
66
68
|
|
67
|
-
export type KcContextLike =
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
69
|
+
export type KcContextLike = KcContextLike_i18n &
|
70
|
+
KcContextLike_useGetErrors & {
|
71
|
+
profile: {
|
72
|
+
attributesByName: Record<string, Attribute>;
|
73
|
+
html5DataAnnotations?: Record<string, string>;
|
74
|
+
};
|
75
|
+
passwordRequired?: boolean;
|
76
|
+
realm: { registrationEmailAsUsername: boolean };
|
77
|
+
url: {
|
78
|
+
resourcesPath: string;
|
79
|
+
};
|
78
80
|
};
|
79
|
-
};
|
80
81
|
|
81
|
-
|
82
|
+
assert<Extract<Extract<KcContext, { profile: unknown }>, { pageId: "register.ftl" }> extends KcContextLike ? true : false>();
|
83
|
+
|
84
|
+
export type UseUserProfileFormParams = {
|
82
85
|
kcContext: KcContextLike;
|
83
86
|
i18n: I18n;
|
84
87
|
doMakeUserConfirmPassword: boolean;
|
@@ -102,17 +105,16 @@ namespace internal {
|
|
102
105
|
};
|
103
106
|
}
|
104
107
|
|
105
|
-
|
106
|
-
|
107
|
-
export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTypeOfUseUserProfileForm {
|
108
|
+
export function useUserProfileForm(params: UseUserProfileFormParams): ReturnTypeOfUseUserProfileForm {
|
108
109
|
const { kcContext, i18n, doMakeUserConfirmPassword } = params;
|
109
110
|
|
110
111
|
const { insertScriptTags } = useInsertScriptTags({
|
111
|
-
"
|
112
|
+
componentOrHookName: "useUserProfileForm",
|
113
|
+
scriptTags: Object.keys(kcContext.profile?.html5DataAnnotations ?? {})
|
112
114
|
.filter(key => key !== "kcMultivalued" && key !== "kcNumberFormat") // NOTE: Keycloakify handles it.
|
113
115
|
.map(key => ({
|
114
|
-
|
115
|
-
|
116
|
+
type: "module",
|
117
|
+
src: `${kcContext.url.resourcesPath}/js/${key}.js`
|
116
118
|
}))
|
117
119
|
});
|
118
120
|
|
@@ -128,226 +130,251 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
|
|
128
130
|
const initialState = useMemo((): internal.State => {
|
129
131
|
// NOTE: We don't use te kcContext.profile.attributes directly because
|
130
132
|
// they don't includes the password and password confirm fields and we want to add them.
|
131
|
-
//
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
}
|
142
|
-
|
143
|
-
if ("register" in kcContext && kcContext.register instanceof Object && "formData" in kcContext.register) {
|
144
|
-
//NOTE: Handle legacy register.ftl page
|
145
|
-
return (["firstName", "lastName", "email", "username"] as const)
|
146
|
-
.filter(name => (name !== "username" ? true : !kcContext.realm.registrationEmailAsUsername))
|
147
|
-
.map(name =>
|
148
|
-
id<Attribute>({
|
149
|
-
"name": name,
|
150
|
-
"displayName": id<`\${${MessageKey}}`>(`\${${name}}`),
|
151
|
-
"required": true,
|
152
|
-
"value": (kcContext.register as any).formData[name] ?? "",
|
153
|
-
"html5DataAnnotations": {},
|
154
|
-
"readOnly": false,
|
155
|
-
"validators": {},
|
156
|
-
"annotations": {},
|
157
|
-
"autocomplete": (() => {
|
158
|
-
switch (name) {
|
159
|
-
case "email":
|
160
|
-
return "email";
|
161
|
-
case "username":
|
162
|
-
return "username";
|
163
|
-
default:
|
164
|
-
return undefined;
|
165
|
-
}
|
166
|
-
})()
|
167
|
-
})
|
168
|
-
);
|
169
|
-
}
|
133
|
+
// We also want to apply some retro-compatibility and consistency patches.
|
134
|
+
const attributes: Attribute[] = (() => {
|
135
|
+
mock_user_profile_attributes_for_older_keycloak_versions: {
|
136
|
+
if (
|
137
|
+
"profile" in kcContext &&
|
138
|
+
"attributesByName" in kcContext.profile &&
|
139
|
+
Object.keys(kcContext.profile.attributesByName).length !== 0
|
140
|
+
) {
|
141
|
+
break mock_user_profile_attributes_for_older_keycloak_versions;
|
142
|
+
}
|
170
143
|
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
144
|
+
if ("register" in kcContext && kcContext.register instanceof Object && "formData" in kcContext.register) {
|
145
|
+
//NOTE: Handle legacy register.ftl page
|
146
|
+
return (["firstName", "lastName", "email", "username"] as const)
|
147
|
+
.filter(name => (name !== "username" ? true : !kcContext.realm.registrationEmailAsUsername))
|
148
|
+
.map(name =>
|
149
|
+
id<Attribute>({
|
150
|
+
name: name,
|
151
|
+
displayName: id<`\${${MessageKey}}`>(`\${${name}}`),
|
152
|
+
required: true,
|
153
|
+
value: (kcContext.register as any).formData[name] ?? "",
|
154
|
+
html5DataAnnotations: {},
|
155
|
+
readOnly: false,
|
156
|
+
validators: {},
|
157
|
+
annotations: {},
|
158
|
+
autocomplete: (() => {
|
159
|
+
switch (name) {
|
160
|
+
case "email":
|
161
|
+
return "email";
|
162
|
+
case "username":
|
163
|
+
return "username";
|
164
|
+
default:
|
165
|
+
return undefined;
|
166
|
+
}
|
167
|
+
})()
|
168
|
+
})
|
169
|
+
);
|
170
|
+
}
|
198
171
|
|
199
|
-
|
200
|
-
|
201
|
-
|
172
|
+
if ("user" in kcContext && kcContext.user instanceof Object) {
|
173
|
+
//NOTE: Handle legacy login-update-profile.ftl
|
174
|
+
return (["username", "email", "firstName", "lastName"] as const)
|
175
|
+
.filter(name => (name !== "username" ? true : (kcContext.user as any).editUsernameAllowed))
|
176
|
+
.map(name =>
|
202
177
|
id<Attribute>({
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
178
|
+
name: name,
|
179
|
+
displayName: id<`\${${MessageKey}}`>(`\${${name}}`),
|
180
|
+
required: true,
|
181
|
+
value: (kcContext as any).user[name] ?? "",
|
182
|
+
html5DataAnnotations: {},
|
183
|
+
readOnly: false,
|
184
|
+
validators: {},
|
185
|
+
annotations: {},
|
186
|
+
autocomplete: (() => {
|
187
|
+
switch (name) {
|
188
|
+
case "email":
|
189
|
+
return "email";
|
190
|
+
case "username":
|
191
|
+
return "username";
|
192
|
+
default:
|
193
|
+
return undefined;
|
194
|
+
}
|
195
|
+
})()
|
212
196
|
})
|
213
|
-
|
214
|
-
|
197
|
+
);
|
198
|
+
}
|
215
199
|
|
216
|
-
|
200
|
+
if ("email" in kcContext && kcContext.email instanceof Object) {
|
201
|
+
//NOTE: Handle legacy update-email.ftl
|
202
|
+
return [
|
203
|
+
id<Attribute>({
|
204
|
+
name: "email",
|
205
|
+
displayName: id<`\${${MessageKey}}`>(`\${email}`),
|
206
|
+
required: true,
|
207
|
+
value: (kcContext.email as any).value ?? "",
|
208
|
+
html5DataAnnotations: {},
|
209
|
+
readOnly: false,
|
210
|
+
validators: {},
|
211
|
+
annotations: {},
|
212
|
+
autocomplete: "email"
|
213
|
+
})
|
214
|
+
];
|
217
215
|
}
|
218
216
|
|
219
|
-
|
220
|
-
|
221
|
-
const { group, groupDisplayHeader, groupDisplayDescription, groupAnnotations, ...rest } =
|
222
|
-
attribute_pre_group_patch as Attribute & {
|
223
|
-
group: string;
|
224
|
-
groupDisplayHeader?: string;
|
225
|
-
groupDisplayDescription?: string;
|
226
|
-
groupAnnotations: Record<string, string>;
|
227
|
-
};
|
228
|
-
|
229
|
-
return id<Attribute>({
|
230
|
-
...rest,
|
231
|
-
"group": {
|
232
|
-
"name": group,
|
233
|
-
"displayHeader": groupDisplayHeader,
|
234
|
-
"displayDescription": groupDisplayDescription,
|
235
|
-
"html5DataAnnotations": {}
|
236
|
-
}
|
237
|
-
});
|
238
|
-
}
|
217
|
+
assert(false, "Unable to mock user profile from the current kcContext");
|
218
|
+
}
|
239
219
|
|
240
|
-
|
241
|
-
|
242
|
-
})();
|
220
|
+
return Object.values(kcContext.profile.attributesByName).map(structuredCloneButFunctions);
|
221
|
+
})();
|
243
222
|
|
244
|
-
|
245
|
-
|
223
|
+
// Retro-compatibility and consistency patches
|
224
|
+
attributes.forEach(attribute => {
|
225
|
+
patch_legacy_group: {
|
226
|
+
if (typeof attribute.group !== "string") {
|
227
|
+
break patch_legacy_group;
|
228
|
+
}
|
246
229
|
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
230
|
+
const { group, groupDisplayHeader, groupDisplayDescription /*, groupAnnotations*/ } = attribute as Attribute & {
|
231
|
+
group: string;
|
232
|
+
groupDisplayHeader?: string;
|
233
|
+
groupDisplayDescription?: string;
|
234
|
+
groupAnnotations: Record<string, string>;
|
235
|
+
};
|
251
236
|
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
237
|
+
delete attribute.group;
|
238
|
+
// @ts-expect-error
|
239
|
+
delete attribute.groupDisplayHeader;
|
240
|
+
// @ts-expect-error
|
241
|
+
delete attribute.groupDisplayDescription;
|
242
|
+
// @ts-expect-error
|
243
|
+
delete attribute.groupAnnotations;
|
257
244
|
|
258
|
-
|
259
|
-
|
260
|
-
"name": "password",
|
261
|
-
"displayName": id<`\${${MessageKey}}`>("${password}"),
|
262
|
-
"required": true,
|
263
|
-
"readOnly": false,
|
264
|
-
"validators": {},
|
265
|
-
"annotations": {},
|
266
|
-
"autocomplete": "new-password",
|
267
|
-
"html5DataAnnotations": {},
|
268
|
-
// NOTE: Compat with Keycloak version prior to 24
|
269
|
-
...({ "groupAnnotations": {} } as {})
|
270
|
-
},
|
271
|
-
{
|
272
|
-
"name": "password-confirm",
|
273
|
-
"displayName": id<`\${${MessageKey}}`>("${passwordConfirm}"),
|
274
|
-
"required": true,
|
275
|
-
"readOnly": false,
|
276
|
-
"validators": {},
|
277
|
-
"annotations": {},
|
278
|
-
"html5DataAnnotations": {},
|
279
|
-
"autocomplete": "new-password",
|
280
|
-
// NOTE: Compat with Keycloak version prior to 24
|
281
|
-
...({ "groupAnnotations": {} } as {})
|
282
|
-
}
|
283
|
-
);
|
245
|
+
if (group === "") {
|
246
|
+
break patch_legacy_group;
|
284
247
|
}
|
248
|
+
|
249
|
+
attribute.group = {
|
250
|
+
name: group,
|
251
|
+
displayHeader: groupDisplayHeader,
|
252
|
+
displayDescription: groupDisplayDescription,
|
253
|
+
html5DataAnnotations: {}
|
254
|
+
};
|
285
255
|
}
|
286
256
|
|
287
|
-
|
288
|
-
|
257
|
+
// Attributes with options rendered by default as select inputs
|
258
|
+
if (attribute.validators.options !== undefined && attribute.annotations.inputType === undefined) {
|
259
|
+
attribute.annotations.inputType = "select";
|
260
|
+
}
|
289
261
|
|
290
|
-
|
291
|
-
|
262
|
+
// Consistency patch on values/value property
|
263
|
+
{
|
264
|
+
if (getIsMultivaluedSingleField({ attribute })) {
|
265
|
+
attribute.multivalued = true;
|
266
|
+
}
|
292
267
|
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
268
|
+
if (attribute.multivalued) {
|
269
|
+
attribute.values ??= attribute.value !== undefined ? [attribute.value] : [];
|
270
|
+
delete attribute.value;
|
271
|
+
} else {
|
272
|
+
attribute.value ??= attribute.values?.[0];
|
273
|
+
delete attribute.values;
|
274
|
+
}
|
275
|
+
}
|
276
|
+
});
|
277
|
+
|
278
|
+
add_password_and_password_confirm: {
|
279
|
+
if (!kcContext.passwordRequired) {
|
280
|
+
break add_password_and_password_confirm;
|
281
|
+
}
|
282
|
+
|
283
|
+
attributes.forEach((attribute, i) => {
|
284
|
+
if (attribute.name !== (kcContext.realm.registrationEmailAsUsername ? "email" : "username")) {
|
285
|
+
// NOTE: We want to add password and password-confirm after the field that identifies the user.
|
286
|
+
// It's either email or username.
|
287
|
+
return;
|
288
|
+
}
|
289
|
+
|
290
|
+
attributes.splice(
|
291
|
+
i + 1,
|
292
|
+
0,
|
293
|
+
{
|
294
|
+
name: "password",
|
295
|
+
displayName: id<`\${${MessageKey}}`>("${password}"),
|
296
|
+
required: true,
|
297
|
+
readOnly: false,
|
298
|
+
validators: {},
|
299
|
+
annotations: {},
|
300
|
+
autocomplete: "new-password",
|
301
|
+
html5DataAnnotations: {}
|
302
|
+
},
|
303
|
+
{
|
304
|
+
name: "password-confirm",
|
305
|
+
displayName: id<`\${${MessageKey}}`>("${passwordConfirm}"),
|
306
|
+
required: true,
|
307
|
+
readOnly: false,
|
308
|
+
validators: {},
|
309
|
+
annotations: {},
|
310
|
+
html5DataAnnotations: {},
|
311
|
+
autocomplete: "new-password"
|
297
312
|
}
|
313
|
+
);
|
314
|
+
});
|
315
|
+
}
|
298
316
|
|
299
|
-
|
317
|
+
const initialFormFieldState: {
|
318
|
+
attribute: Attribute;
|
319
|
+
valueOrValues: string | string[];
|
320
|
+
}[] = [];
|
300
321
|
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
322
|
+
for (const attribute of attributes) {
|
323
|
+
handle_multi_valued_attribute: {
|
324
|
+
if (!attribute.multivalued) {
|
325
|
+
break handle_multi_valued_attribute;
|
326
|
+
}
|
305
327
|
|
306
|
-
|
328
|
+
const values = attribute.values?.length ? attribute.values : [""];
|
307
329
|
|
308
|
-
|
309
|
-
|
310
|
-
|
330
|
+
apply_validator_min_range: {
|
331
|
+
if (getIsMultivaluedSingleField({ attribute })) {
|
332
|
+
break apply_validator_min_range;
|
333
|
+
}
|
311
334
|
|
312
|
-
|
335
|
+
const validator = attribute.validators.multivalued;
|
313
336
|
|
314
|
-
|
315
|
-
|
316
|
-
|
337
|
+
if (validator === undefined) {
|
338
|
+
break apply_validator_min_range;
|
339
|
+
}
|
317
340
|
|
318
|
-
|
341
|
+
const { min: minStr } = validator;
|
319
342
|
|
320
|
-
|
321
|
-
|
322
|
-
}
|
343
|
+
if (!minStr) {
|
344
|
+
break apply_validator_min_range;
|
323
345
|
}
|
324
346
|
|
325
|
-
|
326
|
-
attribute,
|
327
|
-
"valueOrValues": values
|
328
|
-
});
|
347
|
+
const min = parseInt(`${minStr}`);
|
329
348
|
|
330
|
-
|
349
|
+
for (let index = values.length; index < min; index++) {
|
350
|
+
values.push("");
|
351
|
+
}
|
331
352
|
}
|
332
353
|
|
333
|
-
|
354
|
+
initialFormFieldState.push({
|
334
355
|
attribute,
|
335
|
-
|
356
|
+
valueOrValues: values
|
336
357
|
});
|
358
|
+
|
359
|
+
continue;
|
337
360
|
}
|
338
361
|
|
339
|
-
|
340
|
-
|
362
|
+
initialFormFieldState.push({
|
363
|
+
attribute,
|
364
|
+
valueOrValues: attribute.value ?? ""
|
365
|
+
});
|
366
|
+
}
|
341
367
|
|
342
368
|
const initialState: internal.State = {
|
343
|
-
|
369
|
+
formFieldStates: initialFormFieldState.map(({ attribute, valueOrValues }) => ({
|
344
370
|
attribute,
|
345
|
-
|
346
|
-
|
347
|
-
|
371
|
+
errors: getErrors({
|
372
|
+
attributeName: attribute.name,
|
373
|
+
formFieldStates: initialFormFieldState
|
348
374
|
}),
|
349
|
-
|
350
|
-
|
375
|
+
hasLostFocusAtLeastOnce:
|
376
|
+
valueOrValues instanceof Array && !getIsMultivaluedSingleField({ attribute }) ? valueOrValues.map(() => false) : false,
|
377
|
+
valueOrValues: valueOrValues
|
351
378
|
}))
|
352
379
|
};
|
353
380
|
|
@@ -369,7 +396,7 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
|
|
369
396
|
|
370
397
|
const { kcNumberFormat } = attribute.html5DataAnnotations ?? {};
|
371
398
|
|
372
|
-
if (kcNumberFormat
|
399
|
+
if (!kcNumberFormat) {
|
373
400
|
break apply_formatters;
|
374
401
|
}
|
375
402
|
|
@@ -381,8 +408,8 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
|
|
381
408
|
}
|
382
409
|
|
383
410
|
formFieldState.errors = getErrors({
|
384
|
-
|
385
|
-
|
411
|
+
attributeName: formAction.name,
|
412
|
+
formFieldStates: state.formFieldStates
|
386
413
|
});
|
387
414
|
|
388
415
|
update_password_confirm: {
|
@@ -395,9 +422,9 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
|
|
395
422
|
}
|
396
423
|
|
397
424
|
state = reducer(state, {
|
398
|
-
|
399
|
-
|
400
|
-
|
425
|
+
action: "update",
|
426
|
+
name: "password-confirm",
|
427
|
+
valueOrValues: formAction.valueOrValues
|
401
428
|
});
|
402
429
|
}
|
403
430
|
|
@@ -421,15 +448,15 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
|
|
421
448
|
|
422
449
|
const formState: FormState = useMemo(
|
423
450
|
() => ({
|
424
|
-
|
451
|
+
formFieldStates: state.formFieldStates.map(
|
425
452
|
({ errors, hasLostFocusAtLeastOnce: hasLostFocusAtLeastOnceOrArr, attribute, ...valueOrValuesWrap }) => ({
|
426
|
-
|
453
|
+
displayableErrors: errors.filter(error => {
|
427
454
|
const hasLostFocusAtLeastOnce =
|
428
455
|
typeof hasLostFocusAtLeastOnceOrArr === "boolean"
|
429
456
|
? hasLostFocusAtLeastOnceOrArr
|
430
457
|
: error.fieldIndex !== undefined
|
431
|
-
|
432
|
-
|
458
|
+
? hasLostFocusAtLeastOnceOrArr[error.fieldIndex]
|
459
|
+
: hasLostFocusAtLeastOnceOrArr[hasLostFocusAtLeastOnceOrArr.length - 1];
|
433
460
|
|
434
461
|
switch (error.source.type) {
|
435
462
|
case "server":
|
@@ -482,7 +509,7 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
|
|
482
509
|
...valueOrValuesWrap
|
483
510
|
})
|
484
511
|
),
|
485
|
-
|
512
|
+
isFormSubmittable: state.formFieldStates.every(({ errors }) => errors.length === 0)
|
486
513
|
}),
|
487
514
|
[state]
|
488
515
|
);
|
@@ -493,7 +520,14 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
|
|
493
520
|
};
|
494
521
|
}
|
495
522
|
|
496
|
-
|
523
|
+
type KcContextLike_useGetErrors = KcContextLike_i18n & {
|
524
|
+
messagesPerField: Pick<KcContext["messagesPerField"], "existsError" | "get">;
|
525
|
+
passwordPolicies?: PasswordPolicies;
|
526
|
+
};
|
527
|
+
|
528
|
+
assert<KcContextLike extends KcContextLike_useGetErrors ? true : false>();
|
529
|
+
|
530
|
+
function useGetErrors(params: { kcContext: KcContextLike_useGetErrors; i18n: I18n }) {
|
497
531
|
const { kcContext, i18n } = params;
|
498
532
|
|
499
533
|
const { messagesPerField, passwordPolicies } = kcContext;
|
@@ -501,7 +535,13 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
501
535
|
const { msg, msgStr, advancedMsg, advancedMsgStr } = i18n;
|
502
536
|
|
503
537
|
const getErrors = useConstCallback(
|
504
|
-
(params: {
|
538
|
+
(params: {
|
539
|
+
attributeName: string;
|
540
|
+
formFieldStates: {
|
541
|
+
attribute: Attribute;
|
542
|
+
valueOrValues: string | string[];
|
543
|
+
}[];
|
544
|
+
}): FormFieldError[] => {
|
505
545
|
const { attributeName, formFieldStates } = params;
|
506
546
|
|
507
547
|
const formFieldState = formFieldStates.find(({ attribute }) => attribute.name === attributeName);
|
@@ -516,7 +556,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
516
556
|
unFormat_number: {
|
517
557
|
const { kcNumberUnFormat } = attribute.html5DataAnnotations ?? {};
|
518
558
|
|
519
|
-
if (kcNumberUnFormat
|
559
|
+
if (!kcNumberUnFormat) {
|
520
560
|
break unFormat_number;
|
521
561
|
}
|
522
562
|
|
@@ -534,7 +574,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
534
574
|
|
535
575
|
server_side_error: {
|
536
576
|
if (attribute.multivalued) {
|
537
|
-
const defaultValues = attribute.values
|
577
|
+
const defaultValues = attribute.values?.length ? attribute.values : [""];
|
538
578
|
|
539
579
|
assert(valueOrValues instanceof Array);
|
540
580
|
|
@@ -572,10 +612,10 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
572
612
|
return [
|
573
613
|
{
|
574
614
|
errorMessageStr,
|
575
|
-
|
576
|
-
|
577
|
-
|
578
|
-
|
615
|
+
errorMessage: <span key={0}>{errorMessageStr}</span>,
|
616
|
+
fieldIndex: undefined,
|
617
|
+
source: {
|
618
|
+
type: "server"
|
579
619
|
}
|
580
620
|
}
|
581
621
|
];
|
@@ -586,7 +626,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
586
626
|
break handle_multi_valued_multi_fields;
|
587
627
|
}
|
588
628
|
|
589
|
-
if (attribute
|
629
|
+
if (getIsMultivaluedSingleField({ attribute })) {
|
590
630
|
break handle_multi_valued_multi_fields;
|
591
631
|
}
|
592
632
|
|
@@ -598,19 +638,19 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
598
638
|
.map((...[, index]) => {
|
599
639
|
const specificValueErrors = getErrors({
|
600
640
|
attributeName,
|
601
|
-
|
641
|
+
formFieldStates: formFieldStates.map(formFieldState => {
|
602
642
|
if (formFieldState.attribute.name === attributeName) {
|
603
643
|
assert(formFieldState.valueOrValues instanceof Array);
|
604
644
|
return {
|
605
|
-
|
645
|
+
attribute: {
|
606
646
|
...attribute,
|
607
|
-
|
647
|
+
annotations: {
|
608
648
|
...attribute.annotations,
|
609
|
-
|
649
|
+
inputType: undefined
|
610
650
|
},
|
611
|
-
|
651
|
+
multivalued: false
|
612
652
|
},
|
613
|
-
|
653
|
+
valueOrValues: formFieldState.valueOrValues[index]
|
614
654
|
};
|
615
655
|
}
|
616
656
|
|
@@ -626,7 +666,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
626
666
|
|
627
667
|
return true;
|
628
668
|
})
|
629
|
-
.map(
|
669
|
+
.map(
|
670
|
+
(error): FormFieldError => ({
|
671
|
+
...error,
|
672
|
+
fieldIndex: index
|
673
|
+
})
|
674
|
+
);
|
630
675
|
})
|
631
676
|
.reduce((acc, errors) => [...acc, ...errors], []);
|
632
677
|
|
@@ -642,12 +687,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
642
687
|
const msgArgs = ["error-user-attribute-required"] as const;
|
643
688
|
|
644
689
|
errors.push({
|
645
|
-
|
646
|
-
|
647
|
-
|
648
|
-
|
649
|
-
|
650
|
-
|
690
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
691
|
+
errorMessageStr: msgStr(...msgArgs),
|
692
|
+
fieldIndex: undefined,
|
693
|
+
source: {
|
694
|
+
type: "other",
|
695
|
+
rule: "requiredField"
|
651
696
|
}
|
652
697
|
});
|
653
698
|
}
|
@@ -660,7 +705,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
660
705
|
break handle_multi_valued_single_field;
|
661
706
|
}
|
662
707
|
|
663
|
-
if (!attribute
|
708
|
+
if (!getIsMultivaluedSingleField({ attribute })) {
|
664
709
|
break handle_multi_valued_single_field;
|
665
710
|
}
|
666
711
|
|
@@ -674,13 +719,13 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
674
719
|
|
675
720
|
const { min: minStr } = validator;
|
676
721
|
|
677
|
-
const min = minStr
|
722
|
+
const min = minStr ? parseInt(`${minStr}`) : attribute.required ? 1 : 0;
|
678
723
|
|
679
724
|
assert(!isNaN(min));
|
680
725
|
|
681
726
|
const { max: maxStr } = validator;
|
682
727
|
|
683
|
-
const max = maxStr
|
728
|
+
const max = !maxStr ? Infinity : parseInt(`${maxStr}`);
|
684
729
|
|
685
730
|
assert(!isNaN(max));
|
686
731
|
|
@@ -696,12 +741,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
696
741
|
|
697
742
|
return [
|
698
743
|
{
|
699
|
-
|
700
|
-
|
701
|
-
|
702
|
-
|
703
|
-
|
704
|
-
|
744
|
+
errorMessage: <Fragment key={0}>{msg(...msgArgs)}</Fragment>,
|
745
|
+
errorMessageStr: msgStr(...msgArgs),
|
746
|
+
fieldIndex: undefined,
|
747
|
+
source: {
|
748
|
+
type: "validator",
|
749
|
+
name: validatorName
|
705
750
|
}
|
706
751
|
}
|
707
752
|
];
|
@@ -727,7 +772,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
727
772
|
|
728
773
|
const policy = passwordPolicies[policyName];
|
729
774
|
|
730
|
-
if (policy
|
775
|
+
if (!policy) {
|
731
776
|
break check_password_policy_x;
|
732
777
|
}
|
733
778
|
|
@@ -740,12 +785,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
740
785
|
const msgArgs = ["invalidPasswordMinLengthMessage", `${minLength}`] as const;
|
741
786
|
|
742
787
|
errors.push({
|
743
|
-
|
744
|
-
|
745
|
-
|
746
|
-
|
747
|
-
|
748
|
-
|
788
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
789
|
+
errorMessageStr: msgStr(...msgArgs),
|
790
|
+
fieldIndex: undefined,
|
791
|
+
source: {
|
792
|
+
type: "passwordPolicy",
|
793
|
+
name: policyName
|
749
794
|
}
|
750
795
|
});
|
751
796
|
}
|
@@ -755,7 +800,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
755
800
|
|
756
801
|
const policy = passwordPolicies[policyName];
|
757
802
|
|
758
|
-
if (policy
|
803
|
+
if (!policy) {
|
759
804
|
break check_password_policy_x;
|
760
805
|
}
|
761
806
|
|
@@ -768,12 +813,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
768
813
|
const msgArgs = ["invalidPasswordMinDigitsMessage", `${minNumberOfDigits}`] as const;
|
769
814
|
|
770
815
|
errors.push({
|
771
|
-
|
772
|
-
|
773
|
-
|
774
|
-
|
775
|
-
|
776
|
-
|
816
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
817
|
+
errorMessageStr: msgStr(...msgArgs),
|
818
|
+
fieldIndex: undefined,
|
819
|
+
source: {
|
820
|
+
type: "passwordPolicy",
|
821
|
+
name: policyName
|
777
822
|
}
|
778
823
|
});
|
779
824
|
}
|
@@ -783,7 +828,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
783
828
|
|
784
829
|
const policy = passwordPolicies[policyName];
|
785
830
|
|
786
|
-
if (policy
|
831
|
+
if (!policy) {
|
787
832
|
break check_password_policy_x;
|
788
833
|
}
|
789
834
|
|
@@ -798,12 +843,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
798
843
|
const msgArgs = ["invalidPasswordMinLowerCaseCharsMessage", `${minNumberOfLowerCaseChar}`] as const;
|
799
844
|
|
800
845
|
errors.push({
|
801
|
-
|
802
|
-
|
803
|
-
|
804
|
-
|
805
|
-
|
806
|
-
|
846
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
847
|
+
errorMessageStr: msgStr(...msgArgs),
|
848
|
+
fieldIndex: undefined,
|
849
|
+
source: {
|
850
|
+
type: "passwordPolicy",
|
851
|
+
name: policyName
|
807
852
|
}
|
808
853
|
});
|
809
854
|
}
|
@@ -813,7 +858,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
813
858
|
|
814
859
|
const policy = passwordPolicies[policyName];
|
815
860
|
|
816
|
-
if (policy
|
861
|
+
if (!policy) {
|
817
862
|
break check_password_policy_x;
|
818
863
|
}
|
819
864
|
|
@@ -828,12 +873,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
828
873
|
const msgArgs = ["invalidPasswordMinUpperCaseCharsMessage", `${minNumberOfUpperCaseChar}`] as const;
|
829
874
|
|
830
875
|
errors.push({
|
831
|
-
|
832
|
-
|
833
|
-
|
834
|
-
|
835
|
-
|
836
|
-
|
876
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
877
|
+
errorMessageStr: msgStr(...msgArgs),
|
878
|
+
fieldIndex: undefined,
|
879
|
+
source: {
|
880
|
+
type: "passwordPolicy",
|
881
|
+
name: policyName
|
837
882
|
}
|
838
883
|
});
|
839
884
|
}
|
@@ -843,7 +888,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
843
888
|
|
844
889
|
const policy = passwordPolicies[policyName];
|
845
890
|
|
846
|
-
if (policy
|
891
|
+
if (!policy) {
|
847
892
|
break check_password_policy_x;
|
848
893
|
}
|
849
894
|
|
@@ -856,12 +901,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
856
901
|
const msgArgs = ["invalidPasswordMinSpecialCharsMessage", `${minNumberOfSpecialChar}`] as const;
|
857
902
|
|
858
903
|
errors.push({
|
859
|
-
|
860
|
-
|
861
|
-
|
862
|
-
|
863
|
-
|
864
|
-
|
904
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
905
|
+
errorMessageStr: msgStr(...msgArgs),
|
906
|
+
fieldIndex: undefined,
|
907
|
+
source: {
|
908
|
+
type: "passwordPolicy",
|
909
|
+
name: policyName
|
865
910
|
}
|
866
911
|
});
|
867
912
|
}
|
@@ -877,7 +922,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
877
922
|
|
878
923
|
const usernameFormFieldState = formFieldStates.find(formFieldState => formFieldState.attribute.name === "username");
|
879
924
|
|
880
|
-
if (usernameFormFieldState
|
925
|
+
if (!usernameFormFieldState) {
|
881
926
|
break check_password_policy_x;
|
882
927
|
}
|
883
928
|
|
@@ -889,7 +934,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
889
934
|
unFormat_number: {
|
890
935
|
const { kcNumberUnFormat } = attribute.html5DataAnnotations ?? {};
|
891
936
|
|
892
|
-
if (kcNumberUnFormat
|
937
|
+
if (!kcNumberUnFormat) {
|
893
938
|
break unFormat_number;
|
894
939
|
}
|
895
940
|
|
@@ -899,6 +944,10 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
899
944
|
return valueOrValues;
|
900
945
|
})();
|
901
946
|
|
947
|
+
if (usernameValue === "") {
|
948
|
+
break check_password_policy_x;
|
949
|
+
}
|
950
|
+
|
902
951
|
if (value !== usernameValue) {
|
903
952
|
break check_password_policy_x;
|
904
953
|
}
|
@@ -906,12 +955,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
906
955
|
const msgArgs = ["invalidPasswordNotUsernameMessage"] as const;
|
907
956
|
|
908
957
|
errors.push({
|
909
|
-
|
910
|
-
|
911
|
-
|
912
|
-
|
913
|
-
|
914
|
-
|
958
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
959
|
+
errorMessageStr: msgStr(...msgArgs),
|
960
|
+
fieldIndex: undefined,
|
961
|
+
source: {
|
962
|
+
type: "passwordPolicy",
|
963
|
+
name: policyName
|
915
964
|
}
|
916
965
|
});
|
917
966
|
}
|
@@ -927,7 +976,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
927
976
|
|
928
977
|
const emailFormFieldState = formFieldStates.find(formFieldState => formFieldState.attribute.name === "email");
|
929
978
|
|
930
|
-
if (emailFormFieldState
|
979
|
+
if (!emailFormFieldState) {
|
931
980
|
break check_password_policy_x;
|
932
981
|
}
|
933
982
|
|
@@ -936,6 +985,10 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
936
985
|
{
|
937
986
|
const emailValue = emailFormFieldState.valueOrValues;
|
938
987
|
|
988
|
+
if (emailValue === "") {
|
989
|
+
break check_password_policy_x;
|
990
|
+
}
|
991
|
+
|
939
992
|
if (value !== emailValue) {
|
940
993
|
break check_password_policy_x;
|
941
994
|
}
|
@@ -944,12 +997,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
944
997
|
const msgArgs = ["invalidPasswordNotEmailMessage"] as const;
|
945
998
|
|
946
999
|
errors.push({
|
947
|
-
|
948
|
-
|
949
|
-
|
950
|
-
|
951
|
-
|
952
|
-
|
1000
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
1001
|
+
errorMessageStr: msgStr(...msgArgs),
|
1002
|
+
fieldIndex: undefined,
|
1003
|
+
source: {
|
1004
|
+
type: "passwordPolicy",
|
1005
|
+
name: policyName
|
953
1006
|
}
|
954
1007
|
});
|
955
1008
|
}
|
@@ -977,12 +1030,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
977
1030
|
const msgArgs = ["invalidPasswordConfirmMessage"] as const;
|
978
1031
|
|
979
1032
|
errors.push({
|
980
|
-
|
981
|
-
|
982
|
-
|
983
|
-
|
984
|
-
|
985
|
-
|
1033
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
1034
|
+
errorMessageStr: msgStr(...msgArgs),
|
1035
|
+
fieldIndex: undefined,
|
1036
|
+
source: {
|
1037
|
+
type: "other",
|
1038
|
+
rule: "passwordConfirmMatchesPassword"
|
986
1039
|
}
|
987
1040
|
});
|
988
1041
|
}
|
@@ -1001,12 +1054,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
1001
1054
|
const msgArgs = ["error-user-attribute-required"] as const;
|
1002
1055
|
|
1003
1056
|
errors.push({
|
1004
|
-
|
1005
|
-
|
1006
|
-
|
1007
|
-
|
1008
|
-
|
1009
|
-
|
1057
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
1058
|
+
errorMessageStr: msgStr(...msgArgs),
|
1059
|
+
fieldIndex: undefined,
|
1060
|
+
source: {
|
1061
|
+
type: "other",
|
1062
|
+
rule: "requiredField"
|
1010
1063
|
}
|
1011
1064
|
});
|
1012
1065
|
}
|
@@ -1016,7 +1069,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
1016
1069
|
|
1017
1070
|
const validator = validators[validatorName];
|
1018
1071
|
|
1019
|
-
if (validator
|
1072
|
+
if (!validator) {
|
1020
1073
|
break validator_x;
|
1021
1074
|
}
|
1022
1075
|
|
@@ -1027,28 +1080,28 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
1027
1080
|
}
|
1028
1081
|
|
1029
1082
|
const source: FormFieldError.Source = {
|
1030
|
-
|
1031
|
-
|
1083
|
+
type: "validator",
|
1084
|
+
name: validatorName
|
1032
1085
|
};
|
1033
1086
|
|
1034
|
-
if (max
|
1087
|
+
if (max && value.length > parseInt(`${max}`)) {
|
1035
1088
|
const msgArgs = ["error-invalid-length-too-long", `${max}`] as const;
|
1036
1089
|
|
1037
1090
|
errors.push({
|
1038
|
-
|
1039
|
-
|
1040
|
-
|
1091
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
1092
|
+
errorMessageStr: msgStr(...msgArgs),
|
1093
|
+
fieldIndex: undefined,
|
1041
1094
|
source
|
1042
1095
|
});
|
1043
1096
|
}
|
1044
1097
|
|
1045
|
-
if (min
|
1098
|
+
if (min && value.length < parseInt(`${min}`)) {
|
1046
1099
|
const msgArgs = ["error-invalid-length-too-short", `${min}`] as const;
|
1047
1100
|
|
1048
1101
|
errors.push({
|
1049
|
-
|
1050
|
-
|
1051
|
-
|
1102
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
1103
|
+
errorMessageStr: msgStr(...msgArgs),
|
1104
|
+
fieldIndex: undefined,
|
1052
1105
|
source
|
1053
1106
|
});
|
1054
1107
|
}
|
@@ -1076,12 +1129,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
1076
1129
|
const msgArgs = [errorMessageKey ?? id<MessageKey>("shouldMatchPattern"), pattern] as const;
|
1077
1130
|
|
1078
1131
|
errors.push({
|
1079
|
-
|
1080
|
-
|
1081
|
-
|
1082
|
-
|
1083
|
-
|
1084
|
-
|
1132
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{advancedMsg(...msgArgs)}</Fragment>,
|
1133
|
+
errorMessageStr: advancedMsgStr(...msgArgs),
|
1134
|
+
fieldIndex: undefined,
|
1135
|
+
source: {
|
1136
|
+
type: "validator",
|
1137
|
+
name: validatorName
|
1085
1138
|
}
|
1086
1139
|
});
|
1087
1140
|
}
|
@@ -1115,12 +1168,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
1115
1168
|
const msgArgs = [id<MessageKey>("invalidEmailMessage")] as const;
|
1116
1169
|
|
1117
1170
|
errors.push({
|
1118
|
-
|
1119
|
-
|
1120
|
-
|
1121
|
-
|
1122
|
-
|
1123
|
-
|
1171
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
1172
|
+
errorMessageStr: msgStr(...msgArgs),
|
1173
|
+
fieldIndex: undefined,
|
1174
|
+
source: {
|
1175
|
+
type: "validator",
|
1176
|
+
name: validatorName
|
1124
1177
|
}
|
1125
1178
|
});
|
1126
1179
|
}
|
@@ -1143,43 +1196,43 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
1143
1196
|
const intValue = parseInt(value);
|
1144
1197
|
|
1145
1198
|
const source: FormFieldError.Source = {
|
1146
|
-
|
1147
|
-
|
1199
|
+
type: "validator",
|
1200
|
+
name: validatorName
|
1148
1201
|
};
|
1149
1202
|
|
1150
1203
|
if (isNaN(intValue)) {
|
1151
1204
|
const msgArgs = ["mustBeAnInteger"] as const;
|
1152
1205
|
|
1153
1206
|
errors.push({
|
1154
|
-
|
1155
|
-
|
1156
|
-
|
1207
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
1208
|
+
errorMessageStr: msgStr(...msgArgs),
|
1209
|
+
fieldIndex: undefined,
|
1157
1210
|
source
|
1158
1211
|
});
|
1159
1212
|
|
1160
1213
|
break validator_x;
|
1161
1214
|
}
|
1162
1215
|
|
1163
|
-
if (max
|
1216
|
+
if (max && intValue > parseInt(`${max}`)) {
|
1164
1217
|
const msgArgs = ["error-number-out-of-range-too-big", `${max}`] as const;
|
1165
1218
|
|
1166
1219
|
errors.push({
|
1167
|
-
|
1168
|
-
|
1169
|
-
|
1220
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
1221
|
+
errorMessageStr: msgStr(...msgArgs),
|
1222
|
+
fieldIndex: undefined,
|
1170
1223
|
source
|
1171
1224
|
});
|
1172
1225
|
|
1173
1226
|
break validator_x;
|
1174
1227
|
}
|
1175
1228
|
|
1176
|
-
if (min
|
1229
|
+
if (min && intValue < parseInt(`${min}`)) {
|
1177
1230
|
const msgArgs = ["error-number-out-of-range-too-small", `${min}`] as const;
|
1178
1231
|
|
1179
1232
|
errors.push({
|
1180
|
-
|
1181
|
-
|
1182
|
-
|
1233
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
1234
|
+
errorMessageStr: msgStr(...msgArgs),
|
1235
|
+
fieldIndex: undefined,
|
1183
1236
|
source
|
1184
1237
|
});
|
1185
1238
|
|
@@ -1207,12 +1260,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
1207
1260
|
const msgArgs = [id<MessageKey>("notAValidOption")] as const;
|
1208
1261
|
|
1209
1262
|
errors.push({
|
1210
|
-
|
1211
|
-
|
1212
|
-
|
1213
|
-
|
1214
|
-
|
1215
|
-
|
1263
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{advancedMsg(...msgArgs)}</Fragment>,
|
1264
|
+
errorMessageStr: advancedMsgStr(...msgArgs),
|
1265
|
+
fieldIndex: undefined,
|
1266
|
+
source: {
|
1267
|
+
type: "validator",
|
1268
|
+
name: validatorName
|
1216
1269
|
}
|
1217
1270
|
});
|
1218
1271
|
}
|
@@ -1225,3 +1278,79 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
1225
1278
|
|
1226
1279
|
return { getErrors };
|
1227
1280
|
}
|
1281
|
+
|
1282
|
+
function getIsMultivaluedSingleField(params: { attribute: Attribute }) {
|
1283
|
+
const { attribute } = params;
|
1284
|
+
|
1285
|
+
return attribute.annotations.inputType?.startsWith("multiselect") ?? false;
|
1286
|
+
}
|
1287
|
+
|
1288
|
+
export function getButtonToDisplayForMultivaluedAttributeField(params: { attribute: Attribute; values: string[]; fieldIndex: number }) {
|
1289
|
+
const { attribute, values, fieldIndex } = params;
|
1290
|
+
|
1291
|
+
const hasRemove = (() => {
|
1292
|
+
if (values.length === 1) {
|
1293
|
+
return false;
|
1294
|
+
}
|
1295
|
+
|
1296
|
+
const minCount = (() => {
|
1297
|
+
const { multivalued } = attribute.validators;
|
1298
|
+
|
1299
|
+
if (multivalued === undefined) {
|
1300
|
+
return undefined;
|
1301
|
+
}
|
1302
|
+
|
1303
|
+
const minStr = multivalued.min;
|
1304
|
+
|
1305
|
+
if (minStr === undefined) {
|
1306
|
+
return undefined;
|
1307
|
+
}
|
1308
|
+
|
1309
|
+
return parseInt(`${minStr}`);
|
1310
|
+
})();
|
1311
|
+
|
1312
|
+
if (minCount === undefined) {
|
1313
|
+
return true;
|
1314
|
+
}
|
1315
|
+
|
1316
|
+
if (values.length === minCount) {
|
1317
|
+
return false;
|
1318
|
+
}
|
1319
|
+
|
1320
|
+
return true;
|
1321
|
+
})();
|
1322
|
+
|
1323
|
+
const hasAdd = (() => {
|
1324
|
+
if (fieldIndex + 1 !== values.length) {
|
1325
|
+
return false;
|
1326
|
+
}
|
1327
|
+
|
1328
|
+
const maxCount = (() => {
|
1329
|
+
const { multivalued } = attribute.validators;
|
1330
|
+
|
1331
|
+
if (multivalued === undefined) {
|
1332
|
+
return undefined;
|
1333
|
+
}
|
1334
|
+
|
1335
|
+
const maxStr = multivalued.max;
|
1336
|
+
|
1337
|
+
if (maxStr === undefined) {
|
1338
|
+
return undefined;
|
1339
|
+
}
|
1340
|
+
|
1341
|
+
return parseInt(`${maxStr}`);
|
1342
|
+
})();
|
1343
|
+
|
1344
|
+
if (maxCount === undefined) {
|
1345
|
+
return false;
|
1346
|
+
}
|
1347
|
+
|
1348
|
+
if (values.length === maxCount) {
|
1349
|
+
return false;
|
1350
|
+
}
|
1351
|
+
|
1352
|
+
return true;
|
1353
|
+
})();
|
1354
|
+
|
1355
|
+
return { hasRemove, hasAdd };
|
1356
|
+
}
|