keycloakify 10.0.0-rc.3 → 10.0.0-rc.30
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 +2 -2
- package/PUBLIC_URL.js.map +1 -1
- package/account/Fallback.d.ts +2 -2
- package/account/Fallback.js +3 -0
- package/account/Fallback.js.map +1 -1
- package/account/{kcContext → KcContext}/KcContext.d.ts +74 -44
- package/account/KcContext/KcContext.js.map +1 -0
- package/account/KcContext/getKcContextMock.d.ts +22 -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 +151 -0
- package/account/KcContext/kcContextMocks.js.map +1 -0
- package/account/Template.d.ts +2 -2
- package/account/Template.js +8 -8
- package/account/Template.js.map +1 -1
- package/account/TemplateProps.d.ts +1 -1
- 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/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 +22 -30
- package/account/i18n/i18n.js +45 -49
- package/account/i18n/i18n.js.map +1 -1
- package/account/i18n/index.d.ts +1 -0
- package/account/i18n/index.js +1 -1
- package/account/i18n/index.js.map +1 -1
- package/account/index.d.ts +3 -6
- package/account/index.js +2 -5
- package/account/index.js.map +1 -1
- package/account/lib/useGetClassName.js +14 -14
- package/account/lib/useGetClassName.js.map +1 -1
- package/account/pages/Account.d.ts +1 -1
- package/account/pages/Account.js +1 -1
- package/account/pages/Account.js.map +1 -1
- package/account/pages/Applications.d.ts +1 -1
- package/account/pages/Applications.js +4 -4
- package/account/pages/Applications.js.map +1 -1
- package/account/pages/FederatedIdentity.d.ts +7 -0
- package/account/pages/FederatedIdentity.js +8 -0
- package/account/pages/FederatedIdentity.js.map +1 -0
- package/account/pages/Log.d.ts +1 -1
- package/account/pages/Log.js +1 -1
- package/account/pages/Log.js.map +1 -1
- package/account/pages/PageProps.d.ts +4 -4
- package/account/pages/Password.d.ts +1 -1
- package/account/pages/Password.js +7 -7
- package/account/pages/Password.js.map +1 -1
- package/account/pages/Sessions.d.ts +1 -1
- package/account/pages/Sessions.js +0 -4
- package/account/pages/Sessions.js.map +1 -1
- package/account/pages/Totp.d.ts +1 -1
- package/account/pages/Totp.js +6 -6
- package/account/pages/Totp.js.map +1 -1
- package/bin/246.index.js +466 -0
- package/bin/420.index.js +508 -0
- package/bin/509.index.js +438 -0
- package/bin/772.index.js +1524 -0
- package/bin/main.js +157734 -0
- package/bin/{keycloakify/generateFtl/pageId.d.ts → shared/constants.d.ts} +16 -1
- package/bin/shared/constants.js +63 -0
- package/bin/shared/constants.js.map +1 -0
- package/lib/isStorybook.js +2 -1
- package/lib/isStorybook.js.map +1 -1
- package/lib/useGetClassName.js.map +1 -1
- package/login/Fallback.d.ts +2 -2
- package/login/Fallback.js.map +1 -1
- package/login/{kcContext → KcContext}/KcContext.d.ts +23 -12
- package/login/{kcContext → KcContext}/KcContext.js +1 -0
- package/login/KcContext/KcContext.js.map +1 -0
- package/login/KcContext/getKcContextMock.d.ts +22 -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 +319 -0
- package/login/KcContext/kcContextMocks.js.map +1 -0
- package/login/Template.d.ts +2 -2
- package/login/Template.js +17 -17
- package/login/Template.js.map +1 -1
- package/login/TemplateProps.d.ts +1 -1
- package/login/UserProfileFormFields.d.ts +1 -1
- package/login/UserProfileFormFields.js +51 -95
- package/login/UserProfileFormFields.js.map +1 -1
- 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/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 +23 -32
- package/login/i18n/i18n.js +56 -53
- package/login/i18n/i18n.js.map +1 -1
- package/login/i18n/index.d.ts +2 -1
- package/login/i18n/index.js +1 -1
- package/login/i18n/index.js.map +1 -1
- package/login/index.d.ts +4 -7
- package/login/index.js +2 -5
- package/login/index.js.map +1 -1
- package/login/lib/useDownloadTerms.js +13 -20
- package/login/lib/useDownloadTerms.js.map +1 -1
- package/login/lib/useGetClassName.js +112 -112
- package/login/lib/useGetClassName.js.map +1 -1
- package/login/lib/useUserProfileForm.d.ts +10 -3
- package/login/lib/useUserProfileForm.js +281 -202
- package/login/lib/useUserProfileForm.js.map +1 -1
- package/login/pages/Code.d.ts +1 -1
- package/login/pages/Code.js.map +1 -1
- package/login/pages/DeleteAccountConfirm.d.ts +1 -1
- package/login/pages/DeleteAccountConfirm.js +5 -1
- package/login/pages/DeleteAccountConfirm.js.map +1 -1
- package/login/pages/DeleteCredential.d.ts +1 -1
- package/login/pages/DeleteCredential.js.map +1 -1
- package/login/pages/Error.d.ts +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 +2 -2
- package/login/pages/Info.d.ts +1 -1
- package/login/pages/Login.d.ts +1 -1
- package/login/pages/Login.js.map +1 -1
- package/login/pages/LoginConfigTotp.d.ts +1 -1
- package/login/pages/LoginConfigTotp.js +2 -2
- package/login/pages/LoginConfigTotp.js.map +1 -1
- package/login/pages/LoginIdpLinkConfirm.d.ts +1 -1
- package/login/pages/LoginIdpLinkConfirm.js.map +1 -1
- package/login/pages/LoginIdpLinkEmail.d.ts +2 -2
- package/login/pages/LoginOauth2DeviceVerifyUserCode.d.ts +2 -2
- package/login/pages/LoginOauth2DeviceVerifyUserCode.js.map +1 -1
- package/login/pages/LoginOauthGrant.d.ts +2 -2
- package/login/pages/LoginOauthGrant.js.map +1 -1
- package/login/pages/LoginOtp.d.ts +1 -1
- package/login/pages/LoginOtp.js.map +1 -1
- package/login/pages/LoginPageExpired.d.ts +1 -1
- package/login/pages/LoginPassword.d.ts +1 -1
- package/login/pages/LoginPassword.js.map +1 -1
- package/login/pages/LoginRecoveryAuthnCodeConfig.d.ts +1 -1
- package/login/pages/LoginRecoveryAuthnCodeConfig.js +10 -10
- package/login/pages/LoginRecoveryAuthnCodeConfig.js.map +1 -1
- package/login/pages/LoginRecoveryAuthnCodeInput.d.ts +1 -1
- package/login/pages/LoginRecoveryAuthnCodeInput.js.map +1 -1
- package/login/pages/LoginResetOtp.d.ts +1 -1
- package/login/pages/LoginResetOtp.js.map +1 -1
- package/login/pages/LoginResetPassword.d.ts +1 -1
- package/login/pages/LoginResetPassword.js.map +1 -1
- package/login/pages/LoginUpdatePassword.d.ts +1 -1
- package/login/pages/LoginUpdatePassword.js.map +1 -1
- package/login/pages/LoginUpdateProfile.d.ts +3 -3
- package/login/pages/LoginUsername.d.ts +1 -1
- package/login/pages/LoginUsername.js.map +1 -1
- package/login/pages/LoginVerifyEmail.d.ts +1 -1
- package/login/pages/LoginX509Info.d.ts +1 -1
- package/login/pages/LoginX509Info.js.map +1 -1
- package/login/pages/LogoutConfirm.d.ts +1 -1
- package/login/pages/LogoutConfirm.js.map +1 -1
- package/login/pages/PageProps.d.ts +1 -1
- package/login/pages/Register.d.ts +2 -2
- package/login/pages/Register.js +2 -2
- package/login/pages/Register.js.map +1 -1
- package/login/pages/SamlPostForm.d.ts +1 -1
- package/login/pages/SelectAuthenticator.d.ts +2 -2
- package/login/pages/SelectAuthenticator.js.map +1 -1
- package/login/pages/Terms.d.ts +1 -1
- package/login/pages/Terms.js.map +1 -1
- package/login/pages/UpdateEmail.d.ts +1 -1
- package/login/pages/UpdateEmail.js.map +1 -1
- package/login/pages/WebauthnAuthenticate.d.ts +1 -1
- package/login/pages/WebauthnAuthenticate.js +16 -13
- package/login/pages/WebauthnAuthenticate.js.map +1 -1
- package/login/pages/WebauthnError.d.ts +1 -1
- package/login/pages/WebauthnError.js.map +1 -1
- package/login/pages/WebauthnRegister.d.ts +1 -1
- package/login/pages/WebauthnRegister.js +10 -10
- package/login/pages/WebauthnRegister.js.map +1 -1
- package/package.json +154 -565
- package/src/PUBLIC_URL.ts +5 -2
- package/src/account/Fallback.tsx +6 -3
- package/src/account/{kcContext → KcContext}/KcContext.ts +94 -48
- package/src/account/KcContext/getKcContextMock.ts +82 -0
- package/src/account/KcContext/index.ts +2 -0
- package/src/account/KcContext/kcContextMocks.ts +199 -0
- package/src/account/Template.tsx +10 -12
- package/src/account/TemplateProps.ts +5 -2
- 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 +77 -63
- package/src/account/i18n/index.ts +1 -0
- package/src/account/index.ts +3 -9
- package/src/account/lib/useGetClassName.ts +15 -14
- package/src/account/pages/Account.tsx +3 -3
- package/src/account/pages/Applications.tsx +8 -8
- package/src/account/pages/FederatedIdentity.tsx +58 -0
- package/src/account/pages/Log.tsx +3 -3
- package/src/account/pages/PageProps.ts +4 -4
- package/src/account/pages/Password.tsx +10 -10
- package/src/account/pages/Sessions.tsx +2 -5
- package/src/account/pages/Totp.tsx +26 -32
- package/src/bin/copy-keycloak-resources-to-public.ts +7 -106
- package/src/bin/download-keycloak-default-theme.ts +63 -0
- package/src/bin/eject-page.ts +176 -0
- package/src/bin/initialize-email-theme.ts +38 -29
- package/src/bin/keycloakify/buildJars/buildJar.ts +192 -72
- package/src/bin/keycloakify/buildJars/buildJars.ts +41 -23
- package/src/bin/keycloakify/buildJars/extensionVersions.ts +2 -1
- package/src/bin/keycloakify/buildJars/generatePom.ts +12 -4
- package/src/bin/keycloakify/buildJars/getKeycloakVersionRangeForJar.ts +73 -21
- package/src/bin/keycloakify/generateFtl/ftl_object_to_js_code_declaring_an_object.ftl +52 -31
- package/src/bin/keycloakify/generateFtl/generateFtl.ts +59 -15
- package/src/bin/keycloakify/generateFtl/index.ts +0 -1
- package/src/bin/keycloakify/{generateTheme → generateSrcMainResources}/bringInAccountV1.ts +34 -22
- package/src/bin/keycloakify/{generateTheme → generateSrcMainResources}/generateMessageProperties.ts +72 -20
- package/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResources.ts +34 -0
- package/src/bin/keycloakify/{generateTheme/generateSrcMainResources.ts → generateSrcMainResources/generateSrcMainResourcesForMainTheme.ts} +113 -74
- package/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResourcesForThemeVariant.ts +80 -0
- package/src/bin/keycloakify/generateSrcMainResources/index.ts +1 -0
- package/src/bin/keycloakify/{generateTheme → generateSrcMainResources}/readExtraPageNames.ts +21 -8
- package/src/bin/keycloakify/generateSrcMainResources/readFieldNameUsage.ts +83 -0
- package/src/bin/keycloakify/generateStartKeycloakTestingContainer.ts +21 -7
- package/src/bin/keycloakify/index.ts +0 -7
- package/src/bin/keycloakify/keycloakify.ts +77 -70
- package/src/bin/keycloakify/replacers/replaceImportsInCssCode.ts +26 -7
- package/src/bin/keycloakify/replacers/replaceImportsInInlineCssCode.ts +8 -4
- package/src/bin/keycloakify/replacers/replaceImportsInJsCode/replaceImportsInJsCode.ts +7 -4
- package/src/bin/keycloakify/replacers/replaceImportsInJsCode/vite.ts +25 -7
- package/src/bin/keycloakify/replacers/replaceImportsInJsCode/webpack.ts +50 -12
- package/src/bin/main.ts +212 -0
- package/src/bin/shared/KeycloakVersionRange.ts +9 -0
- package/src/bin/shared/buildOptions.ts +307 -0
- package/src/bin/{keycloakify/generateFtl/pageId.ts → shared/constants.ts} +31 -1
- package/src/bin/shared/copyKeycloakResourcesToPublic.ts +104 -0
- package/src/bin/shared/downloadKeycloakDefaultTheme.ts +207 -0
- package/src/bin/shared/downloadKeycloakStaticResources.ts +53 -0
- package/src/bin/shared/getJarFileBasename.ts +11 -0
- package/src/bin/{getThemeSrcDirPath.ts → shared/getThemeSrcDirPath.ts} +6 -3
- package/src/bin/shared/metaInfKeycloakThemes.ts +61 -0
- package/src/bin/shared/promptKeycloakVersion.ts +125 -0
- 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 +41 -0
- package/src/bin/start-keycloak/myrealm-realm-23.json +2142 -0
- package/src/bin/start-keycloak/myrealm-realm-24.json +2318 -0
- package/src/bin/start-keycloak/start-keycloak.ts +480 -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/downloadAndExtractArchive/fetchProxyOptions.ts +96 -0
- package/src/bin/tools/downloadAndExtractArchive/index.ts +1 -0
- package/src/bin/tools/extractArchive.ts +140 -0
- package/src/bin/tools/fetchProxyOptions.ts +31 -8
- package/src/bin/tools/fs.rmSync.ts +4 -4
- package/src/bin/tools/getAbsoluteAndInOsFormatPath.ts +17 -2
- package/src/bin/tools/getNpmWorkspaceRootDirPath.ts +73 -0
- 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/{readThisNpmProjectVersion.ts → readThisNpmPackageVersion.ts} +6 -2
- package/src/bin/tools/transformCodebase.ts +29 -10
- package/src/bin/tools/trimIndent.ts +4 -1
- package/src/lib/isStorybook.ts +3 -1
- package/src/lib/useGetClassName.ts +12 -3
- package/src/login/Fallback.tsx +3 -3
- package/src/login/{kcContext → KcContext}/KcContext.ts +58 -27
- package/src/login/KcContext/getKcContextMock.ts +82 -0
- package/src/login/KcContext/index.ts +8 -0
- package/src/login/KcContext/kcContextMocks.ts +565 -0
- package/src/login/Template.tsx +21 -24
- package/src/login/TemplateProps.ts +5 -2
- package/src/login/UserProfileFormFields.tsx +73 -126
- 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 +98 -68
- package/src/login/i18n/index.ts +2 -1
- package/src/login/index.ts +4 -10
- package/src/login/lib/useDownloadTerms.ts +19 -29
- package/src/login/lib/useGetClassName.ts +119 -112
- package/src/login/lib/useUserProfileForm.tsx +346 -229
- package/src/login/pages/Code.tsx +2 -2
- package/src/login/pages/DeleteAccountConfirm.tsx +11 -5
- package/src/login/pages/DeleteCredential.tsx +2 -2
- package/src/login/pages/Error.tsx +1 -1
- package/src/login/pages/FrontchannelLogout.tsx +2 -2
- package/src/login/pages/IdpReviewUserProfile.tsx +3 -3
- package/src/login/pages/Info.tsx +1 -1
- package/src/login/pages/Login.tsx +3 -3
- package/src/login/pages/LoginConfigTotp.tsx +4 -5
- package/src/login/pages/LoginIdpLinkConfirm.tsx +2 -2
- package/src/login/pages/LoginIdpLinkEmail.tsx +2 -2
- package/src/login/pages/LoginOauth2DeviceVerifyUserCode.tsx +3 -3
- package/src/login/pages/LoginOauthGrant.tsx +3 -3
- package/src/login/pages/LoginOtp.tsx +2 -2
- package/src/login/pages/LoginPageExpired.tsx +1 -1
- package/src/login/pages/LoginPassword.tsx +2 -2
- package/src/login/pages/LoginRecoveryAuthnCodeConfig.tsx +12 -13
- package/src/login/pages/LoginRecoveryAuthnCodeInput.tsx +2 -2
- package/src/login/pages/LoginResetOtp.tsx +2 -2
- package/src/login/pages/LoginResetPassword.tsx +4 -4
- package/src/login/pages/LoginUpdatePassword.tsx +2 -2
- package/src/login/pages/LoginUpdateProfile.tsx +4 -4
- package/src/login/pages/LoginUsername.tsx +4 -4
- package/src/login/pages/LoginVerifyEmail.tsx +1 -1
- package/src/login/pages/LoginX509Info.tsx +2 -2
- package/src/login/pages/LogoutConfirm.tsx +2 -2
- package/src/login/pages/PageProps.ts +1 -1
- package/src/login/pages/Register.tsx +4 -4
- package/src/login/pages/SamlPostForm.tsx +1 -1
- package/src/login/pages/SelectAuthenticator.tsx +3 -3
- package/src/login/pages/Terms.tsx +2 -2
- package/src/login/pages/UpdateEmail.tsx +2 -2
- package/src/login/pages/WebauthnAuthenticate.tsx +18 -17
- package/src/login/pages/WebauthnError.tsx +2 -2
- package/src/login/pages/WebauthnRegister.tsx +12 -13
- 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 +7 -1
- package/src/tools/deepAssign.ts +57 -19
- package/src/tools/formatNumber.ts +4 -1
- 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/tsconfig.json +2 -1
- package/src/vite-plugin/vite-plugin.ts +64 -52
- 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/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.js.map +1 -1
- package/tools/deepAssign.d.ts +1 -0
- package/tools/deepAssign.js +41 -16
- package/tools/deepAssign.js.map +1 -1
- package/tools/formatNumber.js.map +1 -1
- 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.js +52377 -3
- package/vite-plugin/vite-plugin.d.ts +1 -2
- 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 -207
- package/account/kcContext/kcContextMocks.js.map +0 -1
- package/bin/constants.d.ts +0 -10
- package/bin/constants.js +0 -13
- package/bin/constants.js.map +0 -1
- package/bin/copy-keycloak-resources-to-public.d.ts +0 -14
- package/bin/copy-keycloak-resources-to-public.js +0 -216
- package/bin/copy-keycloak-resources-to-public.js.map +0 -1
- package/bin/download-builtin-keycloak-theme.d.ts +0 -10
- package/bin/download-builtin-keycloak-theme.js +0 -352
- package/bin/download-builtin-keycloak-theme.js.map +0 -1
- package/bin/downloadAndUnzip.d.ts +0 -16
- package/bin/downloadAndUnzip.js +0 -255
- package/bin/downloadAndUnzip.js.map +0 -1
- package/bin/eject-keycloak-page.d.ts +0 -2
- package/bin/eject-keycloak-page.js +0 -132
- package/bin/eject-keycloak-page.js.map +0 -1
- package/bin/getThemeSrcDirPath.d.ts +0 -6
- package/bin/getThemeSrcDirPath.js +0 -123
- package/bin/getThemeSrcDirPath.js.map +0 -1
- package/bin/initialize-email-theme.d.ts +0 -2
- package/bin/initialize-email-theme.js +0 -121
- package/bin/initialize-email-theme.js.map +0 -1
- package/bin/keycloakify/buildJars/buildJar.d.ts +0 -14
- package/bin/keycloakify/buildJars/buildJar.js +0 -224
- package/bin/keycloakify/buildJars/buildJar.js.map +0 -1
- package/bin/keycloakify/buildJars/buildJars.d.ts +0 -10
- package/bin/keycloakify/buildJars/buildJars.js +0 -95
- package/bin/keycloakify/buildJars/buildJars.js.map +0 -1
- package/bin/keycloakify/buildJars/extensionVersions.d.ts +0 -12
- package/bin/keycloakify/buildJars/extensionVersions.js +0 -7
- package/bin/keycloakify/buildJars/extensionVersions.js.map +0 -1
- package/bin/keycloakify/buildJars/generatePom.d.ts +0 -13
- package/bin/keycloakify/buildJars/generatePom.js +0 -95
- package/bin/keycloakify/buildJars/generatePom.js.map +0 -1
- package/bin/keycloakify/buildJars/getKeycloakVersionRangeForJar.d.ts +0 -6
- package/bin/keycloakify/buildJars/getKeycloakVersionRangeForJar.js +0 -35
- package/bin/keycloakify/buildJars/getKeycloakVersionRangeForJar.js.map +0 -1
- package/bin/keycloakify/buildJars/index.d.ts +0 -1
- package/bin/keycloakify/buildJars/index.js +0 -18
- package/bin/keycloakify/buildJars/index.js.map +0 -1
- package/bin/keycloakify/buildOptions/UserProvidedBuildOptions.d.ts +0 -35
- package/bin/keycloakify/buildOptions/UserProvidedBuildOptions.js +0 -14
- package/bin/keycloakify/buildOptions/UserProvidedBuildOptions.js.map +0 -1
- package/bin/keycloakify/buildOptions/buildOptions.d.ts +0 -25
- package/bin/keycloakify/buildOptions/buildOptions.js +0 -178
- package/bin/keycloakify/buildOptions/buildOptions.js.map +0 -1
- package/bin/keycloakify/buildOptions/getCacheDirPath.d.ts +0 -5
- package/bin/keycloakify/buildOptions/getCacheDirPath.js +0 -22
- package/bin/keycloakify/buildOptions/getCacheDirPath.js.map +0 -1
- package/bin/keycloakify/buildOptions/getNpmWorkspaceRootDirPath.d.ts +0 -5
- package/bin/keycloakify/buildOptions/getNpmWorkspaceRootDirPath.js +0 -86
- package/bin/keycloakify/buildOptions/getNpmWorkspaceRootDirPath.js.map +0 -1
- package/bin/keycloakify/buildOptions/getReactAppRootDirPath.d.ts +0 -5
- package/bin/keycloakify/buildOptions/getReactAppRootDirPath.js +0 -26
- package/bin/keycloakify/buildOptions/getReactAppRootDirPath.js.map +0 -1
- package/bin/keycloakify/buildOptions/index.d.ts +0 -1
- package/bin/keycloakify/buildOptions/index.js +0 -18
- package/bin/keycloakify/buildOptions/index.js.map +0 -1
- package/bin/keycloakify/buildOptions/parsedPackageJson.d.ts +0 -10
- package/bin/keycloakify/buildOptions/parsedPackageJson.js +0 -49
- package/bin/keycloakify/buildOptions/parsedPackageJson.js.map +0 -1
- package/bin/keycloakify/buildOptions/resolvedViteConfig.d.ts +0 -13
- package/bin/keycloakify/buildOptions/resolvedViteConfig.js +0 -77
- package/bin/keycloakify/buildOptions/resolvedViteConfig.js.map +0 -1
- package/bin/keycloakify/generateFtl/ftl_object_to_js_code_declaring_an_object.ftl +0 -521
- package/bin/keycloakify/generateFtl/generateFtl.d.ts +0 -23
- package/bin/keycloakify/generateFtl/generateFtl.js +0 -169
- package/bin/keycloakify/generateFtl/generateFtl.js.map +0 -1
- package/bin/keycloakify/generateFtl/index.d.ts +0 -2
- package/bin/keycloakify/generateFtl/index.js +0 -19
- package/bin/keycloakify/generateFtl/index.js.map +0 -1
- package/bin/keycloakify/generateFtl/pageId.js +0 -41
- package/bin/keycloakify/generateFtl/pageId.js.map +0 -1
- package/bin/keycloakify/generateStartKeycloakTestingContainer.d.ts +0 -13
- package/bin/keycloakify/generateStartKeycloakTestingContainer.js +0 -86
- package/bin/keycloakify/generateStartKeycloakTestingContainer.js.map +0 -1
- package/bin/keycloakify/generateTheme/bringInAccountV1.d.ts +0 -9
- package/bin/keycloakify/generateTheme/bringInAccountV1.js +0 -153
- package/bin/keycloakify/generateTheme/bringInAccountV1.js.map +0 -1
- package/bin/keycloakify/generateTheme/downloadKeycloakStaticResources.d.ts +0 -11
- package/bin/keycloakify/generateTheme/downloadKeycloakStaticResources.js +0 -102
- package/bin/keycloakify/generateTheme/downloadKeycloakStaticResources.js.map +0 -1
- package/bin/keycloakify/generateTheme/generateMessageProperties.d.ts +0 -8
- package/bin/keycloakify/generateTheme/generateMessageProperties.js +0 -271
- package/bin/keycloakify/generateTheme/generateMessageProperties.js.map +0 -1
- package/bin/keycloakify/generateTheme/generateSrcMainResources.d.ts +0 -21
- package/bin/keycloakify/generateTheme/generateSrcMainResources.js +0 -340
- package/bin/keycloakify/generateTheme/generateSrcMainResources.js.map +0 -1
- package/bin/keycloakify/generateTheme/generateTheme.d.ts +0 -13
- package/bin/keycloakify/generateTheme/generateTheme.js +0 -115
- package/bin/keycloakify/generateTheme/generateTheme.js.map +0 -1
- package/bin/keycloakify/generateTheme/generateThemeVariants.d.ts +0 -5
- package/bin/keycloakify/generateTheme/generateThemeVariants.js +0 -67
- package/bin/keycloakify/generateTheme/generateThemeVariants.js.map +0 -1
- package/bin/keycloakify/generateTheme/index.d.ts +0 -1
- package/bin/keycloakify/generateTheme/index.js +0 -18
- package/bin/keycloakify/generateTheme/index.js.map +0 -1
- package/bin/keycloakify/generateTheme/readExtraPageNames.d.ts +0 -5
- package/bin/keycloakify/generateTheme/readExtraPageNames.js +0 -105
- package/bin/keycloakify/generateTheme/readExtraPageNames.js.map +0 -1
- package/bin/keycloakify/generateTheme/readFieldNameUsage.d.ts +0 -7
- package/bin/keycloakify/generateTheme/readFieldNameUsage.js +0 -141
- package/bin/keycloakify/generateTheme/readFieldNameUsage.js.map +0 -1
- package/bin/keycloakify/index.d.ts +0 -2
- package/bin/keycloakify/index.js +0 -23
- package/bin/keycloakify/index.js.map +0 -1
- package/bin/keycloakify/keycloakify.d.ts +0 -1
- package/bin/keycloakify/keycloakify.js +0 -167
- package/bin/keycloakify/keycloakify.js.map +0 -1
- package/bin/keycloakify/replacers/replaceImportsInCssCode.d.ts +0 -15
- package/bin/keycloakify/replacers/replaceImportsInCssCode.js +0 -88
- package/bin/keycloakify/replacers/replaceImportsInCssCode.js.map +0 -1
- package/bin/keycloakify/replacers/replaceImportsInInlineCssCode.d.ts +0 -9
- package/bin/keycloakify/replacers/replaceImportsInInlineCssCode.js +0 -38
- package/bin/keycloakify/replacers/replaceImportsInInlineCssCode.js.map +0 -1
- package/bin/keycloakify/replacers/replaceImportsInJsCode/index.d.ts +0 -1
- package/bin/keycloakify/replacers/replaceImportsInJsCode/index.js +0 -18
- package/bin/keycloakify/replacers/replaceImportsInJsCode/index.js.map +0 -1
- package/bin/keycloakify/replacers/replaceImportsInJsCode/replaceImportsInJsCode.d.ts +0 -12
- package/bin/keycloakify/replacers/replaceImportsInJsCode/replaceImportsInJsCode.js +0 -70
- package/bin/keycloakify/replacers/replaceImportsInJsCode/replaceImportsInJsCode.js.map +0 -1
- package/bin/keycloakify/replacers/replaceImportsInJsCode/vite.d.ts +0 -13
- package/bin/keycloakify/replacers/replaceImportsInJsCode/vite.js +0 -95
- package/bin/keycloakify/replacers/replaceImportsInJsCode/vite.js.map +0 -1
- package/bin/keycloakify/replacers/replaceImportsInJsCode/webpack.d.ts +0 -12
- package/bin/keycloakify/replacers/replaceImportsInJsCode/webpack.js +0 -103
- package/bin/keycloakify/replacers/replaceImportsInJsCode/webpack.js.map +0 -1
- package/bin/promptKeycloakVersion.d.ts +0 -3
- package/bin/promptKeycloakVersion.js +0 -121
- package/bin/promptKeycloakVersion.js.map +0 -1
- package/bin/tools/OptionalIfCanBeUndefined.d.ts +0 -14
- package/bin/tools/OptionalIfCanBeUndefined.js +0 -3
- package/bin/tools/OptionalIfCanBeUndefined.js.map +0 -1
- package/bin/tools/SemVer.d.ts +0 -26
- package/bin/tools/SemVer.js +0 -119
- package/bin/tools/SemVer.js.map +0 -1
- package/bin/tools/String.prototype.replaceAll.d.ts +0 -1
- package/bin/tools/String.prototype.replaceAll.js +0 -29
- package/bin/tools/String.prototype.replaceAll.js.map +0 -1
- package/bin/tools/crawl.d.ts +0 -5
- package/bin/tools/crawl.js +0 -74
- package/bin/tools/crawl.js.map +0 -1
- package/bin/tools/crc32.d.ts +0 -9
- package/bin/tools/crc32.js +0 -64
- package/bin/tools/crc32.js.map +0 -1
- package/bin/tools/deflate.d.ts +0 -24
- package/bin/tools/deflate.js +0 -155
- package/bin/tools/deflate.js.map +0 -1
- package/bin/tools/fetchProxyOptions.d.ts +0 -5
- package/bin/tools/fetchProxyOptions.js +0 -172
- package/bin/tools/fetchProxyOptions.js.map +0 -1
- package/bin/tools/fs.existsAsync.d.ts +0 -1
- package/bin/tools/fs.existsAsync.js +0 -86
- package/bin/tools/fs.existsAsync.js.map +0 -1
- package/bin/tools/fs.rm.d.ts +0 -8
- package/bin/tools/fs.rm.js +0 -151
- package/bin/tools/fs.rm.js.map +0 -1
- package/bin/tools/fs.rmSync.d.ts +0 -8
- package/bin/tools/fs.rmSync.js +0 -58
- package/bin/tools/fs.rmSync.js.map +0 -1
- package/bin/tools/getAbsoluteAndInOsFormatPath.d.ts +0 -4
- package/bin/tools/getAbsoluteAndInOsFormatPath.js +0 -16
- package/bin/tools/getAbsoluteAndInOsFormatPath.js.map +0 -1
- package/bin/tools/getThisCodebaseRootDirPath.d.ts +0 -1
- package/bin/tools/getThisCodebaseRootDirPath.js +0 -43
- package/bin/tools/getThisCodebaseRootDirPath.js.map +0 -1
- package/bin/tools/isInside.d.ts +0 -4
- package/bin/tools/isInside.js +0 -10
- package/bin/tools/isInside.js.map +0 -1
- package/bin/tools/kebabCaseToSnakeCase.d.ts +0 -1
- package/bin/tools/kebabCaseToSnakeCase.js +0 -35
- package/bin/tools/kebabCaseToSnakeCase.js.map +0 -1
- package/bin/tools/logger.d.ts +0 -12
- package/bin/tools/logger.js +0 -23
- package/bin/tools/logger.js.map +0 -1
- package/bin/tools/octokit-addons/getLatestsSemVersionedTag.d.ts +0 -14
- package/bin/tools/octokit-addons/getLatestsSemVersionedTag.js +0 -119
- package/bin/tools/octokit-addons/getLatestsSemVersionedTag.js.map +0 -1
- package/bin/tools/octokit-addons/listTags.d.ts +0 -13
- package/bin/tools/octokit-addons/listTags.js +0 -154
- package/bin/tools/octokit-addons/listTags.js.map +0 -1
- package/bin/tools/partitionPromiseSettledResults.d.ts +0 -2
- package/bin/tools/partitionPromiseSettledResults.js +0 -41
- package/bin/tools/partitionPromiseSettledResults.js.map +0 -1
- package/bin/tools/readThisNpmProjectVersion.d.ts +0 -1
- package/bin/tools/readThisNpmProjectVersion.js +0 -37
- package/bin/tools/readThisNpmProjectVersion.js.map +0 -1
- package/bin/tools/tee.d.ts +0 -3
- package/bin/tools/tee.js +0 -37
- package/bin/tools/tee.js.map +0 -1
- package/bin/tools/transformCodebase.d.ts +0 -20
- package/bin/tools/transformCodebase.js +0 -97
- package/bin/tools/transformCodebase.js.map +0 -1
- package/bin/tools/trimIndent.d.ts +0 -5
- package/bin/tools/trimIndent.js +0 -82
- package/bin/tools/trimIndent.js.map +0 -1
- package/bin/tools/unzip.d.ts +0 -2
- package/bin/tools/unzip.js +0 -274
- package/bin/tools/unzip.js.map +0 -1
- package/index.d.ts +0 -1
- package/index.js +0 -2
- package/index.js.map +0 -1
- package/lib/keycloakJsAdapter.d.ts +0 -51
- package/lib/keycloakJsAdapter.js +0 -74
- package/lib/keycloakJsAdapter.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/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 -254
- package/src/bin/constants.ts +0 -13
- package/src/bin/download-builtin-keycloak-theme.ts +0 -290
- package/src/bin/downloadAndUnzip.ts +0 -203
- package/src/bin/eject-keycloak-page.ts +0 -64
- package/src/bin/keycloakify/buildOptions/UserProvidedBuildOptions.ts +0 -21
- package/src/bin/keycloakify/buildOptions/buildOptions.ts +0 -189
- package/src/bin/keycloakify/buildOptions/getCacheDirPath.ts +0 -25
- package/src/bin/keycloakify/buildOptions/getNpmWorkspaceRootDirPath.ts +0 -49
- package/src/bin/keycloakify/buildOptions/getReactAppRootDirPath.ts +0 -23
- package/src/bin/keycloakify/buildOptions/index.ts +0 -1
- package/src/bin/keycloakify/buildOptions/parsedPackageJson.ts +0 -32
- package/src/bin/keycloakify/buildOptions/resolvedViteConfig.ts +0 -74
- package/src/bin/keycloakify/generateTheme/downloadKeycloakStaticResources.ts +0 -49
- package/src/bin/keycloakify/generateTheme/generateTheme.ts +0 -44
- package/src/bin/keycloakify/generateTheme/generateThemeVariants.ts +0 -50
- package/src/bin/keycloakify/generateTheme/index.ts +0 -1
- package/src/bin/keycloakify/generateTheme/readFieldNameUsage.ts +0 -55
- package/src/bin/promptKeycloakVersion.ts +0 -49
- package/src/bin/tools/logger.ts +0 -27
- package/src/bin/tools/unzip.ts +0 -141
- package/src/index.ts +0 -1
- package/src/lib/keycloakJsAdapter.ts +0 -118
- 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 -631
- package/src/tools/AndByDiscriminatingKey.ts +0 -25
- 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/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/vite-plugin/index.js.map +0 -1
- package/vite-plugin/tsconfig.tsbuildinfo +0 -1
- package/vite-plugin/vite-plugin.js +0 -158
- package/vite-plugin/vite-plugin.js.map +0 -1
- /package/account/{kcContext → KcContext}/KcContext.js +0 -0
@@ -1,14 +1,14 @@
|
|
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 { KcContext, PasswordPolicies, Attribute, Validators } from "keycloakify/login/KcContext";
|
11
|
+
import type { MessageKey } from "keycloakify/login/i18n";
|
12
12
|
import type { I18n } from "../i18n";
|
13
13
|
|
14
14
|
export type FormFieldError = {
|
@@ -67,7 +67,7 @@ export type FormAction =
|
|
67
67
|
export type KcContextLike = {
|
68
68
|
messagesPerField: Pick<KcContext.Common["messagesPerField"], "existsError" | "get">;
|
69
69
|
profile: {
|
70
|
-
|
70
|
+
attributesByName: Record<string, Attribute>;
|
71
71
|
html5DataAnnotations?: Record<string, string>;
|
72
72
|
};
|
73
73
|
passwordRequired?: boolean;
|
@@ -102,17 +102,16 @@ namespace internal {
|
|
102
102
|
};
|
103
103
|
}
|
104
104
|
|
105
|
-
const { useInsertScriptTags } = createUseInsertScriptTags();
|
106
|
-
|
107
105
|
export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTypeOfUseUserProfileForm {
|
108
106
|
const { kcContext, i18n, doMakeUserConfirmPassword } = params;
|
109
107
|
|
110
108
|
const { insertScriptTags } = useInsertScriptTags({
|
111
|
-
"
|
109
|
+
componentOrHookName: "useUserProfileForm",
|
110
|
+
scriptTags: Object.keys(kcContext.profile?.html5DataAnnotations ?? {})
|
112
111
|
.filter(key => key !== "kcMultivalued" && key !== "kcNumberFormat") // NOTE: Keycloakify handles it.
|
113
112
|
.map(key => ({
|
114
|
-
|
115
|
-
|
113
|
+
type: "module",
|
114
|
+
src: `${kcContext.url.resourcesPath}/js/${key}.js`
|
116
115
|
}))
|
117
116
|
});
|
118
117
|
|
@@ -136,7 +135,11 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
|
|
136
135
|
|
137
136
|
const attributes = (() => {
|
138
137
|
retrocompat_patch: {
|
139
|
-
if (
|
138
|
+
if (
|
139
|
+
"profile" in kcContext &&
|
140
|
+
"attributesByName" in kcContext.profile &&
|
141
|
+
Object.keys(kcContext.profile.attributesByName).length !== 0
|
142
|
+
) {
|
140
143
|
break retrocompat_patch;
|
141
144
|
}
|
142
145
|
|
@@ -146,15 +149,15 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
|
|
146
149
|
.filter(name => (name !== "username" ? true : !kcContext.realm.registrationEmailAsUsername))
|
147
150
|
.map(name =>
|
148
151
|
id<Attribute>({
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
152
|
+
name: name,
|
153
|
+
displayName: id<`\${${MessageKey}}`>(`\${${name}}`),
|
154
|
+
required: true,
|
155
|
+
value: (kcContext.register as any).formData[name] ?? "",
|
156
|
+
html5DataAnnotations: {},
|
157
|
+
readOnly: false,
|
158
|
+
validators: {},
|
159
|
+
annotations: {},
|
160
|
+
autocomplete: (() => {
|
158
161
|
switch (name) {
|
159
162
|
case "email":
|
160
163
|
return "email";
|
@@ -174,15 +177,15 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
|
|
174
177
|
.filter(name => (name !== "username" ? true : (kcContext.user as any).editUsernameAllowed))
|
175
178
|
.map(name =>
|
176
179
|
id<Attribute>({
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
180
|
+
name: name,
|
181
|
+
displayName: id<`\${${MessageKey}}`>(`\${${name}}`),
|
182
|
+
required: true,
|
183
|
+
value: (kcContext as any).user[name] ?? "",
|
184
|
+
html5DataAnnotations: {},
|
185
|
+
readOnly: false,
|
186
|
+
validators: {},
|
187
|
+
annotations: {},
|
188
|
+
autocomplete: (() => {
|
186
189
|
switch (name) {
|
187
190
|
case "email":
|
188
191
|
return "email";
|
@@ -200,15 +203,15 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
|
|
200
203
|
//NOTE: Handle legacy update-email.ftl
|
201
204
|
return [
|
202
205
|
id<Attribute>({
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
206
|
+
name: "email",
|
207
|
+
displayName: id<`\${${MessageKey}}`>(`\${email}`),
|
208
|
+
required: true,
|
209
|
+
value: (kcContext.email as any).value ?? "",
|
210
|
+
html5DataAnnotations: {},
|
211
|
+
readOnly: false,
|
212
|
+
validators: {},
|
213
|
+
annotations: {},
|
214
|
+
autocomplete: "email"
|
212
215
|
})
|
213
216
|
];
|
214
217
|
}
|
@@ -216,7 +219,7 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
|
|
216
219
|
assert(false, "Unable to mock user profile from the current kcContext");
|
217
220
|
}
|
218
221
|
|
219
|
-
return kcContext.profile.
|
222
|
+
return Object.values(kcContext.profile.attributesByName).map(attribute_pre_group_patch => {
|
220
223
|
if (typeof attribute_pre_group_patch.group === "string" && attribute_pre_group_patch.group !== "") {
|
221
224
|
const { group, groupDisplayHeader, groupDisplayDescription, groupAnnotations, ...rest } =
|
222
225
|
attribute_pre_group_patch as Attribute & {
|
@@ -228,11 +231,11 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
|
|
228
231
|
|
229
232
|
return id<Attribute>({
|
230
233
|
...rest,
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
234
|
+
group: {
|
235
|
+
name: group,
|
236
|
+
displayHeader: groupDisplayHeader,
|
237
|
+
displayDescription: groupDisplayDescription,
|
238
|
+
html5DataAnnotations: {}
|
236
239
|
}
|
237
240
|
});
|
238
241
|
}
|
@@ -242,7 +245,7 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
|
|
242
245
|
})();
|
243
246
|
|
244
247
|
for (const attribute of attributes) {
|
245
|
-
syntheticAttributes.push(attribute);
|
248
|
+
syntheticAttributes.push(structuredCloneButFunctions(attribute));
|
246
249
|
|
247
250
|
add_password_and_password_confirm: {
|
248
251
|
if (!kcContext.passwordRequired) {
|
@@ -257,38 +260,56 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
|
|
257
260
|
|
258
261
|
syntheticAttributes.push(
|
259
262
|
{
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
263
|
+
name: "password",
|
264
|
+
displayName: id<`\${${MessageKey}}`>("${password}"),
|
265
|
+
required: true,
|
266
|
+
readOnly: false,
|
267
|
+
validators: {},
|
268
|
+
annotations: {},
|
269
|
+
autocomplete: "new-password",
|
270
|
+
html5DataAnnotations: {},
|
268
271
|
// NOTE: Compat with Keycloak version prior to 24
|
269
|
-
...({
|
272
|
+
...({ groupAnnotations: {} } as {})
|
270
273
|
},
|
271
274
|
{
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
275
|
+
name: "password-confirm",
|
276
|
+
displayName: id<`\${${MessageKey}}`>("${passwordConfirm}"),
|
277
|
+
required: true,
|
278
|
+
readOnly: false,
|
279
|
+
validators: {},
|
280
|
+
annotations: {},
|
281
|
+
html5DataAnnotations: {},
|
282
|
+
autocomplete: "new-password",
|
280
283
|
// NOTE: Compat with Keycloak version prior to 24
|
281
|
-
...({
|
284
|
+
...({ groupAnnotations: {} } as {})
|
282
285
|
}
|
283
286
|
);
|
284
287
|
}
|
285
288
|
}
|
286
289
|
|
290
|
+
// NOTE: Consistency patch
|
291
|
+
syntheticAttributes.forEach(attribute => {
|
292
|
+
if (getIsMultivaluedSingleField({ attribute })) {
|
293
|
+
attribute.multivalued = true;
|
294
|
+
}
|
295
|
+
|
296
|
+
if (attribute.multivalued) {
|
297
|
+
attribute.values ??= attribute.value !== undefined ? [attribute.value] : [];
|
298
|
+
delete attribute.value;
|
299
|
+
} else {
|
300
|
+
attribute.value ??= attribute.values?.[0];
|
301
|
+
delete attribute.values;
|
302
|
+
}
|
303
|
+
});
|
304
|
+
|
287
305
|
return syntheticAttributes;
|
288
306
|
})();
|
289
307
|
|
290
308
|
const initialFormFieldState = (() => {
|
291
|
-
const out: {
|
309
|
+
const out: {
|
310
|
+
attribute: Attribute;
|
311
|
+
valueOrValues: string | string[];
|
312
|
+
}[] = [];
|
292
313
|
|
293
314
|
for (const attribute of syntheticAttributes) {
|
294
315
|
handle_multi_valued_attribute: {
|
@@ -296,10 +317,10 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
|
|
296
317
|
break handle_multi_valued_attribute;
|
297
318
|
}
|
298
319
|
|
299
|
-
const values = attribute.values
|
320
|
+
const values = attribute.values?.length ? attribute.values : [""];
|
300
321
|
|
301
322
|
apply_validator_min_range: {
|
302
|
-
if (attribute
|
323
|
+
if (getIsMultivaluedSingleField({ attribute })) {
|
303
324
|
break apply_validator_min_range;
|
304
325
|
}
|
305
326
|
|
@@ -311,7 +332,7 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
|
|
311
332
|
|
312
333
|
const { min: minStr } = validator;
|
313
334
|
|
314
|
-
if (minStr
|
335
|
+
if (!minStr) {
|
315
336
|
break apply_validator_min_range;
|
316
337
|
}
|
317
338
|
|
@@ -324,7 +345,7 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
|
|
324
345
|
|
325
346
|
out.push({
|
326
347
|
attribute,
|
327
|
-
|
348
|
+
valueOrValues: values
|
328
349
|
});
|
329
350
|
|
330
351
|
continue;
|
@@ -332,7 +353,7 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
|
|
332
353
|
|
333
354
|
out.push({
|
334
355
|
attribute,
|
335
|
-
|
356
|
+
valueOrValues: attribute.value ?? ""
|
336
357
|
});
|
337
358
|
}
|
338
359
|
|
@@ -340,36 +361,37 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
|
|
340
361
|
})();
|
341
362
|
|
342
363
|
const initialState: internal.State = {
|
343
|
-
|
364
|
+
formFieldStates: initialFormFieldState.map(({ attribute, valueOrValues }) => ({
|
344
365
|
attribute,
|
345
|
-
|
346
|
-
|
347
|
-
|
366
|
+
errors: getErrors({
|
367
|
+
attributeName: attribute.name,
|
368
|
+
formFieldStates: initialFormFieldState
|
348
369
|
}),
|
349
|
-
|
350
|
-
|
370
|
+
hasLostFocusAtLeastOnce:
|
371
|
+
valueOrValues instanceof Array && !getIsMultivaluedSingleField({ attribute }) ? valueOrValues.map(() => false) : false,
|
372
|
+
valueOrValues: valueOrValues
|
351
373
|
}))
|
352
374
|
};
|
353
375
|
|
354
376
|
return initialState;
|
355
377
|
}, []);
|
356
378
|
|
357
|
-
const [state, dispatchFormAction] = useReducer(function reducer(state: internal.State,
|
358
|
-
const formFieldState = state.formFieldStates.find(({ attribute }) => attribute.name ===
|
379
|
+
const [state, dispatchFormAction] = useReducer(function reducer(state: internal.State, formAction: FormAction): internal.State {
|
380
|
+
const formFieldState = state.formFieldStates.find(({ attribute }) => attribute.name === formAction.name);
|
359
381
|
|
360
382
|
assert(formFieldState !== undefined);
|
361
383
|
|
362
384
|
(() => {
|
363
|
-
switch (
|
385
|
+
switch (formAction.action) {
|
364
386
|
case "update":
|
365
|
-
formFieldState.valueOrValues =
|
387
|
+
formFieldState.valueOrValues = formAction.valueOrValues;
|
366
388
|
|
367
389
|
apply_formatters: {
|
368
390
|
const { attribute } = formFieldState;
|
369
391
|
|
370
392
|
const { kcNumberFormat } = attribute.html5DataAnnotations ?? {};
|
371
393
|
|
372
|
-
if (kcNumberFormat
|
394
|
+
if (!kcNumberFormat) {
|
373
395
|
break apply_formatters;
|
374
396
|
}
|
375
397
|
|
@@ -381,8 +403,8 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
|
|
381
403
|
}
|
382
404
|
|
383
405
|
formFieldState.errors = getErrors({
|
384
|
-
|
385
|
-
|
406
|
+
attributeName: formAction.name,
|
407
|
+
formFieldStates: state.formFieldStates
|
386
408
|
});
|
387
409
|
|
388
410
|
update_password_confirm: {
|
@@ -390,21 +412,21 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
|
|
390
412
|
break update_password_confirm;
|
391
413
|
}
|
392
414
|
|
393
|
-
if (
|
415
|
+
if (formAction.name !== "password") {
|
394
416
|
break update_password_confirm;
|
395
417
|
}
|
396
418
|
|
397
419
|
state = reducer(state, {
|
398
|
-
|
399
|
-
|
400
|
-
|
420
|
+
action: "update",
|
421
|
+
name: "password-confirm",
|
422
|
+
valueOrValues: formAction.valueOrValues
|
401
423
|
});
|
402
424
|
}
|
403
425
|
|
404
426
|
return;
|
405
427
|
case "focus lost":
|
406
428
|
if (formFieldState.hasLostFocusAtLeastOnce instanceof Array) {
|
407
|
-
const { fieldIndex } =
|
429
|
+
const { fieldIndex } = formAction;
|
408
430
|
assert(fieldIndex !== undefined);
|
409
431
|
formFieldState.hasLostFocusAtLeastOnce[fieldIndex] = true;
|
410
432
|
return;
|
@@ -413,23 +435,23 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
|
|
413
435
|
formFieldState.hasLostFocusAtLeastOnce = true;
|
414
436
|
return;
|
415
437
|
}
|
416
|
-
assert<Equals<typeof
|
438
|
+
assert<Equals<typeof formAction, never>>(false);
|
417
439
|
})();
|
418
440
|
|
419
|
-
return state;
|
441
|
+
return { ...state };
|
420
442
|
}, initialState);
|
421
443
|
|
422
444
|
const formState: FormState = useMemo(
|
423
445
|
() => ({
|
424
|
-
|
446
|
+
formFieldStates: state.formFieldStates.map(
|
425
447
|
({ errors, hasLostFocusAtLeastOnce: hasLostFocusAtLeastOnceOrArr, attribute, ...valueOrValuesWrap }) => ({
|
426
|
-
|
448
|
+
displayableErrors: errors.filter(error => {
|
427
449
|
const hasLostFocusAtLeastOnce =
|
428
450
|
typeof hasLostFocusAtLeastOnceOrArr === "boolean"
|
429
451
|
? hasLostFocusAtLeastOnceOrArr
|
430
452
|
: error.fieldIndex !== undefined
|
431
|
-
|
432
|
-
|
453
|
+
? hasLostFocusAtLeastOnceOrArr[error.fieldIndex]
|
454
|
+
: hasLostFocusAtLeastOnceOrArr[hasLostFocusAtLeastOnceOrArr.length - 1];
|
433
455
|
|
434
456
|
switch (error.source.type) {
|
435
457
|
case "server":
|
@@ -482,7 +504,7 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
|
|
482
504
|
...valueOrValuesWrap
|
483
505
|
})
|
484
506
|
),
|
485
|
-
|
507
|
+
isFormSubmittable: state.formFieldStates.every(({ errors }) => errors.length === 0)
|
486
508
|
}),
|
487
509
|
[state]
|
488
510
|
);
|
@@ -501,7 +523,13 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
501
523
|
const { msg, msgStr, advancedMsg, advancedMsgStr } = i18n;
|
502
524
|
|
503
525
|
const getErrors = useConstCallback(
|
504
|
-
(params: {
|
526
|
+
(params: {
|
527
|
+
attributeName: string;
|
528
|
+
formFieldStates: {
|
529
|
+
attribute: Attribute;
|
530
|
+
valueOrValues: string | string[];
|
531
|
+
}[];
|
532
|
+
}): FormFieldError[] => {
|
505
533
|
const { attributeName, formFieldStates } = params;
|
506
534
|
|
507
535
|
const formFieldState = formFieldStates.find(({ attribute }) => attribute.name === attributeName);
|
@@ -516,7 +544,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
516
544
|
unFormat_number: {
|
517
545
|
const { kcNumberUnFormat } = attribute.html5DataAnnotations ?? {};
|
518
546
|
|
519
|
-
if (kcNumberUnFormat
|
547
|
+
if (!kcNumberUnFormat) {
|
520
548
|
break unFormat_number;
|
521
549
|
}
|
522
550
|
|
@@ -534,7 +562,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
534
562
|
|
535
563
|
server_side_error: {
|
536
564
|
if (attribute.multivalued) {
|
537
|
-
const defaultValues = attribute.values
|
565
|
+
const defaultValues = attribute.values?.length ? attribute.values : [""];
|
538
566
|
|
539
567
|
assert(valueOrValues instanceof Array);
|
540
568
|
|
@@ -572,10 +600,10 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
572
600
|
return [
|
573
601
|
{
|
574
602
|
errorMessageStr,
|
575
|
-
|
576
|
-
|
577
|
-
|
578
|
-
|
603
|
+
errorMessage: <span key={0}>{errorMessageStr}</span>,
|
604
|
+
fieldIndex: undefined,
|
605
|
+
source: {
|
606
|
+
type: "server"
|
579
607
|
}
|
580
608
|
}
|
581
609
|
];
|
@@ -586,7 +614,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
586
614
|
break handle_multi_valued_multi_fields;
|
587
615
|
}
|
588
616
|
|
589
|
-
if (attribute
|
617
|
+
if (getIsMultivaluedSingleField({ attribute })) {
|
590
618
|
break handle_multi_valued_multi_fields;
|
591
619
|
}
|
592
620
|
|
@@ -598,19 +626,19 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
598
626
|
.map((...[, index]) => {
|
599
627
|
const specificValueErrors = getErrors({
|
600
628
|
attributeName,
|
601
|
-
|
629
|
+
formFieldStates: formFieldStates.map(formFieldState => {
|
602
630
|
if (formFieldState.attribute.name === attributeName) {
|
603
631
|
assert(formFieldState.valueOrValues instanceof Array);
|
604
632
|
return {
|
605
|
-
|
633
|
+
attribute: {
|
606
634
|
...attribute,
|
607
|
-
|
635
|
+
annotations: {
|
608
636
|
...attribute.annotations,
|
609
|
-
|
637
|
+
inputType: undefined
|
610
638
|
},
|
611
|
-
|
639
|
+
multivalued: false
|
612
640
|
},
|
613
|
-
|
641
|
+
valueOrValues: formFieldState.valueOrValues[index]
|
614
642
|
};
|
615
643
|
}
|
616
644
|
|
@@ -626,7 +654,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
626
654
|
|
627
655
|
return true;
|
628
656
|
})
|
629
|
-
.map(
|
657
|
+
.map(
|
658
|
+
(error): FormFieldError => ({
|
659
|
+
...error,
|
660
|
+
fieldIndex: index
|
661
|
+
})
|
662
|
+
);
|
630
663
|
})
|
631
664
|
.reduce((acc, errors) => [...acc, ...errors], []);
|
632
665
|
|
@@ -642,12 +675,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
642
675
|
const msgArgs = ["error-user-attribute-required"] as const;
|
643
676
|
|
644
677
|
errors.push({
|
645
|
-
|
646
|
-
|
647
|
-
|
648
|
-
|
649
|
-
|
650
|
-
|
678
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
679
|
+
errorMessageStr: msgStr(...msgArgs),
|
680
|
+
fieldIndex: undefined,
|
681
|
+
source: {
|
682
|
+
type: "other",
|
683
|
+
rule: "requiredField"
|
651
684
|
}
|
652
685
|
});
|
653
686
|
}
|
@@ -660,7 +693,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
660
693
|
break handle_multi_valued_single_field;
|
661
694
|
}
|
662
695
|
|
663
|
-
if (!attribute
|
696
|
+
if (!getIsMultivaluedSingleField({ attribute })) {
|
664
697
|
break handle_multi_valued_single_field;
|
665
698
|
}
|
666
699
|
|
@@ -674,13 +707,13 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
674
707
|
|
675
708
|
const { min: minStr } = validator;
|
676
709
|
|
677
|
-
const min = minStr
|
710
|
+
const min = minStr ? parseInt(`${minStr}`) : attribute.required ? 1 : 0;
|
678
711
|
|
679
712
|
assert(!isNaN(min));
|
680
713
|
|
681
714
|
const { max: maxStr } = validator;
|
682
715
|
|
683
|
-
const max = maxStr
|
716
|
+
const max = !maxStr ? Infinity : parseInt(`${maxStr}`);
|
684
717
|
|
685
718
|
assert(!isNaN(max));
|
686
719
|
|
@@ -696,12 +729,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
696
729
|
|
697
730
|
return [
|
698
731
|
{
|
699
|
-
|
700
|
-
|
701
|
-
|
702
|
-
|
703
|
-
|
704
|
-
|
732
|
+
errorMessage: <Fragment key={0}>{msg(...msgArgs)}</Fragment>,
|
733
|
+
errorMessageStr: msgStr(...msgArgs),
|
734
|
+
fieldIndex: undefined,
|
735
|
+
source: {
|
736
|
+
type: "validator",
|
737
|
+
name: validatorName
|
705
738
|
}
|
706
739
|
}
|
707
740
|
];
|
@@ -727,7 +760,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
727
760
|
|
728
761
|
const policy = passwordPolicies[policyName];
|
729
762
|
|
730
|
-
if (policy
|
763
|
+
if (!policy) {
|
731
764
|
break check_password_policy_x;
|
732
765
|
}
|
733
766
|
|
@@ -740,12 +773,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
740
773
|
const msgArgs = ["invalidPasswordMinLengthMessage", `${minLength}`] as const;
|
741
774
|
|
742
775
|
errors.push({
|
743
|
-
|
744
|
-
|
745
|
-
|
746
|
-
|
747
|
-
|
748
|
-
|
776
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
777
|
+
errorMessageStr: msgStr(...msgArgs),
|
778
|
+
fieldIndex: undefined,
|
779
|
+
source: {
|
780
|
+
type: "passwordPolicy",
|
781
|
+
name: policyName
|
749
782
|
}
|
750
783
|
});
|
751
784
|
}
|
@@ -755,7 +788,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
755
788
|
|
756
789
|
const policy = passwordPolicies[policyName];
|
757
790
|
|
758
|
-
if (policy
|
791
|
+
if (!policy) {
|
759
792
|
break check_password_policy_x;
|
760
793
|
}
|
761
794
|
|
@@ -768,12 +801,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
768
801
|
const msgArgs = ["invalidPasswordMinDigitsMessage", `${minNumberOfDigits}`] as const;
|
769
802
|
|
770
803
|
errors.push({
|
771
|
-
|
772
|
-
|
773
|
-
|
774
|
-
|
775
|
-
|
776
|
-
|
804
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
805
|
+
errorMessageStr: msgStr(...msgArgs),
|
806
|
+
fieldIndex: undefined,
|
807
|
+
source: {
|
808
|
+
type: "passwordPolicy",
|
809
|
+
name: policyName
|
777
810
|
}
|
778
811
|
});
|
779
812
|
}
|
@@ -783,7 +816,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
783
816
|
|
784
817
|
const policy = passwordPolicies[policyName];
|
785
818
|
|
786
|
-
if (policy
|
819
|
+
if (!policy) {
|
787
820
|
break check_password_policy_x;
|
788
821
|
}
|
789
822
|
|
@@ -798,12 +831,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
798
831
|
const msgArgs = ["invalidPasswordMinLowerCaseCharsMessage", `${minNumberOfLowerCaseChar}`] as const;
|
799
832
|
|
800
833
|
errors.push({
|
801
|
-
|
802
|
-
|
803
|
-
|
804
|
-
|
805
|
-
|
806
|
-
|
834
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
835
|
+
errorMessageStr: msgStr(...msgArgs),
|
836
|
+
fieldIndex: undefined,
|
837
|
+
source: {
|
838
|
+
type: "passwordPolicy",
|
839
|
+
name: policyName
|
807
840
|
}
|
808
841
|
});
|
809
842
|
}
|
@@ -813,7 +846,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
813
846
|
|
814
847
|
const policy = passwordPolicies[policyName];
|
815
848
|
|
816
|
-
if (policy
|
849
|
+
if (!policy) {
|
817
850
|
break check_password_policy_x;
|
818
851
|
}
|
819
852
|
|
@@ -828,12 +861,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
828
861
|
const msgArgs = ["invalidPasswordMinUpperCaseCharsMessage", `${minNumberOfUpperCaseChar}`] as const;
|
829
862
|
|
830
863
|
errors.push({
|
831
|
-
|
832
|
-
|
833
|
-
|
834
|
-
|
835
|
-
|
836
|
-
|
864
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
865
|
+
errorMessageStr: msgStr(...msgArgs),
|
866
|
+
fieldIndex: undefined,
|
867
|
+
source: {
|
868
|
+
type: "passwordPolicy",
|
869
|
+
name: policyName
|
837
870
|
}
|
838
871
|
});
|
839
872
|
}
|
@@ -843,7 +876,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
843
876
|
|
844
877
|
const policy = passwordPolicies[policyName];
|
845
878
|
|
846
|
-
if (policy
|
879
|
+
if (!policy) {
|
847
880
|
break check_password_policy_x;
|
848
881
|
}
|
849
882
|
|
@@ -856,12 +889,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
856
889
|
const msgArgs = ["invalidPasswordMinSpecialCharsMessage", `${minNumberOfSpecialChar}`] as const;
|
857
890
|
|
858
891
|
errors.push({
|
859
|
-
|
860
|
-
|
861
|
-
|
862
|
-
|
863
|
-
|
864
|
-
|
892
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
893
|
+
errorMessageStr: msgStr(...msgArgs),
|
894
|
+
fieldIndex: undefined,
|
895
|
+
source: {
|
896
|
+
type: "passwordPolicy",
|
897
|
+
name: policyName
|
865
898
|
}
|
866
899
|
});
|
867
900
|
}
|
@@ -877,7 +910,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
877
910
|
|
878
911
|
const usernameFormFieldState = formFieldStates.find(formFieldState => formFieldState.attribute.name === "username");
|
879
912
|
|
880
|
-
if (usernameFormFieldState
|
913
|
+
if (!usernameFormFieldState) {
|
881
914
|
break check_password_policy_x;
|
882
915
|
}
|
883
916
|
|
@@ -889,7 +922,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
889
922
|
unFormat_number: {
|
890
923
|
const { kcNumberUnFormat } = attribute.html5DataAnnotations ?? {};
|
891
924
|
|
892
|
-
if (kcNumberUnFormat
|
925
|
+
if (!kcNumberUnFormat) {
|
893
926
|
break unFormat_number;
|
894
927
|
}
|
895
928
|
|
@@ -899,6 +932,10 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
899
932
|
return valueOrValues;
|
900
933
|
})();
|
901
934
|
|
935
|
+
if (usernameValue === "") {
|
936
|
+
break check_password_policy_x;
|
937
|
+
}
|
938
|
+
|
902
939
|
if (value !== usernameValue) {
|
903
940
|
break check_password_policy_x;
|
904
941
|
}
|
@@ -906,12 +943,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
906
943
|
const msgArgs = ["invalidPasswordNotUsernameMessage"] as const;
|
907
944
|
|
908
945
|
errors.push({
|
909
|
-
|
910
|
-
|
911
|
-
|
912
|
-
|
913
|
-
|
914
|
-
|
946
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
947
|
+
errorMessageStr: msgStr(...msgArgs),
|
948
|
+
fieldIndex: undefined,
|
949
|
+
source: {
|
950
|
+
type: "passwordPolicy",
|
951
|
+
name: policyName
|
915
952
|
}
|
916
953
|
});
|
917
954
|
}
|
@@ -927,7 +964,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
927
964
|
|
928
965
|
const emailFormFieldState = formFieldStates.find(formFieldState => formFieldState.attribute.name === "email");
|
929
966
|
|
930
|
-
if (emailFormFieldState
|
967
|
+
if (!emailFormFieldState) {
|
931
968
|
break check_password_policy_x;
|
932
969
|
}
|
933
970
|
|
@@ -936,6 +973,10 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
936
973
|
{
|
937
974
|
const emailValue = emailFormFieldState.valueOrValues;
|
938
975
|
|
976
|
+
if (emailValue === "") {
|
977
|
+
break check_password_policy_x;
|
978
|
+
}
|
979
|
+
|
939
980
|
if (value !== emailValue) {
|
940
981
|
break check_password_policy_x;
|
941
982
|
}
|
@@ -944,12 +985,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
944
985
|
const msgArgs = ["invalidPasswordNotEmailMessage"] as const;
|
945
986
|
|
946
987
|
errors.push({
|
947
|
-
|
948
|
-
|
949
|
-
|
950
|
-
|
951
|
-
|
952
|
-
|
988
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
989
|
+
errorMessageStr: msgStr(...msgArgs),
|
990
|
+
fieldIndex: undefined,
|
991
|
+
source: {
|
992
|
+
type: "passwordPolicy",
|
993
|
+
name: policyName
|
953
994
|
}
|
954
995
|
});
|
955
996
|
}
|
@@ -977,12 +1018,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
977
1018
|
const msgArgs = ["invalidPasswordConfirmMessage"] as const;
|
978
1019
|
|
979
1020
|
errors.push({
|
980
|
-
|
981
|
-
|
982
|
-
|
983
|
-
|
984
|
-
|
985
|
-
|
1021
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
1022
|
+
errorMessageStr: msgStr(...msgArgs),
|
1023
|
+
fieldIndex: undefined,
|
1024
|
+
source: {
|
1025
|
+
type: "other",
|
1026
|
+
rule: "passwordConfirmMatchesPassword"
|
986
1027
|
}
|
987
1028
|
});
|
988
1029
|
}
|
@@ -1001,12 +1042,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
1001
1042
|
const msgArgs = ["error-user-attribute-required"] as const;
|
1002
1043
|
|
1003
1044
|
errors.push({
|
1004
|
-
|
1005
|
-
|
1006
|
-
|
1007
|
-
|
1008
|
-
|
1009
|
-
|
1045
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
1046
|
+
errorMessageStr: msgStr(...msgArgs),
|
1047
|
+
fieldIndex: undefined,
|
1048
|
+
source: {
|
1049
|
+
type: "other",
|
1050
|
+
rule: "requiredField"
|
1010
1051
|
}
|
1011
1052
|
});
|
1012
1053
|
}
|
@@ -1016,7 +1057,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
1016
1057
|
|
1017
1058
|
const validator = validators[validatorName];
|
1018
1059
|
|
1019
|
-
if (validator
|
1060
|
+
if (!validator) {
|
1020
1061
|
break validator_x;
|
1021
1062
|
}
|
1022
1063
|
|
@@ -1027,28 +1068,28 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
1027
1068
|
}
|
1028
1069
|
|
1029
1070
|
const source: FormFieldError.Source = {
|
1030
|
-
|
1031
|
-
|
1071
|
+
type: "validator",
|
1072
|
+
name: validatorName
|
1032
1073
|
};
|
1033
1074
|
|
1034
|
-
if (max
|
1075
|
+
if (max && value.length > parseInt(`${max}`)) {
|
1035
1076
|
const msgArgs = ["error-invalid-length-too-long", `${max}`] as const;
|
1036
1077
|
|
1037
1078
|
errors.push({
|
1038
|
-
|
1039
|
-
|
1040
|
-
|
1079
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
1080
|
+
errorMessageStr: msgStr(...msgArgs),
|
1081
|
+
fieldIndex: undefined,
|
1041
1082
|
source
|
1042
1083
|
});
|
1043
1084
|
}
|
1044
1085
|
|
1045
|
-
if (min
|
1086
|
+
if (min && value.length < parseInt(`${min}`)) {
|
1046
1087
|
const msgArgs = ["error-invalid-length-too-short", `${min}`] as const;
|
1047
1088
|
|
1048
1089
|
errors.push({
|
1049
|
-
|
1050
|
-
|
1051
|
-
|
1090
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
1091
|
+
errorMessageStr: msgStr(...msgArgs),
|
1092
|
+
fieldIndex: undefined,
|
1052
1093
|
source
|
1053
1094
|
});
|
1054
1095
|
}
|
@@ -1076,12 +1117,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
1076
1117
|
const msgArgs = [errorMessageKey ?? id<MessageKey>("shouldMatchPattern"), pattern] as const;
|
1077
1118
|
|
1078
1119
|
errors.push({
|
1079
|
-
|
1080
|
-
|
1081
|
-
|
1082
|
-
|
1083
|
-
|
1084
|
-
|
1120
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{advancedMsg(...msgArgs)}</Fragment>,
|
1121
|
+
errorMessageStr: advancedMsgStr(...msgArgs),
|
1122
|
+
fieldIndex: undefined,
|
1123
|
+
source: {
|
1124
|
+
type: "validator",
|
1125
|
+
name: validatorName
|
1085
1126
|
}
|
1086
1127
|
});
|
1087
1128
|
}
|
@@ -1115,12 +1156,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
1115
1156
|
const msgArgs = [id<MessageKey>("invalidEmailMessage")] as const;
|
1116
1157
|
|
1117
1158
|
errors.push({
|
1118
|
-
|
1119
|
-
|
1120
|
-
|
1121
|
-
|
1122
|
-
|
1123
|
-
|
1159
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
1160
|
+
errorMessageStr: msgStr(...msgArgs),
|
1161
|
+
fieldIndex: undefined,
|
1162
|
+
source: {
|
1163
|
+
type: "validator",
|
1164
|
+
name: validatorName
|
1124
1165
|
}
|
1125
1166
|
});
|
1126
1167
|
}
|
@@ -1143,43 +1184,43 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
1143
1184
|
const intValue = parseInt(value);
|
1144
1185
|
|
1145
1186
|
const source: FormFieldError.Source = {
|
1146
|
-
|
1147
|
-
|
1187
|
+
type: "validator",
|
1188
|
+
name: validatorName
|
1148
1189
|
};
|
1149
1190
|
|
1150
1191
|
if (isNaN(intValue)) {
|
1151
1192
|
const msgArgs = ["mustBeAnInteger"] as const;
|
1152
1193
|
|
1153
1194
|
errors.push({
|
1154
|
-
|
1155
|
-
|
1156
|
-
|
1195
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
1196
|
+
errorMessageStr: msgStr(...msgArgs),
|
1197
|
+
fieldIndex: undefined,
|
1157
1198
|
source
|
1158
1199
|
});
|
1159
1200
|
|
1160
1201
|
break validator_x;
|
1161
1202
|
}
|
1162
1203
|
|
1163
|
-
if (max
|
1204
|
+
if (max && intValue > parseInt(`${max}`)) {
|
1164
1205
|
const msgArgs = ["error-number-out-of-range-too-big", `${max}`] as const;
|
1165
1206
|
|
1166
1207
|
errors.push({
|
1167
|
-
|
1168
|
-
|
1169
|
-
|
1208
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
1209
|
+
errorMessageStr: msgStr(...msgArgs),
|
1210
|
+
fieldIndex: undefined,
|
1170
1211
|
source
|
1171
1212
|
});
|
1172
1213
|
|
1173
1214
|
break validator_x;
|
1174
1215
|
}
|
1175
1216
|
|
1176
|
-
if (min
|
1217
|
+
if (min && intValue < parseInt(`${min}`)) {
|
1177
1218
|
const msgArgs = ["error-number-out-of-range-too-small", `${min}`] as const;
|
1178
1219
|
|
1179
1220
|
errors.push({
|
1180
|
-
|
1181
|
-
|
1182
|
-
|
1221
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
1222
|
+
errorMessageStr: msgStr(...msgArgs),
|
1223
|
+
fieldIndex: undefined,
|
1183
1224
|
source
|
1184
1225
|
});
|
1185
1226
|
|
@@ -1207,12 +1248,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
1207
1248
|
const msgArgs = [id<MessageKey>("notAValidOption")] as const;
|
1208
1249
|
|
1209
1250
|
errors.push({
|
1210
|
-
|
1211
|
-
|
1212
|
-
|
1213
|
-
|
1214
|
-
|
1215
|
-
|
1251
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{advancedMsg(...msgArgs)}</Fragment>,
|
1252
|
+
errorMessageStr: advancedMsgStr(...msgArgs),
|
1253
|
+
fieldIndex: undefined,
|
1254
|
+
source: {
|
1255
|
+
type: "validator",
|
1256
|
+
name: validatorName
|
1216
1257
|
}
|
1217
1258
|
});
|
1218
1259
|
}
|
@@ -1225,3 +1266,79 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
1225
1266
|
|
1226
1267
|
return { getErrors };
|
1227
1268
|
}
|
1269
|
+
|
1270
|
+
function getIsMultivaluedSingleField(params: { attribute: Attribute }) {
|
1271
|
+
const { attribute } = params;
|
1272
|
+
|
1273
|
+
return attribute.annotations.inputType?.startsWith("multiselect") ?? false;
|
1274
|
+
}
|
1275
|
+
|
1276
|
+
export function getButtonToDisplayForMultivaluedAttributeField(params: { attribute: Attribute; values: string[]; fieldIndex: number }) {
|
1277
|
+
const { attribute, values, fieldIndex } = params;
|
1278
|
+
|
1279
|
+
const hasRemove = (() => {
|
1280
|
+
if (values.length === 1) {
|
1281
|
+
return false;
|
1282
|
+
}
|
1283
|
+
|
1284
|
+
const minCount = (() => {
|
1285
|
+
const { multivalued } = attribute.validators;
|
1286
|
+
|
1287
|
+
if (multivalued === undefined) {
|
1288
|
+
return undefined;
|
1289
|
+
}
|
1290
|
+
|
1291
|
+
const minStr = multivalued.min;
|
1292
|
+
|
1293
|
+
if (minStr === undefined) {
|
1294
|
+
return undefined;
|
1295
|
+
}
|
1296
|
+
|
1297
|
+
return parseInt(`${minStr}`);
|
1298
|
+
})();
|
1299
|
+
|
1300
|
+
if (minCount === undefined) {
|
1301
|
+
return true;
|
1302
|
+
}
|
1303
|
+
|
1304
|
+
if (values.length === minCount) {
|
1305
|
+
return false;
|
1306
|
+
}
|
1307
|
+
|
1308
|
+
return true;
|
1309
|
+
})();
|
1310
|
+
|
1311
|
+
const hasAdd = (() => {
|
1312
|
+
if (fieldIndex + 1 !== values.length) {
|
1313
|
+
return false;
|
1314
|
+
}
|
1315
|
+
|
1316
|
+
const maxCount = (() => {
|
1317
|
+
const { multivalued } = attribute.validators;
|
1318
|
+
|
1319
|
+
if (multivalued === undefined) {
|
1320
|
+
return undefined;
|
1321
|
+
}
|
1322
|
+
|
1323
|
+
const maxStr = multivalued.max;
|
1324
|
+
|
1325
|
+
if (maxStr === undefined) {
|
1326
|
+
return undefined;
|
1327
|
+
}
|
1328
|
+
|
1329
|
+
return parseInt(`${maxStr}`);
|
1330
|
+
})();
|
1331
|
+
|
1332
|
+
if (maxCount === undefined) {
|
1333
|
+
return false;
|
1334
|
+
}
|
1335
|
+
|
1336
|
+
if (values.length === maxCount) {
|
1337
|
+
return false;
|
1338
|
+
}
|
1339
|
+
|
1340
|
+
return true;
|
1341
|
+
})();
|
1342
|
+
|
1343
|
+
return { hasRemove, hasAdd };
|
1344
|
+
}
|