From c6ef32d7358ba65ed5beb7d522527bae6c5473d4 Mon Sep 17 00:00:00 2001 From: imddoy Date: Sun, 7 Jul 2024 05:03:25 +0900 Subject: [PATCH] =?UTF-8?q?chore:=20=EC=BB=A8=EB=B2=A4=EC=85=98=20?= =?UTF-8?q?=EB=A7=9E=EC=B6=94=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../commons/inputs/textAreas/TextArea.tsx | 16 ++++++++----- .../inputs/textFields/TextField.stories.ts | 24 ++++++++++++++----- .../commons/inputs/textFields/TextField.tsx | 18 +++++++------- src/pages/test/TestPage.tsx | 12 +++++++--- src/utils/useInputFiter.ts | 5 ++++ 5 files changed, 51 insertions(+), 24 deletions(-) diff --git a/src/components/commons/inputs/textAreas/TextArea.tsx b/src/components/commons/inputs/textAreas/TextArea.tsx index 40750caa..78c0d004 100644 --- a/src/components/commons/inputs/textAreas/TextArea.tsx +++ b/src/components/commons/inputs/textAreas/TextArea.tsx @@ -1,24 +1,28 @@ import { ChangeEvent, TextareaHTMLAttributes, useState } from "react"; import * as S from "./TextArea.style"; -export interface TextAreaProps extends TextareaHTMLAttributes { +export interface TextAreaPropsTypes extends TextareaHTMLAttributes { maxLength?: number; placeholder: string; } -const TextArea = ({ maxLength, placeholder }: TextAreaProps) => { +const TextArea = ({ maxLength, placeholder }: TextAreaPropsTypes) => { + const [inputValue, setInputValue] = useState(""); const [inputCount, setInputCount] = useState(0); - const onInputHandler = (e: ChangeEvent) => { - setInputCount(e.target.value.length); + const handleOnInput = (e: ChangeEvent) => { + const value = e.target.value; + setInputValue(value); + setInputCount(value.length); }; return ( - {maxLength && {`${inputCount} / ${maxLength}`}} + {maxLength && {`${inputCount}/${maxLength}`}} ); }; diff --git a/src/components/commons/inputs/textFields/TextField.stories.ts b/src/components/commons/inputs/textFields/TextField.stories.ts index 05ff247e..f6b8d0f2 100644 --- a/src/components/commons/inputs/textFields/TextField.stories.ts +++ b/src/components/commons/inputs/textFields/TextField.stories.ts @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from "@storybook/react"; import { fn } from "@storybook/test"; import TextField from "./TextField"; -import { phoneNumberFilter } from "../../../../utils/useInputFiter"; +import { numericFilter, phoneNumberFilter, priceFilter } from "../../../../utils/useInputFiter"; const meta = { title: "TextField", @@ -16,18 +16,30 @@ const meta = { export default meta; type Story = StoryObj; -export const Default: Story = { - args: { maxLength: 5 }, +export const DefaultCapOn: Story = { + args: { maxLength: 30 }, +}; + +export const DefaultCapOff: Story = { + args: {}, }; export const Narrow: Story = { args: { narrow: true }, }; -export const Unit: Story = { - args: { unit: "time" }, +export const Time: Story = { + args: { unit: "time", filter: numericFilter }, +}; + +export const Ticket: Story = { + args: { unit: "ticket", filter: numericFilter }, +}; + +export const Amount: Story = { + args: { unit: "amount", filter: priceFilter }, }; export const Phone: Story = { - args: { filter: phoneNumberFilter, placeholder: "전화번호를 입력하세요" }, + args: { filter: phoneNumberFilter }, }; diff --git a/src/components/commons/inputs/textFields/TextField.tsx b/src/components/commons/inputs/textFields/TextField.tsx index 30669344..74170a45 100644 --- a/src/components/commons/inputs/textFields/TextField.tsx +++ b/src/components/commons/inputs/textFields/TextField.tsx @@ -1,31 +1,31 @@ import { ChangeEvent, InputHTMLAttributes, useState } from "react"; import * as S from "./TextField.style"; -export interface TextFieldProps extends InputHTMLAttributes { +export interface TextFieldPropsTypes extends InputHTMLAttributes { maxLength?: number; placeholder: string; narrow?: false | true; - unit?: "time" | "ticket" | "amount"; // 단위 : "분", "매", "초" + unit?: "time" | "ticket" | "amount"; // 단위 : "분", "매", "원" filter?: (value: string) => string; } -const TextField = ({ maxLength, placeholder, narrow, unit, filter }: TextFieldProps) => { - const label = unit === "time" ? "분" : unit === "ticket" ? "매" : "초"; +const TextField = ({ maxLength, placeholder, narrow, unit, filter }: TextFieldPropsTypes) => { + const label = unit === "time" ? "분" : unit === "ticket" ? "매" : "원"; const [inputValue, setInputValue] = useState(""); const [inputCount, setInputCount] = useState(0); // 값 입력될 떄 - const onInputHandler = (e: ChangeEvent) => { + const handleOnInput = (e: ChangeEvent) => { let value = e.target.value; if (filter) { value = filter(value); } setInputValue(value); - setInputCount(e.target.value.length); + setInputCount(value.length); }; // 값 지울 때 - const clearInput = () => { + const handleClearInput = () => { setInputValue(""); setInputCount(0); }; @@ -35,11 +35,11 @@ const TextField = ({ maxLength, placeholder, narrow, unit, filter }: TextFieldPr - {!narrow && !unit && inputValue && } + {!narrow && !unit && inputValue && } {unit && {label}} {maxLength && {`${inputCount}/${maxLength}`}} diff --git a/src/pages/test/TestPage.tsx b/src/pages/test/TestPage.tsx index f37c2bd7..6a499cb5 100644 --- a/src/pages/test/TestPage.tsx +++ b/src/pages/test/TestPage.tsx @@ -1,13 +1,19 @@ import TextArea from "@components/commons/inputs/textAreas/TextArea"; import TextField from "@components/commons/inputs/textFields/TextField"; -import { numericFilter, phoneNumberFilter } from "@utils/useInputFiter"; +import { numericFilter, phoneNumberFilter, priceFilter } from "@utils/useInputFiter"; const TestPage = () => { return ( -
+

Test Page

Test Page

- + + + + + +