From a90875afe1eda436bb007c68fd961c085ab7dfcc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A1=B0=EC=98=88=EC=A7=84?= Date: Thu, 4 Jul 2024 01:31:15 +0900 Subject: [PATCH] feat(processes/ideal): add RequiredOptionForm --- .../RequiredOptionForm.module.css | 3 ++ .../RequiredOptionForm.stories.ts | 13 +++++++ .../RequiredOptionForm/RequiredOptionForm.tsx | 35 +++++++++++++++++++ src/shared/ui/CheckBox/CheckBox.module.css | 19 ++++++---- src/shared/ui/CheckBox/CheckBox.tsx | 15 +++++--- 5 files changed, 74 insertions(+), 11 deletions(-) create mode 100644 src/processes/ideal_partner/RequiredOptionForm/RequiredOptionForm.module.css create mode 100644 src/processes/ideal_partner/RequiredOptionForm/RequiredOptionForm.stories.ts create mode 100644 src/processes/ideal_partner/RequiredOptionForm/RequiredOptionForm.tsx diff --git a/src/processes/ideal_partner/RequiredOptionForm/RequiredOptionForm.module.css b/src/processes/ideal_partner/RequiredOptionForm/RequiredOptionForm.module.css new file mode 100644 index 0000000..99ce49b --- /dev/null +++ b/src/processes/ideal_partner/RequiredOptionForm/RequiredOptionForm.module.css @@ -0,0 +1,3 @@ +.Container { + height: 100%; +} \ No newline at end of file diff --git a/src/processes/ideal_partner/RequiredOptionForm/RequiredOptionForm.stories.ts b/src/processes/ideal_partner/RequiredOptionForm/RequiredOptionForm.stories.ts new file mode 100644 index 0000000..6f2c1d3 --- /dev/null +++ b/src/processes/ideal_partner/RequiredOptionForm/RequiredOptionForm.stories.ts @@ -0,0 +1,13 @@ +import { Meta, StoryObj } from '@storybook/react'; +import { RequiredOptionForm } from 'src/processes/ideal_partner/RequiredOptionForm/RequiredOptionForm'; + +const meta: Meta = { + component: RequiredOptionForm, +}; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + args: {}, +}; diff --git a/src/processes/ideal_partner/RequiredOptionForm/RequiredOptionForm.tsx b/src/processes/ideal_partner/RequiredOptionForm/RequiredOptionForm.tsx new file mode 100644 index 0000000..232a743 --- /dev/null +++ b/src/processes/ideal_partner/RequiredOptionForm/RequiredOptionForm.tsx @@ -0,0 +1,35 @@ +import styles from './RequiredOptionForm.module.css'; +import { useIdlePartnerStore } from 'src/entities/ideal_partner/model/idealPartnerStore'; +import { CheckBox } from 'src/shared/ui/CheckBox/CheckBox'; + +const optionList: { label: string }[] = [ + { label: '나이' }, + { label: '키 + 선호하는 스타일' }, + { label: '지역' }, + { label: '취미' }, + { label: '종교' }, + { label: '음주 습관' }, + { label: '흡연 여부' }, +]; + +export const RequiredOptionForm = () => { + const requiredOptions = useIdlePartnerStore((state) => state.requiredOptions); + const setRequiredOptions = useIdlePartnerStore((state) => state.setRequiredOptions); + + return ( +
+ {optionList.map((option) => ( + o === option.label)} + label={option.label} + onChange={(value) => + value + ? setRequiredOptions([...requiredOptions, option.label]) + : setRequiredOptions(requiredOptions.filter((x) => x !== option.label)) + } + /> + ))} +
+ ); +}; diff --git a/src/shared/ui/CheckBox/CheckBox.module.css b/src/shared/ui/CheckBox/CheckBox.module.css index cda29a2..3fe7e7b 100644 --- a/src/shared/ui/CheckBox/CheckBox.module.css +++ b/src/shared/ui/CheckBox/CheckBox.module.css @@ -1,3 +1,7 @@ +.Wrapper { + padding: 12px 0; +} + .Label { position: relative; font-weight: 500; @@ -12,10 +16,10 @@ .CheckMark { display: flex; position: absolute; - top: 0; - left: 0; - width: 22px; - height: 22px; + top: 1px; + left: 1px; + width: 16px; + height: 16px; align-items: center; justify-content: center; color: #fff; @@ -29,9 +33,10 @@ display: inline-flex; justify-content: center; align-items: center; - width: 20px; - height: 20px; - border: 2px solid var(--color-neutral-30); + width: 18px; + height: 18px; + border-radius: 50%; + background-color: var(--color-neutral-30); } &:checked + label::before { diff --git a/src/shared/ui/CheckBox/CheckBox.tsx b/src/shared/ui/CheckBox/CheckBox.tsx index 95a30b9..66eb2eb 100644 --- a/src/shared/ui/CheckBox/CheckBox.tsx +++ b/src/shared/ui/CheckBox/CheckBox.tsx @@ -5,19 +5,26 @@ import { Check } from 'src/shared/ui/icons'; type CheckBoxProps = { checked: boolean; label: string; + onChange: (value: boolean) => void; }; -export const CheckBox = ({ checked, label }: CheckBoxProps) => { +export const CheckBox = ({ checked, label, onChange }: CheckBoxProps) => { const id = useId(); return ( - <> - +
+ onChange(!checked)} + /> - +
); };