diff --git a/pages/index.tsx b/pages/index.tsx
index 1d3072ef7..e12963435 100644
--- a/pages/index.tsx
+++ b/pages/index.tsx
@@ -1,18 +1,28 @@
-import { Layout } from 'src/components/common'
+import { Layout, SelectCommon } from 'src/components/common'
import { HomeBanner, HomeCollection, HomeCTA, HomeSubscribe, HomeVideo, HomeCategories, HomeFeature, HomeRecipe } from 'src/components/modules/home';
+const OPTION_TEST = [
+ {
+ name: "By Name",
+ value: "Name"
+ },
+ {
+ name: "Price (High to Low)",
+ value: "Price"
+ },
+ {
+ name: "On Sale",
+ value: "Sale"
+ }
+]
+const handleChange = (value:string) => {
+ console.log(value)
+}
export default function Home() {
return (
<>
-
-
-
-
-
-
-
-
+
>
)
}
diff --git a/src/components/common/SelectCommon/SelectCommon.module.scss b/src/components/common/SelectCommon/SelectCommon.module.scss
index dcb9120da..71aed96f0 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);
&.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);
+ }
+ }
+ &:hover{
+ .hoverWrapper{
+ @apply block;
+ animation: SelectAnimation 0.2s ease-out;
+ }
+ }
+}
+.selectTrigger{
+ @apply outline-none flex justify-between;
+ color: var(--text-active);
+ border-radius: 0.8rem;
+
+}
+.hoverWrapper{
+ @apply hidden;
+ padding-top: 0.6rem;
+ &:hover{
+ @apply block;
+ }
+}
+.selectOptionWrapper{
+ @apply outline-none z-10 absolute;
+ border-radius: 0.8rem;
+ background-color: var(--white);
+ padding: 0.4rem 0rem 0.4rem 0rem;
+ &.base{
+ width: 20.6rem;
+ }
+ &.large{
+ width: 34.25rem;
+ }
+ &.default{
+ @apply border-solid border border-current;
}
&.custom{
@apply border-2;
border-color: var(--border-line);
color: var(--text-label);
}
- .option{
- &:hover{
- background-color: black;
- }
- }
}
+@keyframes SelectAnimation {
+ 0% {
+ opacity: 0;
+ transform: translateY(1.6rem);
+ }
+ 100% {
+ opacity: 1;
+ transform: none;
+ }
+}
\ No newline at end of file
diff --git a/src/components/common/SelectCommon/SelectCommon.tsx b/src/components/common/SelectCommon/SelectCommon.tsx
index 8360a700f..0eea2b2e0 100644
--- a/src/components/common/SelectCommon/SelectCommon.tsx
+++ b/src/components/common/SelectCommon/SelectCommon.tsx
@@ -1,26 +1,54 @@
import s from './SelectCommon.module.scss'
import classNames from 'classnames'
+import { useState } from 'react'
+import { IconVectorDown } from 'src/components/icons'
+import SelectOption from './SelectOption/SelectOption'
interface Props {
- placeHolder? : string,
+ placeholder? : string,
size?: 'base' | 'large',
type?: 'default' | 'custom',
- option: {name: string}[],
+ option: {name: string, value: string}[],
+ onChange?: (value: string) => void,
}
-const SelectCommon = ({ type = 'default', size = 'base', option, placeHolder }: Props) => {
+const SelectCommon = ({ type = 'default', size = 'base', option, placeholder, onChange }: Props) => {
+ const [selectedName, setSelectedName] = useState(placeholder)
+
+ const changeSelectedName = (item:string, value: string) => {
+ setSelectedName(item)
+ onChange && onChange(value)
+ }
return(
-
- {placeHolder}
- {
- option.map(item => {item.name} )
- }
-
+ <>
+
+
{selectedName}
+
+
+ {
+ option.map(item =>
+
+ )
+ }
+
+
+
+
+ >
)
}
diff --git a/src/components/common/SelectCommon/SelectOption/SelectOption.module.scss b/src/components/common/SelectCommon/SelectOption/SelectOption.module.scss
new file mode 100644
index 000000000..fa8eec541
--- /dev/null
+++ b/src/components/common/SelectCommon/SelectOption/SelectOption.module.scss
@@ -0,0 +1,20 @@
+@import "../../../../styles/utilities";
+
+.selectOption {
+ @apply outline-none;
+ background-color: var(--white);
+ &.base{
+ width: 20.4rem;
+ padding: 0.8rem 1.6rem;
+ }
+ &.large{
+ width: 33.75rem;
+ padding: 0.8rem 1.6rem;
+ }
+ &:hover{
+ background-color: var(--gray);
+ }
+ &.isChoose{
+ background-color: var(--gray);
+ }
+}
\ No newline at end of file
diff --git a/src/components/common/SelectCommon/SelectOption/SelectOption.tsx b/src/components/common/SelectCommon/SelectOption/SelectOption.tsx
new file mode 100644
index 000000000..863057f1f
--- /dev/null
+++ b/src/components/common/SelectCommon/SelectOption/SelectOption.tsx
@@ -0,0 +1,28 @@
+import s from './SelectOption.module.scss'
+import classNames from 'classnames'
+import { useState } from 'react'
+
+interface Props{
+ onClick: (name: string, value: string) => void,
+ itemName: string,
+ size: 'base' | 'large',
+ value: string,
+ selected?: boolean,
+}
+
+const SelectOption = ({onClick, itemName, size, value, selected} : Props) => {
+ const changeName = () => {
+ onClick(itemName, value)
+ }
+ return(
+ {itemName}
+ )
+}
+
+export default SelectOption
\ No newline at end of file
diff --git a/src/components/icons/IconVectorDown.tsx b/src/components/icons/IconVectorDown.tsx
new file mode 100644
index 000000000..0bb1cb8c1
--- /dev/null
+++ b/src/components/icons/IconVectorDown.tsx
@@ -0,0 +1,19 @@
+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 02b4947cb..58f525a3c 100644
--- a/src/components/icons/index.ts
+++ b/src/components/icons/index.ts
@@ -15,3 +15,4 @@ export { default as IconApple } from './IconApple'
export { default as ArrowLeft } from './ArrowLeft'
export { default as ArrowRight } from './ArrowRight'
export { default as Close } from './Close'
+export { default as IconVectorDown} from './IconVectorDown'
\ No newline at end of file