Skip to content

Commit 4cede5f

Browse files
authored
Merge pull request #302 from prgrms-web-devcourse-final-project/refactor/inputFiled
[refactor] input 컴포넌트
2 parents 0ced1fc + d6c00af commit 4cede5f

File tree

12 files changed

+32
-26
lines changed

12 files changed

+32
-26
lines changed

src/components/InputAuthCode.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import LoadingSpinnerButton from '@/components/button/LoadingSpinnerButton';
1+
import { LoadingSpinnerButton } from '@/components/button';
22
import CountdownTimer from '@/components/CountdownTimer';
33
import React from 'react';
44
import { twMerge } from 'tailwind-merge';

src/components/button/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import Button from '@/components/button/Button';
2+
import LoadingSpinnerButton from '@/components/button/LoadingSpinnerButton';
3+
export { Button, LoadingSpinnerButton };
Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,23 @@
1+
import { forwardRef } from 'react';
12
import { twMerge } from 'tailwind-merge';
23

34
interface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {
4-
id?: string;
55
className?: string;
66
}
77

8-
function Input({ id, className, ...props }: InputProps) {
8+
const Input = forwardRef<HTMLInputElement, InputProps>(({ className, ...props }, ref) => {
99
return (
1010
<input
11-
id={id}
11+
ref={ref}
1212
className={twMerge(
1313
'w-full h-[38px] rounded-lg input-shadow outline-0 px-3 caption-m placeholder:text-gray-50 focus:ring-1 focus:ring-primary-active bg-white',
14-
className, //사용자 정의 스타일
14+
className,
1515
)}
16-
{...props} //추가 속성
16+
{...props}
1717
/>
1818
);
19-
}
19+
});
20+
21+
Input.displayName = 'Input';
2022

2123
export default Input;

src/components/InputField.tsx renamed to src/components/input/InputField.tsx

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import Input from '@/components/Input';
1+
import Input from '@/components/input/Input';
22
import { twMerge } from 'tailwind-merge';
33

44
interface InputFieldProps extends React.InputHTMLAttributes<HTMLInputElement> {
@@ -31,18 +31,15 @@ export default function InputField({
3131
</div>
3232

3333
{/* 유효성 검사 메시지 */}
34-
<div className="flex items-center h-[18px]">
35-
{message && (
36-
<p
37-
className={twMerge(
38-
'text-[9px]/[18px] pl-[5px]',
39-
isValid ? 'text-functional-success' : 'text-functional-danger',
40-
)}
41-
>
42-
{message}
43-
</p>
34+
<p
35+
className={twMerge(
36+
'text-[9px]/[18px] pl-[5px]',
37+
isValid ? 'text-functional-success' : 'text-functional-danger',
38+
message === '' && 'invisible',
4439
)}
45-
</div>
40+
>
41+
{message || '‎'}
42+
</p>
4643
</div>
4744
);
4845
}

src/components/input/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import Input from '@/components/input/Input';
2+
import InputField from '@/components/input/InputField';
3+
4+
export { Input, InputField };

src/pages/Login.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { login } from '@/apis/auth';
33
import Button from '@/components/button/Button';
44
import logo from '@assets/icons/logo.svg';
55
import kakao from '@assets/icons/kakao-icon.svg';
6-
import Input from '@/components/Input';
6+
import Input from '@/components/input/Input';
77
import { useState } from 'react';
88
import { useModalStore } from '@/store/modalStore';
99
import SpinLoading from '@/components/loading/SpinLoading';

src/pages/editprofile/components/CurrentPasswordInput.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import InputField from '@/components/InputField';
1+
import InputField from '@/components/input/InputField';
22
import { useState } from 'react';
33

44
interface CurrentPasswordInputPros {

src/pages/signup/components/EmailInput.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { getEmailAvailability, postEmailVerificationRequest } from '@/apis/email';
22
import LoadingSpinnerButton from '@/components/button/LoadingSpinnerButton';
3-
import InputField from '@/components/InputField';
3+
import InputField from '@/components/input/InputField';
44
import { EMAIL_REGEX } from '@/constants';
55
import { useModalStore } from '@/store/modalStore';
66
import { useMutation } from '@tanstack/react-query';

src/pages/signup/components/IdInput.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { getIdAvailability } from '@/apis/user';
22
import LoadingSpinnerButton from '@/components/button/LoadingSpinnerButton';
3-
import InputField from '@/components/InputField';
3+
import InputField from '@/components/input/InputField';
44
import { ID_REGEX } from '@/constants';
55
import { useModalStore } from '@/store/modalStore';
66
import { useMutation } from '@tanstack/react-query';

src/pages/signup/components/NicknameInput.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { getNicknameAvailability } from '@/apis/user';
22
import LoadingSpinnerButton from '@/components/button/LoadingSpinnerButton';
3-
import InputField from '@/components/InputField';
3+
import InputField from '@/components/input/InputField';
44
import { MAX_NICKNAME_LENGTH, MIN_NICKNAME_LENGTH, NICKNAME_REGEX } from '@/constants';
55
import { useMutation } from '@tanstack/react-query';
66
import { useEffect, useState } from 'react';

0 commit comments

Comments
 (0)