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(
-
- {placeHolder}
- {
- option.map(item => {item.name} )
+const SelectCommon = ({ type = 'default', size = 'base', option, children }: Props) => {
+ const [isActive, setActive] = useState(false)
+ const [selectedName, setSelectedName] = useState(children)
+ const ref = useRef(null)
+
+ useEffect(() => {
+ const handleClick = (event: MouseEvent) => {
+ const { target } = event;
+ if (!ref?.current || ref?.current.contains(target as Node)) {
+ 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