@authing/react-ui-components 3.1.1-rc.8 → 3.1.2

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.
Files changed (144) hide show
  1. package/lib/index.d.ts +2568 -201
  2. package/lib/index.min.css +2 -1
  3. package/lib/index.min.js +1 -1
  4. package/lib/index.min.js.LICENSE.txt +42 -0
  5. package/lib/static/media/loading.4a67a5f3.svg +29 -0
  6. package/package.json +54 -18
  7. package/.eslintignore +0 -6
  8. package/.eslintrc.js +0 -7
  9. package/.prettierrc +0 -5
  10. package/.vscode/settings.json +0 -31
  11. package/LICENSE +0 -21
  12. package/config/antdReplacer.js +0 -51
  13. package/config/env.js +0 -106
  14. package/config/getHttpsConfig.js +0 -66
  15. package/config/jest/cssTransform.js +0 -14
  16. package/config/jest/fileTransform.js +0 -40
  17. package/config/modules.js +0 -134
  18. package/config/paths.js +0 -71
  19. package/config/pnpTs.js +0 -35
  20. package/config/webpack.config.js +0 -857
  21. package/config/webpackDevServer.config.js +0 -130
  22. package/public/favicon.ico +0 -0
  23. package/public/index.html +0 -43
  24. package/public/logo192.png +0 -0
  25. package/public/logo512.png +0 -0
  26. package/public/manifest.json +0 -25
  27. package/public/robots.txt +0 -3
  28. package/scripts/build.js +0 -212
  29. package/scripts/lib.js +0 -200
  30. package/scripts/start.js +0 -166
  31. package/scripts/test.js +0 -53
  32. package/src/common/AuthingDropdown/index.tsx +0 -52
  33. package/src/common/AuthingDropdown/style.less +0 -43
  34. package/src/common/AuthingTabs/index.tsx +0 -98
  35. package/src/common/AuthingTabs/style.less +0 -135
  36. package/src/common/CopyAbleText/index.tsx +0 -54
  37. package/src/common/CopyAbleText/style.less +0 -13
  38. package/src/common/VerifyCodeInput/index.tsx +0 -76
  39. package/src/common/VerifyCodeInput/style.less +0 -24
  40. package/src/components/AuthingGuard/AppMFALayout/index.tsx +0 -74
  41. package/src/components/AuthingGuard/AppMFALayout/style.less +0 -12
  42. package/src/components/AuthingGuard/CompleteUserInfoLayout/index.tsx +0 -29
  43. package/src/components/AuthingGuard/CompleteUserInfoLayout/style.less +0 -8
  44. package/src/components/AuthingGuard/Forms/ADLoginForm/index.tsx +0 -117
  45. package/src/components/AuthingGuard/Forms/Agreements/index.tsx +0 -81
  46. package/src/components/AuthingGuard/Forms/Agreements/style.less +0 -44
  47. package/src/components/AuthingGuard/Forms/CompleteUserInfoForm/index.tsx +0 -139
  48. package/src/components/AuthingGuard/Forms/EmailMfaVerifyForm/CheckEmailForm.tsx +0 -86
  49. package/src/components/AuthingGuard/Forms/EmailMfaVerifyForm/VerifyCodeForm.tsx +0 -116
  50. package/src/components/AuthingGuard/Forms/EmailMfaVerifyForm/index.tsx +0 -40
  51. package/src/components/AuthingGuard/Forms/EmailMfaVerifyForm/style.less +0 -0
  52. package/src/components/AuthingGuard/Forms/EmailRegisterForm/index.tsx +0 -181
  53. package/src/components/AuthingGuard/Forms/EmailRegisterForm/style.less +0 -0
  54. package/src/components/AuthingGuard/Forms/LdapLoginForm/index.tsx +0 -161
  55. package/src/components/AuthingGuard/Forms/LdapLoginForm/style.less +0 -0
  56. package/src/components/AuthingGuard/Forms/LoginFormFooter/index.tsx +0 -76
  57. package/src/components/AuthingGuard/Forms/LoginFormFooter/style.less +0 -6
  58. package/src/components/AuthingGuard/Forms/MfaResetCodeForm/Step1.tsx +0 -86
  59. package/src/components/AuthingGuard/Forms/MfaResetCodeForm/Step2.tsx +0 -53
  60. package/src/components/AuthingGuard/Forms/MfaResetCodeForm/index.tsx +0 -65
  61. package/src/components/AuthingGuard/Forms/MfaResetCodeForm/style.less +0 -20
  62. package/src/components/AuthingGuard/Forms/MfaVerifyForm/index.tsx +0 -105
  63. package/src/components/AuthingGuard/Forms/MfaVerifyForm/style.less +0 -12
  64. package/src/components/AuthingGuard/Forms/PasswordLoginForm/index.tsx +0 -261
  65. package/src/components/AuthingGuard/Forms/PhoneCodeLoginForm/index.tsx +0 -133
  66. package/src/components/AuthingGuard/Forms/PhoneRegisterForm/index.tsx +0 -202
  67. package/src/components/AuthingGuard/Forms/QrCodeLoginForm/index.tsx +0 -61
  68. package/src/components/AuthingGuard/Forms/QrCodeLoginForm/style.less +0 -14
  69. package/src/components/AuthingGuard/Forms/RegisterFormFooter/index.tsx +0 -56
  70. package/src/components/AuthingGuard/Forms/RegisterFormFooter/style.less +0 -0
  71. package/src/components/AuthingGuard/Forms/ResetPwdForm/Footer.tsx +0 -21
  72. package/src/components/AuthingGuard/Forms/ResetPwdForm/Step1.tsx +0 -86
  73. package/src/components/AuthingGuard/Forms/ResetPwdForm/Step2.tsx +0 -127
  74. package/src/components/AuthingGuard/Forms/ResetPwdForm/Step3.tsx +0 -141
  75. package/src/components/AuthingGuard/Forms/ResetPwdForm/Step4.tsx +0 -51
  76. package/src/components/AuthingGuard/Forms/ResetPwdForm/index.tsx +0 -96
  77. package/src/components/AuthingGuard/Forms/ResetPwdForm/style.less +0 -3
  78. package/src/components/AuthingGuard/Forms/SendPhoneCode/SendCodeBtn.tsx +0 -88
  79. package/src/components/AuthingGuard/Forms/SendPhoneCode/index.tsx +0 -50
  80. package/src/components/AuthingGuard/Forms/SendPhoneCode/style.less +0 -26
  81. package/src/components/AuthingGuard/Forms/SmsMfaVerifyForm/CheckPhoneForm.tsx +0 -86
  82. package/src/components/AuthingGuard/Forms/SmsMfaVerifyForm/VerifyCodeForm.tsx +0 -113
  83. package/src/components/AuthingGuard/Forms/SmsMfaVerifyForm/index.tsx +0 -40
  84. package/src/components/AuthingGuard/Forms/SmsMfaVerifyForm/style.less +0 -3
  85. package/src/components/AuthingGuard/Forms/SocialAndIdpLogin/index.tsx +0 -325
  86. package/src/components/AuthingGuard/Forms/SocialAndIdpLogin/style.less +0 -75
  87. package/src/components/AuthingGuard/Forms/UploadImage/index.tsx +0 -70
  88. package/src/components/AuthingGuard/Forms/index.ts +0 -13
  89. package/src/components/AuthingGuard/GuardLayout/index.tsx +0 -488
  90. package/src/components/AuthingGuard/GuardLayout/style.less +0 -111
  91. package/src/components/AuthingGuard/Header/index.tsx +0 -28
  92. package/src/components/AuthingGuard/Header/style.less +0 -69
  93. package/src/components/AuthingGuard/IconFont/iconfont.js +0 -74
  94. package/src/components/AuthingGuard/IconFont/index.tsx +0 -19
  95. package/src/components/AuthingGuard/IconFont/style.less +0 -6
  96. package/src/components/AuthingGuard/IconFont/svg.js +0 -2
  97. package/src/components/AuthingGuard/LoginLayout/index.tsx +0 -205
  98. package/src/components/AuthingGuard/LoginLayout/style.less +0 -0
  99. package/src/components/AuthingGuard/MfaLayout/Steps.ts +0 -4
  100. package/src/components/AuthingGuard/MfaLayout/index.tsx +0 -49
  101. package/src/components/AuthingGuard/MfaLayout/style.less +0 -3
  102. package/src/components/AuthingGuard/RegisterLayout/index.tsx +0 -89
  103. package/src/components/AuthingGuard/RegisterLayout/style.less +0 -0
  104. package/src/components/AuthingGuard/ResetPwdLayout/index.tsx +0 -20
  105. package/src/components/AuthingGuard/ToggleLang/index.tsx +0 -51
  106. package/src/components/AuthingGuard/api/appConfig.ts +0 -154
  107. package/src/components/AuthingGuard/api/http.ts +0 -88
  108. package/src/components/AuthingGuard/api/index.ts +0 -3
  109. package/src/components/AuthingGuard/api/sso.ts +0 -29
  110. package/src/components/AuthingGuard/api/userPoolConfig.ts +0 -112
  111. package/src/components/AuthingGuard/constants.ts +0 -107
  112. package/src/components/AuthingGuard/hooks/index.tsx +0 -70
  113. package/src/components/AuthingGuard/hooks/useScreenSize.tsx +0 -68
  114. package/src/components/AuthingGuard/index.tsx +0 -134
  115. package/src/components/AuthingGuard/locales/en/common.json +0 -185
  116. package/src/components/AuthingGuard/locales/en/index.ts +0 -6
  117. package/src/components/AuthingGuard/locales/en/login.json +0 -94
  118. package/src/components/AuthingGuard/locales/en/map.json +0 -4
  119. package/src/components/AuthingGuard/locales/en/user.json +0 -81
  120. package/src/components/AuthingGuard/locales/index.ts +0 -45
  121. package/src/components/AuthingGuard/locales/zh/common.json +0 -185
  122. package/src/components/AuthingGuard/locales/zh/index.ts +0 -6
  123. package/src/components/AuthingGuard/locales/zh/login.json +0 -94
  124. package/src/components/AuthingGuard/locales/zh/map.json +0 -4
  125. package/src/components/AuthingGuard/locales/zh/user.json +0 -81
  126. package/src/components/AuthingGuard/style.less +0 -104
  127. package/src/components/AuthingGuard/types/Forms.ts +0 -95
  128. package/src/components/AuthingGuard/types/GuardConfig.ts +0 -424
  129. package/src/components/AuthingGuard/types/GuardState.ts +0 -7
  130. package/src/components/AuthingGuard/types/Locales.ts +0 -12
  131. package/src/components/AuthingGuard/types/index.ts +0 -4
  132. package/src/components/index.ts +0 -7
  133. package/src/context/base.tsx +0 -28
  134. package/src/context/global/context.tsx +0 -39
  135. package/src/context/global/reducer.tsx +0 -56
  136. package/src/index.tsx +0 -142
  137. package/src/logo.svg +0 -7
  138. package/src/react-app-env.d.ts +0 -71
  139. package/src/reportWebVitals.ts +0 -15
  140. package/src/setupTests.ts +0 -5
  141. package/src/utils/clipboard.ts +0 -27
  142. package/src/utils/index.ts +0 -180
  143. package/src/utils/popupCenter.ts +0 -48
  144. package/tsconfig.json +0 -24
