From b35d48d248969d8a3d287ac7ab65893decbc8387 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 26 Aug 2021 18:08:32 +0700 Subject: [PATCH] feat: component SelectCommon --- pages/index.tsx | 11 +-- .../SelectCommon/SelectCommon.module.scss | 73 +++++++++++++++--- .../common/SelectCommon/SelectCommon.tsx | 76 +++++++++++++++---- src/components/icons/IconVectorDown.tsx | 21 +++++ src/components/icons/index.ts | 3 +- 5 files changed, 149 insertions(+), 35 deletions(-) create mode 100644 src/components/icons/IconVectorDown.tsx diff --git a/pages/index.tsx b/pages/index.tsx index 539a8c74a..3a1c2a7fe 100644 --- a/pages/index.tsx +++ b/pages/index.tsx @@ -26,18 +26,11 @@ export default function Home() { return ( <>
This is home page
- Button default - {ButonType.light} - Button light - {ButonType.light} - Button light - {ButonType.light} - Button light - }>{ButtonSize.large} - Button default large - } disabled isIconSuffix={true}>Button with icon disabled - } type={ButonType.light}>Button with icon - - + Sort by + States ) } diff --git a/src/components/common/SelectCommon/SelectCommon.module.scss b/src/components/common/SelectCommon/SelectCommon.module.scss index dcb9120da..7de2c9c03 100644 --- a/src/components/common/SelectCommon/SelectCommon.module.scss +++ b/src/components/common/SelectCommon/SelectCommon.module.scss @@ -1,32 +1,81 @@ @import "../../../styles/utilities"; .select{ - @apply rounded-lg border-solid; - display: flex; - flex-direction: row; - justify-content: center; - align-items: center; - padding: 1.2rem 1.6rem; + background-color: var(--white); + margin-left: 2rem; &.base{ - width: 18.6rem; - height: 4.8rem; + width: 20.6rem; + .selectTrigger{ + width: 20.6rem; + padding: 1.2rem 1.6rem; + } } &.large{ width: 34.25rem; - height: 5.6rem; + .selectTrigger{ + width: 34.25rem; + padding: 1.6rem 1.6rem; + } } &.default{ - @apply border; + .selectTrigger{ + @apply border-solid border border-current; + } + } + &.custom{ + .selectTrigger{ + @apply border-2; + border-color: var(--border-line); + color: var(--text-label); + } + } + &.isActive{ + .selectOptionWrapper{ + @apply block; + } + } +} +.selectTrigger{ + @apply outline-none flex justify-between; + color: var(--text-active); + border-radius: 0.8rem; + +} +.selectOptionWrapper{ + @apply outline-none hidden z-10 absolute; + border-radius: 0.8rem; + background-color: var(--white); + padding: 0.4rem 0rem 0.4rem 0rem; + margin-top: 0.6rem; + &.base{ + width: 20.6rem; + .selectOption{ + padding: 1.2rem 1.6rem; + } + } + &.large{ + width: 34.25rem; + .selectOption{ + padding: 1.6rem 1.6rem; + } + } + &.default{ + @apply border-solid border border-current; } &.custom{ @apply border-2; border-color: var(--border-line); color: var(--text-label); } - .option{ + &.active{ + @apply hidden; + } + .selectOption{ &:hover{ - background-color: black; + background-color: var(--background); } } } + + diff --git a/src/components/common/SelectCommon/SelectCommon.tsx b/src/components/common/SelectCommon/SelectCommon.tsx index 8360a700f..fcfdc4e56 100644 --- a/src/components/common/SelectCommon/SelectCommon.tsx +++ b/src/components/common/SelectCommon/SelectCommon.tsx @@ -1,26 +1,76 @@ import s from './SelectCommon.module.scss' import classNames from 'classnames' +import { useState, useRef, useEffect } from 'react' +import { IconVectorDown } from 'src/components/icons' interface Props { - placeHolder? : string, + children? : React.ReactNode, size?: 'base' | 'large', type?: 'default' | 'custom', option: {name: string}[], } -const SelectCommon = ({ type = 'default', size = 'base', option, placeHolder }: Props) => { - return( - + else{ + setActive(false) + } + } + document.addEventListener('click', handleClick) + return () => { + document.removeEventListener('click', handleClick) + } + }, [ref]) + + const changeActiveStatus = () => { + setActive(!isActive) + } + + return( + <> +
+
{selectedName}
+ +
+ { + option.map(item => +
setSelectedName(item.name)} + >{item.name}
+ ) + } +
+
+ ) } diff --git a/src/components/icons/IconVectorDown.tsx b/src/components/icons/IconVectorDown.tsx new file mode 100644 index 000000000..019fc2806 --- /dev/null +++ b/src/components/icons/IconVectorDown.tsx @@ -0,0 +1,21 @@ + + +const IconVectorDown = ({ ...props }) => { + return ( + + + + ) + } + + export default IconVectorDown \ No newline at end of file diff --git a/src/components/icons/index.ts b/src/components/icons/index.ts index 74f5ca62f..86fe02e22 100644 --- a/src/components/icons/index.ts +++ b/src/components/icons/index.ts @@ -1,3 +1,4 @@ export { default as IconBuy } from './IconBuy' export { default as IconHeart } from './IconHeart' -export { default as IconVector } from './IconVector' \ No newline at end of file +export { default as IconVector } from './IconVector' +export { default as IconVectorDown } from './IconVectorDown' \ No newline at end of file