@uniai-fe/uds-templates 0.4.32 → 0.5.0
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/dist/styles.css +108 -21
- package/package.json +1 -1
- package/src/auth/signup/hooks/index.ts +3 -0
- package/src/auth/signup/hooks/useSignupAgreementForm.ts +48 -0
- package/src/auth/signup/hooks/useSignupFarmCodeForm.ts +87 -0
- package/src/auth/signup/hooks/useSignupTypeSelectForm.ts +56 -0
- package/src/auth/signup/img/select-user-type-default.svg +15 -0
- package/src/auth/signup/img/select-user-type-selected.svg +3 -0
- package/src/auth/signup/index.ts +10 -0
- package/src/auth/signup/markup/AccountForm.tsx +1 -0
- package/src/auth/signup/markup/AgreementForm.tsx +229 -0
- package/src/auth/signup/markup/FarmCodeForm.tsx +122 -0
- package/src/auth/signup/markup/Template.tsx +58 -2
- package/src/auth/signup/markup/TypeSelectForm.tsx +102 -0
- package/src/auth/signup/markup/UserInfoForm.tsx +9 -0
- package/src/auth/signup/markup/VerificationForm.tsx +36 -26
- package/src/auth/signup/markup/index.ts +3 -0
- package/src/auth/signup/styles/signup.scss +95 -20
- package/src/auth/signup/types/hooks.ts +132 -0
- package/src/auth/signup/types/props.ts +210 -4
- package/src/modal/styles/container.scss +17 -2
|
@@ -1,4 +1,7 @@
|
|
|
1
|
+
export { AuthSignupTypeSelectForm } from "./TypeSelectForm";
|
|
1
2
|
export { AuthSignupUserInfoForm } from "./UserInfoForm";
|
|
3
|
+
export { AuthSignupFarmCodeForm } from "./FarmCodeForm";
|
|
4
|
+
export { AuthSignupAgreementForm } from "./AgreementForm";
|
|
2
5
|
export { AuthSignupVerificationForm } from "./VerificationForm";
|
|
3
6
|
export { AuthSignupAccountForm } from "./AccountForm";
|
|
4
7
|
export { AuthSignupComplete } from "./Complete";
|
|
@@ -11,6 +11,64 @@
|
|
|
11
11
|
gap: var(--spacing-padding-5);
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
+
.auth-signup-type-options {
|
|
15
|
+
display: flex;
|
|
16
|
+
flex-direction: column;
|
|
17
|
+
gap: var(--spacing-padding-6);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.auth-signup-type-option-group {
|
|
21
|
+
display: flex;
|
|
22
|
+
flex-direction: column;
|
|
23
|
+
gap: var(--spacing-padding-3);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.auth-signup-type-question {
|
|
27
|
+
margin: 0;
|
|
28
|
+
color: var(--color-label-standard);
|
|
29
|
+
font-size: var(--font-heading-xxsmall-size);
|
|
30
|
+
line-height: 1.4;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.auth-signup-type-option {
|
|
34
|
+
display: flex;
|
|
35
|
+
justify-content: flex-start;
|
|
36
|
+
text-align: left;
|
|
37
|
+
|
|
38
|
+
--button-default-padding-inline-large: 16px;
|
|
39
|
+
--button-default-tertiary-outline-foreground: var(--color-label-alternative);
|
|
40
|
+
|
|
41
|
+
.button-left {
|
|
42
|
+
display: flex;
|
|
43
|
+
width: 24px;
|
|
44
|
+
height: 24px;
|
|
45
|
+
align-items: center;
|
|
46
|
+
justify-content: center;
|
|
47
|
+
flex-shrink: 0;
|
|
48
|
+
}
|
|
49
|
+
.button-left svg {
|
|
50
|
+
display: block;
|
|
51
|
+
width: 24px;
|
|
52
|
+
height: 24px;
|
|
53
|
+
}
|
|
54
|
+
.button-label {
|
|
55
|
+
flex: 1;
|
|
56
|
+
text-align: left;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.auth-signup-type-option-label {
|
|
61
|
+
font-size: var(--font-body-large-size);
|
|
62
|
+
line-height: 1.5;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.auth-signup-type-description {
|
|
66
|
+
margin: 0;
|
|
67
|
+
color: var(--color-label-assistive);
|
|
68
|
+
font-size: var(--font-body-xxsmall-size);
|
|
69
|
+
line-height: 1.5;
|
|
70
|
+
}
|
|
71
|
+
|
|
14
72
|
.auth-signup-verification {
|
|
15
73
|
display: flex;
|
|
16
74
|
flex-direction: column;
|
|
@@ -21,34 +79,47 @@
|
|
|
21
79
|
.auth-signup-agreements {
|
|
22
80
|
display: flex;
|
|
23
81
|
flex-direction: column;
|
|
24
|
-
gap:
|
|
82
|
+
gap: 12px;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.auth-signup-agreement-all-field {
|
|
86
|
+
gap: 0;
|
|
25
87
|
}
|
|
26
88
|
|
|
27
89
|
.auth-signup-agreement-all {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
align-items: center;
|
|
90
|
+
width: 100%;
|
|
91
|
+
min-height: 56px;
|
|
31
92
|
background: var(--color-bg-alternative-cool-gray, #f2f2f3);
|
|
32
|
-
border-radius:
|
|
33
|
-
|
|
34
|
-
|
|
93
|
+
border-radius: 12px;
|
|
94
|
+
padding: 8px 12px;
|
|
95
|
+
gap: 6px;
|
|
96
|
+
align-items: center;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.auth-signup-agreement-all-checkbox {
|
|
100
|
+
flex-shrink: 0;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
.auth-signup-agreement-all-label {
|
|
104
|
+
color: var(--color-label-standard);
|
|
105
|
+
font-size: var(--font-body-large-size);
|
|
106
|
+
font-weight: 500;
|
|
107
|
+
line-height: 1.5;
|
|
35
108
|
}
|
|
36
109
|
|
|
37
110
|
.auth-signup-agreements-list {
|
|
38
111
|
width: 100%;
|
|
39
|
-
background: var(--color-common-100);
|
|
40
|
-
border-radius: var(--theme-radius-medium-3, 8px);
|
|
41
|
-
padding: var(--spacing-padding-3);
|
|
42
112
|
display: flex;
|
|
43
113
|
flex-direction: column;
|
|
44
|
-
gap:
|
|
114
|
+
gap: 12px;
|
|
115
|
+
padding: 4px 12px;
|
|
45
116
|
}
|
|
46
117
|
|
|
47
118
|
.auth-signup-agreement-row {
|
|
48
119
|
display: flex;
|
|
49
120
|
align-items: center;
|
|
50
121
|
justify-content: space-between;
|
|
51
|
-
gap:
|
|
122
|
+
gap: 8px;
|
|
52
123
|
}
|
|
53
124
|
|
|
54
125
|
// 약관 토글 행은 SVG 아이콘/텍스트를 하나의 버튼으로 묶어 디자인 명세와 일치시킨다.
|
|
@@ -59,12 +130,13 @@
|
|
|
59
130
|
margin: 0;
|
|
60
131
|
display: flex;
|
|
61
132
|
align-items: center;
|
|
62
|
-
gap:
|
|
133
|
+
gap: 8px;
|
|
63
134
|
cursor: pointer;
|
|
64
135
|
flex: 1;
|
|
65
136
|
text-align: left;
|
|
66
137
|
flex-wrap: nowrap;
|
|
67
138
|
font-size: 14px;
|
|
139
|
+
min-width: 0;
|
|
68
140
|
}
|
|
69
141
|
|
|
70
142
|
.auth-signup-agreement-icon {
|
|
@@ -86,19 +158,19 @@
|
|
|
86
158
|
|
|
87
159
|
.auth-signup-agreement-toggle[data-checked="true"] .auth-signup-agreement-icon {
|
|
88
160
|
color: var(--color-primary-default);
|
|
89
|
-
border-color: var(--color-primary-default);
|
|
90
161
|
}
|
|
91
162
|
|
|
92
163
|
.auth-signup-agreement-label {
|
|
93
|
-
display:
|
|
94
|
-
gap:
|
|
164
|
+
display: flex;
|
|
165
|
+
gap: 0;
|
|
95
166
|
align-items: baseline;
|
|
96
167
|
flex-wrap: nowrap;
|
|
168
|
+
min-width: 0;
|
|
97
169
|
}
|
|
98
170
|
|
|
99
171
|
.auth-signup-agreement-badge {
|
|
100
172
|
font-size: 14px;
|
|
101
|
-
|
|
173
|
+
font-weight: 400;
|
|
102
174
|
color: var(--color-primary-default);
|
|
103
175
|
|
|
104
176
|
&[data-required="false"] {
|
|
@@ -110,7 +182,9 @@
|
|
|
110
182
|
font-size: 14px;
|
|
111
183
|
color: var(--color-label-standard);
|
|
112
184
|
font-weight: 400;
|
|
113
|
-
line-height: 1.
|
|
185
|
+
line-height: 1.5;
|
|
186
|
+
overflow: hidden;
|
|
187
|
+
text-overflow: ellipsis;
|
|
114
188
|
}
|
|
115
189
|
|
|
116
190
|
.auth-signup-agreement-description {
|
|
@@ -131,11 +205,12 @@
|
|
|
131
205
|
justify-content: center;
|
|
132
206
|
width: 20px;
|
|
133
207
|
height: 20px;
|
|
208
|
+
flex-shrink: 0;
|
|
134
209
|
|
|
135
210
|
svg {
|
|
136
211
|
display: block;
|
|
137
|
-
width:
|
|
138
|
-
height:
|
|
212
|
+
width: 16px;
|
|
213
|
+
height: 16px;
|
|
139
214
|
}
|
|
140
215
|
}
|
|
141
216
|
|
|
@@ -4,8 +4,14 @@ import type { AuthPasswordRule } from "../../common/password/types";
|
|
|
4
4
|
import type {
|
|
5
5
|
AuthSignupFieldProps,
|
|
6
6
|
AuthSignupFormValues,
|
|
7
|
+
AuthSignupTypeSelectValues,
|
|
8
|
+
AuthSignupTypeValue,
|
|
7
9
|
AuthSignupUserInfoFields,
|
|
8
10
|
AuthSignupUserInfoValues,
|
|
11
|
+
AuthSignupAgreementOption,
|
|
12
|
+
AuthSignupAgreementState,
|
|
13
|
+
AuthSignupFarmCodeFields,
|
|
14
|
+
AuthSignupFarmCodeValues,
|
|
9
15
|
AuthSignupVerificationFields,
|
|
10
16
|
AuthSignupVerificationValues,
|
|
11
17
|
AuthSignupAccountFields,
|
|
@@ -17,6 +23,42 @@ import type {
|
|
|
17
23
|
UseFormReturn,
|
|
18
24
|
} from "react-hook-form";
|
|
19
25
|
|
|
26
|
+
/**
|
|
27
|
+
* Step1 옵션.
|
|
28
|
+
*/
|
|
29
|
+
export interface UseSignupTypeSelectFormOptions {
|
|
30
|
+
/**
|
|
31
|
+
* RHF form 객체
|
|
32
|
+
*/
|
|
33
|
+
form: UseFormReturn<AuthSignupFormValues>;
|
|
34
|
+
/**
|
|
35
|
+
* 제출 핸들러
|
|
36
|
+
*/
|
|
37
|
+
onSubmit: SubmitHandler<AuthSignupTypeSelectValues>;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Step1 반환 값.
|
|
42
|
+
*/
|
|
43
|
+
export interface UseSignupTypeSelectFormReturn {
|
|
44
|
+
/**
|
|
45
|
+
* 선택된 가입 유형
|
|
46
|
+
*/
|
|
47
|
+
selectedType?: AuthSignupTypeValue;
|
|
48
|
+
/**
|
|
49
|
+
* 유형 변경 핸들러
|
|
50
|
+
*/
|
|
51
|
+
onValueChange: (value: AuthSignupTypeValue) => void;
|
|
52
|
+
/**
|
|
53
|
+
* disabled 상태
|
|
54
|
+
*/
|
|
55
|
+
disabled: boolean;
|
|
56
|
+
/**
|
|
57
|
+
* 제출 핸들러
|
|
58
|
+
*/
|
|
59
|
+
onSubmit: ReturnType<UseFormReturn<AuthSignupFormValues>["handleSubmit"]>;
|
|
60
|
+
}
|
|
61
|
+
|
|
20
62
|
/**
|
|
21
63
|
* 공용 Helper 타입
|
|
22
64
|
*/
|
|
@@ -128,6 +170,96 @@ export interface UseSignupVerificationFormReturn<
|
|
|
128
170
|
onSubmit: ReturnType<UseFormReturn<AuthSignupFormValues>["handleSubmit"]>;
|
|
129
171
|
}
|
|
130
172
|
|
|
173
|
+
/**
|
|
174
|
+
* Step3 옵션.
|
|
175
|
+
* @interface UseSignupFarmCodeFormOptions
|
|
176
|
+
* @template TFields extends Record<string, AuthSignupFieldProps>
|
|
177
|
+
*/
|
|
178
|
+
export interface UseSignupFarmCodeFormOptions<
|
|
179
|
+
TFields extends Record<string, AuthSignupFieldProps> =
|
|
180
|
+
AuthSignupFarmCodeFields,
|
|
181
|
+
> {
|
|
182
|
+
/**
|
|
183
|
+
* 필드 설정
|
|
184
|
+
*/
|
|
185
|
+
fields: TFields;
|
|
186
|
+
/**
|
|
187
|
+
* RHF form 객체
|
|
188
|
+
*/
|
|
189
|
+
form: UseFormReturn<AuthSignupFormValues>;
|
|
190
|
+
/**
|
|
191
|
+
* 제출 핸들러
|
|
192
|
+
*/
|
|
193
|
+
onSubmit: SubmitHandler<AuthSignupFarmCodeValues>;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Step3 반환 값.
|
|
198
|
+
* @interface UseSignupFarmCodeFormReturn
|
|
199
|
+
* @template TFields extends Record<string, AuthSignupFieldProps>
|
|
200
|
+
*/
|
|
201
|
+
export interface UseSignupFarmCodeFormReturn<
|
|
202
|
+
TFields extends Record<string, AuthSignupFieldProps> =
|
|
203
|
+
AuthSignupFarmCodeFields,
|
|
204
|
+
> {
|
|
205
|
+
/**
|
|
206
|
+
* 필드별 register
|
|
207
|
+
*/
|
|
208
|
+
register: Record<keyof TFields, UseFormRegisterReturn>;
|
|
209
|
+
/**
|
|
210
|
+
* helper 상태
|
|
211
|
+
*/
|
|
212
|
+
helpers: AuthSignupHelperMap<TFields>;
|
|
213
|
+
/**
|
|
214
|
+
* disabled 상태
|
|
215
|
+
*/
|
|
216
|
+
disabled: boolean;
|
|
217
|
+
/**
|
|
218
|
+
* 제출 핸들러
|
|
219
|
+
*/
|
|
220
|
+
onSubmit: ReturnType<UseFormReturn<AuthSignupFormValues>["handleSubmit"]>;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* Step4 옵션.
|
|
225
|
+
*/
|
|
226
|
+
export interface UseSignupAgreementFormOptions {
|
|
227
|
+
/**
|
|
228
|
+
* 약관 목록
|
|
229
|
+
*/
|
|
230
|
+
agreements: AuthSignupAgreementOption[];
|
|
231
|
+
/**
|
|
232
|
+
* 약관 체크 상태
|
|
233
|
+
*/
|
|
234
|
+
agreementState: AuthSignupAgreementState;
|
|
235
|
+
/**
|
|
236
|
+
* 제3자 제공 동의 필수 여부
|
|
237
|
+
*/
|
|
238
|
+
isThirdPartyRequired?: boolean;
|
|
239
|
+
/**
|
|
240
|
+
* 제3자 제공 동의 id
|
|
241
|
+
*/
|
|
242
|
+
thirdPartyAgreementId?: string;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* Step4 반환 값.
|
|
247
|
+
*/
|
|
248
|
+
export interface UseSignupAgreementFormReturn {
|
|
249
|
+
/**
|
|
250
|
+
* 필수 약관 id 목록
|
|
251
|
+
*/
|
|
252
|
+
requiredAgreementIds: string[];
|
|
253
|
+
/**
|
|
254
|
+
* 필수 약관 충족 여부
|
|
255
|
+
*/
|
|
256
|
+
allRequiredChecked: boolean;
|
|
257
|
+
/**
|
|
258
|
+
* CTA disabled 상태
|
|
259
|
+
*/
|
|
260
|
+
disabled: boolean;
|
|
261
|
+
}
|
|
262
|
+
|
|
131
263
|
/**
|
|
132
264
|
* Step3 옵션.
|
|
133
265
|
* @interface UseSignupAccountFormOptions
|
|
@@ -31,9 +31,84 @@ export type AuthSignupFieldProps<TProps extends InputProps = InputProps> = Omit<
|
|
|
31
31
|
};
|
|
32
32
|
|
|
33
33
|
/**
|
|
34
|
-
* 회원가입
|
|
34
|
+
* 회원가입 유형 값.
|
|
35
35
|
*/
|
|
36
|
-
export type
|
|
36
|
+
export type AuthSignupTypeValue = "farmMember" | "regionManager";
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* 회원가입 유형 선택 값.
|
|
40
|
+
* @property {"farmMember" | "regionManager"} [signupType] 선택된 가입 유형
|
|
41
|
+
*/
|
|
42
|
+
export interface AuthSignupTypeSelectValues {
|
|
43
|
+
/**
|
|
44
|
+
* 선택된 가입 유형
|
|
45
|
+
*/
|
|
46
|
+
signupType?: AuthSignupTypeValue;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* 회원가입 유형 옵션.
|
|
51
|
+
* @property {"farmMember" | "regionManager"} id 옵션 식별자
|
|
52
|
+
* @property {React.ReactNode} question 질문 문구
|
|
53
|
+
* @property {React.ReactNode} label 선택 카드 라벨
|
|
54
|
+
* @property {React.ReactNode} [description] 보조 설명
|
|
55
|
+
* @property {boolean} [disabled] 비활성 여부
|
|
56
|
+
*/
|
|
57
|
+
export interface AuthSignupTypeSelectOption {
|
|
58
|
+
/**
|
|
59
|
+
* 옵션 식별자
|
|
60
|
+
*/
|
|
61
|
+
id: AuthSignupTypeValue;
|
|
62
|
+
/**
|
|
63
|
+
* 질문 문구
|
|
64
|
+
*/
|
|
65
|
+
question: ReactNode;
|
|
66
|
+
/**
|
|
67
|
+
* 선택 카드 라벨
|
|
68
|
+
*/
|
|
69
|
+
label: ReactNode;
|
|
70
|
+
/**
|
|
71
|
+
* 보조 설명
|
|
72
|
+
*/
|
|
73
|
+
description?: ReactNode;
|
|
74
|
+
/**
|
|
75
|
+
* 비활성 여부
|
|
76
|
+
*/
|
|
77
|
+
disabled?: boolean;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* 회원가입 유형 선택 Step props.
|
|
82
|
+
* @property {AuthSignupTypeSelectOption[]} options 선택 옵션 목록
|
|
83
|
+
* @property {React.ReactNode} [submitLabel] CTA 라벨
|
|
84
|
+
* @property {React.FormHTMLAttributes<HTMLFormElement>} [formAttr] form attr
|
|
85
|
+
* @property {SubmitHandler<AuthSignupTypeSelectValues>} onSubmit 제출 핸들러
|
|
86
|
+
*/
|
|
87
|
+
export interface AuthSignupTypeSelectProps {
|
|
88
|
+
/**
|
|
89
|
+
* 선택 옵션 목록
|
|
90
|
+
*/
|
|
91
|
+
options: AuthSignupTypeSelectOption[];
|
|
92
|
+
/**
|
|
93
|
+
* CTA 라벨
|
|
94
|
+
*/
|
|
95
|
+
submitLabel?: ReactNode;
|
|
96
|
+
/**
|
|
97
|
+
* form attr
|
|
98
|
+
*/
|
|
99
|
+
formAttr?: React.FormHTMLAttributes<HTMLFormElement>;
|
|
100
|
+
/**
|
|
101
|
+
* 제출 핸들러
|
|
102
|
+
*/
|
|
103
|
+
onSubmit: SubmitHandler<AuthSignupTypeSelectValues>;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* 회원가입 폼 전체 값; 유형/본인확인/농장코드/계정 생성 값을 포함한다.
|
|
108
|
+
*/
|
|
109
|
+
export type AuthSignupFormValues = AuthSignupTypeSelectValues &
|
|
110
|
+
AuthSignupUserInfoValues &
|
|
111
|
+
AuthSignupFarmCodeValues &
|
|
37
112
|
AuthSignupVerificationValues &
|
|
38
113
|
AuthSignupAccountValues;
|
|
39
114
|
|
|
@@ -270,6 +345,112 @@ export interface AuthSignupVerificationProps {
|
|
|
270
345
|
onSubmit: SubmitHandler<AuthSignupVerificationValues>;
|
|
271
346
|
}
|
|
272
347
|
|
|
348
|
+
/**
|
|
349
|
+
* 농장 식별번호 필드 정의.
|
|
350
|
+
* @property {AuthSignupFieldProps<InputProps>} farmCode 농장 식별번호 필드
|
|
351
|
+
*/
|
|
352
|
+
export interface AuthSignupFarmCodeFields extends Record<
|
|
353
|
+
string,
|
|
354
|
+
AuthSignupFieldProps
|
|
355
|
+
> {
|
|
356
|
+
/**
|
|
357
|
+
* 농장 식별번호 필드
|
|
358
|
+
*/
|
|
359
|
+
farmCode: AuthSignupFieldProps<InputProps>;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
/**
|
|
363
|
+
* 농장 식별번호 값 집합.
|
|
364
|
+
*/
|
|
365
|
+
export type AuthSignupFarmCodeValues = Record<string, string>;
|
|
366
|
+
|
|
367
|
+
/**
|
|
368
|
+
* 농장 식별번호 Step props.
|
|
369
|
+
* @property {AuthSignupFarmCodeFields} fields 필드 설정
|
|
370
|
+
* @property {React.ReactNode} [submitLabel] CTA 라벨
|
|
371
|
+
* @property {React.FormHTMLAttributes<HTMLFormElement>} [formAttr] form attr
|
|
372
|
+
* @property {SubmitHandler<AuthSignupFarmCodeValues>} onSubmit 제출 핸들러
|
|
373
|
+
*/
|
|
374
|
+
export interface AuthSignupFarmCodeProps {
|
|
375
|
+
/**
|
|
376
|
+
* 필드 설정
|
|
377
|
+
*/
|
|
378
|
+
fields: AuthSignupFarmCodeFields;
|
|
379
|
+
/**
|
|
380
|
+
* CTA 라벨
|
|
381
|
+
*/
|
|
382
|
+
submitLabel?: ReactNode;
|
|
383
|
+
/**
|
|
384
|
+
* form attr
|
|
385
|
+
*/
|
|
386
|
+
formAttr?: React.FormHTMLAttributes<HTMLFormElement>;
|
|
387
|
+
/**
|
|
388
|
+
* 제출 핸들러
|
|
389
|
+
*/
|
|
390
|
+
onSubmit: SubmitHandler<AuthSignupFarmCodeValues>;
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
/**
|
|
394
|
+
* 약관 동의 Step props.
|
|
395
|
+
* @property {AuthSignupAgreementOption[]} agreements 약관 옵션 목록
|
|
396
|
+
* @property {AuthSignupAgreementState} agreementState 약관 체크 상태
|
|
397
|
+
* @property {boolean} [isThirdPartyRequired] 제3자 제공 동의 필수 여부
|
|
398
|
+
* @property {string} [thirdPartyAgreementId] 제3자 제공 동의 option id
|
|
399
|
+
* @property {(agreementId: string) => void} onToggleAgreement 단일 약관 토글
|
|
400
|
+
* @property {(options?: AuthSignupAgreementToggleAllOptions) => void} onToggleAll 전체 동의 토글
|
|
401
|
+
* @property {(agreementId: string) => void} [onOpenAgreementDetail] 약관 상세 열기
|
|
402
|
+
* @property {React.ReactNode} [submitLabel] CTA 라벨
|
|
403
|
+
* @property {boolean} [submitDisabled] CTA disabled override
|
|
404
|
+
* @property {React.FormHTMLAttributes<HTMLFormElement>} [formAttr] form attr
|
|
405
|
+
* @property {() => void} onSubmit 제출 핸들러
|
|
406
|
+
*/
|
|
407
|
+
export interface AuthSignupAgreementProps {
|
|
408
|
+
/**
|
|
409
|
+
* 약관 옵션 목록
|
|
410
|
+
*/
|
|
411
|
+
agreements: AuthSignupAgreementOption[];
|
|
412
|
+
/**
|
|
413
|
+
* 약관 체크 상태
|
|
414
|
+
*/
|
|
415
|
+
agreementState: AuthSignupAgreementState;
|
|
416
|
+
/**
|
|
417
|
+
* 제3자 제공 동의 필수 여부
|
|
418
|
+
*/
|
|
419
|
+
isThirdPartyRequired?: boolean;
|
|
420
|
+
/**
|
|
421
|
+
* 제3자 제공 동의 option id
|
|
422
|
+
*/
|
|
423
|
+
thirdPartyAgreementId?: string;
|
|
424
|
+
/**
|
|
425
|
+
* 단일 약관 토글
|
|
426
|
+
*/
|
|
427
|
+
onToggleAgreement: (agreementId: string) => void;
|
|
428
|
+
/**
|
|
429
|
+
* 전체 동의 토글
|
|
430
|
+
*/
|
|
431
|
+
onToggleAll: (options?: AuthSignupAgreementToggleAllOptions) => void;
|
|
432
|
+
/**
|
|
433
|
+
* 약관 상세 열기
|
|
434
|
+
*/
|
|
435
|
+
onOpenAgreementDetail?: (agreementId: string) => void;
|
|
436
|
+
/**
|
|
437
|
+
* CTA 라벨
|
|
438
|
+
*/
|
|
439
|
+
submitLabel?: ReactNode;
|
|
440
|
+
/**
|
|
441
|
+
* CTA disabled override
|
|
442
|
+
*/
|
|
443
|
+
submitDisabled?: boolean;
|
|
444
|
+
/**
|
|
445
|
+
* form attr
|
|
446
|
+
*/
|
|
447
|
+
formAttr?: React.FormHTMLAttributes<HTMLFormElement>;
|
|
448
|
+
/**
|
|
449
|
+
* 제출 핸들러
|
|
450
|
+
*/
|
|
451
|
+
onSubmit: () => void;
|
|
452
|
+
}
|
|
453
|
+
|
|
273
454
|
/**
|
|
274
455
|
* 계정 정보(아이디/비밀번호) 필드 정의.
|
|
275
456
|
* @interface AuthSignupAccountFields
|
|
@@ -367,9 +548,14 @@ export interface AuthSignupCompleteProps {
|
|
|
367
548
|
* Step 식별자.
|
|
368
549
|
*/
|
|
369
550
|
export type AuthSignupStepId =
|
|
551
|
+
| "typeSelect"
|
|
552
|
+
| "identity"
|
|
553
|
+
| "farmCode"
|
|
554
|
+
| "agreement"
|
|
370
555
|
| "userInfo"
|
|
371
556
|
| "verifyAgreement"
|
|
372
557
|
| "generateAccount"
|
|
558
|
+
| "account"
|
|
373
559
|
| "complete";
|
|
374
560
|
|
|
375
561
|
/**
|
|
@@ -440,11 +626,27 @@ export interface AuthSignupStepIndicatorProps {
|
|
|
440
626
|
*/
|
|
441
627
|
export interface AuthSignupFlowProps {
|
|
442
628
|
/**
|
|
443
|
-
*
|
|
629
|
+
* 가입 유형 선택 Step
|
|
630
|
+
*/
|
|
631
|
+
typeSelect?: AuthSignupTypeSelectProps;
|
|
632
|
+
/**
|
|
633
|
+
* 본인 확인 Step
|
|
634
|
+
*/
|
|
635
|
+
identity?: AuthSignupUserInfoProps;
|
|
636
|
+
/**
|
|
637
|
+
* 농장 식별번호 Step
|
|
638
|
+
*/
|
|
639
|
+
farmCode?: AuthSignupFarmCodeProps;
|
|
640
|
+
/**
|
|
641
|
+
* 약관 동의 Step
|
|
642
|
+
*/
|
|
643
|
+
agreement?: AuthSignupAgreementProps;
|
|
644
|
+
/**
|
|
645
|
+
* 사용자 정보 Step(legacy)
|
|
444
646
|
*/
|
|
445
647
|
userInfo: AuthSignupUserInfoProps;
|
|
446
648
|
/**
|
|
447
|
-
* 인증 Step
|
|
649
|
+
* 인증 Step(legacy)
|
|
448
650
|
*/
|
|
449
651
|
verification: AuthSignupVerificationProps;
|
|
450
652
|
/**
|
|
@@ -465,6 +667,10 @@ export interface AuthSignupTemplateProps extends AuthSignupFlowProps {
|
|
|
465
667
|
* 래퍼 className
|
|
466
668
|
*/
|
|
467
669
|
className?: string;
|
|
670
|
+
/**
|
|
671
|
+
* 현재 가입 유형
|
|
672
|
+
*/
|
|
673
|
+
signupType?: AuthSignupTypeValue;
|
|
468
674
|
/**
|
|
469
675
|
* 헤더 구성
|
|
470
676
|
*/
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
.uds-modal-container {
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
// 변경: modal surface의 max-height 안에서 header/body/footer 3행 계약을 고정한다.
|
|
3
|
+
display: grid;
|
|
4
|
+
grid-template-rows: auto minmax(0, 1fr) auto;
|
|
5
|
+
flex: 1 1 auto;
|
|
6
|
+
min-height: 0;
|
|
4
7
|
width: 100%;
|
|
5
8
|
}
|
|
6
9
|
|
|
@@ -9,11 +12,23 @@
|
|
|
9
12
|
padding: 0;
|
|
10
13
|
margin: 0;
|
|
11
14
|
}
|
|
15
|
+
|
|
16
|
+
.uds-modal-header {
|
|
17
|
+
grid-row: 1;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.uds-modal-body {
|
|
21
|
+
// 변경: body만 남는 높이를 차지하고 내부 스크롤을 담당한다.
|
|
22
|
+
grid-row: 2;
|
|
23
|
+
min-height: 0;
|
|
24
|
+
overflow: auto;
|
|
25
|
+
}
|
|
12
26
|
.uds-modal-header-close-button {
|
|
13
27
|
font-size: 0;
|
|
14
28
|
}
|
|
15
29
|
|
|
16
30
|
.uds-modal-footer {
|
|
31
|
+
grid-row: 3;
|
|
17
32
|
padding: 0;
|
|
18
33
|
border-top: none;
|
|
19
34
|
}
|