@@ -1,24 +0,0 @@
1
- .authing-code-input-item {
2
- text-align: center;
3
- width: 40px;
4
- min-width: 40px;
5
- min-height: 40px;
6
- height: 40px;
7
- line-height: 40px;
8
- &:not(:first-child) {
9
- margin-left: 18px;
10
- }
11
- input {
12
- text-align: center;
13
- }
14
- }
15
- .authing-code-input-divider {
16
- width: 14px;
17
- min-width: 14px;
18
- max-width: 14px;
19
- margin-left: 18px;
20
- }
21
- .authing-code-input {
22
- display: flex;
23
- align-items: center;
24
- }
@@ -1,74 +0,0 @@
1
- import { message } from 'antd'
2
- import { User } from 'authing-js-sdk'
3
- import React, { FC, useState } from 'react'
4
- import { useTranslation } from 'react-i18next'
5
- import { AuthingDropdown } from 'src/common/AuthingDropdown'
6
-
7
- import {
8
- EmailMfaVerifyForm,
9
- SmsMfaVerifyForm,
10
- } from '../../../components/AuthingGuard/Forms'
11
- import { useGuardContext } from '../../../context/global/context'
12
- import { ApplicationMfaType, ApplicationMfaTypeLabel } from '../api'
13
-
14
- import './style.less'
15
-
16
- export interface MfaLayoutProps {}
17
-
18
- export const AppMfaLayout: FC<MfaLayoutProps> = () => {
19
- const { t } = useTranslation()
20
- const {
21
- state: { guardEvents, authClient, mfaData },
22
- } = useGuardContext()
23
-
24
- const [type, setType] = useState(ApplicationMfaType.SMS)
25
-
26
- const onSuccess = (user: User) => {
27
- message.success(t('common.LoginSuccess'))
28
- guardEvents.onLogin?.(user, authClient)
29
- }
30
-
31
- const onFail = (error: any) => {
32
- guardEvents.onLoginError?.(error, authClient)
33
- }
34
-
35
- const formProps = {
36
- onSuccess,
37
- onFail,
38
- }
39
-
40
- const formMap = {
41
- [ApplicationMfaType.EMAIL]: <EmailMfaVerifyForm {...formProps} />,
42
- [ApplicationMfaType.SMS]: <SmsMfaVerifyForm {...formProps} />,
43
- }
44
-
45
- const availableMfaType = mfaData.applicationMfa
46
- ?.filter(
47
- (item) =>
48
- item.status && Object.keys(ApplicationMfaType).includes(item.mfaPolicy)
49
- )
50
- ?.sort((a, b) => a.sort - b.sort)
51
- ?.map((item) => ({
52
- label: ApplicationMfaTypeLabel()[item.mfaPolicy],
53
- key: item.mfaPolicy,
54
- onClick() {
55
- setType(item.mfaPolicy)
56
- },
57
- }))
58
-
59
- return (
60
- <div className="authing-text-center">
61
- {formMap[type]}
62
- {(availableMfaType?.length || 0 > 1) && (
63
- <AuthingDropdown
64
- className="toggle-mfa-dropdown"
65
- menus={availableMfaType!}
66
- >
67
- <span className="authing-toggle-mfa">
68
- {t('login.otherVerifyWay')}
69
- </span>
70
- </AuthingDropdown>
71
- )}
72
- </div>
73
- )
74
- }
@@ -1,12 +0,0 @@
1
- .authing-toggle-mfa,
2
- .toggle-mfa-dropdown .authing-dropdown-icon {
3
- color: #999;
4
- }
5
-
6
- .toggle-mfa-dropdown {
7
- margin-top: 30px;
8
- align-self: center;
9
- .authing-dropdown-menu-item {
10
- white-space: nowrap;
11
- }
12
- }
@@ -1,29 +0,0 @@
1
- import React, { FC } from 'react'
2
- import { useTranslation } from 'react-i18next'
3
- import { useGuardContext } from '../../../context/global/context'
4
- import { CompleteUserInfoForm } from '../Forms/CompleteUserInfoForm'
5
-
6
- import './style.less'
7
-
8
- export const CompleteUserInfoLayout: FC = () => {
9
- const {
10
- state: { guardTitle },
11
- } = useGuardContext()
12
-
13
- const { t } = useTranslation()
14
- return (
15
- <div>
16
- <h2 className="authing-guard-complete-info-title">
17
- {t('common.perfectUserInfo')}
18
- </h2>
19
-
20
- <p className="authing-guard-complete-info-msg">
21
- {t('common.welcomeDoc', {
22
- name: guardTitle,
23
- })}
24
- </p>
25
-
26
- <CompleteUserInfoForm />
27
- </div>
28
- )
29
- }
@@ -1,8 +0,0 @@
1
- .authing-guard-complete-info-title {
2
- font-size: 20px;
3
- text-align: center;
4
- color: #333;
5
- }
6
- .authing-guard-complete-info-msg {
7
- color: #b2b2b2;
8
- }
@@ -1,117 +0,0 @@
1
- import { Input, Form, message } from 'antd'
2
- import { FormInstance } from 'antd/lib/form'
3
- import { UserOutlined, LockOutlined } from '@ant-design/icons'
4
- import React, { forwardRef, useImperativeHandle, useState } from 'react'
5
-
6
- import { getRequiredRules } from '../../../../utils'
7
- import { useGuardContext } from '../../../../context/global/context'
8
- import {
9
- ADLoginFormProps,
10
- LoginMethods,
11
- } from '../../../../components/AuthingGuard/types'
12
- import { LoginFormFooter } from '../../../../components/AuthingGuard/Forms/LoginFormFooter'
13
- import { useTranslation } from 'react-i18next'
14
-
15
- export const ADLoginForm = forwardRef<FormInstance, ADLoginFormProps>(
16
- ({ onSuccess, onValidateFail, onFail }, ref) => {
17
- const { t } = useTranslation()
18
- const { state } = useGuardContext()
19
- const { authClient, guardEvents } = state
20
-
21
- const [loading, setLoading] = useState(false)
22
-
23
- const onFinishFailed = (errorInfo: any) => {
24
- setLoading(false)
25
- onValidateFail && onValidateFail(errorInfo)
26
- }
27
-
28
- const [rawForm] = Form.useForm()
29
-
30
- const onFinish = async (values: any) => {
31
- if (guardEvents.onBeforeLogin) {
32
- try {
33
- const canLogin = await guardEvents.onBeforeLogin(
34
- {
35
- type: LoginMethods.AD,
36
- data: {
37
- identity: values.identity,
38
- password: values.password,
39
- },
40
- },
41
- authClient
42
- )
43
-
44
- if (!canLogin) {
45
- setLoading(false)
46
- return
47
- }
48
- } catch (e) {
49
- if (typeof e === 'string') {
50
- message.error(e)
51
- } else {
52
- message.error(e.message)
53
- }
54
- setLoading(false)
55
- return
56
- }
57
- }
58
-
59
- try {
60
- const identity = values.identity && values.identity.trim()
61
- const password = values.password && values.password.trim()
62
- const user = await authClient.loginByAd(identity, password)
63
- onSuccess && onSuccess(user)
64
- } catch (error) {
65
- if (typeof error.message === 'string') {
66
- // js sdk httpclient 的报错,这里只有一种情况就是用户开启了 mfa 的报错
67
- try {
68
- const errorData = JSON.parse(error.message)
69
- onFail && onFail(errorData)
70
- return
71
- } catch (_) {
72
- // do nothing
73
- }
74
- }
75
- onFail && onFail(error)
76
- } finally {
77
- setLoading(false)
78
- }
79
- }
80
-
81
- useImperativeHandle(ref, () => rawForm)
82
-
83
- return (
84
- <Form
85
- form={rawForm}
86
- onSubmitCapture={() => setLoading(true)}
87
- onFinishFailed={onFinishFailed}
88
- onFinish={onFinish}
89
- >
90
- <Form.Item
91
- name="identity"
92
- rules={getRequiredRules(t('login.inputAdUsername'))}
93
- >
94
- <Input
95
- autoComplete="email,username,tel"
96
- size="large"
97
- placeholder={t('login.inputAdUsername')}
98
- prefix={<UserOutlined style={{ color: '#ddd' }} />}
99
- />
100
- </Form.Item>
101
- <Form.Item
102
- name="password"
103
- rules={getRequiredRules(t('login.inputAdPwd'))}
104
- >
105
- <Input.Password
106
- autoComplete="current-password"
107
- size="large"
108
- visibilityToggle={false}
109
- placeholder={t('login.inputAdPwd')}
110
- prefix={<LockOutlined style={{ color: '#ddd' }} />}
111
- />
112
- </Form.Item>
113
- <LoginFormFooter loading={loading}></LoginFormFooter>
114
- </Form>
115
- )
116
- }
117
- )
@@ -1,81 +0,0 @@
1
- import React, { FC, useState, useMemo, useEffect } from 'react'
2
- import { Space, Checkbox } from 'antd'
3
- import { Agreement } from '../../api'
4
- import { getClassnames } from '../../../../utils'
5
- import './style.less'
6
-
7
- export interface AgreementsProps {
8
- value?: boolean
9
- onChange?: (value: boolean) => void
10
- style?: React.CSSProperties
11
- agreements: Agreement[]
12
- showError?: boolean
13
- }
14
-
15
- export const Agreements: FC<AgreementsProps> = ({
16
- showError,
17
- onChange = () => {},
18
- style,
19
- agreements,
20
- }) => {
21
- const [acceptList, setAcceptList] = useState<(string | number)[]>([])
22
-
23
- const toggleItemCheck = (id: string | number) => {
24
- setAcceptList((prev) => {
25
- if (prev.includes(id)) {
26
- return prev.filter((item) => item !== id)
27
- }
28
- return [...prev, id]
29
- })
30
- }
31
-
32
- /** 是否可以注册 */
33
- const isAccept = useMemo(() => {
34
- /** 所有必须勾选的都勾了就可以通过 */
35
- return agreements
36
- .filter((item) => item.required)
37
- .every((item) => acceptList.includes(item.id))
38
- }, [acceptList, agreements])
39
-
40
- useEffect(() => {
41
- onChange(isAccept)
42
- }, [isAccept, onChange])
43
-
44
- return (
45
- <div
46
- className={getClassnames([
47
- 'authing-agreements',
48
- showError && 'authing-agreements-error',
49
- ])}
50
- >
51
- {agreements.map((item) => {
52
- return (
53
- <div
54
- key={item.id}
55
- style={{ ...style }}
56
- className={getClassnames([
57
- 'authing-agreements-item',
58
- item.required &&
59
- !acceptList.includes(item.id) &&
60
- 'authing-agreements-item-invalid',
61
- ])}
62
- onClick={() => toggleItemCheck(item.id)}
63
- >
64
- <Space align="start" size={5}>
65
- <Checkbox
66
- className="authing-agreements-checkbox"
67
- checked={acceptList.includes(item.id)}
68
- />
69
- <div
70
- className="authing-agreements-item-content"
71
- dangerouslySetInnerHTML={{
72
- __html: item.title,
73
- }}
74
- ></div>
75
- </Space>
76
- </div>
77
- )
78
- })}
79
- </div>
80
- )
81
- }
@@ -1,44 +0,0 @@
1
- .authing-agreements {
2
- margin-top: 20px;
3
- margin-bottom: 20px;
4
- &.authing-agreements-error {
5
- .authing-agreements-item-invalid {
6
- color: #ff4d4f;
7
- a {
8
- color: #ff4d4f;
9
- }
10
- :global(.ant-checkbox-inner) {
11
- border-color: #ff4d4f;
12
- }
13
- }
14
- }
15
- }
16
-
17
- .authing-agreements-item {
18
- color: #999999;
19
- user-select: none;
20
- cursor: pointer;
21
- font-size: 12px;
22
- &:not(:first-child) {
23
- margin-top: 4px;
24
- }
25
- p {
26
- margin-bottom: 0;
27
- display: inline-block;
28
- }
29
- }
30
-
31
- .authing-agreements-checkbox {
32
- margin-bottom: 2px;
33
- :global(.ant-checkbox-inner) {
34
- width: 14px;
35
- height: 14px;
36
- &::after {
37
- left: 20%;
38
- }
39
- }
40
- }
41
-
42
- .authing-agreements-item-content {
43
- line-height: 23px;
44
- }
@@ -1,139 +0,0 @@
1
- import { Button, Form, Input, message, Spin } from 'antd'
2
- import { useForm } from 'antd/lib/form/Form'
3
- import React, { FC, useEffect, useState } from 'react'
4
- import { useGuardContext } from '../../../../context/global/context'
5
- import { User } from 'authing-js-sdk'
6
- import { UploadImage } from '../UploadImage'
7
- import { requestClient } from '../../api/http'
8
- import { CompleteUserInfoFormProps } from '../../types'
9
- import { useTranslation } from 'react-i18next'
10
- import { i18n } from '../../locales'
11
-
12
- export const CompleteUserInfoForm: FC<CompleteUserInfoFormProps> = ({
13
- onSuccess,
14
- }) => {
15
- const { t } = useTranslation()
16
- const [rawForm] = useForm()
17
- const [submitting, setSubmitting] = useState(false)
18
-
19
- const [loading, setLoading] = useState(false)
20
-
21
- const {
22
- state: { config, authClient, guardEvents, userPoolId },
23
- } = useGuardContext()
24
-
25
- const { extendsFields } = config
26
-
27
- const [, setUser] = useState<User | null>()
28
- const [definitions, setDefinitions] = useState<any[]>([])
29
-
30
- const onFinish = async (values: any) => {
31
- const internalFields: any = {}
32
- const userFields: any[] = []
33
- Object.entries(values).forEach(([key, value]) => {
34
- const [type, nameOrId] = key.split(' ')
35
- if (type === 'internal') {
36
- internalFields[nameOrId] = value
37
- } else if (type === 'user') {
38
- userFields.push({ nameOrId, value })
39
- }
40
- })
41
-
42
- const udfs = userFields.map(({ nameOrId, value }) => ({
43
- definition: definitions.find((def) => def.id === nameOrId),
44
- value,
45
- }))
46
-
47
- try {
48
- const user = await authClient.updateProfile(internalFields)
49
-
50
- setUser(user)
51
-
52
- await requestClient.post(
53
- `/api/v2/udfs/values`,
54
- {
55
- udfs,
56
- },
57
- {
58
- headers: {
59
- authorization: user?.token,
60
- 'x-authing-userpool-id': userPoolId,
61
- },
62
- }
63
- )
64
-
65
- message.success(t('common.saveSuccess'))
66
- guardEvents.onRegisterInfoCompleted?.(user, udfs, authClient)
67
- onSuccess?.(user)
68
- } catch (e) {
69
- guardEvents.onRegisterInfoCompletedError?.(e, udfs, authClient)
70
- setSubmitting(false)
71
- } finally {
72
- setSubmitting(false)
73
- }
74
- }
75
-
76
- useEffect(() => {
77
- setLoading(true)
78
- ;(async () => {
79
- const user = await authClient.getCurrentUser()
80
- setUser(user)
81
- const { data } = await requestClient.get<any>(
82
- '/api/v2/udfs/definitions',
83
- undefined,
84
- {
85
- headers: {
86
- authorization: user?.token!,
87
- 'x-authing-userpool-id': userPoolId,
88
- },
89
- }
90
- )
91
- setDefinitions(data)
92
- setLoading(false)
93
- })()
94
- }, [authClient, userPoolId])
95
-
96
- const onFinishFailed = () => {}
97
-
98
- const INPUT_MAP: Record<string, React.ReactNode | undefined> = {
99
- image: <UploadImage />,
100
- }
101
-
102
- const formFields = extendsFields.map((def) => {
103
- const key = `${def.type} ${def.type === 'internal' ? def.name : def.id}`
104
-
105
- const label = i18n.language === 'zh-CN' ? def.label : def.name
106
-
107
- return (
108
- <Form.Item key={key} name={key} label={label} style={{ marginBottom: 8 }}>
109
- {INPUT_MAP[def.inputType] || (
110
- <Input type={def.inputType} size="large" />
111
- )}
112
- </Form.Item>
113
- )
114
- })
115
-
116
- return (
117
- <Spin spinning={loading}>
118
- <Form
119
- layout="vertical"
120
- form={rawForm}
121
- onSubmitCapture={() => setSubmitting(true)}
122
- onFinishFailed={onFinishFailed}
123
- onFinish={onFinish}
124
- >
125
- {formFields}
126
-
127
- <Button
128
- size="large"
129
- loading={submitting}
130
- type="primary"
131
- block
132
- htmlType="submit"
133
- >
134
- {t('common.problem.form.submit')}
135
- </Button>
136
- </Form>
137
- </Spin>
138
- )
139
- }
@@ -1,86 +0,0 @@
1
- import React, { FC, useState } from 'react'
2
- import { Button, Form, Input, message } from 'antd'
3
-
4
- import { useGuardContext } from '../../../../context/global/context'
5
- import { MFACheckEmailFormProps } from '../../types'
6
-
7
- import './style.less'
8
- import { VALIDATE_PATTERN } from '../../../../utils'
9
- import { useTranslation } from 'react-i18next'
10
-
11
- export const CheckEmailForm: FC<MFACheckEmailFormProps> = ({
12
- onSuccess,
13
- mfaToken,
14
- }) => {
15
- const {
16
- state: { authClient },
17
- } = useGuardContext()
18
-
19
- const { t } = useTranslation()
20
-
21
- const [rawForm] = Form.useForm()
22
-
23
- const [loading, setLoading] = useState(false)
24
-
25
- const onFinish = async ({ email }: any) => {
26
- try {
27
- const bindable = await authClient.mfa.phoneOrEmailBindable({
28
- mfaToken,
29
- email,
30
- })
31
- if (!bindable) {
32
- message.error(
33
- t('common.unBindEmaileDoc', {
34
- email: email,
35
- })
36
- )
37
- return
38
- }
39
- onSuccess(email!)
40
- } catch (e) {
41
- // do nothing
42
- } finally {
43
- setLoading(false)
44
- }
45
- }
46
-
47
- return (
48
- <>
49
- <h3 className="authing-guard-mfa-title">{t('common.bindEmail')}</h3>
50
- <p className="authing-guard-mfa-tips">{t('common.bindEmailDoc')}</p>
51
- <Form
52
- form={rawForm}
53
- onSubmitCapture={() => setLoading(true)}
54
- onFinish={onFinish}
55
- onFinishFailed={() => setLoading(false)}
56
- >
57
- <Form.Item
58
- name="email"
59
- rules={[
60
- {
61
- required: true,
62
- message: t('login.inputEmail'),
63
- },
64
- {
65
- pattern: VALIDATE_PATTERN.email,
66
- message: t('login.emailError'),
67
- },
68
- ]}
69
- >
70
- <Input placeholder={t('login.inputEmail')}></Input>
71
- </Form.Item>
72
-
73
- <Button
74
- className="authing-guard-mfa-confirm-btn"
75
- loading={loading}
76
- block
77
- htmlType="submit"
78
- type="primary"
79
- size="large"
80
- >
81
- {t('common.sure')}
82
- </Button>
83
- </Form>
84
- </>
85
- )
86
- }