keycloakify 2.2.0 → 2.5.1
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/CHANGELOG.md +21 -0
- package/README.md +156 -127
- package/bin/KeycloakVersion.js.map +1 -1
- package/bin/build-keycloak-theme/build-keycloak-theme.js +57 -54
- package/bin/build-keycloak-theme/build-keycloak-theme.js.map +1 -1
- package/bin/build-keycloak-theme/ftlValuesGlobalName.js.map +1 -1
- package/bin/build-keycloak-theme/generateDebugFiles/generateDebugFiles.js +4 -11
- package/bin/build-keycloak-theme/generateDebugFiles/generateDebugFiles.js.map +1 -1
- package/bin/build-keycloak-theme/generateFtl/common.ftl +72 -56
- package/bin/build-keycloak-theme/generateFtl/generateFtl.d.ts +1 -1
- package/bin/build-keycloak-theme/generateFtl/generateFtl.js +47 -44
- package/bin/build-keycloak-theme/generateFtl/generateFtl.js.map +1 -1
- package/bin/build-keycloak-theme/generateJavaStackFiles.js +12 -8
- package/bin/build-keycloak-theme/generateJavaStackFiles.js.map +1 -1
- package/bin/build-keycloak-theme/generateKeycloakThemeResources.js +20 -21
- package/bin/build-keycloak-theme/generateKeycloakThemeResources.js.map +1 -1
- package/bin/build-keycloak-theme/index.js.map +1 -1
- package/bin/build-keycloak-theme/replaceImportFromStatic.js +18 -30
- package/bin/build-keycloak-theme/replaceImportFromStatic.js.map +1 -1
- package/bin/download-builtin-keycloak-theme.js +2 -2
- package/bin/download-builtin-keycloak-theme.js.map +1 -1
- package/bin/generate-i18n-messages.js +9 -11
- package/bin/generate-i18n-messages.js.map +1 -1
- package/bin/link_in_test_app.js +6 -22
- package/bin/link_in_test_app.js.map +1 -1
- package/bin/tools/crawl.js.map +1 -1
- package/bin/tools/downloadAndUnzip.js +4 -5
- package/bin/tools/downloadAndUnzip.js.map +1 -1
- package/bin/tools/grant-exec-perms.js +4 -3
- package/bin/tools/grant-exec-perms.js.map +1 -1
- package/bin/tools/isInside.js.map +1 -1
- package/bin/tools/rm.js +1 -1
- package/bin/tools/rm.js.map +1 -1
- package/bin/tools/transformCodebase.js +7 -3
- package/bin/tools/transformCodebase.js.map +1 -1
- package/lib/components/Error.js +1 -2
- package/lib/components/Error.js.map +1 -1
- package/lib/components/Info.js +1 -15
- package/lib/components/Info.js.map +1 -1
- package/lib/components/KcApp.js +23 -10
- package/lib/components/KcApp.js.map +1 -1
- package/lib/components/KcProps.d.ts +4 -2
- package/lib/components/KcProps.js +10 -8
- package/lib/components/KcProps.js.map +1 -1
- package/lib/components/Login.js +20 -18
- package/lib/components/Login.js.map +1 -1
- package/lib/components/LoginIdpLinkConfirm.js.map +1 -1
- package/lib/components/LoginOtp.js +14 -15
- package/lib/components/LoginOtp.js.map +1 -1
- package/lib/components/LoginResetPassword.js +5 -7
- package/lib/components/LoginResetPassword.js.map +1 -1
- package/lib/components/LoginUpdateProfile.js +1 -5
- package/lib/components/LoginUpdateProfile.js.map +1 -1
- package/lib/components/LoginVerifyEmail.js.map +1 -1
- package/lib/components/Register.js +1 -4
- package/lib/components/Register.js.map +1 -1
- package/lib/components/RegisterUserProfile.d.ts +6 -0
- package/lib/components/RegisterUserProfile.js +78 -0
- package/lib/components/RegisterUserProfile.js.map +1 -0
- package/lib/components/Template.js +28 -43
- package/lib/components/Template.js.map +1 -1
- package/lib/components/Terms.js.map +1 -1
- package/lib/getKcContext/KcContextBase.d.ts +78 -18
- package/lib/getKcContext/KcContextBase.js +2 -3
- package/lib/getKcContext/KcContextBase.js.map +1 -1
- package/lib/getKcContext/getKcContext.d.ts +1 -3
- package/lib/getKcContext/getKcContext.js +5 -9
- package/lib/getKcContext/getKcContext.js.map +1 -1
- package/lib/getKcContext/kcContextMocks/kcContextMocks.d.ts +1 -0
- package/lib/getKcContext/kcContextMocks/kcContextMocks.js +187 -55
- package/lib/getKcContext/kcContextMocks/kcContextMocks.js.map +1 -1
- package/lib/getKcContext/kcContextMocks/urlResourcesPath.js.map +1 -1
- package/lib/i18n/KcLanguageTag.d.ts +25 -2
- package/lib/i18n/KcLanguageTag.js +27 -27
- package/lib/i18n/KcLanguageTag.js.map +1 -1
- package/lib/i18n/generated_kcMessages/11.0.3/account.js +27 -27
- package/lib/i18n/generated_kcMessages/11.0.3/account.js.map +1 -1
- package/lib/i18n/generated_kcMessages/11.0.3/admin.js +23 -23
- package/lib/i18n/generated_kcMessages/11.0.3/admin.js.map +1 -1
- package/lib/i18n/generated_kcMessages/11.0.3/email.js +97 -97
- package/lib/i18n/generated_kcMessages/11.0.3/email.js.map +1 -1
- package/lib/i18n/generated_kcMessages/11.0.3/login.js +30 -30
- package/lib/i18n/generated_kcMessages/11.0.3/login.js.map +1 -1
- package/lib/i18n/generated_kcMessages/15.0.2/account.js +29 -29
- package/lib/i18n/generated_kcMessages/15.0.2/account.js.map +1 -1
- package/lib/i18n/generated_kcMessages/15.0.2/admin.js +23 -23
- package/lib/i18n/generated_kcMessages/15.0.2/admin.js.map +1 -1
- package/lib/i18n/generated_kcMessages/15.0.2/email.js +111 -111
- package/lib/i18n/generated_kcMessages/15.0.2/email.js.map +1 -1
- package/lib/i18n/generated_kcMessages/15.0.2/login.js +32 -32
- package/lib/i18n/generated_kcMessages/15.0.2/login.js.map +1 -1
- package/lib/i18n/kcMessages/login.js +1 -1
- package/lib/i18n/kcMessages/login.js.map +1 -1
- package/lib/i18n/useKcLanguageTag.js +1 -3
- package/lib/i18n/useKcLanguageTag.js.map +1 -1
- package/lib/i18n/useKcMessage.d.ts +4 -2
- package/lib/i18n/useKcMessage.js +12 -3
- package/lib/i18n/useKcMessage.js.map +1 -1
- package/lib/keycloakJsAdapter.d.ts +6 -6
- package/lib/keycloakJsAdapter.js +10 -12
- package/lib/keycloakJsAdapter.js.map +1 -1
- package/lib/tools/ReactComponent.d.ts +2 -0
- package/lib/tools/ReactComponent.js +3 -0
- package/lib/tools/ReactComponent.js.map +1 -0
- package/lib/tools/allPropertiesValuesToUndefined.js +1 -2
- package/lib/tools/allPropertiesValuesToUndefined.js.map +1 -1
- package/lib/tools/appendHead.js +16 -12
- package/lib/tools/appendHead.js.map +1 -1
- package/lib/tools/assert.js.map +1 -1
- package/lib/tools/deepAssign.js +3 -4
- package/lib/tools/deepAssign.js.map +1 -1
- package/lib/tools/deepClone.js.map +1 -1
- package/package.json +25 -5
- package/src/bin/KeycloakVersion.ts +0 -2
- package/src/bin/build-keycloak-theme/build-keycloak-theme.ts +70 -77
- package/src/bin/build-keycloak-theme/ftlValuesGlobalName.ts +1 -2
- package/src/bin/build-keycloak-theme/generateDebugFiles/generateDebugFiles.ts +26 -37
- package/src/bin/build-keycloak-theme/generateDebugFiles/index.ts +1 -1
- package/src/bin/build-keycloak-theme/generateFtl/common.ftl +72 -56
- package/src/bin/build-keycloak-theme/generateFtl/generateFtl.ts +75 -95
- package/src/bin/build-keycloak-theme/generateFtl/index.ts +1 -1
- package/src/bin/build-keycloak-theme/generateJavaStackFiles.ts +38 -56
- package/src/bin/build-keycloak-theme/generateKeycloakThemeResources.ts +47 -85
- package/src/bin/build-keycloak-theme/index.ts +2 -4
- package/src/bin/build-keycloak-theme/replaceImportFromStatic.ts +34 -78
- package/src/bin/download-builtin-keycloak-theme.ts +5 -19
- package/src/bin/generate-i18n-messages.ts +13 -25
- package/src/bin/link_in_test_app.ts +9 -38
- package/src/bin/tools/crawl.ts +2 -12
- package/src/bin/tools/downloadAndUnzip.ts +6 -22
- package/src/bin/tools/getProjectRoot.ts +1 -1
- package/src/bin/tools/grant-exec-perms.ts +8 -7
- package/src/bin/tools/isInside.ts +2 -9
- package/src/bin/tools/rm.ts +21 -32
- package/src/bin/tools/transformCodebase.ts +20 -43
- package/src/lib/components/Error.tsx +3 -7
- package/src/lib/components/Info.tsx +23 -47
- package/src/lib/components/KcApp.tsx +25 -13
- package/src/lib/components/KcProps.ts +94 -92
- package/src/lib/components/Login.tsx +126 -116
- package/src/lib/components/LoginIdpLinkConfirm.tsx +38 -53
- package/src/lib/components/LoginOtp.tsx +39 -76
- package/src/lib/components/LoginResetPassword.tsx +9 -26
- package/src/lib/components/LoginUpdateProfile.tsx +104 -117
- package/src/lib/components/LoginVerifyEmail.tsx +3 -12
- package/src/lib/components/Register.tsx +76 -46
- package/src/lib/components/RegisterUserProfile.tsx +201 -0
- package/src/lib/components/Template.tsx +109 -161
- package/src/lib/components/Terms.tsx +4 -13
- package/src/lib/getKcContext/KcContextBase.ts +104 -53
- package/src/lib/getKcContext/getKcContext.ts +47 -78
- package/src/lib/getKcContext/index.ts +2 -2
- package/src/lib/getKcContext/kcContextMocks/index.ts +1 -1
- package/src/lib/getKcContext/kcContextMocks/kcContextMocks.ts +362 -241
- package/src/lib/getKcContext/kcContextMocks/urlResourcesPath.ts +1 -2
- package/src/lib/i18n/KcLanguageTag.ts +34 -45
- package/src/lib/i18n/generated_kcMessages/11.0.3/account.ts +3086 -3059
- package/src/lib/i18n/generated_kcMessages/11.0.3/admin.ts +248 -239
- package/src/lib/i18n/generated_kcMessages/11.0.3/email.ts +848 -633
- package/src/lib/i18n/generated_kcMessages/11.0.3/login.ts +4466 -4359
- package/src/lib/i18n/generated_kcMessages/15.0.2/account.ts +4247 -4202
- package/src/lib/i18n/generated_kcMessages/15.0.2/admin.ts +273 -264
- package/src/lib/i18n/generated_kcMessages/15.0.2/email.ts +997 -749
- package/src/lib/i18n/generated_kcMessages/15.0.2/login.ts +5352 -5212
- package/src/lib/i18n/kcMessages/login.ts +4 -9
- package/src/lib/i18n/useKcLanguageTag.ts +2 -16
- package/src/lib/i18n/useKcMessage.tsx +26 -15
- package/src/lib/index.ts +0 -1
- package/src/lib/keycloakJsAdapter.ts +23 -53
- package/src/lib/tools/AndByDiscriminatingKey.ts +16 -30
- package/src/lib/tools/DeepPartial.ts +1 -2
- package/src/lib/tools/ReactComponent.ts +4 -0
- package/src/lib/tools/allPropertiesValuesToUndefined.ts +1 -6
- package/src/lib/tools/appendHead.ts +28 -25
- package/src/lib/tools/assert.ts +1 -2
- package/src/lib/tools/deepAssign.ts +28 -46
- package/src/lib/tools/deepClone.ts +2 -3
@@ -5,129 +5,116 @@ import type { KcContextBase } from "../getKcContext/KcContextBase";
|
|
5
5
|
import { useKcMessage } from "../i18n/useKcMessage";
|
6
6
|
import { useCssAndCx } from "tss-react";
|
7
7
|
|
8
|
-
export const LoginUpdateProfile = memo(({ kcContext, ...props }: { kcContext: KcContextBase.LoginUpdateProfile
|
8
|
+
export const LoginUpdateProfile = memo(({ kcContext, ...props }: { kcContext: KcContextBase.LoginUpdateProfile } & KcProps) => {
|
9
|
+
const { cx } = useCssAndCx();
|
9
10
|
|
10
|
-
|
11
|
+
const { msg, msgStr } = useKcMessage();
|
11
12
|
|
12
|
-
|
13
|
+
const { url, user, messagesPerField, isAppInitiatedAction } = kcContext;
|
13
14
|
|
14
|
-
|
15
|
+
return (
|
16
|
+
<Template
|
17
|
+
{...{ kcContext, ...props }}
|
18
|
+
doFetchDefaultThemeResources={true}
|
19
|
+
headerNode={msg("loginProfileTitle")}
|
20
|
+
formNode={
|
21
|
+
<form id="kc-update-profile-form" className={cx(props.kcFormClass)} action={url.loginAction} method="post">
|
22
|
+
{user.editUsernameAllowed && (
|
23
|
+
<div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists("username", props.kcFormGroupErrorClass))}>
|
24
|
+
<div className={cx(props.kcLabelWrapperClass)}>
|
25
|
+
<label htmlFor="username" className={cx(props.kcLabelClass)}>
|
26
|
+
{msg("username")}
|
27
|
+
</label>
|
28
|
+
</div>
|
29
|
+
<div className={cx(props.kcInputWrapperClass)}>
|
30
|
+
<input
|
31
|
+
type="text"
|
32
|
+
id="username"
|
33
|
+
name="username"
|
34
|
+
defaultValue={user.username ?? ""}
|
35
|
+
className={cx(props.kcInputClass)}
|
36
|
+
/>
|
37
|
+
</div>
|
38
|
+
</div>
|
39
|
+
)}
|
15
40
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
<label htmlFor="username" className={cx(props.kcLabelClass)}>
|
27
|
-
{msg("username")}
|
28
|
-
</label>
|
29
|
-
</div>
|
30
|
-
<div className={cx(props.kcInputWrapperClass)}>
|
31
|
-
<input
|
32
|
-
type="text"
|
33
|
-
id="username"
|
34
|
-
name="username"
|
35
|
-
defaultValue={user.username ?? ""}
|
36
|
-
className={cx(props.kcInputClass)}
|
37
|
-
/>
|
38
|
-
</div>
|
39
|
-
</div>
|
40
|
-
}
|
41
|
+
<div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists("email", props.kcFormGroupErrorClass))}>
|
42
|
+
<div className={cx(props.kcLabelWrapperClass)}>
|
43
|
+
<label htmlFor="email" className={cx(props.kcLabelClass)}>
|
44
|
+
{msg("email")}
|
45
|
+
</label>
|
46
|
+
</div>
|
47
|
+
<div className={cx(props.kcInputWrapperClass)}>
|
48
|
+
<input type="text" id="email" name="email" defaultValue={user.email ?? ""} className={cx(props.kcInputClass)} />
|
49
|
+
</div>
|
50
|
+
</div>
|
41
51
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
52
|
+
<div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists("firstName", props.kcFormGroupErrorClass))}>
|
53
|
+
<div className={cx(props.kcLabelWrapperClass)}>
|
54
|
+
<label htmlFor="firstName" className={cx(props.kcLabelClass)}>
|
55
|
+
{msg("firstName")}
|
56
|
+
</label>
|
57
|
+
</div>
|
58
|
+
<div className={cx(props.kcInputWrapperClass)}>
|
59
|
+
<input
|
60
|
+
type="text"
|
61
|
+
id="firstName"
|
62
|
+
name="firstName"
|
63
|
+
defaultValue={user.firstName ?? ""}
|
64
|
+
className={cx(props.kcInputClass)}
|
65
|
+
/>
|
66
|
+
</div>
|
67
|
+
</div>
|
58
68
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
name="firstName"
|
70
|
-
defaultValue={user.firstName ?? ""}
|
71
|
-
className={cx(props.kcInputClass)}
|
72
|
-
/>
|
73
|
-
</div>
|
74
|
-
</div>
|
69
|
+
<div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists("lastName", props.kcFormGroupErrorClass))}>
|
70
|
+
<div className={cx(props.kcLabelWrapperClass)}>
|
71
|
+
<label htmlFor="lastName" className={cx(props.kcLabelClass)}>
|
72
|
+
{msg("lastName")}
|
73
|
+
</label>
|
74
|
+
</div>
|
75
|
+
<div className={cx(props.kcInputWrapperClass)}>
|
76
|
+
<input type="text" id="lastName" name="lastName" defaultValue={user.lastName ?? ""} className={cx(props.kcInputClass)} />
|
77
|
+
</div>
|
78
|
+
</div>
|
75
79
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
</label>
|
81
|
-
</div>
|
82
|
-
<div className={cx(props.kcInputWrapperClass)}>
|
83
|
-
<input
|
84
|
-
type="text"
|
85
|
-
id="lastName"
|
86
|
-
name="lastName"
|
87
|
-
defaultValue={user.lastName ?? ""}
|
88
|
-
className={cx(props.kcInputClass)}
|
89
|
-
/>
|
90
|
-
</div>
|
91
|
-
</div>
|
92
|
-
|
93
|
-
<div className={cx(props.kcFormGroupClass)}>
|
94
|
-
<div id="kc-form-options" className={cx(props.kcFormOptionsClass)}>
|
95
|
-
<div className={cx(props.kcFormOptionsWrapperClass)} />
|
96
|
-
</div>
|
97
|
-
|
98
|
-
<div id="kc-form-buttons" className={cx(props.kcFormButtonsClass)}>
|
99
|
-
{
|
100
|
-
isAppInitiatedAction ?
|
101
|
-
<>
|
102
|
-
<input
|
103
|
-
className={cx(props.kcButtonClass, props.kcButtonPrimaryClass, props.kcButtonLargeClass)}
|
104
|
-
type="submit"
|
105
|
-
defaultValue={msgStr("doSubmit")}
|
106
|
-
/>
|
107
|
-
<button
|
108
|
-
className={cx(props.kcButtonClass, props.kcButtonDefaultClass, props.kcButtonLargeClass)}
|
109
|
-
type="submit"
|
110
|
-
name="cancel-aia"
|
111
|
-
value="true"
|
112
|
-
>
|
113
|
-
{msg("doCancel")}
|
114
|
-
</button>
|
115
|
-
</>
|
116
|
-
:
|
117
|
-
<input
|
118
|
-
className={cx(props.kcButtonClass, props.kcButtonPrimaryClass, props.kcButtonBlockClass, props.kcButtonLargeClass)}
|
119
|
-
type="submit"
|
120
|
-
defaultValue={msgStr("doSubmit")}
|
121
|
-
/>
|
122
|
-
}
|
123
|
-
</div>
|
124
|
-
</div>
|
125
|
-
|
126
|
-
</form>
|
127
|
-
}
|
128
|
-
/>
|
129
|
-
);
|
80
|
+
<div className={cx(props.kcFormGroupClass)}>
|
81
|
+
<div id="kc-form-options" className={cx(props.kcFormOptionsClass)}>
|
82
|
+
<div className={cx(props.kcFormOptionsWrapperClass)} />
|
83
|
+
</div>
|
130
84
|
|
85
|
+
<div id="kc-form-buttons" className={cx(props.kcFormButtonsClass)}>
|
86
|
+
{isAppInitiatedAction ? (
|
87
|
+
<>
|
88
|
+
<input
|
89
|
+
className={cx(props.kcButtonClass, props.kcButtonPrimaryClass, props.kcButtonLargeClass)}
|
90
|
+
type="submit"
|
91
|
+
defaultValue={msgStr("doSubmit")}
|
92
|
+
/>
|
93
|
+
<button
|
94
|
+
className={cx(props.kcButtonClass, props.kcButtonDefaultClass, props.kcButtonLargeClass)}
|
95
|
+
type="submit"
|
96
|
+
name="cancel-aia"
|
97
|
+
value="true"
|
98
|
+
>
|
99
|
+
{msg("doCancel")}
|
100
|
+
</button>
|
101
|
+
</>
|
102
|
+
) : (
|
103
|
+
<input
|
104
|
+
className={cx(
|
105
|
+
props.kcButtonClass,
|
106
|
+
props.kcButtonPrimaryClass,
|
107
|
+
props.kcButtonBlockClass,
|
108
|
+
props.kcButtonLargeClass,
|
109
|
+
)}
|
110
|
+
type="submit"
|
111
|
+
defaultValue={msgStr("doSubmit")}
|
112
|
+
/>
|
113
|
+
)}
|
114
|
+
</div>
|
115
|
+
</div>
|
116
|
+
</form>
|
117
|
+
}
|
118
|
+
/>
|
119
|
+
);
|
131
120
|
});
|
132
|
-
|
133
|
-
|
@@ -1,17 +1,13 @@
|
|
1
|
-
|
2
1
|
import { memo } from "react";
|
3
2
|
import { Template } from "./Template";
|
4
3
|
import type { KcProps } from "./KcProps";
|
5
4
|
import type { KcContextBase } from "../getKcContext/KcContextBase";
|
6
5
|
import { useKcMessage } from "../i18n/useKcMessage";
|
7
6
|
|
8
|
-
export const LoginVerifyEmail = memo(({ kcContext, ...props }: { kcContext: KcContextBase.LoginVerifyEmail
|
9
|
-
|
7
|
+
export const LoginVerifyEmail = memo(({ kcContext, ...props }: { kcContext: KcContextBase.LoginVerifyEmail } & KcProps) => {
|
10
8
|
const { msg } = useKcMessage();
|
11
9
|
|
12
|
-
const {
|
13
|
-
url
|
14
|
-
} = kcContext;
|
10
|
+
const { url } = kcContext;
|
15
11
|
|
16
12
|
return (
|
17
13
|
<Template
|
@@ -21,9 +17,7 @@ export const LoginVerifyEmail = memo(({ kcContext, ...props }: { kcContext: KcCo
|
|
21
17
|
headerNode={msg("emailVerifyTitle")}
|
22
18
|
formNode={
|
23
19
|
<>
|
24
|
-
<p className="instruction">
|
25
|
-
{msg("emailVerifyInstruction1")}
|
26
|
-
</p>
|
20
|
+
<p className="instruction">{msg("emailVerifyInstruction1")}</p>
|
27
21
|
<p className="instruction">
|
28
22
|
{msg("emailVerifyInstruction2")}
|
29
23
|
<a href={url.loginAction}>{msg("doClickHere")}</a>
|
@@ -33,7 +27,4 @@ export const LoginVerifyEmail = memo(({ kcContext, ...props }: { kcContext: KcCo
|
|
33
27
|
}
|
34
28
|
/>
|
35
29
|
);
|
36
|
-
|
37
30
|
});
|
38
|
-
|
39
|
-
|
@@ -5,17 +5,8 @@ import type { KcContextBase } from "../getKcContext/KcContextBase";
|
|
5
5
|
import { useKcMessage } from "../i18n/useKcMessage";
|
6
6
|
import { useCssAndCx } from "tss-react";
|
7
7
|
|
8
|
-
export const Register = memo(({ kcContext, ...props }: { kcContext: KcContextBase.Register
|
9
|
-
|
10
|
-
const {
|
11
|
-
url,
|
12
|
-
messagesPerField,
|
13
|
-
register,
|
14
|
-
realm,
|
15
|
-
passwordRequired,
|
16
|
-
recaptchaRequired,
|
17
|
-
recaptchaSiteKey
|
18
|
-
} = kcContext;
|
8
|
+
export const Register = memo(({ kcContext, ...props }: { kcContext: KcContextBase.Register } & KcProps) => {
|
9
|
+
const { url, messagesPerField, register, realm, passwordRequired, recaptchaRequired, recaptchaSiteKey } = kcContext;
|
19
10
|
|
20
11
|
const { msg, msgStr } = useKcMessage();
|
21
12
|
|
@@ -28,13 +19,18 @@ export const Register = memo(({ kcContext, ...props }: { kcContext: KcContextBas
|
|
28
19
|
headerNode={msg("registerTitle")}
|
29
20
|
formNode={
|
30
21
|
<form id="kc-register-form" className={cx(props.kcFormClass)} action={url.registrationAction} method="post">
|
31
|
-
|
32
22
|
<div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists("firstName", props.kcFormGroupErrorClass))}>
|
33
23
|
<div className={cx(props.kcLabelWrapperClass)}>
|
34
|
-
<label htmlFor="firstName" className={cx(props.kcLabelClass)}>
|
24
|
+
<label htmlFor="firstName" className={cx(props.kcLabelClass)}>
|
25
|
+
{msg("firstName")}
|
26
|
+
</label>
|
35
27
|
</div>
|
36
28
|
<div className={cx(props.kcInputWrapperClass)}>
|
37
|
-
<input
|
29
|
+
<input
|
30
|
+
type="text"
|
31
|
+
id="firstName"
|
32
|
+
className={cx(props.kcInputClass)}
|
33
|
+
name="firstName"
|
38
34
|
defaultValue={register.formData.firstName ?? ""}
|
39
35
|
/>
|
40
36
|
</div>
|
@@ -42,84 +38,118 @@ export const Register = memo(({ kcContext, ...props }: { kcContext: KcContextBas
|
|
42
38
|
|
43
39
|
<div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists("lastName", props.kcFormGroupErrorClass))}>
|
44
40
|
<div className={cx(props.kcLabelWrapperClass)}>
|
45
|
-
<label htmlFor="lastName" className={cx(props.kcLabelClass)}>
|
41
|
+
<label htmlFor="lastName" className={cx(props.kcLabelClass)}>
|
42
|
+
{msg("lastName")}
|
43
|
+
</label>
|
46
44
|
</div>
|
47
45
|
<div className={cx(props.kcInputWrapperClass)}>
|
48
|
-
<input
|
46
|
+
<input
|
47
|
+
type="text"
|
48
|
+
id="lastName"
|
49
|
+
className={cx(props.kcInputClass)}
|
50
|
+
name="lastName"
|
49
51
|
defaultValue={register.formData.lastName ?? ""}
|
50
52
|
/>
|
51
53
|
</div>
|
52
54
|
</div>
|
53
55
|
|
54
|
-
<div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists(
|
56
|
+
<div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists("email", props.kcFormGroupErrorClass))}>
|
55
57
|
<div className={cx(props.kcLabelWrapperClass)}>
|
56
|
-
<label htmlFor="email" className={cx(props.kcLabelClass)}>
|
58
|
+
<label htmlFor="email" className={cx(props.kcLabelClass)}>
|
59
|
+
{msg("email")}
|
60
|
+
</label>
|
57
61
|
</div>
|
58
62
|
<div className={cx(props.kcInputWrapperClass)}>
|
59
|
-
<input
|
60
|
-
|
63
|
+
<input
|
64
|
+
type="text"
|
65
|
+
id="email"
|
66
|
+
className={cx(props.kcInputClass)}
|
67
|
+
name="email"
|
68
|
+
defaultValue={register.formData.email ?? ""}
|
69
|
+
autoComplete="email"
|
61
70
|
/>
|
62
71
|
</div>
|
63
72
|
</div>
|
64
|
-
{
|
65
|
-
|
66
|
-
|
67
|
-
<div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists('username', props.kcFormGroupErrorClass))}>
|
73
|
+
{!realm.registrationEmailAsUsername && (
|
74
|
+
<div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists("username", props.kcFormGroupErrorClass))}>
|
68
75
|
<div className={cx(props.kcLabelWrapperClass)}>
|
69
|
-
<label htmlFor="username" className={cx(props.kcLabelClass)}>
|
76
|
+
<label htmlFor="username" className={cx(props.kcLabelClass)}>
|
77
|
+
{msg("username")}
|
78
|
+
</label>
|
70
79
|
</div>
|
71
80
|
<div className={cx(props.kcInputWrapperClass)}>
|
72
|
-
<input
|
73
|
-
|
81
|
+
<input
|
82
|
+
type="text"
|
83
|
+
id="username"
|
84
|
+
className={cx(props.kcInputClass)}
|
85
|
+
name="username"
|
86
|
+
defaultValue={register.formData.username ?? ""}
|
87
|
+
autoComplete="username"
|
88
|
+
/>
|
74
89
|
</div>
|
75
|
-
</div
|
76
|
-
|
77
|
-
|
78
|
-
{
|
79
|
-
passwordRequired &&
|
90
|
+
</div>
|
91
|
+
)}
|
92
|
+
{passwordRequired && (
|
80
93
|
<>
|
81
|
-
|
82
94
|
<div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists("password", props.kcFormGroupErrorClass))}>
|
83
95
|
<div className={cx(props.kcLabelWrapperClass)}>
|
84
|
-
<label htmlFor="password" className={cx(props.kcLabelClass)}>
|
96
|
+
<label htmlFor="password" className={cx(props.kcLabelClass)}>
|
97
|
+
{msg("password")}
|
98
|
+
</label>
|
85
99
|
</div>
|
86
100
|
<div className={cx(props.kcInputWrapperClass)}>
|
87
|
-
<input
|
101
|
+
<input
|
102
|
+
type="password"
|
103
|
+
id="password"
|
104
|
+
className={cx(props.kcInputClass)}
|
105
|
+
name="password"
|
106
|
+
autoComplete="new-password"
|
107
|
+
/>
|
88
108
|
</div>
|
89
109
|
</div>
|
90
110
|
|
91
|
-
<div
|
111
|
+
<div
|
112
|
+
className={cx(
|
113
|
+
props.kcFormGroupClass,
|
114
|
+
messagesPerField.printIfExists("password-confirm", props.kcFormGroupErrorClass),
|
115
|
+
)}
|
116
|
+
>
|
92
117
|
<div className={cx(props.kcLabelWrapperClass)}>
|
93
|
-
<label htmlFor="password-confirm" className={cx(props.kcLabelClass)}>
|
118
|
+
<label htmlFor="password-confirm" className={cx(props.kcLabelClass)}>
|
119
|
+
{msg("passwordConfirm")}
|
120
|
+
</label>
|
94
121
|
</div>
|
95
122
|
<div className={cx(props.kcInputWrapperClass)}>
|
96
123
|
<input type="password" id="password-confirm" className={cx(props.kcInputClass)} name="password-confirm" />
|
97
124
|
</div>
|
98
125
|
</div>
|
99
126
|
</>
|
100
|
-
|
101
|
-
|
102
|
-
{
|
103
|
-
recaptchaRequired &&
|
127
|
+
)}
|
128
|
+
{recaptchaRequired && (
|
104
129
|
<div className="form-group">
|
105
130
|
<div className={cx(props.kcInputWrapperClass)}>
|
106
131
|
<div className="g-recaptcha" data-size="compact" data-sitekey={recaptchaSiteKey}></div>
|
107
132
|
</div>
|
108
133
|
</div>
|
109
|
-
}
|
134
|
+
)}
|
110
135
|
<div className={cx(props.kcFormGroupClass)}>
|
111
136
|
<div id="kc-form-options" className={cx(props.kcFormOptionsClass)}>
|
112
137
|
<div className={cx(props.kcFormOptionsWrapperClass)}>
|
113
|
-
<span
|
138
|
+
<span>
|
139
|
+
<a href={url.loginUrl}>{msg("backToLogin")}</a>
|
140
|
+
</span>
|
114
141
|
</div>
|
115
142
|
</div>
|
116
143
|
|
117
144
|
<div id="kc-form-buttons" className={cx(props.kcFormButtonsClass)}>
|
118
|
-
<input
|
119
|
-
|
145
|
+
<input
|
146
|
+
className={cx(props.kcButtonClass, props.kcButtonPrimaryClass, props.kcButtonBlockClass, props.kcButtonLargeClass)}
|
147
|
+
type="submit"
|
148
|
+
value={msgStr("doRegister")}
|
149
|
+
/>
|
120
150
|
</div>
|
121
151
|
</div>
|
122
|
-
</form
|
152
|
+
</form>
|
123
153
|
}
|
124
154
|
/>
|
125
155
|
);
|