From c85a17bd0230b55218d298bdb945a511068293e3 Mon Sep 17 00:00:00 2001 From: youngeun Date: Sat, 24 Jun 2023 23:27:29 +0900 Subject: [PATCH 01/76] =?UTF-8?q?feat:=20Tag=20=EC=82=AD=EC=A0=9C=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=EB=A1=9C=EC=A7=81=20=EB=A7=8C=EB=93=A4=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/tag/TagChip.tsx | 18 ++++++++++++------ src/components/tag/TagsContainer.tsx | 12 +++++++++--- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/src/components/tag/TagChip.tsx b/src/components/tag/TagChip.tsx index b97ab6e..ae8b078 100644 --- a/src/components/tag/TagChip.tsx +++ b/src/components/tag/TagChip.tsx @@ -1,15 +1,21 @@ -import React, { ReactNode } from 'react' +import React, { useRef,ReactNode } from 'react' interface TagChipProps { - children: ReactNode - + children: ReactNode, + arr:string[], + setArr: Function } -export default function TagChip({children}:TagChipProps) { +export default function TagChip({children,arr, setArr}:TagChipProps) { + const tagRef = useRef() + const deleteTagHandler = () => { + const newArr = arr.filter((item)=>item !== tagRef.current.innerHTML) + setArr(newArr) + } return (
- {children} - X + {children} + X
) } diff --git a/src/components/tag/TagsContainer.tsx b/src/components/tag/TagsContainer.tsx index 214dda3..02391b0 100644 --- a/src/components/tag/TagsContainer.tsx +++ b/src/components/tag/TagsContainer.tsx @@ -1,13 +1,19 @@ -import React from 'react' +"use client" +import React, {useState} from 'react' import Tag from './TagChip' +interface TagsContainerProps { + tagList?: string[] +} + const arr = ['smiling', 'man', 'waving', 'hands', 'doubled', 'handed'] -export default function TagsContainer() { +export default function TagsContainer({tagList=[]}:TagsContainerProps) { + const [arr, setArr] = useState(tagList) //FIXME - keyProp 바꾸기 return (
- {arr.map((item)=>{item})} + {tagList.length && arr.map((item)=>{item})}
) } From 08112fb359f96f07868dabc7c7d31855f6ffc998 Mon Sep 17 00:00:00 2001 From: youngeun Date: Sat, 24 Jun 2023 23:29:49 +0900 Subject: [PATCH 02/76] =?UTF-8?q?feat:=20Asset=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/assets/[assetId]/page.tsx | 108 ++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 src/app/assets/[assetId]/page.tsx diff --git a/src/app/assets/[assetId]/page.tsx b/src/app/assets/[assetId]/page.tsx new file mode 100644 index 0000000..cf07037 --- /dev/null +++ b/src/app/assets/[assetId]/page.tsx @@ -0,0 +1,108 @@ +import React from 'react' +import Header from '@/components/Header' +import Body from '@/components/Body' +import TableContainer from '@/components/TableContainer' +import TableItem from '@/components/TableItem' +import FileUploader from '@/components/Input/FileUploader' +import Select from '@/components/Input/Select' +import TextInput from '@/components/Input/TextInput' +import Divider from '@/components/Divider' +import ImageUploader from '@/components/Input/ImageUploader' +import Button from '@/components/Button' +import TagsContainer from '@/components/tag/TagsContainer' + +export default function AssetIdPage() { + const data = { + "assetId": 1, + "assetName": "Sensual dance_F", + "price": "7200.0", + "fileSize": 5.12, + "fileUrl": "url", + "creator": "NationA", + "rating": 4.3, + "reviewCount": 1483, + "wishCount": 8743, + "visitCount": 35477, + "wishlistId": 1, + "tagList": [ + "tag1", + "tag2", + "tag3" + ] +} + + + return ( + <> +
+
+
+ + + + +

파일은 fbx 포맷 (최대 10MB)만 업로드 가능합니다.

+
+
+ + + + + + + +
+ +

+
+
+ +
+
+ +
%
+

할인

+
+ +
+
+

최종판매가

+

{}({}원 할인)

+
+
+
+
+ + + + + + + + + + +

전체 에셋 리스트 페이지에서 보여지는 대표 썸네일 이미지입니다.
권장크기: 214 x 266
jpg, jpeg, gif, png, bmp 형식의 이미지 (최대 10MB)만 등록 가능합니다.

+
+ +
+
+ + + + + +
+

상세 페이지 최상단에 보여지는 이미지입니다. 최대 5장까지 등록 가능합니다.
권장 크기: 710 x 520
jpg, jpeg, gif, png, bmp 형식의 이미지 (최대 10MB)만 등록 가능합니다.

+
+
+
+
+ + +
+ + ) +} From af6f5993a094b862bc0cf3e8bcd9e1e42a1a2bc9 Mon Sep 17 00:00:00 2001 From: youngeun Date: Mon, 26 Jun 2023 09:56:11 +0900 Subject: [PATCH 03/76] =?UTF-8?q?feat:=20=EC=95=84=EC=9D=B4=EC=BD=98=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EC=BB=B4=ED=8F=AC=EB=84=8C?= =?UTF-8?q?=ED=8A=B8=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/icons/Active.svg | 4 ++++ public/icons/ArrowDropDown.svg | 3 +++ public/icons/Inactive.svg | 3 +++ public/icons/checkboxOff.svg | 4 ++++ public/icons/checkboxOn.svg | 4 ++++ public/icons/close.svg | 4 ++++ public/icons/icons.tsx | 20 ++++++++++++++++++++ 7 files changed, 42 insertions(+) create mode 100644 public/icons/Active.svg create mode 100644 public/icons/ArrowDropDown.svg create mode 100644 public/icons/Inactive.svg create mode 100644 public/icons/checkboxOff.svg create mode 100644 public/icons/checkboxOn.svg create mode 100644 public/icons/close.svg create mode 100644 public/icons/icons.tsx diff --git a/public/icons/Active.svg b/public/icons/Active.svg new file mode 100644 index 0000000..e6b68d3 --- /dev/null +++ b/public/icons/Active.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/icons/ArrowDropDown.svg b/public/icons/ArrowDropDown.svg new file mode 100644 index 0000000..ff48848 --- /dev/null +++ b/public/icons/ArrowDropDown.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/icons/Inactive.svg b/public/icons/Inactive.svg new file mode 100644 index 0000000..8a8c5d8 --- /dev/null +++ b/public/icons/Inactive.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/icons/checkboxOff.svg b/public/icons/checkboxOff.svg new file mode 100644 index 0000000..5b991a5 --- /dev/null +++ b/public/icons/checkboxOff.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/icons/checkboxOn.svg b/public/icons/checkboxOn.svg new file mode 100644 index 0000000..f21153c --- /dev/null +++ b/public/icons/checkboxOn.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/icons/close.svg b/public/icons/close.svg new file mode 100644 index 0000000..1a1c182 --- /dev/null +++ b/public/icons/close.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/icons/icons.tsx b/public/icons/icons.tsx new file mode 100644 index 0000000..2d0be51 --- /dev/null +++ b/public/icons/icons.tsx @@ -0,0 +1,20 @@ +import Image from 'next/image' +import Active from './Active.svg' +import Inactive from './Inactive.svg' +import ArrowDropDown from './ArrowDropDown.svg' +import Close from './close.svg' +export const RadioActive = () => { + return radio active icon +} + +export const RadioInactive = () => { + return radio inactive icon +} + +export const DropDownIcon = () => { + return drop down icon +} + +export const CloseIcon = () => { + return close icon +} \ No newline at end of file From 7d7433e5c14b160924d61292879119e2228fbaa0 Mon Sep 17 00:00:00 2001 From: youngeun Date: Mon, 26 Jun 2023 09:57:21 +0900 Subject: [PATCH 04/76] =?UTF-8?q?feat:=20react-aria=20=EC=97=90=20?= =?UTF-8?q?=ED=95=84=EC=9A=94=ED=95=9C=20SSR=20Provider=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9=ED=95=98=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/layout.tsx | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/app/layout.tsx b/src/app/layout.tsx index c4b77a8..4a7acc2 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,23 +1,26 @@ +"use client" import SideNav from '@/components/SideNav' import '@/styles/globals.css' import { Inter } from 'next/font/google' - +import {SSRProvider} from 'react-aria'; const inter = Inter({ subsets: ['latin'] }) -export const metadata = { - title: 'Create Next App', - description: 'Generated by create next app', -} +// export const metadata = { +// title: 'Create Next App', +// description: 'Generated by create next app', +// } export default function RootLayout({ children }: { children: React.ReactNode }) { return ( - -
- -
{children}
-
- + + +
+ +
{children}
+
+ +
) } From 28aac4abe9eb19de49595311809521c536aae4d7 Mon Sep 17 00:00:00 2001 From: youngeun Date: Mon, 26 Jun 2023 09:58:40 +0900 Subject: [PATCH 05/76] =?UTF-8?q?fix:=20ImageUploader=20=ED=8A=B8=EB=9F=AC?= =?UTF-8?q?=EB=B8=94=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 트러블슈팅: ImageLoader 는 다 같은 독립적인 컴포넌트인데, 계속 첫번째 칸으로 사진이 렌더된다 해결: id 값이 고유하지 못해서 발생했던 문제이다. --- src/app/page.tsx | 56 ++++++++++++++++++-------- src/components/Input/ImageUploader.tsx | 35 +++++++++++----- 2 files changed, 63 insertions(+), 28 deletions(-) diff --git a/src/app/page.tsx b/src/app/page.tsx index c4f2052..6f58508 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,14 +1,37 @@ import Header from '@/components/Header' import Body from '@/components/Body' -import TableContainer from '@/components/TableContainer' -import TableItem from '@/components/TableItem' +import TableContainer from '@/components/Table/TableContainer' +import TableItem from '@/components/Table/TableItem' import FileUploader from '@/components/Input/FileUploader' -import Select from '@/components/Input/Select' +import SelectContainer from '@/components/Select/SelectContainer' import TextInput from '@/components/Input/TextInput' import Divider from '@/components/Divider' import ImageUploader from '@/components/Input/ImageUploader' import Button from '@/components/Button' -import TagsContainer from '@/components/tag/TagsContainer' +import TagsContainer from '@/components/Tag/TagsContainer' + +const categoryList = [ + { + "id": 1, + "categoryName": "cute" + }, + { + "id": 2, + "categoryName": "pretty" + }, + { + "id": 3, + "categoryName": "sexy" + }, + { + "id": 4, + "categoryName": "luxury" + }, + { + "id": 5, + "categoryName":"cool" + }, +]; export default function Home() { @@ -27,12 +50,11 @@ export default function Home() { - + +

선택한 카테고리: {'>'}

- +
@@ -65,21 +87,21 @@ export default function Home() { - +

전체 에셋 리스트 페이지에서 보여지는 대표 썸네일 이미지입니다.
권장크기: 214 x 266
jpg, jpeg, gif, png, bmp 형식의 이미지 (최대 10MB)만 등록 가능합니다.

-
- + +
- - - - - + + + + +

상세 페이지 최상단에 보여지는 이미지입니다. 최대 5장까지 등록 가능합니다.
권장 크기: 710 x 520
jpg, jpeg, gif, png, bmp 형식의 이미지 (최대 10MB)만 등록 가능합니다.

-
+
diff --git a/src/components/Input/ImageUploader.tsx b/src/components/Input/ImageUploader.tsx index ef6008f..a9b2d35 100644 --- a/src/components/Input/ImageUploader.tsx +++ b/src/components/Input/ImageUploader.tsx @@ -1,31 +1,44 @@ "use client" -import React, {useState} from 'react' +import React, {useState, useRef, ChangeEvent} from 'react' interface ImageUploaderProps { width:number, height:number, + id: number + } -export default function ImageUploader({width, height, }:ImageUploaderProps) { +export default function ImageUploader({width, height, id}:ImageUploaderProps) { const [isUploaded, setIsUploaded] = useState(false) - const imageUploadHandler = () => { + const [url, setUrl] = useState('') + const inputRef = useRef(null) + const [fileName, setFileName] = useState('') + const [fileSize, setFileSize] = useState(0) + const imageUploadHandler = (e:ChangeEvent) => { + const file = e.target.files[0] + const url = URL.createObjectURL(file); + console.log('file:',file) setIsUploaded(true) + setUrl(url) + setFileName(file.name) + setFileSize(file.size) } const imageRemoveHandler = () => { setIsUploaded(false) + setUrl('') } return ( - <> -
- +
+
+ {isUploaded && }
- + {isUploaded && ( -
-

{}

-

{}

+
+

{fileName}

+

{fileSize}

)} - +
) } From 17f14cc5315606ca319b3acab5a6a2c6d37ef116 Mon Sep 17 00:00:00 2001 From: youngeun Date: Mon, 26 Jun 2023 10:01:49 +0900 Subject: [PATCH 06/76] =?UTF-8?q?refactor:=20Tag,=20TagContainer=20?= =?UTF-8?q?=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EB=A6=AC=ED=8C=A9?= =?UTF-8?q?=ED=86=A0=EB=A7=81=20-=20useRef=20=EC=B4=88=EA=B8=B0=EA=B0=92?= =?UTF-8?q?=20null=20=EC=A3=BC=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/tag/TagChip.tsx | 4 ++-- src/components/tag/TagsContainer.tsx | 6 ++---- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/components/tag/TagChip.tsx b/src/components/tag/TagChip.tsx index ae8b078..8b86004 100644 --- a/src/components/tag/TagChip.tsx +++ b/src/components/tag/TagChip.tsx @@ -7,7 +7,7 @@ interface TagChipProps { } export default function TagChip({children,arr, setArr}:TagChipProps) { - const tagRef = useRef() + const tagRef = useRef(null) const deleteTagHandler = () => { const newArr = arr.filter((item)=>item !== tagRef.current.innerHTML) setArr(newArr) @@ -15,7 +15,7 @@ export default function TagChip({children,arr, setArr}:TagChipProps) { return (
{children} - X + X
) } diff --git a/src/components/tag/TagsContainer.tsx b/src/components/tag/TagsContainer.tsx index 02391b0..dd7896f 100644 --- a/src/components/tag/TagsContainer.tsx +++ b/src/components/tag/TagsContainer.tsx @@ -1,19 +1,17 @@ "use client" import React, {useState} from 'react' -import Tag from './TagChip' +import TagChip from './TagChip' interface TagsContainerProps { tagList?: string[] } -const arr = ['smiling', 'man', 'waving', 'hands', 'doubled', 'handed'] export default function TagsContainer({tagList=[]}:TagsContainerProps) { const [arr, setArr] = useState(tagList) - //FIXME - keyProp 바꾸기 return (
- {tagList.length && arr.map((item)=>{item})} + { arr.map((item)=>{item})}
) } From 4c4910995a7b9d5dd1e4eebd411449d9c626c37c Mon Sep 17 00:00:00 2001 From: youngeun Date: Mon, 26 Jun 2023 10:04:00 +0900 Subject: [PATCH 07/76] delete: --- src/components/Input/Select.tsx | 23 ----------------------- src/components/TableContainer/index.tsx | 13 ------------- src/components/TableItem/index.tsx | 22 ---------------------- 3 files changed, 58 deletions(-) delete mode 100644 src/components/Input/Select.tsx delete mode 100644 src/components/TableContainer/index.tsx delete mode 100644 src/components/TableItem/index.tsx diff --git a/src/components/Input/Select.tsx b/src/components/Input/Select.tsx deleted file mode 100644 index c51d609..0000000 --- a/src/components/Input/Select.tsx +++ /dev/null @@ -1,23 +0,0 @@ -"use client" -import React, { ReactNode } from 'react' -import { useSelect , HiddenSelect } from '@react-aria/select' -import { useListBox, useOption, useListBoxSection } from '@react-aria/listbox' -import { useSelectState } from '@react-stately/select' - -interface SelectProps { - children?: ReactNode -} - -export default function Select({children}:SelectProps) { - - return ( -
-
- -
- {children} -
- - ) -} - diff --git a/src/components/TableContainer/index.tsx b/src/components/TableContainer/index.tsx deleted file mode 100644 index bc96fe5..0000000 --- a/src/components/TableContainer/index.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import React, { ReactNode } from 'react' - -interface TableContainerProps { - children: ReactNode -} - -export default function TableContainer({children}:TableContainerProps) { - return ( -
    {children}
- - - ) -} diff --git a/src/components/TableItem/index.tsx b/src/components/TableItem/index.tsx deleted file mode 100644 index a8e04d3..0000000 --- a/src/components/TableItem/index.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import React, { ReactNode } from 'react' - -interface TableItemProps { - title: string, - required: boolean, - children: ReactNode, -} - - -export default function TableItem({title, required, children}:TableItemProps) { - return ( -
  • -
    - {title} - {required && } -
    -
    - {children} -
    -
  • - ) -} From 51b326db75d64b1c5484a6e2486ab47fcd96e31e Mon Sep 17 00:00:00 2001 From: youngeun Date: Mon, 26 Jun 2023 10:04:46 +0900 Subject: [PATCH 08/76] =?UTF-8?q?feat:=20Radio=20=EC=BB=B4=ED=8F=AC?= =?UTF-8?q?=EB=84=8C=ED=8A=B8=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/assets/page.tsx | 48 +++++++++++++++++++++++------ src/components/Radio/RadioGroup.tsx | 21 +++++++++++++ 2 files changed, 59 insertions(+), 10 deletions(-) create mode 100644 src/components/Radio/RadioGroup.tsx diff --git a/src/app/assets/page.tsx b/src/app/assets/page.tsx index b5977e0..13f5ed2 100644 --- a/src/app/assets/page.tsx +++ b/src/app/assets/page.tsx @@ -1,16 +1,40 @@ import React from 'react' import Header from '@/components/Header' import Body from '@/components/Body' -import TableContainer from '@/components/TableContainer' -import TableItem from '@/components/TableItem' -import Select from '@/components/Input/Select' +import TableContainer from '@/components/Table/TableContainer' +import TableItem from '@/components/Table/TableItem' import Radio from '@/components/Radio' import Button from '@/components/Button' import Divider from '@/components/Divider' -import Modal from '@/components/Modal' -import { showModal } from '@/components/Modal' +import RadioGroup from '@/components/Radio/RadioGroup' +import SelectContainer from '@/components/Select/SelectContainer' + + +const categoryList = [ + { + "id": 1, + "categoryName": "cute" + }, + { + "id": 2, + "categoryName": "pretty" + }, + { + "id": 3, + "categoryName": "sexy" + }, + { + "id": 4, + "categoryName": "luxury" + }, + { + "id": 5, + "categoryName":"cool" + }, +]; export default function AssetsPage() { + return ( <>
    @@ -20,20 +44,24 @@ export default function AssetsPage() {
    - + {/* */} - + + 전체 + 판매중 + 판매중지 +
    @@ -46,7 +74,7 @@ export default function AssetsPage() {
    에셋 목록 (총 {10}개)
    - +
    - {counter &&

    {0} / {counter}

    } + {counter &&

    {inputLength} / {counter}

    }
    ) : From 8386d4d32272ff4be4f1815d8d4fba8b68ac7260 Mon Sep 17 00:00:00 2001 From: youngeun Date: Mon, 26 Jun 2023 10:06:41 +0900 Subject: [PATCH 10/76] =?UTF-8?q?feat:=20Radio=20=EC=BB=B4=ED=8F=AC?= =?UTF-8?q?=EB=84=8C=ED=8A=B8=20=EB=B0=8F=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Radio/index.tsx | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/components/Radio/index.tsx diff --git a/src/components/Radio/index.tsx b/src/components/Radio/index.tsx new file mode 100644 index 0000000..c3aa69b --- /dev/null +++ b/src/components/Radio/index.tsx @@ -0,0 +1,28 @@ +"use client" +import React , {useState,useRef,useContext, ReactNode}from 'react' +import { VisuallyHidden, useRadio} from 'react-aria'; +import { RadioContext } from './RadioGroup'; +import { RadioActive, RadioInactive } from '../../../public/icons/icons'; +// RadioGroup is the same as in the previous example +interface RadioProps { + children: ReactNode, + value: string, +} + + +export default function Radio(props:RadioProps) { + const { children, value } = props; + const state = useContext(RadioContext); + const inputRef = useRef(null); + let{ inputProps, isSelected } = useRadio(props, state, inputRef); + const radioClickHandler = () => { + isSelected = true; + } + return ( + + ); +} \ No newline at end of file From 3615c0d4ca37eb2909984fe8eba3e45373b352e8 Mon Sep 17 00:00:00 2001 From: youngeun Date: Mon, 26 Jun 2023 10:09:13 +0900 Subject: [PATCH 11/76] =?UTF-8?q?feat:=20=EC=97=90=EC=85=8B=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20=ED=8E=98=EC=9D=B4=EC=A7=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/assets/[assetId]/page.tsx | 59 ++++++++++++++++++++++--------- 1 file changed, 42 insertions(+), 17 deletions(-) diff --git a/src/app/assets/[assetId]/page.tsx b/src/app/assets/[assetId]/page.tsx index cf07037..176fd4b 100644 --- a/src/app/assets/[assetId]/page.tsx +++ b/src/app/assets/[assetId]/page.tsx @@ -1,15 +1,16 @@ -import React from 'react' +"use client" +import React, {useState} from 'react' import Header from '@/components/Header' import Body from '@/components/Body' -import TableContainer from '@/components/TableContainer' -import TableItem from '@/components/TableItem' +import TableContainer from '@/components/Table/TableContainer' +import TableItem from '@/components/Table/TableItem' import FileUploader from '@/components/Input/FileUploader' -import Select from '@/components/Input/Select' import TextInput from '@/components/Input/TextInput' import Divider from '@/components/Divider' import ImageUploader from '@/components/Input/ImageUploader' import Button from '@/components/Button' -import TagsContainer from '@/components/tag/TagsContainer' +import TagsContainer from '@/components/Tag/TagsContainer' +import SelectContainer from '@/components/Select/SelectContainer' export default function AssetIdPage() { const data = { @@ -30,7 +31,32 @@ export default function AssetIdPage() { "tag3" ] } - +const categoryList = [ + { + "id": 1, + "categoryName": "cute" + }, + { + "id": 2, + "categoryName": "pretty" + }, + { + "id": 3, + "categoryName": "sexy" + }, + { + "id": 4, + "categoryName": "luxury" + }, + { + "id": 5, + "categoryName":"cool" + }, +]; + + + const [selectedCategory, setSelectedCategory] = useState(categoryList[0]) + return ( <> @@ -45,12 +71,11 @@ export default function AssetIdPage() { - + +

    선택한 카테고리:{highCategory} > {selectedCategory.subCategory ? selectedCategory.subCategory : '' }

    - +
    @@ -69,7 +94,7 @@ export default function AssetIdPage() {

    최종판매가

    -

    {}({}원 할인)

    +

    {'-'}({'-'}원 할인)

    @@ -83,17 +108,17 @@ export default function AssetIdPage() {
    - +

    전체 에셋 리스트 페이지에서 보여지는 대표 썸네일 이미지입니다.
    권장크기: 214 x 266
    jpg, jpeg, gif, png, bmp 형식의 이미지 (최대 10MB)만 등록 가능합니다.

    - - - - - + + + + +

    상세 페이지 최상단에 보여지는 이미지입니다. 최대 5장까지 등록 가능합니다.
    권장 크기: 710 x 520
    jpg, jpeg, gif, png, bmp 형식의 이미지 (최대 10MB)만 등록 가능합니다.

    From 5d7d7e02bd4e3f5399477ec7af79bd54434b4a72 Mon Sep 17 00:00:00 2001 From: youngeun Date: Mon, 26 Jun 2023 10:11:40 +0900 Subject: [PATCH 12/76] =?UTF-8?q?refactor:=20FileUploader=20=EC=BB=B4?= =?UTF-8?q?=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EB=A6=AC=ED=8C=A9=ED=86=A0?= =?UTF-8?q?=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Input/FileUploader.tsx | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/components/Input/FileUploader.tsx b/src/components/Input/FileUploader.tsx index 9bbca62..6411608 100644 --- a/src/components/Input/FileUploader.tsx +++ b/src/components/Input/FileUploader.tsx @@ -1,27 +1,35 @@ "use client" -import React, {ReactNode, useState,useRef, ChangeEvent} from 'react' +import React, {ReactNode, useState ,useRef, ChangeEvent} from 'react' import Button from '../Button' interface FileUploaderProps { inputWidth: number, inputHeight?: number, placeholder?: string, + inputValue?:string, //file url + assetdata?: object, + setAssetdata?: Function, children?: ReactNode, } -export default function FileUploader({inputWidth, inputHeight=12, children}:FileUploaderProps) { - const inputRef = useRef() - const [placeholder, setPlaceholder] = useState('선택된 파일 없음') +export default function FileUploader({children,inputWidth, inputHeight=12, inputValue,...props}:FileUploaderProps) { + const assetdata = props.assetdata; + const setAssetdata = props.setAssetdata; + const inputRef = useRef(null) + const [value, setValue] = useState(inputValue?inputValue:'선택된 파일 없음') const uploadFileHandler = (e:ChangeEvent) => { e.preventDefault() - setPlaceholder(inputRef.current.value) + // console.log(inputRef.current.files) + setValue(inputRef?.current.files[0].name) + } + return (
    - - + + {children}
    From 3a66f9b801ecd22add59873200efa34cfbb7c10e Mon Sep 17 00:00:00 2001 From: youngeun Date: Mon, 26 Jun 2023 10:12:48 +0900 Subject: [PATCH 13/76] =?UTF-8?q?feat:=20Select=20=EC=BB=B4=ED=8F=AC?= =?UTF-8?q?=EB=84=8C=ED=8A=B8=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Select/SelectContainer.tsx | 56 +++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 src/components/Select/SelectContainer.tsx diff --git a/src/components/Select/SelectContainer.tsx b/src/components/Select/SelectContainer.tsx new file mode 100644 index 0000000..9631012 --- /dev/null +++ b/src/components/Select/SelectContainer.tsx @@ -0,0 +1,56 @@ +"use client" +import { useState } from 'react' +import { Listbox} from '@headlessui/react' +import { DropDownIcon } from '../../../public/icons/icons' + +type Category = { + id: number, + categoryName: string, + subCategory?: Category[] + +} + +interface SelectContainerProps { + categoryList : Category[], + setSelectedCategory: Function, +} + +export default function SelectContainer({categoryList, setSelectedCategory}:SelectContainerProps) { + const [selectedList, setSelectedList] = useState(categoryList[0]) + const [disabled, setDisabled] = useState(true) + return ( +
    + + 대분류 + + {categoryList.map((item) => ( + + {item.categoryName} + + ))} + + + + + 소분류 + + + {!disabled && + {categoryList.map((item) => ( + + {item.categoryName} + + ))} + } + +
    + ) +} From a25701ed9a4107f643b7ea9da348b3aace15d8cf Mon Sep 17 00:00:00 2001 From: youngeun Date: Mon, 26 Jun 2023 10:13:30 +0900 Subject: [PATCH 14/76] =?UTF-8?q?feat:=20=EB=9D=BC=EC=9D=B4=EB=B8=8C?= =?UTF-8?q?=EB=9F=AC=EB=A6=AC=20=EC=84=A4=EC=B9=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 6 +- yarn.lock | 1135 +++++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 932 insertions(+), 209 deletions(-) diff --git a/package.json b/package.json index 4551fb8..f4d3b0e 100644 --- a/package.json +++ b/package.json @@ -10,9 +10,7 @@ "commit": "git-cz" }, "dependencies": { - "@react-aria/listbox": "^3.9.1", - "@react-aria/select": "^3.10.1", - "@react-stately/select": "^3.5.1", + "@headlessui/react": "^1.7.15", "@types/node": "20.2.5", "@types/react": "18.2.9", "@types/react-dom": "18.2.4", @@ -23,7 +21,9 @@ "next": "13.4.4", "postcss": "8.4.24", "react": "18.2.0", + "react-aria": "^3.25.0", "react-dom": "18.2.0", + "react-stately": "^3.23.0", "tailwindcss": "3.3.2", "typescript": "5.1.3" }, diff --git a/yarn.lock b/yarn.lock index c704bc4..2fd502b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8,30 +8,30 @@ integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== "@babel/code-frame@^7.0.0": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.21.4.tgz#d0fa9e4413aca81f2b23b9442797bda1826edb39" - integrity sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g== + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.5.tgz#234d98e1551960604f1246e6475891a570ad5658" + integrity sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ== dependencies: - "@babel/highlight" "^7.18.6" + "@babel/highlight" "^7.22.5" -"@babel/helper-validator-identifier@^7.18.6": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" - integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== +"@babel/helper-validator-identifier@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193" + integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ== -"@babel/highlight@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" - integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== +"@babel/highlight@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.5.tgz#aa6c05c5407a67ebce408162b7ede789b4d22031" + integrity sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw== dependencies: - "@babel/helper-validator-identifier" "^7.18.6" + "@babel/helper-validator-identifier" "^7.22.5" chalk "^2.0.0" js-tokens "^4.0.0" "@babel/runtime@^7.20.7": - version "7.22.3" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.3.tgz#0a7fce51d43adbf0f7b517a71f4c3aaca92ebcbb" - integrity sha512-XsDuspWKLUsxwCp6r7EhsExHtYfbe5oAGQ19kqngTdCPUoPQzOPdUbD/pB9PJiwb2ptYKQDjSJT3R6dC+EPqfQ== + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.5.tgz#8564dd588182ce0047d55d7a75e93921107b57ec" + integrity sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA== dependencies: regenerator-runtime "^0.13.11" @@ -165,6 +165,13 @@ dependencies: tslib "^2.4.0" +"@headlessui/react@^1.7.15": + version "1.7.15" + resolved "https://registry.yarnpkg.com/@headlessui/react/-/react-1.7.15.tgz#53ef6ae132af81b8f188414767b6e79ebf8dc73f" + integrity sha512-OTO0XtoRQ6JPB1cKNFYBZv2Q0JMqMGNhYP1CjPvcJvjz8YGokz8oAj89HIYZGN0gZzn/4kk9iUpmMF4Q21Gsqw== + dependencies: + client-only "^0.0.1" + "@humanwhocodes/config-array@^0.11.10": version "0.11.10" resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2" @@ -353,6 +360,136 @@ picocolors "^1.0.0" tslib "^2.5.0" +"@react-aria/breadcrumbs@^3.5.2": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@react-aria/breadcrumbs/-/breadcrumbs-3.5.2.tgz#2da2d329e7718ec6fa151db8b746c4d69564ad14" + integrity sha512-un10i3vzT7oCftb6jzbMkt6BI/WGlkr+JvWLWFl9CFXH4AlsIU8jWEsrVFUCySSI8Xsj43074zLsnpxgxLgSOA== + dependencies: + "@react-aria/i18n" "^3.7.2" + "@react-aria/interactions" "^3.15.1" + "@react-aria/link" "^3.5.1" + "@react-aria/utils" "^3.17.0" + "@react-types/breadcrumbs" "^3.5.2" + "@react-types/shared" "^3.18.1" + "@swc/helpers" "^0.4.14" + +"@react-aria/button@^3.7.2": + version "3.7.2" + resolved "https://registry.yarnpkg.com/@react-aria/button/-/button-3.7.2.tgz#d2a11766f93242989ad2b90cd948f6da7a086b63" + integrity sha512-flsnMy1xDaTDL+xDzLDeXDAiqNTgbd19R6e4fsDzDPk/mlPgvOSKQtZjswIru4rJR+d29a7LXDemBN/iJEe/3w== + dependencies: + "@react-aria/focus" "^3.12.1" + "@react-aria/interactions" "^3.15.1" + "@react-aria/utils" "^3.17.0" + "@react-stately/toggle" "^3.5.2" + "@react-types/button" "^3.7.3" + "@react-types/shared" "^3.18.1" + "@swc/helpers" "^0.4.14" + +"@react-aria/calendar@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@react-aria/calendar/-/calendar-3.3.0.tgz#92a33ad08f5ecc8d22f23af2f87914e711b9b75c" + integrity sha512-K8KATJQjd7xsb9aTe6Cx0/22JrHAiONspSwyGlQlJhHUnpnB6VRvPlVxfEClnbA+oVt04s/vJ87WGVnRNoFI5g== + dependencies: + "@internationalized/date" "^3.2.0" + "@react-aria/i18n" "^3.7.2" + "@react-aria/interactions" "^3.15.1" + "@react-aria/live-announcer" "^3.3.0" + "@react-aria/utils" "^3.17.0" + "@react-stately/calendar" "^3.2.1" + "@react-types/button" "^3.7.3" + "@react-types/calendar" "^3.2.1" + "@react-types/shared" "^3.18.1" + "@swc/helpers" "^0.4.14" + +"@react-aria/checkbox@^3.9.1": + version "3.9.1" + resolved "https://registry.yarnpkg.com/@react-aria/checkbox/-/checkbox-3.9.1.tgz#29e7f1ae66cbafac425099af908f371df4f5f231" + integrity sha512-1TmaqrQ419K6p9KU9v5cGHjStH4p9vOGZsfYYO8RXsQsXmZ7vcK7rjytMeCTdExovU74xK9oXNh64c15Yh9EEA== + dependencies: + "@react-aria/label" "^3.5.2" + "@react-aria/toggle" "^3.6.1" + "@react-aria/utils" "^3.17.0" + "@react-stately/checkbox" "^3.4.2" + "@react-stately/toggle" "^3.5.2" + "@react-types/checkbox" "^3.4.4" + "@react-types/shared" "^3.18.1" + "@swc/helpers" "^0.4.14" + +"@react-aria/combobox@^3.6.1": + version "3.6.1" + resolved "https://registry.yarnpkg.com/@react-aria/combobox/-/combobox-3.6.1.tgz#c5f97487eb438092b7f79bfffc51772c264ccc59" + integrity sha512-FdIFAV9appfN5DfoZoJ1D+ZJS3Xp5Kro1oPUPnz9XgthwYV98JinQ5aMBKI4+df0mLmU5z1T3DWbqUuDheUCwg== + dependencies: + "@react-aria/i18n" "^3.7.2" + "@react-aria/interactions" "^3.15.1" + "@react-aria/listbox" "^3.9.1" + "@react-aria/live-announcer" "^3.3.0" + "@react-aria/menu" "^3.9.1" + "@react-aria/overlays" "^3.14.1" + "@react-aria/selection" "^3.15.0" + "@react-aria/textfield" "^3.9.2" + "@react-aria/utils" "^3.17.0" + "@react-stately/collections" "^3.8.0" + "@react-stately/combobox" "^3.5.1" + "@react-stately/layout" "^3.12.1" + "@react-types/button" "^3.7.3" + "@react-types/combobox" "^3.6.2" + "@react-types/shared" "^3.18.1" + "@swc/helpers" "^0.4.14" + +"@react-aria/datepicker@^3.4.1": + version "3.4.1" + resolved "https://registry.yarnpkg.com/@react-aria/datepicker/-/datepicker-3.4.1.tgz#66ebeadaab48cd1f75d9b8495b1d095ceb29327d" + integrity sha512-SRfMwXgLw64WFB7+2uUNjlq4DkOEBNIxuAl5inpk6gef3kK7izSzktbI90uFSA8lcGiN/nIv9G3I2vjz3k1y5Q== + dependencies: + "@internationalized/date" "^3.2.0" + "@internationalized/number" "^3.2.0" + "@internationalized/string" "^3.1.0" + "@react-aria/focus" "^3.12.1" + "@react-aria/i18n" "^3.7.2" + "@react-aria/interactions" "^3.15.1" + "@react-aria/label" "^3.5.2" + "@react-aria/spinbutton" "^3.4.1" + "@react-aria/utils" "^3.17.0" + "@react-stately/datepicker" "^3.4.1" + "@react-types/button" "^3.7.3" + "@react-types/calendar" "^3.2.1" + "@react-types/datepicker" "^3.3.1" + "@react-types/dialog" "^3.5.2" + "@react-types/shared" "^3.18.1" + "@swc/helpers" "^0.4.14" + +"@react-aria/dialog@^3.5.2": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@react-aria/dialog/-/dialog-3.5.2.tgz#8d2ba539cb98fa99268150dacda1b79365f92fac" + integrity sha512-iKPuk1I9rFHj0y5cjYIoMj4AFeBhWeWWfFDmOuzDx9rsOK6l9jrcAV69LVXtWVJhsmmJs5TP5Ly4OlvpB+9rjA== + dependencies: + "@react-aria/focus" "^3.12.1" + "@react-aria/overlays" "^3.14.1" + "@react-aria/utils" "^3.17.0" + "@react-stately/overlays" "^3.5.2" + "@react-types/dialog" "^3.5.2" + "@react-types/shared" "^3.18.1" + "@swc/helpers" "^0.4.14" + +"@react-aria/dnd@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@react-aria/dnd/-/dnd-3.2.1.tgz#60218ec6fc4e1a8022cf26525ee98157847f3ebe" + integrity sha512-9XvUvBSdaMGD8kwNzbSt+eA0wK465KNrsRJvqYIwUTXhrVjbomzXPm8NQ1e9Y8f7j1vSZU1BlMky0861SHwbWg== + dependencies: + "@internationalized/string" "^3.1.0" + "@react-aria/i18n" "^3.7.2" + "@react-aria/interactions" "^3.15.1" + "@react-aria/live-announcer" "^3.3.0" + "@react-aria/overlays" "^3.14.1" + "@react-aria/utils" "^3.17.0" + "@react-aria/visually-hidden" "^3.8.1" + "@react-stately/dnd" "^3.2.1" + "@react-types/button" "^3.7.3" + "@react-types/shared" "^3.18.1" + "@swc/helpers" "^0.4.14" + "@react-aria/focus@^3.12.1": version "3.12.1" resolved "https://registry.yarnpkg.com/@react-aria/focus/-/focus-3.12.1.tgz#5976fa41f36d09a0271f736d7c01414704ea1ca2" @@ -364,6 +501,42 @@ "@swc/helpers" "^0.4.14" clsx "^1.1.1" +"@react-aria/grid@^3.7.1": + version "3.7.1" + resolved "https://registry.yarnpkg.com/@react-aria/grid/-/grid-3.7.1.tgz#8d68f0bb2c617773c9a640f1a98303542c2dccfc" + integrity sha512-CwrRbX1GuLJnQugB3fkujMPjFEJNyzcy+niuAwRMn768Y9MD8swDMwGrKL362NddF2jSCCwIxqA0qjCPeD4S2w== + dependencies: + "@react-aria/focus" "^3.12.1" + "@react-aria/i18n" "^3.7.2" + "@react-aria/interactions" "^3.15.1" + "@react-aria/live-announcer" "^3.3.0" + "@react-aria/selection" "^3.15.0" + "@react-aria/utils" "^3.17.0" + "@react-stately/collections" "^3.8.0" + "@react-stately/grid" "^3.6.1" + "@react-stately/selection" "^3.13.1" + "@react-stately/virtualizer" "^3.5.2" + "@react-types/checkbox" "^3.4.4" + "@react-types/grid" "^3.1.8" + "@react-types/shared" "^3.18.1" + "@swc/helpers" "^0.4.14" + +"@react-aria/gridlist@^3.4.0": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@react-aria/gridlist/-/gridlist-3.4.0.tgz#7273a0e29f610ba8dfa73b4a85a271d7b5aabdfd" + integrity sha512-qV0XIdUrAJMlj+H4d5kL8cH5AFq8m9oNzcDfiA9ku1zsJ9yd3l1waSOyIWlrFZkaIIdkgFUDM4RzgvNHm+WA0Q== + dependencies: + "@react-aria/focus" "^3.12.1" + "@react-aria/grid" "^3.7.1" + "@react-aria/i18n" "^3.7.2" + "@react-aria/interactions" "^3.15.1" + "@react-aria/selection" "^3.15.0" + "@react-aria/utils" "^3.17.0" + "@react-stately/list" "^3.8.1" + "@react-types/checkbox" "^3.4.4" + "@react-types/shared" "^3.18.1" + "@swc/helpers" "^0.4.14" + "@react-aria/i18n@^3.7.2": version "3.7.2" resolved "https://registry.yarnpkg.com/@react-aria/i18n/-/i18n-3.7.2.tgz#7e42943a5e0584dca60c72830175edbae4d9be9f" @@ -398,6 +571,18 @@ "@react-types/shared" "^3.18.1" "@swc/helpers" "^0.4.14" +"@react-aria/link@^3.5.1": + version "3.5.1" + resolved "https://registry.yarnpkg.com/@react-aria/link/-/link-3.5.1.tgz#f93914ae5b31b3a38ce1a99809197240113778e3" + integrity sha512-eVdbmiae/Y3B5k78bakx2x43c69cqvEk/g38kjRI4lNa1WsQMdV/3HXjuWa3KA+c3ajn0kTAXO6inHKGtJ9d6w== + dependencies: + "@react-aria/focus" "^3.12.1" + "@react-aria/interactions" "^3.15.1" + "@react-aria/utils" "^3.17.0" + "@react-types/link" "^3.4.2" + "@react-types/shared" "^3.18.1" + "@swc/helpers" "^0.4.14" + "@react-aria/listbox@^3.9.1": version "3.9.1" resolved "https://registry.yarnpkg.com/@react-aria/listbox/-/listbox-3.9.1.tgz#8b077a02fc9a6179c7660d0f3aca83bbf43eb714" @@ -414,6 +599,13 @@ "@react-types/shared" "^3.18.1" "@swc/helpers" "^0.4.14" +"@react-aria/live-announcer@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@react-aria/live-announcer/-/live-announcer-3.3.0.tgz#04a2a233c2f48c53994f83cafdc4336ec1ea3700" + integrity sha512-6diTS6mIf70KdxfGqiDxHV+9Qv8a9A88EqBllzXGF6HWPdcwde/GIEmfpTwj8g1ImNGZYUwDkv4Hd9lFj0MXEg== + dependencies: + "@swc/helpers" "^0.4.14" + "@react-aria/menu@^3.9.1": version "3.9.1" resolved "https://registry.yarnpkg.com/@react-aria/menu/-/menu-3.9.1.tgz#a89f8c65429c50d5247a46fd100454ec3efb37e5" @@ -432,6 +624,34 @@ "@react-types/shared" "^3.18.1" "@swc/helpers" "^0.4.14" +"@react-aria/meter@^3.4.2": + version "3.4.2" + resolved "https://registry.yarnpkg.com/@react-aria/meter/-/meter-3.4.2.tgz#741bf22176a349c0973d9480c9c306ebb5d81545" + integrity sha512-3qcWeCiLuauwQdLHOc/RssuxEEhYWEy+TXNNE2P6zKvduuL19JKKljpuI1SpQSQ4nAamIGZwGBwHdAoZpLx3Kw== + dependencies: + "@react-aria/progress" "^3.4.2" + "@react-types/meter" "^3.3.2" + "@react-types/shared" "^3.18.1" + "@swc/helpers" "^0.4.14" + +"@react-aria/numberfield@^3.5.1": + version "3.5.1" + resolved "https://registry.yarnpkg.com/@react-aria/numberfield/-/numberfield-3.5.1.tgz#e4f97e24dd755e2092a8afa2689a82798e610105" + integrity sha512-O0hDANrlwsKSKjiV64Ryx1FfNxkuByU9qXKz7vpMf8ZeR3OLAYzvib1RNeFvijM9/TUGp1zA40cwGknEp6D72w== + dependencies: + "@react-aria/i18n" "^3.7.2" + "@react-aria/interactions" "^3.15.1" + "@react-aria/live-announcer" "^3.3.0" + "@react-aria/spinbutton" "^3.4.1" + "@react-aria/textfield" "^3.9.2" + "@react-aria/utils" "^3.17.0" + "@react-stately/numberfield" "^3.4.2" + "@react-types/button" "^3.7.3" + "@react-types/numberfield" "^3.4.2" + "@react-types/shared" "^3.18.1" + "@react-types/textfield" "^3.7.2" + "@swc/helpers" "^0.4.14" + "@react-aria/overlays@^3.14.1": version "3.14.1" resolved "https://registry.yarnpkg.com/@react-aria/overlays/-/overlays-3.14.1.tgz#2e18bd78eef145dc1353490dbe29f04622cfbafe" @@ -449,6 +669,48 @@ "@react-types/shared" "^3.18.1" "@swc/helpers" "^0.4.14" +"@react-aria/progress@^3.4.2": + version "3.4.2" + resolved "https://registry.yarnpkg.com/@react-aria/progress/-/progress-3.4.2.tgz#a4357c718808cacf01e83e162d2e3968dc623629" + integrity sha512-9VQbZGWnzQz8pW7NoOzUNzVkWemTaCfut8KJHcyW/KicoNfNHNuhaBcFvor0pAGIYT4Kdxlv0aG6i3N1xit6aQ== + dependencies: + "@react-aria/i18n" "^3.7.2" + "@react-aria/label" "^3.5.2" + "@react-aria/utils" "^3.17.0" + "@react-types/progress" "^3.4.1" + "@react-types/shared" "^3.18.1" + "@swc/helpers" "^0.4.14" + +"@react-aria/radio@^3.6.1": + version "3.6.1" + resolved "https://registry.yarnpkg.com/@react-aria/radio/-/radio-3.6.1.tgz#baf5d83b99b5ef44fa0bed804daa2fb221ecf754" + integrity sha512-paO2sCxvH8I0Iomzgmvw1TCvzd+0AcUylPSr34dhPmJIsRew7UVtmON9YU8tM/KELDv346n2v8KqzlgHJlLLvg== + dependencies: + "@react-aria/focus" "^3.12.1" + "@react-aria/i18n" "^3.7.2" + "@react-aria/interactions" "^3.15.1" + "@react-aria/label" "^3.5.2" + "@react-aria/utils" "^3.17.0" + "@react-stately/radio" "^3.8.1" + "@react-types/radio" "^3.4.2" + "@react-types/shared" "^3.18.1" + "@swc/helpers" "^0.4.14" + +"@react-aria/searchfield@^3.5.2": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@react-aria/searchfield/-/searchfield-3.5.2.tgz#9ff0031130c73be1007822f9b99a6ef9967a5930" + integrity sha512-rmTdr1ZYqVOZ9lTf2ks71ohirgNsutuG8If6r2FFvatc8UgOG/ClKeaTHhErPKLtO9+SxQWDGmi72ShF92Ydjw== + dependencies: + "@react-aria/i18n" "^3.7.2" + "@react-aria/interactions" "^3.15.1" + "@react-aria/textfield" "^3.9.2" + "@react-aria/utils" "^3.17.0" + "@react-stately/searchfield" "^3.4.2" + "@react-types/button" "^3.7.3" + "@react-types/searchfield" "^3.4.2" + "@react-types/shared" "^3.18.1" + "@swc/helpers" "^0.4.14" + "@react-aria/select@^3.10.1": version "3.10.1" resolved "https://registry.yarnpkg.com/@react-aria/select/-/select-3.10.1.tgz#eb6be7dd29f40ced0c1c4aaedf698ca43790b0bd" @@ -482,6 +744,44 @@ "@react-types/shared" "^3.18.1" "@swc/helpers" "^0.4.14" +"@react-aria/separator@^3.3.2": + version "3.3.2" + resolved "https://registry.yarnpkg.com/@react-aria/separator/-/separator-3.3.2.tgz#38a895a06ad61b4d3304c173c36f357bf6b3ed89" + integrity sha512-JNftOexcj8lvKRS7h+gTIW4HBJVtcYRc8ESCt7GFgAozVNmu+IJ6KPvD1MYBozCLzoKGnLPXB/9eGi47wNdXnA== + dependencies: + "@react-aria/utils" "^3.17.0" + "@react-types/shared" "^3.18.1" + "@swc/helpers" "^0.4.14" + +"@react-aria/slider@^3.4.1": + version "3.4.1" + resolved "https://registry.yarnpkg.com/@react-aria/slider/-/slider-3.4.1.tgz#b56c4b1bb82a4038150c2e67953a55e3337e6231" + integrity sha512-gJTfwZGGGv0dPUO3rC8HCyOXnAgMagJZnV3gIILfzNWZHZLYbLze+IbTSNtNKGIvt4pAKTV0njLDLlxFZlAadw== + dependencies: + "@react-aria/focus" "^3.12.1" + "@react-aria/i18n" "^3.7.2" + "@react-aria/interactions" "^3.15.1" + "@react-aria/label" "^3.5.2" + "@react-aria/utils" "^3.17.0" + "@react-stately/radio" "^3.8.1" + "@react-stately/slider" "^3.3.2" + "@react-types/radio" "^3.4.2" + "@react-types/shared" "^3.18.1" + "@react-types/slider" "^3.5.1" + "@swc/helpers" "^0.4.14" + +"@react-aria/spinbutton@^3.4.1": + version "3.4.1" + resolved "https://registry.yarnpkg.com/@react-aria/spinbutton/-/spinbutton-3.4.1.tgz#627db560317fee187854d48c6e31a4f2f0591a3e" + integrity sha512-YL3Gp431Jd8FcZ3aU/ymQJlV1yPOShbDJUvHZ8cwasjFH3QLSvx88pcv1PTKxyE3RdRFkP+Xii61jFfF7B5jmg== + dependencies: + "@react-aria/i18n" "^3.7.2" + "@react-aria/live-announcer" "^3.3.0" + "@react-aria/utils" "^3.17.0" + "@react-types/button" "^3.7.3" + "@react-types/shared" "^3.18.1" + "@swc/helpers" "^0.4.14" + "@react-aria/ssr@^3.6.0": version "3.6.0" resolved "https://registry.yarnpkg.com/@react-aria/ssr/-/ssr-3.6.0.tgz#e5d52bd1686ff229f68f806cf94ee29dd9f54fb7" @@ -489,34 +789,228 @@ dependencies: "@swc/helpers" "^0.4.14" -"@react-aria/utils@^3.17.0": - version "3.17.0" - resolved "https://registry.yarnpkg.com/@react-aria/utils/-/utils-3.17.0.tgz#b462afad9a25505394a714a69b9f238c24dd15a7" - integrity sha512-NEul0cQ6tQPdNSHYzNYD+EfFabeYNvDwEiHB82kK/Tsfhfm84SM+baben/at2N51K7iRrJPr5hC5fi4+P88lNg== +"@react-aria/switch@^3.5.1": + version "3.5.1" + resolved "https://registry.yarnpkg.com/@react-aria/switch/-/switch-3.5.1.tgz#e85e90ca735462c3aa4e1c5ed5b877332195d2f8" + integrity sha512-upFtDIfNSVUOUOQYPqFzu2dxef4zVcxbCkaqUo+IRJnNix6AdtoEq+E7gwKVHnB79GQMWz6ZmippbID9Yrq73Q== + dependencies: + "@react-aria/toggle" "^3.6.1" + "@react-stately/toggle" "^3.5.2" + "@react-types/switch" "^3.3.2" + "@swc/helpers" "^0.4.14" + +"@react-aria/table@^3.9.1": + version "3.9.1" + resolved "https://registry.yarnpkg.com/@react-aria/table/-/table-3.9.1.tgz#e30b9703c9dc4f6d7e0b3d2851a5092625db2f19" + integrity sha512-utcqmQbH9M6jw6Stv8ugJdi8+F0vCXE7pQMVDow/mxDq0Cf5bAbBt29Yln2xO/6dyiBcT3LESgmD7AYlAfy2BQ== + dependencies: + "@react-aria/focus" "^3.12.1" + "@react-aria/grid" "^3.7.1" + "@react-aria/i18n" "^3.7.2" + "@react-aria/interactions" "^3.15.1" + "@react-aria/live-announcer" "^3.3.0" + "@react-aria/selection" "^3.15.0" + "@react-aria/utils" "^3.17.0" + "@react-aria/visually-hidden" "^3.8.1" + "@react-stately/collections" "^3.8.0" + "@react-stately/table" "^3.9.1" + "@react-stately/virtualizer" "^3.5.2" + "@react-types/checkbox" "^3.4.4" + "@react-types/grid" "^3.1.8" + "@react-types/shared" "^3.18.1" + "@react-types/table" "^3.6.1" + "@swc/helpers" "^0.4.14" + +"@react-aria/tabs@^3.6.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@react-aria/tabs/-/tabs-3.6.0.tgz#18bd02557acb3212cf34134a1343cacaad075a02" + integrity sha512-W+X/lEvGjIGOeIx/tzkXjenglRPdv6d0JS4KCqrQET+Vg4jkAJWR2Ls0imz6CIF/QE5lbe3MiM8pyFpwg6vUNA== + dependencies: + "@react-aria/focus" "^3.12.1" + "@react-aria/i18n" "^3.7.2" + "@react-aria/interactions" "^3.15.1" + "@react-aria/selection" "^3.15.0" + "@react-aria/utils" "^3.17.0" + "@react-stately/list" "^3.8.1" + "@react-stately/tabs" "^3.4.1" + "@react-types/shared" "^3.18.1" + "@react-types/tabs" "^3.3.0" + "@swc/helpers" "^0.4.14" + +"@react-aria/tag@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@react-aria/tag/-/tag-3.0.0.tgz#6bc61544d396a97bfcf77d1186d7821268d81aa1" + integrity sha512-UuYqlysitwv1e1SV9YJqUMV7P7Gg5triEljyJ90b4rtETRhGa+Qh6cVa1P8F4h5nPTwzqey47jAp45i1FSsH4w== + dependencies: + "@react-aria/gridlist" "^3.4.0" + "@react-aria/i18n" "^3.7.2" + "@react-aria/interactions" "^3.15.1" + "@react-aria/label" "^3.5.2" + "@react-aria/selection" "^3.15.0" + "@react-aria/utils" "^3.17.0" + "@react-stately/list" "^3.8.1" + "@react-types/button" "^3.7.3" + "@react-types/shared" "^3.18.1" + "@swc/helpers" "^0.4.14" + +"@react-aria/textfield@^3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@react-aria/textfield/-/textfield-3.9.2.tgz#d73c29906e38a988a193122ec2e17b1108366502" + integrity sha512-wT68tErfMcBvJHyb+5skfs1OHZ8lESzIbrwCTuipM85BeleYIu25qGbKfOX9wMbC+4X775gg/JfmUQESJ6nD1A== + dependencies: + "@react-aria/focus" "^3.12.1" + "@react-aria/label" "^3.5.2" + "@react-aria/utils" "^3.17.0" + "@react-types/shared" "^3.18.1" + "@react-types/textfield" "^3.7.2" + "@swc/helpers" "^0.4.14" + +"@react-aria/toggle@^3.6.1": + version "3.6.1" + resolved "https://registry.yarnpkg.com/@react-aria/toggle/-/toggle-3.6.1.tgz#9aa8c6b951ef4c9a407e410da0079e046d8b35f1" + integrity sha512-4ml3HMjaZPUtRVb6MuuxuV8P/ydzrpldfP0R1hv3f56lo5gBVMh7ME72z49Z8Jf9hnxPkDBvnNi0AnfITtvfVw== + dependencies: + "@react-aria/focus" "^3.12.1" + "@react-aria/interactions" "^3.15.1" + "@react-aria/utils" "^3.17.0" + "@react-stately/toggle" "^3.5.2" + "@react-types/checkbox" "^3.4.4" + "@react-types/shared" "^3.18.1" + "@react-types/switch" "^3.3.2" + "@swc/helpers" "^0.4.14" + +"@react-aria/tooltip@^3.5.1": + version "3.5.1" + resolved "https://registry.yarnpkg.com/@react-aria/tooltip/-/tooltip-3.5.1.tgz#fd6f157cc6f09986e986e38034ad5198e3514dc0" + integrity sha512-H+eYX5H9cSKCiguH/0+QMq9LrZrvq8D0Zf6fHnA3dP4YkDjxFNuFyeiXGSTTcjEmwnCf9sJ9sObjv6b9n7c45w== + dependencies: + "@react-aria/focus" "^3.12.1" + "@react-aria/interactions" "^3.15.1" + "@react-aria/utils" "^3.17.0" + "@react-stately/tooltip" "^3.4.1" + "@react-types/shared" "^3.18.1" + "@react-types/tooltip" "^3.4.1" + "@swc/helpers" "^0.4.14" + +"@react-aria/utils@^3.17.0": + version "3.17.0" + resolved "https://registry.yarnpkg.com/@react-aria/utils/-/utils-3.17.0.tgz#b462afad9a25505394a714a69b9f238c24dd15a7" + integrity sha512-NEul0cQ6tQPdNSHYzNYD+EfFabeYNvDwEiHB82kK/Tsfhfm84SM+baben/at2N51K7iRrJPr5hC5fi4+P88lNg== + dependencies: + "@react-aria/ssr" "^3.6.0" + "@react-stately/utils" "^3.6.0" + "@react-types/shared" "^3.18.1" + "@swc/helpers" "^0.4.14" + clsx "^1.1.1" + +"@react-aria/visually-hidden@^3.8.1": + version "3.8.1" + resolved "https://registry.yarnpkg.com/@react-aria/visually-hidden/-/visually-hidden-3.8.1.tgz#f035d3461671ae6f3af534e615df009ca9c08c4a" + integrity sha512-aojoZXw5iaFDOgqmGuCyaTG9PFqfav5ABXX/W/0Q2YNj6Tb3i6++m2+8RMHlz2b6Dj+rXLiTxa00t7BSgJbUvA== + dependencies: + "@react-aria/interactions" "^3.15.1" + "@react-aria/utils" "^3.17.0" + "@react-types/shared" "^3.18.1" + "@swc/helpers" "^0.4.14" + clsx "^1.1.1" + +"@react-stately/calendar@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@react-stately/calendar/-/calendar-3.2.1.tgz#834b1bb5b0412dcbfc9cd1edea3cd19c99a62286" + integrity sha512-3gUUQofRfMaFqg8qA0uEMuciDAtFCYhxYgYWwWOIBcpxHV0STMKrsWjpY5+rNtpB+wi+81jz55gfmBEo+4QU3w== + dependencies: + "@internationalized/date" "^3.2.0" + "@react-stately/utils" "^3.6.0" + "@react-types/calendar" "^3.2.1" + "@react-types/datepicker" "^3.3.1" + "@react-types/shared" "^3.18.1" + "@swc/helpers" "^0.4.14" + +"@react-stately/checkbox@^3.4.2": + version "3.4.2" + resolved "https://registry.yarnpkg.com/@react-stately/checkbox/-/checkbox-3.4.2.tgz#9ccd80ee94b5d4c796e81ce8f5e55230b8102e31" + integrity sha512-UG94lilDJEIFeRKnKw31nI1Vb1UOSroLAFHv4rB2tCvzLl3/9ULfHyii1hqFVS41juzFc7ONInNBT4yu5RAm5Q== + dependencies: + "@react-stately/toggle" "^3.5.2" + "@react-stately/utils" "^3.6.0" + "@react-types/checkbox" "^3.4.4" + "@react-types/shared" "^3.18.1" + "@swc/helpers" "^0.4.14" + +"@react-stately/collections@^3.8.0": + version "3.8.0" + resolved "https://registry.yarnpkg.com/@react-stately/collections/-/collections-3.8.0.tgz#4b2b71866d12fd6b4f4aea495e2d4ecb2954d4e6" + integrity sha512-NIRE8Gha0XZTnbvh9JRZM7oI/6uLf6ozjB7myja29IX7hDvsZxITe0RFXBapcujlpXLU2uufssJPKpiwJm3vZQ== + dependencies: + "@react-types/shared" "^3.18.1" + "@swc/helpers" "^0.4.14" + +"@react-stately/combobox@^3.5.1": + version "3.5.1" + resolved "https://registry.yarnpkg.com/@react-stately/combobox/-/combobox-3.5.1.tgz#efde39fa2d5003d9030bef04705aefc84f00aff7" + integrity sha512-E7eEggbVaueLEeSAOXzB2wUsjxgA3vpfTsghWdxYU6hWPB2ek6cSWfjAp7NPtf0b56n07kZRqa1lFx6kPJSCYw== + dependencies: + "@react-stately/collections" "^3.8.0" + "@react-stately/list" "^3.8.1" + "@react-stately/menu" "^3.5.2" + "@react-stately/select" "^3.5.1" + "@react-stately/utils" "^3.6.0" + "@react-types/combobox" "^3.6.2" + "@react-types/shared" "^3.18.1" + "@swc/helpers" "^0.4.14" + +"@react-stately/data@^3.9.2": + version "3.9.2" + resolved "https://registry.yarnpkg.com/@react-stately/data/-/data-3.9.2.tgz#a8fc3173d7407f7ed17dec6c9b5c1a9fe719ff26" + integrity sha512-ze64/M/OOv8Vk/KSNf+PzF0gTnv1y+EqjCdvJWRYD6fo64bRWH19x3X2xbMX0UYCbdjsSlesXn/9uItz8Kws6A== + dependencies: + "@react-types/shared" "^3.18.1" + "@swc/helpers" "^0.4.14" + +"@react-stately/datepicker@^3.4.1": + version "3.4.1" + resolved "https://registry.yarnpkg.com/@react-stately/datepicker/-/datepicker-3.4.1.tgz#3aaf3b439e542aa9bc0dc366a70f9232247865e6" + integrity sha512-tubL36Pc7H3/agUk3epB9YzVDUgCNhE406cAMpkvFP4Ru4pUC45dKM9FoR4S43vJra7AYfY8lNkFZKkFVJBWVQ== + dependencies: + "@internationalized/date" "^3.2.0" + "@internationalized/string" "^3.1.0" + "@react-stately/overlays" "^3.5.2" + "@react-stately/utils" "^3.6.0" + "@react-types/datepicker" "^3.3.1" + "@react-types/shared" "^3.18.1" + "@swc/helpers" "^0.4.14" + +"@react-stately/dnd@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@react-stately/dnd/-/dnd-3.2.1.tgz#3f738d4a1bbc9c2291c52ec480114b96e83ed76a" + integrity sha512-n9XHGUOvDiSWiNJ/MtgvGz/nY3OX9rMJi1pjx6066m699qu1qYDQUgBI59HLCHBf1DhrYWz2qDf72rkxdbgZ6g== dependencies: - "@react-aria/ssr" "^3.6.0" - "@react-stately/utils" "^3.6.0" + "@react-stately/selection" "^3.13.1" "@react-types/shared" "^3.18.1" "@swc/helpers" "^0.4.14" - clsx "^1.1.1" -"@react-aria/visually-hidden@^3.8.1": - version "3.8.1" - resolved "https://registry.yarnpkg.com/@react-aria/visually-hidden/-/visually-hidden-3.8.1.tgz#f035d3461671ae6f3af534e615df009ca9c08c4a" - integrity sha512-aojoZXw5iaFDOgqmGuCyaTG9PFqfav5ABXX/W/0Q2YNj6Tb3i6++m2+8RMHlz2b6Dj+rXLiTxa00t7BSgJbUvA== +"@react-stately/grid@^3.6.1": + version "3.6.1" + resolved "https://registry.yarnpkg.com/@react-stately/grid/-/grid-3.6.1.tgz#968fde7289ec97e40171586b53cfc69e70d00718" + integrity sha512-54B3OztU99ixMhcZsDdfeMemEcqibK9KgaOZVuPmewee35nXAOGTqNjjeN64Vz6ui8q3j86eIyjGChAxqU0KpA== dependencies: - "@react-aria/interactions" "^3.15.1" - "@react-aria/utils" "^3.17.0" + "@react-stately/collections" "^3.8.0" + "@react-stately/selection" "^3.13.1" + "@react-types/grid" "^3.1.8" "@react-types/shared" "^3.18.1" "@swc/helpers" "^0.4.14" - clsx "^1.1.1" -"@react-stately/collections@^3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@react-stately/collections/-/collections-3.8.0.tgz#4b2b71866d12fd6b4f4aea495e2d4ecb2954d4e6" - integrity sha512-NIRE8Gha0XZTnbvh9JRZM7oI/6uLf6ozjB7myja29IX7hDvsZxITe0RFXBapcujlpXLU2uufssJPKpiwJm3vZQ== +"@react-stately/layout@^3.12.1": + version "3.12.1" + resolved "https://registry.yarnpkg.com/@react-stately/layout/-/layout-3.12.1.tgz#ec4602fe723cab9652ce206aa6e6490b6f24c9b5" + integrity sha512-WVAo9bb8+QWOkGC0HUkYOGjkXvUuZyOOtftc0blRnuGD30SAx1bLkGEFoa2Qm6K7Rhm7s9jNSSXdd6Tgm4Aqew== dependencies: + "@react-stately/collections" "^3.8.0" + "@react-stately/table" "^3.9.1" + "@react-stately/virtualizer" "^3.5.2" + "@react-types/grid" "^3.1.8" "@react-types/shared" "^3.18.1" + "@react-types/table" "^3.6.1" "@swc/helpers" "^0.4.14" "@react-stately/list@^3.8.1": @@ -541,6 +1035,17 @@ "@react-types/shared" "^3.18.1" "@swc/helpers" "^0.4.14" +"@react-stately/numberfield@^3.4.2": + version "3.4.2" + resolved "https://registry.yarnpkg.com/@react-stately/numberfield/-/numberfield-3.4.2.tgz#05a2b94850cf3a1e703c6323068a11cdb15bf5ae" + integrity sha512-FFe8J38//+Ck3aSTCtWteQY6tkDi2curLPxFwkWOxq71Vv+1Zvga5pTRoa6O1k1f0OXnDkVhmU1Njcl4JRMveA== + dependencies: + "@internationalized/number" "^3.2.0" + "@react-stately/utils" "^3.6.0" + "@react-types/numberfield" "^3.4.2" + "@react-types/shared" "^3.18.1" + "@swc/helpers" "^0.4.14" + "@react-stately/overlays@^3.5.2": version "3.5.2" resolved "https://registry.yarnpkg.com/@react-stately/overlays/-/overlays-3.5.2.tgz#b084789fa2e3bcf30348fe09e848acccf01957c9" @@ -550,6 +1055,26 @@ "@react-types/overlays" "^3.7.2" "@swc/helpers" "^0.4.14" +"@react-stately/radio@^3.8.1": + version "3.8.1" + resolved "https://registry.yarnpkg.com/@react-stately/radio/-/radio-3.8.1.tgz#9594044754894cd6edfdb99db8d5fc26b7e9d32c" + integrity sha512-yhz6/2y/hkDW7dzjhNsxrVZ8T7n2/Y9LyVRKDCL7ZYOkpoVQGe0ELbU04ATJPHNx6Icg/jAfN0Z/uMov/q4VBQ== + dependencies: + "@react-stately/utils" "^3.6.0" + "@react-types/radio" "^3.4.2" + "@react-types/shared" "^3.18.1" + "@swc/helpers" "^0.4.14" + +"@react-stately/searchfield@^3.4.2": + version "3.4.2" + resolved "https://registry.yarnpkg.com/@react-stately/searchfield/-/searchfield-3.4.2.tgz#fd9b87504dc0c394eb4be5e5d59b2b3ecdd10e2f" + integrity sha512-MGxjDY3lV4q3eFRiFbDhzicXWFdcAQ84klbFeWnSg/QLebQPyWD9X35e3Gc8bkNKof2MmwcrEgUIuHOReDRr2w== + dependencies: + "@react-stately/utils" "^3.6.0" + "@react-types/searchfield" "^3.4.2" + "@react-types/shared" "^3.18.1" + "@swc/helpers" "^0.4.14" + "@react-stately/select@^3.5.1": version "3.5.1" resolved "https://registry.yarnpkg.com/@react-stately/select/-/select-3.5.1.tgz#15b00012f20804e640b80fe3d275ab3ceb75ac02" @@ -574,6 +1099,62 @@ "@react-types/shared" "^3.18.1" "@swc/helpers" "^0.4.14" +"@react-stately/slider@^3.3.2": + version "3.3.2" + resolved "https://registry.yarnpkg.com/@react-stately/slider/-/slider-3.3.2.tgz#9e933fe5078ed0272f398c1c11ad078b7945b53d" + integrity sha512-UHyBdFR/3Wl1UZmwxWwJ1rb/OCYhY62zZaN7GZrVsnjQ0ng7mFqkb6O0/SXWjsfXnmRAMqCg4ARk82d1PRUfsg== + dependencies: + "@react-aria/i18n" "^3.7.2" + "@react-aria/utils" "^3.17.0" + "@react-stately/utils" "^3.6.0" + "@react-types/shared" "^3.18.1" + "@react-types/slider" "^3.5.1" + "@swc/helpers" "^0.4.14" + +"@react-stately/table@^3.9.1": + version "3.9.1" + resolved "https://registry.yarnpkg.com/@react-stately/table/-/table-3.9.1.tgz#628d5099e76cf9e81926b752ec178376dec7bda1" + integrity sha512-/YWpV88RH4ElCiwNm/Ys+A5nyWhy+BwEsGTVatbjwZFmHwHxv1FeMrTiYZ9vXR7V7SMCvA8Pd9OJ9NmRkd2klg== + dependencies: + "@react-stately/collections" "^3.8.0" + "@react-stately/grid" "^3.6.1" + "@react-stately/selection" "^3.13.1" + "@react-types/grid" "^3.1.8" + "@react-types/shared" "^3.18.1" + "@react-types/table" "^3.6.1" + "@swc/helpers" "^0.4.14" + +"@react-stately/tabs@^3.4.1": + version "3.4.1" + resolved "https://registry.yarnpkg.com/@react-stately/tabs/-/tabs-3.4.1.tgz#f1d74551808f4d0a33f1c8d0e918bfbb5feeea03" + integrity sha512-8MTerdCSaZEc0qghINqIe/L/ja1Lbo5v5aFwJS014VjhYc2uFyJlTn+/kyccClBlmXpARqmiC7C3ASJ33385Fg== + dependencies: + "@react-stately/list" "^3.8.1" + "@react-stately/utils" "^3.6.0" + "@react-types/shared" "^3.18.1" + "@react-types/tabs" "^3.3.0" + "@swc/helpers" "^0.4.14" + +"@react-stately/toggle@^3.5.2": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@react-stately/toggle/-/toggle-3.5.2.tgz#580f4254e3c7c2c4d230409a36042813d9c0ab70" + integrity sha512-2fDecu06job9NKdSIryU4AE+BoTGZqfinUsAvYTaaQN95Apq8IShEDFkY+gSnU09wRX26Ux+JJi5pYwg+HX1tw== + dependencies: + "@react-stately/utils" "^3.6.0" + "@react-types/checkbox" "^3.4.4" + "@react-types/shared" "^3.18.1" + "@swc/helpers" "^0.4.14" + +"@react-stately/tooltip@^3.4.1": + version "3.4.1" + resolved "https://registry.yarnpkg.com/@react-stately/tooltip/-/tooltip-3.4.1.tgz#cee27bfcabfa54e37e7627f71ac2e3eb2da8495d" + integrity sha512-ZHqyN/mqciKtUfQ/bwdPPPAKwVFeFfyMLkHSA34NrXr9/swj/ONBQtdRUzbu56rlajMUSw5R60hmyJOGNXZb3A== + dependencies: + "@react-stately/overlays" "^3.5.2" + "@react-stately/utils" "^3.6.0" + "@react-types/tooltip" "^3.4.1" + "@swc/helpers" "^0.4.14" + "@react-stately/tree@^3.6.1": version "3.6.1" resolved "https://registry.yarnpkg.com/@react-stately/tree/-/tree-3.6.1.tgz#191daac8dfd52a3603e2e138cab26fd2bfd493c3" @@ -592,6 +1173,23 @@ dependencies: "@swc/helpers" "^0.4.14" +"@react-stately/virtualizer@^3.5.2": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@react-stately/virtualizer/-/virtualizer-3.5.2.tgz#f646a114662c18d34afbf3b1cba81636afadb231" + integrity sha512-OmG9lPcbfnyuPhbSDVcDXDfPU0rc2E/V8VLGGd/yMOxSy4S90nWDSEoR8qAN6g9rY6xoLjPJ671nyxOu41EtyA== + dependencies: + "@react-aria/utils" "^3.17.0" + "@react-types/shared" "^3.18.1" + "@swc/helpers" "^0.4.14" + +"@react-types/breadcrumbs@^3.5.2": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@react-types/breadcrumbs/-/breadcrumbs-3.5.2.tgz#1717f3ffbad2d5da457195cb50c9d9c0a5b6be8f" + integrity sha512-pKtahBLmcpSYhfNBv2j/k0e701U7xwDCf24U/JOyio9i7aAYCZ+RUcKc1kK3tRsVNj41seLv7Q9ElC48nXsfwg== + dependencies: + "@react-types/link" "^3.4.2" + "@react-types/shared" "^3.18.1" + "@react-types/button@^3.7.3": version "3.7.3" resolved "https://registry.yarnpkg.com/@react-types/button/-/button-3.7.3.tgz#00ad45ff0a304a6f6ef29a5d6adda73cea10942f" @@ -599,6 +1197,52 @@ dependencies: "@react-types/shared" "^3.18.1" +"@react-types/calendar@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@react-types/calendar/-/calendar-3.2.1.tgz#f01bff7c373b19a18d96414b0680903ca508ae85" + integrity sha512-lp+1KG7YxKCPvXuuyB1XyyhynV8g19JamojfGUaQGqsM1kxOr8x87Ikwh5zunHuOS6U4s/tO0C2LMA9iGxdBxQ== + dependencies: + "@internationalized/date" "^3.2.0" + "@react-types/shared" "^3.18.1" + +"@react-types/checkbox@^3.4.4": + version "3.4.4" + resolved "https://registry.yarnpkg.com/@react-types/checkbox/-/checkbox-3.4.4.tgz#cf55e9fd0cabef6e4408d03b308c754e1add3bc1" + integrity sha512-rJNhbW4R9HTvdbF2oTZmqGiZ/WVP3/XsU4gae7tfdhSYjG+5T5h9zau1vRhz++zwKn57wfcyNn6a83GDhhgkVw== + dependencies: + "@react-types/shared" "^3.18.1" + +"@react-types/combobox@^3.6.2": + version "3.6.2" + resolved "https://registry.yarnpkg.com/@react-types/combobox/-/combobox-3.6.2.tgz#887cc2bce355773cb9dc5613c88264d008c92384" + integrity sha512-qitu/W3Z3/ihyqocy+8n4HZKRXF5JTMHl1ug3rKps5yCNnVdkWwjPFPM6w180c9QjquThNY3o947LZ1v59qJ4A== + dependencies: + "@react-types/shared" "^3.18.1" + +"@react-types/datepicker@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@react-types/datepicker/-/datepicker-3.3.1.tgz#035451586577077a65b89ee739bd1e29a777a28b" + integrity sha512-kVZ9j3PovXjTIeQrq4YiURS48Rsp5Uc81/HumZyrTWtYtYSKAU0U0ifiTuPeJ044tfpi3wGkitJ5wtt8j5imKQ== + dependencies: + "@internationalized/date" "^3.2.0" + "@react-types/overlays" "^3.7.2" + "@react-types/shared" "^3.18.1" + +"@react-types/dialog@^3.5.2": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@react-types/dialog/-/dialog-3.5.2.tgz#e0dd2b459ebfeae649a93cd69f4fd12b8b043c71" + integrity sha512-eus/TivlVqA8JNunMGv9w0Ey4Fmao6BRA3/2r6WTcbXTRw+nLXMmNO2j4CzXAhtrT5j187SADP5OXZjWuEzLFw== + dependencies: + "@react-types/overlays" "^3.7.2" + "@react-types/shared" "^3.18.1" + +"@react-types/grid@^3.1.8": + version "3.1.8" + resolved "https://registry.yarnpkg.com/@react-types/grid/-/grid-3.1.8.tgz#2d8cf3ccbb2bba161917b9e242f920fed5f34026" + integrity sha512-NKk4pDbW2QXJOYnDSAYhta81CGwXOc/9tVw2WFs+1wacvxeKmh1Q+n36uAFcIdQOvVRqeGTJaYiqLFmF3fC3tA== + dependencies: + "@react-types/shared" "^3.18.1" + "@react-types/label@^3.7.4": version "3.7.4" resolved "https://registry.yarnpkg.com/@react-types/label/-/label-3.7.4.tgz#db7ce5cc82785b11ed4c80308b2ec40768fec6e0" @@ -606,6 +1250,14 @@ dependencies: "@react-types/shared" "^3.18.1" +"@react-types/link@^3.4.2": + version "3.4.2" + resolved "https://registry.yarnpkg.com/@react-types/link/-/link-3.4.2.tgz#85fd550284bf1270dcbdc7c31965ea4ea0b6dfe2" + integrity sha512-EpHfphxt7QjdHbbzV9vfamDP3Xug2jLdM37Z8uu8fIvkJYbAI+r5+MMXTc4g0OMyqWU+/Ik7M+GbA+c6K9Papw== + dependencies: + "@react-aria/interactions" "^3.15.1" + "@react-types/shared" "^3.18.1" + "@react-types/listbox@^3.4.2": version "3.4.2" resolved "https://registry.yarnpkg.com/@react-types/listbox/-/listbox-3.4.2.tgz#13a217ca2c31e4e5c0ef46f00f770bf0d1b24726" @@ -621,6 +1273,21 @@ "@react-types/overlays" "^3.7.2" "@react-types/shared" "^3.18.1" +"@react-types/meter@^3.3.2": + version "3.3.2" + resolved "https://registry.yarnpkg.com/@react-types/meter/-/meter-3.3.2.tgz#f316eb4b47112137b0bbfc9e82b0f2814587c297" + integrity sha512-o21Zz+3LNjvBueMap+q2otGp5t2Xeb/lIMM4Y+v8j5XO+bLcHaAjdQB/TgKRe8iYFm3IqwpVtV9A38IWDtpLRQ== + dependencies: + "@react-types/progress" "^3.4.1" + "@react-types/shared" "^3.18.1" + +"@react-types/numberfield@^3.4.2": + version "3.4.2" + resolved "https://registry.yarnpkg.com/@react-types/numberfield/-/numberfield-3.4.2.tgz#6773e93b611131d45a4e5c4cac561945dc5ac7f3" + integrity sha512-SGzuuFf5wCSRPvpV+bnykiXSIt8pkpBBVp8tlygB66pQSBV7VLdUvWGohaayPSM+3Z+WkU+osgzYtGq5wh+C3Q== + dependencies: + "@react-types/shared" "^3.18.1" + "@react-types/overlays@^3.7.2": version "3.7.2" resolved "https://registry.yarnpkg.com/@react-types/overlays/-/overlays-3.7.2.tgz#40881c6c6e05330e0ea8960646ca2371378b95c0" @@ -628,6 +1295,28 @@ dependencies: "@react-types/shared" "^3.18.1" +"@react-types/progress@^3.4.1": + version "3.4.1" + resolved "https://registry.yarnpkg.com/@react-types/progress/-/progress-3.4.1.tgz#3b45df4780b70573c27b316d557ce71b546e32bf" + integrity sha512-Y6cTvvJjbfFBeB7Zb3PizhhO3+YLWXpIP8opto15RWu11ktgZVMUgsnlsJgE3dFeoZ7UHwXdCYf8JOzBw5VPHA== + dependencies: + "@react-types/shared" "^3.18.1" + +"@react-types/radio@^3.4.2": + version "3.4.2" + resolved "https://registry.yarnpkg.com/@react-types/radio/-/radio-3.4.2.tgz#4a6a1f7ff11b71b6b69d13d28fd74de9c903df8c" + integrity sha512-SE6sjZjZbyuJMJNNdlhoutVr+QFRt1Vz7DZj4UaOswW5SD/Xb+xFdW8i6ETKdRN17am/5SC89ltWe0R3q0pVkA== + dependencies: + "@react-types/shared" "^3.18.1" + +"@react-types/searchfield@^3.4.2": + version "3.4.2" + resolved "https://registry.yarnpkg.com/@react-types/searchfield/-/searchfield-3.4.2.tgz#360ac97f52af5e2bb8e1a8a13e611fe9efc371fa" + integrity sha512-HQm++hIXVfEbjbRey6hYV/5hLEO6gtwt4Mft3u5I5BiT7yoQqQAD/8z9S8aUXDUU9KTrAKfL1DwrFQSkOsCWJA== + dependencies: + "@react-types/shared" "^3.18.1" + "@react-types/textfield" "^3.7.2" + "@react-types/select@^3.8.1": version "3.8.1" resolved "https://registry.yarnpkg.com/@react-types/select/-/select-3.8.1.tgz#77d8ff3be70a5c342860469d71c8c23bbc1a877f" @@ -640,10 +1329,55 @@ resolved "https://registry.yarnpkg.com/@react-types/shared/-/shared-3.18.1.tgz#45bac7a1a433916d16535ea583d86a2b4c72ff8c" integrity sha512-OpTYRFS607Ctfd6Tmhyk6t6cbFyDhO5K+etU35X50pMzpypo1b7vF0mkngEeTc0Xwl0e749ONZNPZskMyu5k8w== +"@react-types/slider@^3.5.1": + version "3.5.1" + resolved "https://registry.yarnpkg.com/@react-types/slider/-/slider-3.5.1.tgz#bae46025de7d02a84918b3aca0e3ffd647e4fdf2" + integrity sha512-8+AMNexx7q7DqfAtQKC5tgnZdG/tIwG2tcEbFCfAQA09Djrt/xiMNz+mc7SsV1PWoWwVuSDFH9QqKPodOrJHDg== + dependencies: + "@react-types/shared" "^3.18.1" + +"@react-types/switch@^3.3.2": + version "3.3.2" + resolved "https://registry.yarnpkg.com/@react-types/switch/-/switch-3.3.2.tgz#af54e2dd8b599df3214360f593827c9033478ce4" + integrity sha512-L0XF4J43Q7HCAJXqseAk6RMteK6k1jQ0zrG05r6lSCkxaS9fGUlgLTCiFUsf07x0ADH1Xyc7PwpfJjyEr5A4tA== + dependencies: + "@react-types/checkbox" "^3.4.4" + "@react-types/shared" "^3.18.1" + +"@react-types/table@^3.6.1": + version "3.6.1" + resolved "https://registry.yarnpkg.com/@react-types/table/-/table-3.6.1.tgz#5c320f66a376dabc923cbddda3a19e9d4fb51c80" + integrity sha512-DeiiBZPZUO2kH40P10Bn9Y4SvDobUlH7Flgx2afL3tJirKMkS1SNDU/B+X9B5Duyd1D0okf1+PLVmi0NBqM4vg== + dependencies: + "@react-types/grid" "^3.1.8" + "@react-types/shared" "^3.18.1" + +"@react-types/tabs@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@react-types/tabs/-/tabs-3.3.0.tgz#d8230bac82fcd1dca414fbc1c17b769cef9c5bd8" + integrity sha512-uXDVXBBppb+9S8bhxF7LZhgptrF5ll25SX8/jrpnXOR0jpihq6K3fkSe5M/OBnGsybuyVGN7+Np5v7UUYrM5SQ== + dependencies: + "@react-types/shared" "^3.18.1" + +"@react-types/textfield@^3.7.2": + version "3.7.2" + resolved "https://registry.yarnpkg.com/@react-types/textfield/-/textfield-3.7.2.tgz#f23341e80b319b68f2298dd429ed2280ada0bbe1" + integrity sha512-TsZTf1+4Ve9QHm6mbXr26uLOA4QtZPgyjYgYclL2nHoOl67algeQIFxIVfdlNIKFFMOw5BtC6Mer0I3KUWtbOQ== + dependencies: + "@react-types/shared" "^3.18.1" + +"@react-types/tooltip@^3.4.1": + version "3.4.1" + resolved "https://registry.yarnpkg.com/@react-types/tooltip/-/tooltip-3.4.1.tgz#131b0a6e28a1865b8977ce108cb7b069d29e5fd8" + integrity sha512-j1QbEX4RZ/uBQa9z1lBZ9bNUa20ji/UjwrIfTNyQm3wbezSZE0PWTQAkfxZdy3PQTBnVGOHSqxAP6iOS6NqOOQ== + dependencies: + "@react-types/overlays" "^3.7.2" + "@react-types/shared" "^3.18.1" + "@rushstack/eslint-patch@^1.1.3": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.3.1.tgz#edbb85ff95f3be41eaa70c6d6ad6d8ba0a9c7e46" - integrity sha512-RkmuBcqiNioeeBKbgzMlOdreUkJfYaSjwgx9XDgGGpjvWgyaxWvDmZVSN9CS6LjEASadhgPv2BcFp+SeouWXXA== + version "1.3.2" + resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.3.2.tgz#31b9c510d8cada9683549e1dbb4284cca5001faf" + integrity sha512-V+MvGwaHH03hYhY+k6Ef/xKd6RYlc4q8WBx+2ANmipHJcKuktNcI/NgEsJgdSUF6Lw32njT6OnrRsKYCdgHjYw== "@swc/helpers@0.5.1": version "0.5.1" @@ -684,7 +1418,12 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== -"@types/node@*", "@types/node@20.2.5": +"@types/node@*": + version "20.3.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.3.1.tgz#e8a83f1aa8b649377bb1fb5d7bac5cb90e784dfe" + integrity sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg== + +"@types/node@20.2.5": version "20.2.5" resolved "https://registry.yarnpkg.com/@types/node/-/node-20.2.5.tgz#26d295f3570323b2837d322180dfbf1ba156fefb" integrity sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ== @@ -701,7 +1440,16 @@ dependencies: "@types/react" "*" -"@types/react@*", "@types/react@18.2.9": +"@types/react@*": + version "18.2.14" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.14.tgz#fa7a6fecf1ce35ca94e74874f70c56ce88f7a127" + integrity sha512-A0zjq+QN/O0Kpe30hA1GidzyFjatVvrpIvWLxD+xv67Vt91TWWgco9IvrJBkeyHm1trGaFS/FSGqPlhyeZRm0g== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + +"@types/react@18.2.9": version "18.2.9" resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.9.tgz#9207f8571afdc59a9c9c30df50e8ad2591ecefaf" integrity sha512-pL3JAesUkF7PEQGxh5XOwdXGV907te6m1/Qe1ERJLgomojS6Ne790QiA7GUl434JEkFA2aAaB6qJ5z4e1zJn/w== @@ -716,47 +1464,47 @@ integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ== "@typescript-eslint/parser@^5.42.0": - version "5.59.9" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.59.9.tgz#a85c47ccdd7e285697463da15200f9a8561dd5fa" - integrity sha512-FsPkRvBtcLQ/eVK1ivDiNYBjn3TGJdXy2fhXX+rc7czWl4ARwnpArwbihSOHI2Peg9WbtGHrbThfBUkZZGTtvQ== + version "5.60.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.60.0.tgz#08f4daf5fc6548784513524f4f2f359cebb4068a" + integrity sha512-jBONcBsDJ9UoTWrARkRRCgDz6wUggmH5RpQVlt7BimSwaTkTjwypGzKORXbR4/2Hqjk9hgwlon2rVQAjWNpkyQ== dependencies: - "@typescript-eslint/scope-manager" "5.59.9" - "@typescript-eslint/types" "5.59.9" - "@typescript-eslint/typescript-estree" "5.59.9" + "@typescript-eslint/scope-manager" "5.60.0" + "@typescript-eslint/types" "5.60.0" + "@typescript-eslint/typescript-estree" "5.60.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.59.9": - version "5.59.9" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.59.9.tgz#eadce1f2733389cdb58c49770192c0f95470d2f4" - integrity sha512-8RA+E+w78z1+2dzvK/tGZ2cpGigBZ58VMEHDZtpE1v+LLjzrYGc8mMaTONSxKyEkz3IuXFM0IqYiGHlCsmlZxQ== +"@typescript-eslint/scope-manager@5.60.0": + version "5.60.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.60.0.tgz#ae511967b4bd84f1d5e179bb2c82857334941c1c" + integrity sha512-hakuzcxPwXi2ihf9WQu1BbRj1e/Pd8ZZwVTG9kfbxAMZstKz8/9OoexIwnmLzShtsdap5U/CoQGRCWlSuPbYxQ== dependencies: - "@typescript-eslint/types" "5.59.9" - "@typescript-eslint/visitor-keys" "5.59.9" + "@typescript-eslint/types" "5.60.0" + "@typescript-eslint/visitor-keys" "5.60.0" -"@typescript-eslint/types@5.59.9": - version "5.59.9" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.59.9.tgz#3b4e7ae63718ce1b966e0ae620adc4099a6dcc52" - integrity sha512-uW8H5NRgTVneSVTfiCVffBb8AbwWSKg7qcA4Ot3JI3MPCJGsB4Db4BhvAODIIYE5mNj7Q+VJkK7JxmRhk2Lyjw== +"@typescript-eslint/types@5.60.0": + version "5.60.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.60.0.tgz#3179962b28b4790de70e2344465ec97582ce2558" + integrity sha512-ascOuoCpNZBccFVNJRSC6rPq4EmJ2NkuoKnd6LDNyAQmdDnziAtxbCGWCbefG1CNzmDvd05zO36AmB7H8RzKPA== -"@typescript-eslint/typescript-estree@5.59.9": - version "5.59.9" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.9.tgz#6bfea844e468427b5e72034d33c9fffc9557392b" - integrity sha512-pmM0/VQ7kUhd1QyIxgS+aRvMgw+ZljB3eDb+jYyp6d2bC0mQWLzUDF+DLwCTkQ3tlNyVsvZRXjFyV0LkU/aXjA== +"@typescript-eslint/typescript-estree@5.60.0": + version "5.60.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.0.tgz#4ddf1a81d32a850de66642d9b3ad1e3254fb1600" + integrity sha512-R43thAuwarC99SnvrBmh26tc7F6sPa2B3evkXp/8q954kYL6Ro56AwASYWtEEi+4j09GbiNAHqYwNNZuNlARGQ== dependencies: - "@typescript-eslint/types" "5.59.9" - "@typescript-eslint/visitor-keys" "5.59.9" + "@typescript-eslint/types" "5.60.0" + "@typescript-eslint/visitor-keys" "5.60.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/visitor-keys@5.59.9": - version "5.59.9" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.9.tgz#9f86ef8e95aca30fb5a705bb7430f95fc58b146d" - integrity sha512-bT7s0td97KMaLwpEBckbzj/YohnvXtqbe2XgqNvTl6RJVakY5mvENOTPvw5u66nljfZxthESpDozs86U+oLY8Q== +"@typescript-eslint/visitor-keys@5.60.0": + version "5.60.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.0.tgz#b48b29da3f5f31dd1656281727004589d2722a66" + integrity sha512-wm9Uz71SbCyhUKgcaPRauBdTegUyY/ZWl8gLwD/i/ybJqscrrdVSFImpvUz16BLPChIeKBK5Fa9s6KDQjsjyWw== dependencies: - "@typescript-eslint/types" "5.59.9" + "@typescript-eslint/types" "5.60.0" eslint-visitor-keys "^3.3.0" acorn-jsx@^5.3.2: @@ -770,9 +1518,9 @@ acorn-walk@^8.1.1: integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== acorn@^8.4.1, acorn@^8.8.0: - version "8.8.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" - integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== + version "8.9.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.9.0.tgz#78a16e3b2bcc198c10822786fa6679e245db5b59" + integrity sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ== ajv@^6.10.0, ajv@^6.12.4: version "6.12.6" @@ -849,11 +1597,11 @@ argparse@^2.0.1: integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== aria-query@^5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e" - integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== + version "5.3.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" + integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== dependencies: - deep-equal "^2.0.5" + dequal "^2.0.3" array-buffer-byte-length@^1.0.0: version "1.0.0" @@ -943,11 +1691,11 @@ axe-core@^4.6.2: integrity sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g== axobject-query@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.1.1.tgz#3b6e5c6d4e43ca7ba51c5babf99d22a9c68485e1" - integrity sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg== + version "3.2.1" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.2.1.tgz#39c378a6e3b06ca679f29138151e45b2b32da62a" + integrity sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg== dependencies: - deep-equal "^2.0.5" + dequal "^2.0.3" balanced-match@^1.0.0: version "1.0.2" @@ -1001,12 +1749,12 @@ braces@^3.0.2, braces@~3.0.2: fill-range "^7.0.1" browserslist@^4.21.5: - version "4.21.7" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.7.tgz#e2b420947e5fb0a58e8f4668ae6e23488127e551" - integrity sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA== + version "4.21.9" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.9.tgz#e11bdd3c313d7e2a9e87e8b4b0c7872b13897635" + integrity sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg== dependencies: - caniuse-lite "^1.0.30001489" - electron-to-chromium "^1.4.411" + caniuse-lite "^1.0.30001503" + electron-to-chromium "^1.4.431" node-releases "^2.0.12" update-browserslist-db "^1.0.11" @@ -1055,10 +1803,10 @@ camelcase-css@^2.0.1: resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== -caniuse-lite@^1.0.30001406, caniuse-lite@^1.0.30001464, caniuse-lite@^1.0.30001489: - version "1.0.30001495" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001495.tgz#64a0ccef1911a9dcff647115b4430f8eff1ef2d9" - integrity sha512-F6x5IEuigtUfU5ZMQK2jsy5JqUUlEFRVZq8bO2a+ysq5K7jD6PPc9YXZj78xDNS3uNchesp1Jw47YXEqr+Viyg== +caniuse-lite@^1.0.30001406, caniuse-lite@^1.0.30001464, caniuse-lite@^1.0.30001503: + version "1.0.30001507" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001507.tgz#fae53f6286e7564783eadea9b447819410a59534" + integrity sha512-SFpUDoSLCaE5XYL2jfqe9ova/pbQHEmbheDf5r4diNwbAgR3qxM9NQtfsiSscjqoya5K7kFcHPUQ+VsUkIJR4A== chalk@^2.0.0, chalk@^2.4.1: version "2.4.2" @@ -1114,7 +1862,7 @@ cli-width@^3.0.0: resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== -client-only@0.0.1: +client-only@0.0.1, client-only@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1" integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA== @@ -1270,30 +2018,6 @@ dedent@0.7.0: resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== -deep-equal@^2.0.5: - version "2.2.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.1.tgz#c72ab22f3a7d3503a4ca87dde976fe9978816739" - integrity sha512-lKdkdV6EOGoVn65XaOsPdH4rMxTZOnmFyuIkMjM1i5HHCbfjC97dawgTAy0deYNfuqUqW+Q5VrVaQYtUpSd6yQ== - dependencies: - array-buffer-byte-length "^1.0.0" - call-bind "^1.0.2" - es-get-iterator "^1.1.3" - get-intrinsic "^1.2.0" - is-arguments "^1.1.1" - is-array-buffer "^3.0.2" - is-date-object "^1.0.5" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - isarray "^2.0.5" - object-is "^1.1.5" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.0" - side-channel "^1.0.4" - which-boxed-primitive "^1.0.2" - which-collection "^1.0.1" - which-typed-array "^1.1.9" - deep-is@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" @@ -1337,6 +2061,11 @@ define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: has-property-descriptors "^1.0.0" object-keys "^1.1.1" +dequal@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== + detect-file@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" @@ -1383,10 +2112,10 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -electron-to-chromium@^1.4.411: - version "1.4.425" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.425.tgz#399df13091b836d28283a545c25c8e4d9da86da8" - integrity sha512-wv1NufHxu11zfDbY4fglYQApMswleE9FL/DSeyOyauVXDZ+Kco96JK/tPfBUaDqfRarYp2WH2hJ/5UnVywp9Jg== +electron-to-chromium@^1.4.431: + version "1.4.440" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.440.tgz#d3b1eeb36b717eb479a240c0406ac1fa67901762" + integrity sha512-r6dCgNpRhPwiWlxbHzZQ/d9swfPaEJGi8ekqRBwQYaR3WmA5VkqQfBWSDDjuJU1ntO+W9tHx8OHV/96Q8e0dVw== emoji-regex@^8.0.0: version "8.0.0" @@ -1399,9 +2128,9 @@ emoji-regex@^9.2.2: integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== enhanced-resolve@^5.12.0: - version "5.14.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.14.1.tgz#de684b6803724477a4af5d74ccae5de52c25f6b3" - integrity sha512-Vklwq2vDKtl0y/vtwjSesgJ5MYS7Etuk5txS8VdKL4AOS1aUlD96zqIfsOSLQsdv3xgMRbtkWM8eG9XDfKUPow== + version "5.15.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35" + integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" @@ -1453,21 +2182,6 @@ es-abstract@^1.19.0, es-abstract@^1.20.4: unbox-primitive "^1.0.2" which-typed-array "^1.1.9" -es-get-iterator@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" - integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - has-symbols "^1.0.3" - is-arguments "^1.1.1" - is-map "^2.0.2" - is-set "^2.0.2" - is-string "^1.0.7" - isarray "^2.0.5" - stop-iteration-iterator "^1.0.0" - es-set-tostringtag@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" @@ -2043,9 +2757,9 @@ globby@^11.1.0: slash "^3.0.0" globby@^13.1.3: - version "13.1.4" - resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.4.tgz#2f91c116066bcec152465ba36e5caa4a13c01317" - integrity sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g== + version "13.2.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-13.2.0.tgz#7dd5678d765c4680c2e6d106230d86cb727cb1af" + integrity sha512-jWsQfayf13NvqKUIL3Ta+CIqMnvlaIDFveWE/dpOZ9+3AMEJozsxDvKA02zync9UuvOM8rOXzsD5GqKP4OnWPQ== dependencies: dir-glob "^3.0.1" fast-glob "^3.2.11" @@ -2202,7 +2916,7 @@ inquirer@8.2.5: through "^2.3.6" wrap-ansi "^7.0.0" -internal-slot@^1.0.3, internal-slot@^1.0.4, internal-slot@^1.0.5: +internal-slot@^1.0.3, internal-slot@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== @@ -2221,14 +2935,6 @@ intl-messageformat@^10.1.0: "@formatjs/icu-messageformat-parser" "2.6.0" tslib "^2.4.0" -is-arguments@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" @@ -2277,7 +2983,7 @@ is-core-module@^2.11.0, is-core-module@^2.9.0: dependencies: has "^1.0.3" -is-date-object@^1.0.1, is-date-object@^1.0.5: +is-date-object@^1.0.1: version "1.0.5" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== @@ -2323,11 +3029,6 @@ is-interactive@^1.0.0: resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== -is-map@^2.0.1, is-map@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" - integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== - is-negative-zero@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" @@ -2358,11 +3059,6 @@ is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-set@^2.0.1, is-set@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" - integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== - is-shared-array-buffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" @@ -2415,11 +3111,6 @@ is-utf8@^0.2.1: resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" integrity sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q== -is-weakmap@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" - integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== - is-weakref@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" @@ -2427,14 +3118,6 @@ is-weakref@^1.0.2: dependencies: call-bind "^1.0.2" -is-weakset@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" - integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - is-windows@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -2447,11 +3130,6 @@ is-wsl@^2.2.0: dependencies: is-docker "^2.0.0" -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -2768,14 +3446,6 @@ object-inspect@^1.12.3, object-inspect@^1.9.0: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== -object-is@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" - integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" @@ -2971,9 +3641,9 @@ pify@^2.3.0: integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== pirates@^4.0.1: - version "4.0.5" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" - integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== + version "4.0.6" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" + integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== postcss-import@^15.1.0: version "15.1.0" @@ -3061,6 +3731,48 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== +react-aria@^3.25.0: + version "3.25.0" + resolved "https://registry.yarnpkg.com/react-aria/-/react-aria-3.25.0.tgz#d51d4ba87a97f6d366b9a3a4bd59461d5c9925b3" + integrity sha512-nvahN6tUCnES9CXCKEzEHkWy7mH39KsQoCk6eehIT3eG1pw/eYUqXFAmmWIL3g2VDCiGavpSf1/BUTnAXE2VsQ== + dependencies: + "@react-aria/breadcrumbs" "^3.5.2" + "@react-aria/button" "^3.7.2" + "@react-aria/calendar" "^3.3.0" + "@react-aria/checkbox" "^3.9.1" + "@react-aria/combobox" "^3.6.1" + "@react-aria/datepicker" "^3.4.1" + "@react-aria/dialog" "^3.5.2" + "@react-aria/dnd" "^3.2.1" + "@react-aria/focus" "^3.12.1" + "@react-aria/gridlist" "^3.4.0" + "@react-aria/i18n" "^3.7.2" + "@react-aria/interactions" "^3.15.1" + "@react-aria/label" "^3.5.2" + "@react-aria/link" "^3.5.1" + "@react-aria/listbox" "^3.9.1" + "@react-aria/menu" "^3.9.1" + "@react-aria/meter" "^3.4.2" + "@react-aria/numberfield" "^3.5.1" + "@react-aria/overlays" "^3.14.1" + "@react-aria/progress" "^3.4.2" + "@react-aria/radio" "^3.6.1" + "@react-aria/searchfield" "^3.5.2" + "@react-aria/select" "^3.10.1" + "@react-aria/selection" "^3.15.0" + "@react-aria/separator" "^3.3.2" + "@react-aria/slider" "^3.4.1" + "@react-aria/ssr" "^3.6.0" + "@react-aria/switch" "^3.5.1" + "@react-aria/table" "^3.9.1" + "@react-aria/tabs" "^3.6.0" + "@react-aria/tag" "^3.0.0" + "@react-aria/textfield" "^3.9.2" + "@react-aria/tooltip" "^3.5.1" + "@react-aria/utils" "^3.17.0" + "@react-aria/visually-hidden" "^3.8.1" + "@react-types/shared" "^3.18.1" + react-dom@18.2.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" @@ -3074,6 +3786,34 @@ react-is@^16.13.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== +react-stately@^3.23.0: + version "3.23.0" + resolved "https://registry.yarnpkg.com/react-stately/-/react-stately-3.23.0.tgz#9f0ebfce512ab1d65fd8e50dbd3aaae4a3dcd7be" + integrity sha512-nk2ihInebz5s+eDcXeEL+e2AbP9g0Mp9Gx5GEgqfICc8CKoYWERQsukXphGc6WEvFpAjVde7Q33hqusIqAO5gA== + dependencies: + "@react-stately/calendar" "^3.2.1" + "@react-stately/checkbox" "^3.4.2" + "@react-stately/collections" "^3.8.0" + "@react-stately/combobox" "^3.5.1" + "@react-stately/data" "^3.9.2" + "@react-stately/datepicker" "^3.4.1" + "@react-stately/dnd" "^3.2.1" + "@react-stately/list" "^3.8.1" + "@react-stately/menu" "^3.5.2" + "@react-stately/numberfield" "^3.4.2" + "@react-stately/overlays" "^3.5.2" + "@react-stately/radio" "^3.8.1" + "@react-stately/searchfield" "^3.4.2" + "@react-stately/select" "^3.5.1" + "@react-stately/selection" "^3.13.1" + "@react-stately/slider" "^3.3.2" + "@react-stately/table" "^3.9.1" + "@react-stately/tabs" "^3.4.1" + "@react-stately/toggle" "^3.5.2" + "@react-stately/tooltip" "^3.4.1" + "@react-stately/tree" "^3.6.1" + "@react-types/shared" "^3.18.1" + react@18.2.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" @@ -3109,7 +3849,7 @@ regenerator-runtime@^0.13.11: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== -regexp.prototype.flags@^1.4.3, regexp.prototype.flags@^1.5.0: +regexp.prototype.flags@^1.4.3: version "1.5.0" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== @@ -3249,9 +3989,9 @@ semver@^6.3.0: integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== semver@^7.3.7: - version "7.5.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.1.tgz#c90c4d631cf74720e46b21c1d37ea07edfab91ec" - integrity sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw== + version "7.5.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e" + integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== dependencies: lru-cache "^6.0.0" @@ -3296,13 +4036,6 @@ source-map-js@^1.0.2: resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== -stop-iteration-iterator@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4" - integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ== - dependencies: - internal-slot "^1.0.4" - streamsearch@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" @@ -3666,16 +4399,6 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-collection@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" - integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== - dependencies: - is-map "^2.0.1" - is-set "^2.0.1" - is-weakmap "^2.0.1" - is-weakset "^2.0.1" - which-typed-array@^1.1.9: version "1.1.9" resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" From 09d3ffc493d3e90becb65073e3f110e15264dd88 Mon Sep 17 00:00:00 2001 From: youngeun Date: Mon, 26 Jun 2023 10:13:55 +0900 Subject: [PATCH 15/76] =?UTF-8?q?feat:=20assetData=20,setAssetData=20=20?= =?UTF-8?q?=EB=A9=94=EC=9D=B8=20=ED=85=8C=EC=9D=B4=EB=B8=94=20=EC=BB=B4?= =?UTF-8?q?=ED=8F=AC=EB=84=8C=ED=8A=B8=EC=97=90=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Table/TableContainer/index.tsx | 37 +++++++++++++++++++ src/components/Table/TableItem/index.tsx | 28 ++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 src/components/Table/TableContainer/index.tsx create mode 100644 src/components/Table/TableItem/index.tsx diff --git a/src/components/Table/TableContainer/index.tsx b/src/components/Table/TableContainer/index.tsx new file mode 100644 index 0000000..56c505d --- /dev/null +++ b/src/components/Table/TableContainer/index.tsx @@ -0,0 +1,37 @@ +"use client" +import React, { useState, ReactNode,Children, cloneElement, ReactElement } from 'react' + +interface TableContainerProps { + children: ReactElement[] +} + +export default function TableContainer({children}:TableContainerProps) { + const [assetdata, setAssetdata] = useState({ + assetId: 1, + assetName: "", + price: "", + fileSize: 0, + fileUrl: "", + creator: "", + assetDetail:"", + tagList: [], + thumbnail:"", + detailImages:[] + }) + + return ( +
      + { + Children.map(children,(child,index)=> { + return cloneElement(child,{ + key: index, + assetdata: assetdata, + setAssetdata: setAssetdata + }) + }) + } +
    + + + ) +} diff --git a/src/components/Table/TableItem/index.tsx b/src/components/Table/TableItem/index.tsx new file mode 100644 index 0000000..f4ec0be --- /dev/null +++ b/src/components/Table/TableItem/index.tsx @@ -0,0 +1,28 @@ +import React, { Children,cloneElement} from 'react' + +interface TableItemProps { + title: string, + required: boolean, + assetdata?:object, + setAssetdata?: Function, + children: any, +} + + +export default function TableItem({children, title, required, assetdata, setAssetdata}:TableItemProps) { + return ( +
  • +
    + {title} + {required && } +
    +
    + {Children.map(children,(child,index)=> {return cloneElement(child, { + key: index, + 'assetdata': assetdata, + 'setAssetdata':setAssetdata, + })})} +
    +
  • + ) +} From bfae67bfa0e966ed88c3f5a458d0c0d1d44245d8 Mon Sep 17 00:00:00 2001 From: youngeun Date: Mon, 26 Jun 2023 16:07:33 +0900 Subject: [PATCH 16/76] =?UTF-8?q?fix:=20=EC=97=90=EB=9F=AC=20=EC=A3=BC?= =?UTF-8?q?=EC=84=9D=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/assets/[assetId]/page.tsx | 2 +- src/app/assets/page.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/assets/[assetId]/page.tsx b/src/app/assets/[assetId]/page.tsx index 176fd4b..268d137 100644 --- a/src/app/assets/[assetId]/page.tsx +++ b/src/app/assets/[assetId]/page.tsx @@ -72,7 +72,7 @@ const categoryList = [
    -

    선택한 카테고리:{highCategory} > {selectedCategory.subCategory ? selectedCategory.subCategory : '' }

    + {/*

    선택한 카테고리:{highCategory} > {selectedCategory.subCategory ? selectedCategory.subCategory : '' }

    */}
    diff --git a/src/app/assets/page.tsx b/src/app/assets/page.tsx index 13f5ed2..b82c04c 100644 --- a/src/app/assets/page.tsx +++ b/src/app/assets/page.tsx @@ -54,7 +54,7 @@ export default function AssetsPage() {
    - {/* */} + From 254f9428bda765854c0bc00b25da29b60ac97673 Mon Sep 17 00:00:00 2001 From: youngeun Date: Wed, 28 Jun 2023 04:50:28 +0900 Subject: [PATCH 17/76] =?UTF-8?q?config:=20=EB=9D=BC=EC=9D=B4=EB=B8=8C?= =?UTF-8?q?=EB=9F=AC=EB=A6=AC=20=EC=84=A4=EC=B9=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 1 + yarn.lock | 34 +++++++++++++++++++++++++++++++++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index c042d84..a5bbf96 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ }, "dependencies": { "@headlessui/react": "^1.7.15", + "@reduxjs/toolkit": "^1.9.5", "@types/node": "20.2.5", "@types/react": "18.2.9", "@types/react-dom": "18.2.4", diff --git a/yarn.lock b/yarn.lock index e093d90..0a3781d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -28,7 +28,7 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/runtime@^7.20.7": +"@babel/runtime@^7.20.7", "@babel/runtime@^7.9.2": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.5.tgz#8564dd588182ce0047d55d7a75e93921107b57ec" integrity sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA== @@ -1374,6 +1374,16 @@ "@react-types/overlays" "^3.7.2" "@react-types/shared" "^3.18.1" +"@reduxjs/toolkit@^1.9.5": + version "1.9.5" + resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-1.9.5.tgz#d3987849c24189ca483baa7aa59386c8e52077c4" + integrity sha512-Rt97jHmfTeaxL4swLRNPD/zV4OxTes4la07Xc4hetpUW/vc75t5m1ANyxG6ymnEQ2FsLQsoMlYB2vV1sO3m8tQ== + dependencies: + immer "^9.0.21" + redux "^4.2.1" + redux-thunk "^2.4.2" + reselect "^4.1.8" + "@rushstack/eslint-patch@^1.1.3": version "1.3.2" resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.3.2.tgz#31b9c510d8cada9683549e1dbb4284cca5001faf" @@ -2864,6 +2874,11 @@ ignore@^5.2.0: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== +immer@^9.0.21: + version "9.0.21" + resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.21.tgz#1e025ea31a40f24fb064f1fef23e931496330176" + integrity sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA== + import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" @@ -3854,6 +3869,18 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" +redux-thunk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.4.2.tgz#b9d05d11994b99f7a91ea223e8b04cf0afa5ef3b" + integrity sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q== + +redux@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/redux/-/redux-4.2.1.tgz#c08f4306826c49b5e9dc901dee0452ea8fce6197" + integrity sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w== + dependencies: + "@babel/runtime" "^7.9.2" + regenerator-runtime@^0.13.11: version "0.13.11" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" @@ -3873,6 +3900,11 @@ require-from-string@^2.0.2: resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== +reselect@^4.1.8: + version "4.1.8" + resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.8.tgz#3f5dc671ea168dccdeb3e141236f69f02eaec524" + integrity sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ== + resolve-dir@^1.0.0, resolve-dir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" From 8eab828d1c128d6bbb9964f13d49c12af6806135 Mon Sep 17 00:00:00 2001 From: youngeun Date: Wed, 28 Jun 2023 04:51:51 +0900 Subject: [PATCH 18/76] =?UTF-8?q?refactor:=20=ED=83=80=EC=9E=85=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/tag/TagChip.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/tag/TagChip.tsx b/src/components/tag/TagChip.tsx index 8b86004..e9dcd97 100644 --- a/src/components/tag/TagChip.tsx +++ b/src/components/tag/TagChip.tsx @@ -7,7 +7,7 @@ interface TagChipProps { } export default function TagChip({children,arr, setArr}:TagChipProps) { - const tagRef = useRef(null) + const tagRef = useRef(null) const deleteTagHandler = () => { const newArr = arr.filter((item)=>item !== tagRef.current.innerHTML) setArr(newArr) From 3931cd207bb55003332571f1b74f072b1a218d2e Mon Sep 17 00:00:00 2001 From: youngeun Date: Wed, 28 Jun 2023 04:52:21 +0900 Subject: [PATCH 19/76] =?UTF-8?q?refactor:=20=EC=9D=B4=EB=B2=A4=ED=8A=B8?= =?UTF-8?q?=ED=95=B8=EB=93=A4=EB=9F=AC=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Input/TextInput.tsx | 37 ++++++++++++++---------------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/src/components/Input/TextInput.tsx b/src/components/Input/TextInput.tsx index bd94b4a..15325cb 100644 --- a/src/components/Input/TextInput.tsx +++ b/src/components/Input/TextInput.tsx @@ -9,40 +9,37 @@ interface TextInputProps { inputValue?:string, counter?: number, disabled?:boolean, - assetdata?:object, - setAssetdata?: Function + doesEnterWork?: boolean } -export default function TextInput({type='input' ,width, height=4.2, placeholder, inputValue,counter, disabled=false, assetdata, setAssetdata}:TextInputProps) { +export default function TextInput({type='input' ,width, height=4.2, placeholder, inputValue,counter, disabled=false, doesEnterWork=false}:TextInputProps) { const inputRef = useRef(null); - const [inputLength, setInputLength] = useState(inputValue?.length) + const [inputLength, setInputLength] = useState(inputValue?.length) - const handlerSubmit = (e: FormEvent) => { - e.preventDefault() - } - const handlerCountInput = (e:ChangeEvent) => { + const handlerKeyDown = (e:KeyboardEvent) => { + if(e.key==='Enter'){ + console.log('form') + } else { setInputLength(e.target.value.length) + } } - // const textLength = inputRef.current.value.length return ( <> {type === 'input' ? ( -
    - +
    +
    {counter &&

    {inputLength} / {counter}

    } -
    - - ) : ( - - )} +
    + ) + : + ( + + ) + } ) } From db0f349e98f1bcd9d74e1c308b1e0f6de6ef886c Mon Sep 17 00:00:00 2001 From: youngeun Date: Wed, 28 Jun 2023 04:52:59 +0900 Subject: [PATCH 20/76] =?UTF-8?q?feat:=20=EC=95=88=EC=93=B0=EB=8A=94=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20disabled=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/page.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/app/page.tsx b/src/app/page.tsx index 2a00c79..0236373 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -66,8 +66,8 @@ export default function Home() {
    - -
    %
    + +
    %

    할인

    @@ -96,7 +96,7 @@ export default function Home() {
    - + From 0f48316a76f1c861aaf54694213ea89b457f8852 Mon Sep 17 00:00:00 2001 From: youngeun Date: Sat, 1 Jul 2023 23:50:14 +0900 Subject: [PATCH 21/76] =?UTF-8?q?config:=20=EB=9D=BC=EC=9D=B4=EB=B8=8C?= =?UTF-8?q?=EB=9F=AC=EB=A6=AC=20=EC=84=A4=EC=B9=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 3 ++ yarn.lock | 127 ++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 128 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index a5bbf96..f8b3fab 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,9 @@ "@types/react": "18.2.9", "@types/react-dom": "18.2.4", "autoprefixer": "10.4.14", + "axios": "^1.4.0", "commitizen": "^4.3.0", + "cookies-next": "^2.1.2", "eslint": "8.42.0", "eslint-config-next": "13.4.4", "next": "13.4.4", @@ -24,6 +26,7 @@ "react": "18.2.0", "react-aria": "^3.25.0", "react-dom": "18.2.0", + "react-redux": "^8.1.1", "react-stately": "^3.23.0", "tailwindcss": "3.3.2", "typescript": "5.1.3" diff --git a/yarn.lock b/yarn.lock index 0a3781d..4839d02 100644 --- a/yarn.lock +++ b/yarn.lock @@ -28,7 +28,7 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/runtime@^7.20.7", "@babel/runtime@^7.9.2": +"@babel/runtime@^7.12.1", "@babel/runtime@^7.20.7", "@babel/runtime@^7.9.2": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.5.tgz#8564dd588182ce0047d55d7a75e93921107b57ec" integrity sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA== @@ -1423,6 +1423,19 @@ resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== +"@types/cookie@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.1.tgz#bfd02c1f2224567676c1545199f87c3a861d878d" + integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== + +"@types/hoist-non-react-statics@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" + integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA== + dependencies: + "@types/react" "*" + hoist-non-react-statics "^3.3.0" + "@types/json5@^0.0.29": version "0.0.29" resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" @@ -1438,6 +1451,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-20.2.5.tgz#26d295f3570323b2837d322180dfbf1ba156fefb" integrity sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ== +"@types/node@^16.10.2": + version "16.18.37" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.37.tgz#a1f8728e4dc30163deb41e9b7aba65d0c2d4eda1" + integrity sha512-ql+4dw4PlPFBP495k8JzUX/oMNRI2Ei4PrMHgj8oT4VhGlYUzF4EYr0qk2fW+XBVGIrq8Zzk13m4cvyXZuv4pA== + "@types/prop-types@*": version "15.7.5" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" @@ -1473,6 +1491,11 @@ resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.3.tgz#cef09e3ec9af1d63d2a6cc5b383a737e24e6dcf5" integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ== +"@types/use-sync-external-store@^0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz#b6725d5f4af24ace33b36fafd295136e75509f43" + integrity sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA== + "@typescript-eslint/parser@^5.42.0": version "5.60.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.60.0.tgz#08f4daf5fc6548784513524f4f2f359cebb4068a" @@ -1673,6 +1696,11 @@ ast-types-flow@^0.0.7: resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + at-least-node@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" @@ -1700,6 +1728,15 @@ axe-core@^4.6.2: resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.2.tgz#040a7342b20765cb18bb50b628394c21bccc17a0" integrity sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g== +axios@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.4.0.tgz#38a7bf1224cd308de271146038b551d725f0be1f" + integrity sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA== + dependencies: + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + axobject-query@^3.1.1: version "3.2.1" resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.2.1.tgz#39c378a6e3b06ca679f29138151e45b2b32da62a" @@ -1911,6 +1948,13 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + commander@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" @@ -1946,6 +1990,20 @@ conventional-commit-types@^3.0.0: resolved "https://registry.yarnpkg.com/conventional-commit-types/-/conventional-commit-types-3.0.0.tgz#7c9214e58eae93e85dd66dbfbafe7e4fffa2365b" integrity sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg== +cookie@^0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + +cookies-next@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/cookies-next/-/cookies-next-2.1.2.tgz#78fe2f3e7b68eb0e1c6682c9e1f4e94ce4d09904" + integrity sha512-czxcfqVaQlo0Q/3xMgp/2jpspsuLJrIm6D37wlmibP3DAcYT315c8UxQmDMohhAT/GRWpaHzpDEFANBjzTFQGg== + dependencies: + "@types/cookie" "^0.4.1" + "@types/node" "^16.10.2" + cookie "^0.4.0" + cosmiconfig-typescript-loader@^4.0.0: version "4.3.0" resolved "https://registry.yarnpkg.com/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.3.0.tgz#c4259ce474c9df0f32274ed162c0447c951ef073" @@ -2071,6 +2129,11 @@ define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: has-property-descriptors "^1.0.0" object-keys "^1.1.1" +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + dequal@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" @@ -2581,6 +2644,11 @@ flatted@^3.1.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== +follow-redirects@^1.15.0: + version "1.15.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== + for-each@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" @@ -2588,6 +2656,15 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + fraction.js@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950" @@ -2840,6 +2917,13 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" +hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + homedir-polyfill@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" @@ -3333,6 +3417,18 @@ micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: braces "^3.0.2" picomatch "^2.3.1" +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" @@ -3746,6 +3842,11 @@ prop-types@^15.8.1: object-assign "^4.1.1" react-is "^16.13.1" +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + punycode@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" @@ -3806,11 +3907,28 @@ react-dom@18.2.0: loose-envify "^1.1.0" scheduler "^0.23.0" -react-is@^16.13.1: +react-is@^16.13.1, react-is@^16.7.0: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + +react-redux@^8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-8.1.1.tgz#8e740f3fd864a4cd0de5ba9cdc8ad39cc9e7c81a" + integrity sha512-5W0QaKtEhj+3bC0Nj0NkqkhIv8gLADH/2kYFMTHxCVqQILiWzLv6MaLuV5wJU3BQEdHKzTfcvPN0WMS6SC1oyA== + dependencies: + "@babel/runtime" "^7.12.1" + "@types/hoist-non-react-statics" "^3.3.1" + "@types/use-sync-external-store" "^0.0.3" + hoist-non-react-statics "^3.3.2" + react-is "^18.0.0" + use-sync-external-store "^1.0.0" + react-stately@^3.23.0: version "3.23.0" resolved "https://registry.yarnpkg.com/react-stately/-/react-stately-3.23.0.tgz#9f0ebfce512ab1d65fd8e50dbd3aaae4a3dcd7be" @@ -4413,6 +4531,11 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" +use-sync-external-store@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" + integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== + util-deprecate@^1.0.1, util-deprecate@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" From a19c56e2a4dd20bb991bca8d0ad2b4f952d3f48a Mon Sep 17 00:00:00 2001 From: youngeun Date: Sat, 1 Jul 2023 23:51:25 +0900 Subject: [PATCH 22/76] =?UTF-8?q?feat:=20redux=20=EC=84=B8=ED=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/store/Provider.tsx | 8 ++++++++ src/store/assetSlice.ts | 32 ++++++++++++++++++++++++++++++++ src/store/categorySlice.ts | 20 ++++++++++++++++++++ src/store/store.ts | 12 ++++++++++++ 4 files changed, 72 insertions(+) create mode 100644 src/store/Provider.tsx create mode 100644 src/store/assetSlice.ts create mode 100644 src/store/categorySlice.ts create mode 100644 src/store/store.ts diff --git a/src/store/Provider.tsx b/src/store/Provider.tsx new file mode 100644 index 0000000..3ac1571 --- /dev/null +++ b/src/store/Provider.tsx @@ -0,0 +1,8 @@ +"use client"; + +import { Provider } from "react-redux"; +import { store } from "./store"; + +export function ReduxProviders({ children }: any) { + return {children}; +} diff --git a/src/store/assetSlice.ts b/src/store/assetSlice.ts new file mode 100644 index 0000000..3346ab7 --- /dev/null +++ b/src/store/assetSlice.ts @@ -0,0 +1,32 @@ +import { createSlice } from "@reduxjs/toolkit"; + + + +const assetSlice = createSlice({ + name: 'asset', + initialState: { + asset : { + assetName: '', + assetDescription: '', + price: 0, + discount: 0, + category: '', + subCategory: '', + addTagList: [], + fileUrl: '', + fileSize: 0, + extension: '', + thumbnailUrl: '', + previewUrlList: [], + }, + }, + reducers: { + createAsset: (state,action) => { + state.asset = action.payload + }, + + } +}) + +export const {} = assetSlice.actions +export default assetSlice.reducer \ No newline at end of file diff --git a/src/store/categorySlice.ts b/src/store/categorySlice.ts new file mode 100644 index 0000000..67d7516 --- /dev/null +++ b/src/store/categorySlice.ts @@ -0,0 +1,20 @@ +import { createSlice } from "@reduxjs/toolkit"; + +const categorySlice = createSlice({ + name: 'category', + initialState: { + main: '대분류', + sub: '소분류' + }, + reducers: { + clickMain: (state, action) => { + state.main = action.payload + }, + clickSub : (state, action) => { + state.sub = action.payload + } + } +}) + +export const {} = categorySlice.actions +export default categorySlice.reducer \ No newline at end of file diff --git a/src/store/store.ts b/src/store/store.ts new file mode 100644 index 0000000..d66d00f --- /dev/null +++ b/src/store/store.ts @@ -0,0 +1,12 @@ +import { configureStore } from '@reduxjs/toolkit' +import categoryReducer from './categorySlice' + + +export const store = configureStore({ + reducer: { + category: categoryReducer, + }, +}) + +export type RootState = ReturnType +export type AppDispatch = typeof store.dispatch From 3415b4443b6298f6fa37a86dd43d54978cf1ed81 Mon Sep 17 00:00:00 2001 From: youngeun Date: Sat, 1 Jul 2023 23:53:09 +0900 Subject: [PATCH 23/76] =?UTF-8?q?feat:=20axoios=20=EC=84=A4=EC=A0=95=20?= =?UTF-8?q?=EB=B0=8F=20api=20interfaces,=20=ED=95=A8=EC=88=98=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/axios.ts | 23 +++++++++++++ src/api/interface/asset.ts | 62 +++++++++++++++++++++++++++++++++++ src/api/interface/category.ts | 12 +++++++ src/api/interface/index.ts | 8 +++++ src/api/service/asset.ts | 27 +++++++++++++++ src/api/service/category.ts | 15 +++++++++ 6 files changed, 147 insertions(+) create mode 100644 src/api/axios.ts create mode 100644 src/api/interface/asset.ts create mode 100644 src/api/interface/category.ts create mode 100644 src/api/interface/index.ts create mode 100644 src/api/service/asset.ts create mode 100644 src/api/service/category.ts diff --git a/src/api/axios.ts b/src/api/axios.ts new file mode 100644 index 0000000..d7df306 --- /dev/null +++ b/src/api/axios.ts @@ -0,0 +1,23 @@ +import { getToken } from '@/utils/token' +// import axios, { AxiosRequestConfig, AxiosError } from './axios' +import axios from 'axios' +export const axiosInstance = axios.create({ + baseURL: process.env.NEXT_PUBLIC_BASE_URL, + headers: { + 'Content-Type': 'application/json', + Authorization: `eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJqd3RzdHVkeSIsInJvbGUiOiJBRE1JTiIsImlkIjo4LCJleHAiOjE2ODgyNjgwOTV9.stVJr0feAFnepSo7_Jjs_yA-diD4DK8tShHAaomOi2cN64JKdWxnVrMzCIxpA5oebw0-8XYjlYEQuWx99ZS1iA`, + }, +}) + +// axiosInstance.interceptors.request.use( +// (request) => { +// const accessToken = getToken() + +// if (accessToken) request.headers['Authorization'] = `Bearer ${accessToken}` +// return request +// }, +// (error: AxiosError) => { +// console.log(error) +// return Promise.reject(error) +// }, +// ) diff --git a/src/api/interface/asset.ts b/src/api/interface/asset.ts new file mode 100644 index 0000000..bfe46ed --- /dev/null +++ b/src/api/interface/asset.ts @@ -0,0 +1,62 @@ +import { ApiResponse} from './' + +export interface AssetDetail { + assetId: number + assetName: string + price: number + description: string + discount: number + discountPrice: number + extension: string + fileSize: number + fileUrl: string + creator: string + rating: number + reviewCount: number + wishCount: number + visitCount: number + wishlistId: null + previewList: string[] + tagList: string[] +} + +export interface AssetUploadRequest { + assetName: string + assetDescription: string + price: number + discount: number + category: string + subCategory: string + addTagList: string[] + fileUrl: string + fileSize: number + extension: string + thumbnailUrl: string + previewUrlList: string[] +} +export interface AssetEditRequest { + assetId: number + assetName?: string + assetContent?: string + price?: number + assetDiscount?: number + category?: string + subCategory?: string + deleteTag: string[] | null + addTag?: string[] + fileUrl?: string + thumbnailUrl?: string + previewUrl?: string[] +} + +export interface AssetInactiveRequest { + assets: number[] +} +export interface AssetActiveRequest { + assets: number[] +} + + + +export type AssetDetailResponse = ApiResponse + diff --git a/src/api/interface/category.ts b/src/api/interface/category.ts new file mode 100644 index 0000000..fb56c80 --- /dev/null +++ b/src/api/interface/category.ts @@ -0,0 +1,12 @@ +interface Category { + id: number + categoryName: string + subCategory?: SubCategory[] +} +interface SubCategory { + id: number + subCategoryName: string +} +interface CategoryList { + categoryList: Category[] +} \ No newline at end of file diff --git a/src/api/interface/index.ts b/src/api/interface/index.ts new file mode 100644 index 0000000..48fef1b --- /dev/null +++ b/src/api/interface/index.ts @@ -0,0 +1,8 @@ +export interface ApiResponse { + status: number + msg: string + data: T + headers?: { + authorization: string + } +} diff --git a/src/api/service/asset.ts b/src/api/service/asset.ts new file mode 100644 index 0000000..d3f9765 --- /dev/null +++ b/src/api/service/asset.ts @@ -0,0 +1,27 @@ +import { axiosInstance } from "../axios" +import { AssetDetailResponse, AssetResponse } from '../interface/asset' + +//에셋 전체보기 +export const getAssets = async (page: number): Promise => { + const res = await axiosInstance.get(`/assets?page=${page}`) + return res.data +} + +//에셋 상세보기 +export const getAssetDetail = async (id: number): Promise => { + const res = await axiosInstance.get(`/assets/${id}/details`) + return res.data +} +export const uploadAsset = async(): Promise => { + const res = await axiosInstance.post('/s/admin/asset') +} +export const editAsset = async(assetData): Promise => { + const res = await axiosInstance.post('/s/admin/asset/update', assetData + ) +} +export const inactivateAsset = async(): Promise => { + +} +export const activateAsset = async(): Promise => { + +} \ No newline at end of file diff --git a/src/api/service/category.ts b/src/api/service/category.ts new file mode 100644 index 0000000..b53afc4 --- /dev/null +++ b/src/api/service/category.ts @@ -0,0 +1,15 @@ +import { axiosInstance } from "../axios" + +//카테고리 리스트 조회 +export const getFullCategoryList = async () => { + const res = await axiosInstance.get('s/admin/category') + console.log(res) + return res.data +} + +//서브 카테고리 리스트 조회 +export const getSubCategoryList = async (categoryName:string) => { + const res = await axiosInstance.get(`s/admin/${categoryName}/subcategory`) + console.log(res) + return res.data + } \ No newline at end of file From 9d287b40d85d12d9b0e9f61d235cfc203800e02c Mon Sep 17 00:00:00 2001 From: youngeun Date: Sat, 1 Jul 2023 23:56:14 +0900 Subject: [PATCH 24/76] delete --- src/app/assets/[assetId]/page.tsx | 229 +++++++++--------- src/app/assets/page.tsx | 30 +-- src/app/layout.tsx | 18 +- src/app/page.tsx | 202 +++++++-------- src/components/Button/index.tsx | 5 +- src/components/Select/SelectContainer.tsx | 117 ++++++--- src/components/Table/TableContainer/index.tsx | 17 +- src/components/Table/TableItem/index.tsx | 10 +- 8 files changed, 333 insertions(+), 295 deletions(-) diff --git a/src/app/assets/[assetId]/page.tsx b/src/app/assets/[assetId]/page.tsx index 268d137..55f75b6 100644 --- a/src/app/assets/[assetId]/page.tsx +++ b/src/app/assets/[assetId]/page.tsx @@ -13,121 +13,130 @@ import TagsContainer from '@/components/Tag/TagsContainer' import SelectContainer from '@/components/Select/SelectContainer' export default function AssetIdPage() { - const data = { - "assetId": 1, - "assetName": "Sensual dance_F", - "price": "7200.0", - "fileSize": 5.12, - "fileUrl": "url", - "creator": "NationA", - "rating": 4.3, - "reviewCount": 1483, - "wishCount": 8743, - "visitCount": 35477, - "wishlistId": 1, - "tagList": [ - "tag1", - "tag2", - "tag3" - ] -} -const categoryList = [ - { - "id": 1, - "categoryName": "cute" - }, - { - "id": 2, - "categoryName": "pretty" - }, - { - "id": 3, - "categoryName": "sexy" - }, - { - "id": 4, - "categoryName": "luxury" - }, - { - "id": 5, - "categoryName":"cool" - }, -]; - + const data = { + assetId: 1, + assetName: 'Sensual dance_F', + price: '7200.0', + fileSize: 5.12, + fileUrl: 'url', + creator: 'NationA', + rating: 4.3, + reviewCount: 1483, + wishCount: 8743, + visitCount: 35477, + wishlistId: 1, + tagList: ['tag1', 'tag2', 'tag3'], + } - const [selectedCategory, setSelectedCategory] = useState(categoryList[0]) + const [selectedCategory, setSelectedCategory] = useState(categoryList[0]) - return ( - <> -
    -
    -
    - - - - -

    파일은 fbx 포맷 (최대 10MB)만 업로드 가능합니다.

    -
    -
    - - - {/*

    선택한 카테고리:{highCategory} > {selectedCategory.subCategory ? selectedCategory.subCategory : '' }

    */} -
    - - - - -
    - -

    -
    -
    - -
    -
    - -
    %
    -

    할인

    + return ( + <> +
    +
    +
    + + + + +

    + 파일은 fbx 포맷 (최대 10MB)만 업로드 가능합니다. +

    +
    +
    + + + {/*

    선택한 카테고리:{highCategory} > {selectedCategory.subCategory ? selectedCategory.subCategory : '' }

    */} +
    + + + + +
    + +

    - -
    -
    -

    최종판매가

    -

    {'-'}({'-'}원 할인)

    + + +
    +
    + +
    + % +
    +

    할인

    +
    + +
    +
    +

    최종판매가

    +

    + {'-'}({'-'}원 할인) +

    +
    -
    - - - - - - - - - - - -

    전체 에셋 리스트 페이지에서 보여지는 대표 썸네일 이미지입니다.
    권장크기: 214 x 266
    jpg, jpeg, gif, png, bmp 형식의 이미지 (최대 10MB)만 등록 가능합니다.

    -
    - -
    -
    - - - - - -
    -

    상세 페이지 최상단에 보여지는 이미지입니다. 최대 5장까지 등록 가능합니다.
    권장 크기: 710 x 520
    jpg, jpeg, gif, png, bmp 형식의 이미지 (최대 10MB)만 등록 가능합니다.

    + + + + + + + + + + + +

    + 전체 에셋 리스트 페이지에서 보여지는 대표 썸네일 이미지입니다. +
    + 권장크기: 214 x 266 +
    + jpg, jpeg, gif, png, bmp 형식의 이미지 (최대 10MB)만 등록 가능합니다. +

    +
    + +
    +
    + + + + + +
    +

    + 상세 페이지 최상단에 보여지는 이미지입니다. 최대 5장까지 등록 가능합니다. +
    + 권장 크기: 710 x 520 +
    + jpg, jpeg, gif, png, bmp 형식의 이미지 (최대 10MB)만 등록 가능합니다. +

    +
    +
    + +
    + +
    - - -
    - - -
    - - ) + + + ) } diff --git a/src/app/assets/page.tsx b/src/app/assets/page.tsx index d088d6c..fbc51bd 100644 --- a/src/app/assets/page.tsx +++ b/src/app/assets/page.tsx @@ -11,35 +11,13 @@ import Button from '@/components/Button' import Divider from '@/components/Divider' import RadioGroup from '@/components/Radio/RadioGroup' import SelectContainer from '@/components/Select/SelectContainer' +import { SSRProvider } from 'react-aria' -const categoryList = [ - { - "id": 1, - "categoryName": "cute" - }, - { - "id": 2, - "categoryName": "pretty" - }, - { - "id": 3, - "categoryName": "sexy" - }, - { - "id": 4, - "categoryName": "luxury" - }, - { - "id": 5, - "categoryName":"cool" - }, -]; - export default function AssetsPage() { return ( - <> +
    @@ -65,7 +43,7 @@ export default function AssetsPage() {
    - + @@ -108,6 +86,6 @@ export default function AssetsPage() {
    - + ) } diff --git a/src/app/layout.tsx b/src/app/layout.tsx index a128671..de9e2d4 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,10 +1,10 @@ -"use client" import SideNav from '@/components/SideNav' import '@/styles/globals.css' import { Inter } from 'next/font/google' -import {SSRProvider} from 'react-aria'; -const inter = Inter({ subsets: ['latin'] }) +import { Provider } from 'react-redux' +import { store } from '@/store/store' +const inter = Inter({ subsets: ['latin'] }) export const metadata = { title: 'NeuroidAsset-BO', @@ -14,14 +14,16 @@ export const metadata = { export default function RootLayout({ children }: { children: React.ReactNode }) { return ( - - + +
    -
    {children}
    +
    + {children} +
    - -
    + + ) } diff --git a/src/app/page.tsx b/src/app/page.tsx index 0236373..343526c 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,3 +1,5 @@ +import { useDispatch } from 'react-redux' + import Header from '@/components/Header/Index' import Body from '@/components/Body' import TableContainer from '@/components/Table/TableContainer' @@ -10,117 +12,119 @@ import ImageUploader from '@/components/Input/ImageUploader' import Button from '@/components/Button' import TagsContainer from '@/components/Tag/TagsContainer' -const categoryList = [ - { - "id": 1, - "categoryName": "cute" - }, - { - "id": 2, - "categoryName": "pretty" - }, - { - "id": 3, - "categoryName": "sexy" - }, - { - "id": 4, - "categoryName": "luxury" - }, - { - "id": 5, - "categoryName":"cool" - }, -]; - - - - export default function Home() { - return ( + const dispatch = useDispatch() + console.log(dispatch) - <> -
    -
    -
    - - - - -

    파일은 fbx 포맷 (최대 10MB)만 업로드 가능합니다.

    -
    -
    - - -

    선택한 카테고리: {'>'}

    -
    - - - - -
    - -

    -
    -
    - -
    -
    - -
    %
    -

    할인

    + return ( + <> +
    +
    +
    + + + + +

    + 파일은 fbx 포맷 (최대 10MB)만 업로드 가능합니다. +

    +
    +
    + + +

    + 선택한 카테고리:{} {'>'} + {} +

    +
    + + + + +
    + +

    -
    - - -
    -
    - -
    - % + + +
    +
    + +
    + % +
    +

    할인

    -

    할인

    -
    +

    최종판매가

    {}({}원 할인)

    -
    -
    - - - - - - - - - - -

    전체 에셋 리스트 페이지에서 보여지는 대표 썸네일 이미지입니다.
    권장크기: 214 x 266
    jpg, jpeg, gif, png, bmp 형식의 이미지 (최대 10MB)만 등록 가능합니다.

    -
    - -
    -
    - - - - - -
    -

    상세 페이지 최상단에 보여지는 이미지입니다. 최대 5장까지 등록 가능합니다.
    권장 크기: 710 x 520
    jpg, jpeg, gif, png, bmp 형식의 이미지 (최대 10MB)만 등록 가능합니다.

    + + + + + + + + + + + +

    + 전체 에셋 리스트 페이지에서 보여지는 대표 썸네일 이미지입니다. +
    + 권장크기: 214 x 266 +
    + jpg, jpeg, gif, png, bmp 형식의 이미지 (최대 10MB)만 등록 가능합니다. +

    +
    + +
    +
    + + + + + +
    +

    + 상세 페이지 최상단에 보여지는 이미지입니다. 최대 5장까지 등록 가능합니다. +
    + 권장 크기: 710 x 520 +
    + jpg, jpeg, gif, png, bmp 형식의 이미지 (최대 10MB)만 등록 가능합니다. +

    +
    +
    + +
    + +
    - - -
    - - -
    - - ) + + + ) } diff --git a/src/components/Button/index.tsx b/src/components/Button/index.tsx index fe8eacb..c39d527 100644 --- a/src/components/Button/index.tsx +++ b/src/components/Button/index.tsx @@ -9,11 +9,12 @@ interface ButtonProps { borderRadius?:number, borderColor?: string, color?: string, - id?:string + id?:string, + onClick?:Function, children: ReactNode } -export default function Button({children, width=13, height= 3.6, backgroundColor='#237FDB',borderRadius=0.4, borderColor='transparent', color='#FFF', id}:ButtonProps) { +export default function Button({children, width=13, height= 3.6, backgroundColor='#237FDB',borderRadius=0.4, borderColor='transparent', color='#FFF', id, onClick}:ButtonProps) { const [isClicked, setIsClicked] = useState(false) const clickHandler = () => { setIsClicked(!isClicked) diff --git a/src/components/Select/SelectContainer.tsx b/src/components/Select/SelectContainer.tsx index 9631012..b9d46fe 100644 --- a/src/components/Select/SelectContainer.tsx +++ b/src/components/Select/SelectContainer.tsx @@ -1,55 +1,110 @@ -"use client" -import { useState } from 'react' -import { Listbox} from '@headlessui/react' +'use client' +import { useEffect, useState } from 'react' +import { Listbox } from '@headlessui/react' import { DropDownIcon } from '../../../public/icons/icons' - +import { getFullCategoryList } from '@/api/service/category' type Category = { - id: number, - categoryName: string, + id: number + categoryName: string subCategory?: Category[] } interface SelectContainerProps { - categoryList : Category[], - setSelectedCategory: Function, + categoryList: Category[] } -export default function SelectContainer({categoryList, setSelectedCategory}:SelectContainerProps) { - const [selectedList, setSelectedList] = useState(categoryList[0]) +export default function SelectContainer() { + const getSubCategoryList = () => {} + const [categoryList, setCategoryList] = useState([]) + const initialState = { main: '대분류', sub: '소분류' } + const [selectedOption, setSelectedOption] = useState(initialState) const [disabled, setDisabled] = useState(true) + + const handleOptionClick = (e) => { + console.log(e.target.textContent) + if(e.target.id = 'mainCategory'){ + setSelectedOption((prev) => ({ + ...prev, + ['main']: e.target.textContent, + })) + } else { + setSelectedOption((prev) => ({ + ...prev, + ['sub']: e.target.textContent, + })) + } + } + + useEffect(() => { + ;(async () => { + const res = await getFullCategoryList() + const mainCategoryList = res?.data.categoryList + console.log(res.data.categoryList) + setCategoryList(mainCategoryList) + })() + }, []) + return ( -
    - - 대분류 - - {categoryList.map((item) => ( - +
    + + + {selectedOption.main} + + + + {categoryList.map((item) => ( + {item.categoryName} - - ))} + + ))} - - - 소분류 - + + + {selectedOption.sub} + - {!disabled && - {categoryList.map((item) => ( + {!disabled && ( + + {subCategoryList?.map((item) => ( - {item.categoryName} + {item.categoryName} ))} - } + + )}
    ) diff --git a/src/components/Table/TableContainer/index.tsx b/src/components/Table/TableContainer/index.tsx index 56c505d..a052e6a 100644 --- a/src/components/Table/TableContainer/index.tsx +++ b/src/components/Table/TableContainer/index.tsx @@ -6,18 +6,7 @@ interface TableContainerProps { } export default function TableContainer({children}:TableContainerProps) { - const [assetdata, setAssetdata] = useState({ - assetId: 1, - assetName: "", - price: "", - fileSize: 0, - fileUrl: "", - creator: "", - assetDetail:"", - tagList: [], - thumbnail:"", - detailImages:[] - }) + return (
      @@ -25,8 +14,8 @@ export default function TableContainer({children}:TableContainerProps) { Children.map(children,(child,index)=> { return cloneElement(child,{ key: index, - assetdata: assetdata, - setAssetdata: setAssetdata + + }) }) } diff --git a/src/components/Table/TableItem/index.tsx b/src/components/Table/TableItem/index.tsx index f4ec0be..8777d2b 100644 --- a/src/components/Table/TableItem/index.tsx +++ b/src/components/Table/TableItem/index.tsx @@ -3,13 +3,13 @@ import React, { Children,cloneElement} from 'react' interface TableItemProps { title: string, required: boolean, - assetdata?:object, - setAssetdata?: Function, + + children: any, } -export default function TableItem({children, title, required, assetdata, setAssetdata}:TableItemProps) { +export default function TableItem({children, title, required}:TableItemProps) { return (
    • @@ -19,8 +19,8 @@ export default function TableItem({children, title, required, assetdata, setAsse
      {Children.map(children,(child,index)=> {return cloneElement(child, { key: index, - 'assetdata': assetdata, - 'setAssetdata':setAssetdata, + + })})}
    • From 7df847b7a8e3e9f7672ac03e73e9dd1df01db3ab Mon Sep 17 00:00:00 2001 From: youngeun Date: Sat, 1 Jul 2023 23:56:46 +0900 Subject: [PATCH 25/76] typo --- src/components/Input/FileUploader.tsx | 8 ++++---- src/components/Radio/RadioGroup.tsx | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/components/Input/FileUploader.tsx b/src/components/Input/FileUploader.tsx index c3680b8..632ff9b 100644 --- a/src/components/Input/FileUploader.tsx +++ b/src/components/Input/FileUploader.tsx @@ -7,14 +7,14 @@ interface FileUploaderProps { inputHeight?: number, placeholder?: string, inputValue?:string, //file url - assetdata?: object, - setAssetdata?: Function, + + children?: ReactNode, } export default function FileUploader({children,inputWidth, inputHeight=12, inputValue,...props}:FileUploaderProps) { - const assetdata = props.assetdata; - const setAssetdata = props.setAssetdata; + + const inputRef = useRef(null) const [value, setValue] = useState(inputValue?inputValue:'선택된 파일 없음') const uploadFileHandler = (e: ChangeEvent) => { diff --git a/src/components/Radio/RadioGroup.tsx b/src/components/Radio/RadioGroup.tsx index 0d394e1..7b7e57b 100644 --- a/src/components/Radio/RadioGroup.tsx +++ b/src/components/Radio/RadioGroup.tsx @@ -2,7 +2,7 @@ import React, { ReactNode, createContext} from "react"; import { useRadioGroup } from "react-aria"; import { useRadioGroupState } from "react-stately"; -import { RadioGroupProps as radiogroupprops} from "react-stately"; +import { RadioGroupProps} from "react-stately"; export const RadioContext = createContext(null); From 79b795639e5196619280aedce921c12895c39e85 Mon Sep 17 00:00:00 2001 From: youngeun Date: Sun, 2 Jul 2023 02:41:07 +0900 Subject: [PATCH 26/76] =?UTF-8?q?feat:=20Redux=20Provider=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/layout.tsx | 18 +++++++----------- src/app/page.tsx | 13 +------------ 2 files changed, 8 insertions(+), 23 deletions(-) diff --git a/src/app/layout.tsx b/src/app/layout.tsx index de9e2d4..ade3e8e 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,9 +1,7 @@ import SideNav from '@/components/SideNav' import '@/styles/globals.css' import { Inter } from 'next/font/google' - -import { Provider } from 'react-redux' -import { store } from '@/store/store' +import { ReduxProviders } from '@/store/Provider' const inter = Inter({ subsets: ['latin'] }) export const metadata = { @@ -15,14 +13,12 @@ export default function RootLayout({ children }: { children: React.ReactNode }) return ( - -
      - -
      - {children} -
      -
      - +
      + +
      + {children} +
      +
      ) diff --git a/src/app/page.tsx b/src/app/page.tsx index 343526c..a435b98 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,4 +1,3 @@ -import { useDispatch } from 'react-redux' import Header from '@/components/Header/Index' import Body from '@/components/Body' @@ -13,8 +12,7 @@ import Button from '@/components/Button' import TagsContainer from '@/components/Tag/TagsContainer' export default function Home() { - const dispatch = useDispatch() - console.log(dispatch) + return ( <> @@ -32,10 +30,6 @@ export default function Home() { -

      - 선택한 카테고리:{} {'>'} - {} -

      - From 5e9d3f8ddaa9365f3b60f16c0f36d9eee241a809 Mon Sep 17 00:00:00 2001 From: youngeun Date: Sun, 2 Jul 2023 02:41:30 +0900 Subject: [PATCH 27/76] =?UTF-8?q?feat:=20Tags=20Input=20=EA=B8=B0=EB=8A=A5?= =?UTF-8?q?=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/tag/TagChip.tsx | 21 +++++++++++--------- src/components/tag/TagsContainer.tsx | 29 ++++++++++++++++++++-------- 2 files changed, 33 insertions(+), 17 deletions(-) diff --git a/src/components/tag/TagChip.tsx b/src/components/tag/TagChip.tsx index e9dcd97..36a880a 100644 --- a/src/components/tag/TagChip.tsx +++ b/src/components/tag/TagChip.tsx @@ -1,21 +1,24 @@ -import React, { useRef,ReactNode } from 'react' +'use client' +import React, { useRef, ReactNode } from 'react' interface TagChipProps { - children: ReactNode, - arr:string[], - setArr: Function + children: ReactNode + tagsArr: string[] + setTagsArr: Function } -export default function TagChip({children,arr, setArr}:TagChipProps) { +export default function TagChip({ children, tagsArr, setTagsArr }: TagChipProps) { const tagRef = useRef(null) const deleteTagHandler = () => { - const newArr = arr.filter((item)=>item !== tagRef.current.innerHTML) - setArr(newArr) + const newArr = tagsArr.filter((item) => item !== tagRef.current.innerHTML) + setTagsArr(newArr) } return ( -
      +
      {children} - X + + X +
      ) } diff --git a/src/components/tag/TagsContainer.tsx b/src/components/tag/TagsContainer.tsx index dd7896f..eb8fdfc 100644 --- a/src/components/tag/TagsContainer.tsx +++ b/src/components/tag/TagsContainer.tsx @@ -1,17 +1,30 @@ -"use client" -import React, {useState} from 'react' +'use client' +import React, { useState } from 'react' +import TextInput from '../Input/TextInput' import TagChip from './TagChip' interface TagsContainerProps { tagList?: string[] } - -export default function TagsContainer({tagList=[]}:TagsContainerProps) { - const [arr, setArr] = useState(tagList) +export default function TagsContainer({ tagList = [] }: TagsContainerProps) { + const [tagsArr, setTagsArr] = useState(tagList) return ( -
      - { arr.map((item)=>{item})} -
      + <> + +
      + {tagsArr.length !== 0 && + tagsArr.map((item) => ( + + {item} + + ))} +
      + ) } From 9890a8774baaa4f245b7b6fbb57f1e9644d559b1 Mon Sep 17 00:00:00 2001 From: youngeun Date: Sun, 2 Jul 2023 02:42:01 +0900 Subject: [PATCH 28/76] =?UTF-8?q?feat:=20Input=20=EC=BB=B4=ED=8F=AC?= =?UTF-8?q?=EB=84=8C=ED=8A=B8=EC=97=90=20tags=20=EA=B4=80=EB=A0=A8=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80=ED=95=98=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Input/TextInput.tsx | 79 ++++++++++++++++++++---------- 1 file changed, 53 insertions(+), 26 deletions(-) diff --git a/src/components/Input/TextInput.tsx b/src/components/Input/TextInput.tsx index 15325cb..1ba456e 100644 --- a/src/components/Input/TextInput.tsx +++ b/src/components/Input/TextInput.tsx @@ -1,45 +1,72 @@ -"use client" -import React, {useState,useRef, FormEvent, ChangeEvent} from 'react' +'use client' +import React, { useState, useRef, KeyboardEvent } from 'react' interface TextInputProps { type?: 'input' | 'textarea' - width: number, - height?:number, - placeholder: string, - inputValue?:string, - counter?: number, - disabled?:boolean, - doesEnterWork?: boolean - + width: number + height?: number + placeholder: string + inputValue?: string + counter?: boolean + disabled?: boolean + tagsArr: string[] + setTagsArr: Function } -export default function TextInput({type='input' ,width, height=4.2, placeholder, inputValue,counter, disabled=false, doesEnterWork=false}:TextInputProps) { - const inputRef = useRef(null); +export default function TextInput({ + type = 'input', + width, + height = 4.2, + placeholder, + inputValue, + counter, + disabled = false, + ...props +}: TextInputProps) { + const inputRef = useRef(null) const [inputLength, setInputLength] = useState(inputValue?.length) + const tagsArr = props.tagsArr + const setTagsArr = props.setTagsArr - const handlerKeyDown = (e:KeyboardEvent) => { - if(e.key==='Enter'){ - console.log('form') + const handlerKeyDown = (e: KeyboardEvent) => { + if (e.key === 'Enter') { + setTagsArr([...tagsArr, e.target.value]) + e.target.value = '' } else { - setInputLength(e.target.value.length) + setInputLength(e.target.value.length) } } return ( <> - {type === 'input' ? ( + {type === 'input' ? (
      - -
      - {counter &&

      {inputLength} / {counter}

      } + +
      + {counter && ( +

      + {inputLength} + / {counter} +

      + )}
      - ) - : - ( - - ) - } + ) : ( + + )} ) } From cae2886aa05546e1073fe37791317c8cc25d0aee Mon Sep 17 00:00:00 2001 From: youngeun Date: Sun, 2 Jul 2023 02:42:40 +0900 Subject: [PATCH 29/76] =?UTF-8?q?feat:=20=EC=84=A0=ED=83=9D=ED=95=9C=20?= =?UTF-8?q?=EC=B9=B4=ED=85=8C=EA=B3=A0=EB=A6=AC=20=EC=8B=A4=EC=8B=9C?= =?UTF-8?q?=EA=B0=84=EC=9C=BC=EB=A1=9C=20=EB=B3=B4=EC=9D=B4=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Select/SelectContainer.tsx | 129 ++++++++++++---------- 1 file changed, 69 insertions(+), 60 deletions(-) diff --git a/src/components/Select/SelectContainer.tsx b/src/components/Select/SelectContainer.tsx index b9d46fe..04a25dd 100644 --- a/src/components/Select/SelectContainer.tsx +++ b/src/components/Select/SelectContainer.tsx @@ -24,16 +24,16 @@ export default function SelectContainer() { const handleOptionClick = (e) => { console.log(e.target.textContent) if(e.target.id = 'mainCategory'){ - setSelectedOption((prev) => ({ - ...prev, - ['main']: e.target.textContent, - })) - } else { - setSelectedOption((prev) => ({ - ...prev, - ['sub']: e.target.textContent, - })) - } + setSelectedOption((prev) => ({ + ...prev, + ['main']: e.target.textContent, + })) + } else { + setSelectedOption((prev) => ({ + ...prev, + ['sub']: e.target.textContent, + })) + } } useEffect(() => { @@ -46,66 +46,75 @@ export default function SelectContainer() { }, []) return ( -
      - - - {selectedOption.main} - - - - {categoryList.map((item) => ( - - {item.categoryName} - - ))} - - - - +
      + - {selectedOption.sub} - - - {!disabled && ( - - {subCategoryList?.map((item) => ( + + {selectedOption.main} + + + + {categoryList.map((item) => ( {item.categoryName} ))} - )} - -
      +
      + + + {selectedOption.sub} + + + {!disabled && ( + + {subCategoryList?.map((item) => ( + + {item.categoryName} + + ))} + + )} + +
      +

      + 선택한 카테고리: {selectedOption.main} {' > '} + {selectedOption.sub} +

      + ) } From 74abf5e1749601f5243ed23383a5e1280e4619f5 Mon Sep 17 00:00:00 2001 From: youngeun Date: Sun, 2 Jul 2023 02:48:33 +0900 Subject: [PATCH 30/76] =?UTF-8?q?fix:=20typescript=20=ED=83=80=EC=9E=85=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=20=EC=97=90=EB=9F=AC=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/page.tsx | 1 - src/components/Input/TextInput.tsx | 11 ++++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/app/page.tsx b/src/app/page.tsx index a435b98..8076990 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,4 +1,3 @@ - import Header from '@/components/Header/Index' import Body from '@/components/Body' import TableContainer from '@/components/Table/TableContainer' diff --git a/src/components/Input/TextInput.tsx b/src/components/Input/TextInput.tsx index 1ba456e..c89e339 100644 --- a/src/components/Input/TextInput.tsx +++ b/src/components/Input/TextInput.tsx @@ -7,10 +7,10 @@ interface TextInputProps { height?: number placeholder: string inputValue?: string - counter?: boolean + counter?: number disabled?: boolean - tagsArr: string[] - setTagsArr: Function + tagsArr?: string[] + setTagsArr?: Function } export default function TextInput({ @@ -29,12 +29,13 @@ export default function TextInput({ const setTagsArr = props.setTagsArr const handlerKeyDown = (e: KeyboardEvent) => { - if (e.key === 'Enter') { + typeof tagsArr === 'array' && + (if (e.key === 'Enter') { setTagsArr([...tagsArr, e.target.value]) e.target.value = '' } else { setInputLength(e.target.value.length) - } + }) } return ( From efa305eafd6b207549101d8761daf7b5c50af732 Mon Sep 17 00:00:00 2001 From: youngeun Date: Mon, 3 Jul 2023 20:17:41 +0900 Subject: [PATCH 31/76] =?UTF-8?q?feat:=20debounce=20=ED=95=A8=EC=88=98=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/store/store.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/store/store.ts b/src/store/store.ts index d66d00f..d803072 100644 --- a/src/store/store.ts +++ b/src/store/store.ts @@ -1,10 +1,11 @@ import { configureStore } from '@reduxjs/toolkit' import categoryReducer from './categorySlice' - +import assetReducer from './assetSlice' export const store = configureStore({ reducer: { category: categoryReducer, + createAsset: assetReducer, // }, }) From 7bc8379b4f5ed8a92a13e38c24e9f08d8d4edb1c Mon Sep 17 00:00:00 2001 From: youngeun Date: Mon, 3 Jul 2023 20:19:05 +0900 Subject: [PATCH 32/76] =?UTF-8?q?feat:=20debounce=20=ED=95=A8=EC=88=98=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/debounce.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/utils/debounce.ts diff --git a/src/utils/debounce.ts b/src/utils/debounce.ts new file mode 100644 index 0000000..408db64 --- /dev/null +++ b/src/utils/debounce.ts @@ -0,0 +1,11 @@ + + +function debounce(func, timeout = 300) { + let timer; + return (...args) => { + clearTimeout(timer); + timer = setTimeout(() => { + func.apply(this, args); + }, timeout); + }; +} \ No newline at end of file From ff7c0974b5b401a54bd27e89c9dd405ed8bdd78d Mon Sep 17 00:00:00 2001 From: youngeun Date: Mon, 3 Jul 2023 20:20:01 +0900 Subject: [PATCH 33/76] =?UTF-8?q?feat:=20Tag=20=EC=B6=94=EA=B0=80,=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84,?= =?UTF-8?q?=20=EC=97=90=EB=9F=AC=20=ED=95=B8=EB=93=A4=EB=A7=81=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Input/TextInput.tsx | 28 +++++++++++++++++++--------- src/components/tag/TagChip.tsx | 15 +++++++++------ src/components/tag/TagsContainer.tsx | 2 +- 3 files changed, 29 insertions(+), 16 deletions(-) diff --git a/src/components/Input/TextInput.tsx b/src/components/Input/TextInput.tsx index c89e339..bb042ba 100644 --- a/src/components/Input/TextInput.tsx +++ b/src/components/Input/TextInput.tsx @@ -1,5 +1,6 @@ 'use client' -import React, { useState, useRef, KeyboardEvent } from 'react' +import React, { useState, useRef, KeyboardEvent, Dispatch, SetStateAction } from 'react' +import {createAssetName, createAssetDescription, createAssetPrice, createAssetDiscount, createTagList} from '@/store/assetSlice' interface TextInputProps { type?: 'input' | 'textarea' @@ -10,7 +11,7 @@ interface TextInputProps { counter?: number disabled?: boolean tagsArr?: string[] - setTagsArr?: Function + setTagsArr?: Dispatch> } export default function TextInput({ @@ -29,15 +30,24 @@ export default function TextInput({ const setTagsArr = props.setTagsArr const handlerKeyDown = (e: KeyboardEvent) => { - typeof tagsArr === 'array' && - (if (e.key === 'Enter') { - setTagsArr([...tagsArr, e.target.value]) - e.target.value = '' + if (tagsArr !== undefined && setTagsArr !== undefined && e.key === 'Enter') { + if (tagsArr.length >= 10) { + alert('최대 10개까지 가능합니다.') + } else { + if (tagsArr.find((item) => item === e.currentTarget.value)) { + console.log('tagsArr:', tagsArr) + alert('이미 존재하는 태그입니다.') + return + } else { + console.log([...tagsArr, e.currentTarget.value]) + setTagsArr([...tagsArr, e.currentTarget.value]) + e.currentTarget.value = '' + } + } } else { - setInputLength(e.target.value.length) - }) + setInputLength(e.currentTarget.value.length) + } } - return ( <> {type === 'input' ? ( diff --git a/src/components/tag/TagChip.tsx b/src/components/tag/TagChip.tsx index 36a880a..9c0cbce 100644 --- a/src/components/tag/TagChip.tsx +++ b/src/components/tag/TagChip.tsx @@ -2,7 +2,7 @@ import React, { useRef, ReactNode } from 'react' interface TagChipProps { - children: ReactNode + children: string tagsArr: string[] setTagsArr: Function } @@ -10,15 +10,18 @@ interface TagChipProps { export default function TagChip({ children, tagsArr, setTagsArr }: TagChipProps) { const tagRef = useRef(null) const deleteTagHandler = () => { - const newArr = tagsArr.filter((item) => item !== tagRef.current.innerHTML) + const newArr = tagsArr.filter((item) => item !== tagRef.current?.innerText) + console.log(newArr) setTagsArr(newArr) } return (
      - {children} - - X - +
      ) } diff --git a/src/components/tag/TagsContainer.tsx b/src/components/tag/TagsContainer.tsx index eb8fdfc..faa3b4d 100644 --- a/src/components/tag/TagsContainer.tsx +++ b/src/components/tag/TagsContainer.tsx @@ -8,7 +8,7 @@ interface TagsContainerProps { } export default function TagsContainer({ tagList = [] }: TagsContainerProps) { - const [tagsArr, setTagsArr] = useState(tagList) + const [tagsArr, setTagsArr] = useState(tagList) return ( <> Date: Mon, 3 Jul 2023 20:23:40 +0900 Subject: [PATCH 34/76] delete --- src/app/assets/[assetId]/page.tsx | 14 ++---- src/app/assets/page.tsx | 79 ++++++++++++++++++------------- 2 files changed, 48 insertions(+), 45 deletions(-) diff --git a/src/app/assets/[assetId]/page.tsx b/src/app/assets/[assetId]/page.tsx index 55f75b6..8824ce1 100644 --- a/src/app/assets/[assetId]/page.tsx +++ b/src/app/assets/[assetId]/page.tsx @@ -1,5 +1,5 @@ -"use client" -import React, {useState} from 'react' +'use client' +import React, { useState } from 'react' import Header from '@/components/Header' import Body from '@/components/Body' import TableContainer from '@/components/Table/TableContainer' @@ -28,9 +28,6 @@ export default function AssetIdPage() { tagList: ['tag1', 'tag2', 'tag3'], } - - const [selectedCategory, setSelectedCategory] = useState(categoryList[0]) - return ( <>
      @@ -46,11 +43,7 @@ export default function AssetIdPage() { - - {/*

      선택한 카테고리:{highCategory} > {selectedCategory.subCategory ? selectedCategory.subCategory : '' }

      */} +
      - diff --git a/src/app/assets/page.tsx b/src/app/assets/page.tsx index fbc51bd..e975d11 100644 --- a/src/app/assets/page.tsx +++ b/src/app/assets/page.tsx @@ -11,13 +11,12 @@ import Button from '@/components/Button' import Divider from '@/components/Divider' import RadioGroup from '@/components/Radio/RadioGroup' import SelectContainer from '@/components/Select/SelectContainer' -import { SSRProvider } from 'react-aria' export default function AssetsPage() { return ( - + <>
      @@ -42,18 +41,20 @@ export default function AssetsPage() {
      - - - - - - 전체 - 판매중 - 판매중지 - + + + + + + 전체 + 판매중 + 판매중지 + + + -
      +
      @@ -61,31 +62,41 @@ export default function AssetsPage() { 초기화
      - - - -
      - 에셋 목록 (총 {10}개) -
      -
      - - - - - - - - - - - - - - + + + +
      + + 에셋 목록 (총 {10}개) + +
      +
      +
      s상품번호상품명판매상태판매가대분류소분류상품등록일최종수정일수정
      + + + + + + + + + + + + +
      s + 상품번호 + 상품명 + 판매상태 + 판매가대분류소분류 + 상품등록일 + + 최종수정일 + 수정
      - + ) } From c5b9895c048fc035a91a64e3b095b1e5439db152 Mon Sep 17 00:00:00 2001 From: youngeun Date: Mon, 3 Jul 2023 20:23:57 +0900 Subject: [PATCH 35/76] =?UTF-8?q?feat:=20asset=20Slice=20(redux)=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/store/assetSlice.ts | 105 +++++++++++++++++++++++++++++++--------- 1 file changed, 82 insertions(+), 23 deletions(-) diff --git a/src/store/assetSlice.ts b/src/store/assetSlice.ts index 3346ab7..ba16384 100644 --- a/src/store/assetSlice.ts +++ b/src/store/assetSlice.ts @@ -1,32 +1,91 @@ -import { createSlice } from "@reduxjs/toolkit"; +import { createSlice } from '@reduxjs/toolkit' +type AssetState = { + assetName: string + assetDescription: string + price: number + discount: number + category: string + subCategory: string + addTagList: string[] + fileUrl: string + fileSize: number + extension: string + thumbnailUrl: string + previewUrlList: string[] +} +const initialState: AssetState = { + assetName: '', + assetDescription: '', + price: 0, + discount: 0, + category: '', + subCategory: '', + addTagList: [], + fileUrl: '', + fileSize: 0, + extension: '', + thumbnailUrl: '', + previewUrlList: [], +} const assetSlice = createSlice({ name: 'asset', - initialState: { - asset : { - assetName: '', - assetDescription: '', - price: 0, - discount: 0, - category: '', - subCategory: '', - addTagList: [], - fileUrl: '', - fileSize: 0, - extension: '', - thumbnailUrl: '', - previewUrlList: [], - }, - }, + initialState, reducers: { - createAsset: (state,action) => { - state.asset = action.payload + createAssetName: (state: AssetState, action) => { + state.assetName = action.payload + }, + createAssetDescription: (state: AssetState, action) => { + state.assetDescription = action.payload + }, + createAssetPrice: (state: AssetState, action) => { + state.price = action.payload + }, + createAssetDiscount: (state: AssetState, action) => { + state.discount = action.payload + }, + createAssetCategory: (state: AssetState, action) => { + state.category = action.payload + }, + createAssetSubCategory: (state: AssetState, action) => { + state.subCategory = action.payload + }, + createTagList: (state: AssetState, action) => { + state.addTagList = action.payload }, - - } + createFileUrl: (state: AssetState, action) => { + state.fileUrl = action.payload + }, + createFileSize: (state: AssetState, action) => { + state.fileSize = action.payload + }, + createFileExtension: (state: AssetState, action) => { + state.extension = action.payload + }, + createThumbnailSrc: (state: AssetState, action) => { + state.thumbnailUrl = action.payload + }, + createPreviewUrlList: (state: AssetState, action) => { + state.previewUrlList = action.payload + }, + }, }) -export const {} = assetSlice.actions -export default assetSlice.reducer \ No newline at end of file +export const { + createAssetName, + createAssetDescription, + createAssetPrice, + createAssetDiscount, + createAssetCategory, + createAssetSubCategory, + createTagList, + createFileUrl, + createFileSize, + createFileExtension, + createThumbnailSrc, + createPreviewUrlList, +} = assetSlice.actions + +export default assetSlice.reducer From 6b6277c450130bd6aa725fa515cb7b85838c9c31 Mon Sep 17 00:00:00 2001 From: youngeun Date: Tue, 4 Jul 2023 01:59:09 +0900 Subject: [PATCH 36/76] =?UTF-8?q?feat:=20react=20hook=20form=20=EC=84=A4?= =?UTF-8?q?=EC=B9=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 1 + yarn.lock | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/package.json b/package.json index f8b3fab..6a5913c 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "react": "18.2.0", "react-aria": "^3.25.0", "react-dom": "18.2.0", + "react-hook-form": "^7.45.1", "react-redux": "^8.1.1", "react-stately": "^3.23.0", "tailwindcss": "3.3.2", diff --git a/yarn.lock b/yarn.lock index 4839d02..cf95ac7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3907,6 +3907,11 @@ react-dom@18.2.0: loose-envify "^1.1.0" scheduler "^0.23.0" +react-hook-form@^7.45.1: + version "7.45.1" + resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.45.1.tgz#e352c7f4dbc7540f0756abbb4dcfd1122fecc9bb" + integrity sha512-6dWoFJwycbuFfw/iKMcl+RdAOAOHDiF11KWYhNDRN/OkUt+Di5qsZHwA0OwsVnu9y135gkHpTw9DJA+WzCeR9w== + react-is@^16.13.1, react-is@^16.7.0: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" From b93390af496582193e9c81429838db35541acf8f Mon Sep 17 00:00:00 2001 From: youngeun Date: Tue, 4 Jul 2023 02:00:53 +0900 Subject: [PATCH 37/76] =?UTF-8?q?feat:=20=EC=83=81=EC=84=B8=20=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20=ED=95=84?= =?UTF-8?q?=EC=88=98=EC=9A=94=EA=B1=B4=20=EC=A0=9C=EC=99=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/page.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/page.tsx b/src/app/page.tsx index 8076990..72c6025 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -85,7 +85,7 @@ export default function Home() { jpg, jpeg, gif, png, bmp 형식의 이미지 (최대 10MB)만 등록 가능합니다.

      - +
      From fc2962b5bdce3431696644d0be46f315f97ca0ae Mon Sep 17 00:00:00 2001 From: youngeun Date: Tue, 4 Jul 2023 02:01:46 +0900 Subject: [PATCH 38/76] =?UTF-8?q?feat:=20=ED=8C=8C=EC=9D=BC=20=EC=97=85?= =?UTF-8?q?=EB=A1=9C=EB=93=9C=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Input/FileUploader.tsx | 66 ++++++++++++++++++--------- 1 file changed, 45 insertions(+), 21 deletions(-) diff --git a/src/components/Input/FileUploader.tsx b/src/components/Input/FileUploader.tsx index 632ff9b..84bb3f3 100644 --- a/src/components/Input/FileUploader.tsx +++ b/src/components/Input/FileUploader.tsx @@ -1,33 +1,57 @@ 'use client' -import React, {ReactNode, useState ,useRef, ChangeEvent} from 'react' +import React, { ReactNode, useState, ChangeEvent } from 'react' +import { useDispatch } from 'react-redux' +import { createFileUrl, createFileExtension, createFileSize } from '@/store/assetSlice' import Button from '../Button' interface FileUploaderProps { - inputWidth: number, - inputHeight?: number, - placeholder?: string, - inputValue?:string, //file url + inputWidth: number + inputHeight?: number + placeholder?: string + inputValue?: string //file url - - children?: ReactNode, + children?: ReactNode } -export default function FileUploader({children,inputWidth, inputHeight=12, inputValue,...props}:FileUploaderProps) { - - - const inputRef = useRef(null) - const [value, setValue] = useState(inputValue?inputValue:'선택된 파일 없음') - const uploadFileHandler = (e: ChangeEvent) => { +export default function FileUploader({ + children, + inputWidth, + inputHeight = 12, + inputValue, + ...props +}: FileUploaderProps) { + const [value, setValue] = useState(inputValue ? inputValue : '선택된 파일 없음') + const dispatch = useDispatch() + const createFileInfo = (file: File) => { + const fileSize = Number((file.size / 1024).toFixed(2)) + dispatch(createFileUrl(file)) + // dispatch(createFileExtension()) + // dispatch(createFileSize(fileSize)) + } + const uploadFileHandler = (e: ChangeEvent) => { e.preventDefault() - // console.log(inputRef.current.files) - setValue(inputRef?.current.files[0].name) + if (e.currentTarget.files !== null) { + console.log('file:', e.currentTarget.files[0]) + setValue(e.currentTarget.files[0].name) + // setTimeout(createFileInfo(e.currentTarget.files[0]), 5000) + } else { + alert('파일이 존재하지 않습니다.') + } } + return ( -
      - - - - {children} -
      +
      + + + + {children} +
      ) } From 94b4140cb7ddeed3120dc9ab357134f91a5a7ff4 Mon Sep 17 00:00:00 2001 From: youngeun Date: Tue, 4 Jul 2023 22:16:10 +0900 Subject: [PATCH 39/76] =?UTF-8?q?feat:=20required=20props=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/assets/[assetId]/page.tsx | 31 ++++++----- src/app/page.tsx | 20 ++++--- src/components/Input/ImageUploader.tsx | 76 ++++++++++++++++++-------- src/components/tag/TagsContainer.tsx | 4 +- 4 files changed, 84 insertions(+), 47 deletions(-) diff --git a/src/app/assets/[assetId]/page.tsx b/src/app/assets/[assetId]/page.tsx index 8824ce1..33e35b0 100644 --- a/src/app/assets/[assetId]/page.tsx +++ b/src/app/assets/[assetId]/page.tsx @@ -1,6 +1,4 @@ -'use client' -import React, { useState } from 'react' -import Header from '@/components/Header' +import Header from '@/components/Header/Index' import Body from '@/components/Body' import TableContainer from '@/components/Table/TableContainer' import TableItem from '@/components/Table/TableItem' @@ -47,6 +45,7 @@ export default function AssetIdPage() {
      - +

      - +
      %
      @@ -82,17 +86,18 @@ export default function AssetIdPage() { - + - +

      전체 에셋 리스트 페이지에서 보여지는 대표 썸네일 이미지입니다.
      @@ -101,14 +106,14 @@ export default function AssetIdPage() { jpg, jpeg, gif, png, bmp 형식의 이미지 (최대 10MB)만 등록 가능합니다.

      - +
      - - - - - + + + + +

      상세 페이지 최상단에 보여지는 이미지입니다. 최대 5장까지 등록 가능합니다. diff --git a/src/app/page.tsx b/src/app/page.tsx index 72c6025..84b33ae 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -32,6 +32,7 @@ export default function Home() {

      - +

      - +
      %
      @@ -66,17 +67,18 @@ export default function Home() { - + - +

      전체 에셋 리스트 페이지에서 보여지는 대표 썸네일 이미지입니다.
      @@ -88,11 +90,11 @@ export default function Home() {

      - - - - - + + + + +

      상세 페이지 최상단에 보여지는 이미지입니다. 최대 5장까지 등록 가능합니다. diff --git a/src/components/Input/ImageUploader.tsx b/src/components/Input/ImageUploader.tsx index a9b2d35..21a4752 100644 --- a/src/components/Input/ImageUploader.tsx +++ b/src/components/Input/ImageUploader.tsx @@ -1,23 +1,22 @@ -"use client" -import React, {useState, useRef, ChangeEvent} from 'react' +'use client' +import React, { useState, useRef, ChangeEvent } from 'react' interface ImageUploaderProps { - width:number, - height:number, + required: boolean + width: number + height: number id: number - } -export default function ImageUploader({width, height, id}:ImageUploaderProps) { - const [isUploaded, setIsUploaded] = useState(false) - const [url, setUrl] = useState('') - const inputRef = useRef(null) - const [fileName, setFileName] = useState('') - const [fileSize, setFileSize] = useState(0) - const imageUploadHandler = (e:ChangeEvent) => { - const file = e.target.files[0] - const url = URL.createObjectURL(file); - console.log('file:',file) +export default function ImageUploader({ required, width, height, id }: ImageUploaderProps) { + const [isUploaded, setIsUploaded] = useState(false) + const [url, setUrl] = useState('') + const inputRef = useRef(null) + const [fileName, setFileName] = useState('') + const [fileSize, setFileSize] = useState(0) + const imageUploadHandler = (e: ChangeEvent) => { + const file = e.currentTarget.files && e.currentTarget.files[0] + const url = URL.createObjectURL(file) setIsUploaded(true) setUrl(url) setFileName(file.name) @@ -28,17 +27,46 @@ export default function ImageUploader({width, height, id}:ImageUploaderProps) { setUrl('') } return ( -

      -
      - - {isUploaded && } +
      +
      + + {isUploaded && ( + + )}
      - + {isUploaded && ( -
      -

      {fileName}

      -

      {fileSize}

      -
      )} +
      +

      {fileName}

      +

      {fileSize / 1024}

      +
      + )}
      ) } diff --git a/src/components/tag/TagsContainer.tsx b/src/components/tag/TagsContainer.tsx index faa3b4d..7ddcc7d 100644 --- a/src/components/tag/TagsContainer.tsx +++ b/src/components/tag/TagsContainer.tsx @@ -4,14 +4,16 @@ import TextInput from '../Input/TextInput' import TagChip from './TagChip' interface TagsContainerProps { + required:boolean tagList?: string[] } -export default function TagsContainer({ tagList = [] }: TagsContainerProps) { +export default function TagsContainer({ required , tagList = [] }: TagsContainerProps) { const [tagsArr, setTagsArr] = useState(tagList) return ( <> Date: Tue, 4 Jul 2023 22:17:18 +0900 Subject: [PATCH 40/76] =?UTF-8?q?feat:=20react=20hook=20form=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Input/TextInput.tsx | 59 ++++++++++++++++++++++-------- 1 file changed, 43 insertions(+), 16 deletions(-) diff --git a/src/components/Input/TextInput.tsx b/src/components/Input/TextInput.tsx index bb042ba..9589145 100644 --- a/src/components/Input/TextInput.tsx +++ b/src/components/Input/TextInput.tsx @@ -1,9 +1,17 @@ 'use client' -import React, { useState, useRef, KeyboardEvent, Dispatch, SetStateAction } from 'react' -import {createAssetName, createAssetDescription, createAssetPrice, createAssetDiscount, createTagList} from '@/store/assetSlice' +import React, { useState, useRef, KeyboardEvent, Dispatch, SetStateAction, FormEvent } from 'react' +import { useForm } from 'react-hook-form' +import { + createAssetName, + createAssetDescription, + createAssetPrice, + createAssetDiscount, + createTagList, +} from '@/store/assetSlice' interface TextInputProps { - type?: 'input' | 'textarea' + type?: 'input' | 'textarea' | 'number' + required: boolean width: number height?: number placeholder: string @@ -16,6 +24,7 @@ interface TextInputProps { export default function TextInput({ type = 'input', + required, width, height = 4.2, placeholder, @@ -24,43 +33,60 @@ export default function TextInput({ disabled = false, ...props }: TextInputProps) { - const inputRef = useRef(null) + const { + formState: {}, + } = useForm({ + delayError: 1000, + mode: 'onChange', + defaultValues: { inputValue }, + }) + const inputRef = useRef() const [inputLength, setInputLength] = useState(inputValue?.length) const tagsArr = props.tagsArr const setTagsArr = props.setTagsArr const handlerKeyDown = (e: KeyboardEvent) => { - if (tagsArr !== undefined && setTagsArr !== undefined && e.key === 'Enter') { + if (counter && e.key !== 'Enter') { + setInputLength(e.currentTarget.value.length) + console.log(e.nativeEvent) + } + } + const submitHandler = (e: FormEvent) => { + e.preventDefault() + if (tagsArr !== undefined && setTagsArr !== undefined && inputRef.current !== undefined) { if (tagsArr.length >= 10) { alert('최대 10개까지 가능합니다.') + return } else { - if (tagsArr.find((item) => item === e.currentTarget.value)) { + if (tagsArr.find((item) => item === inputRef.current?.value)) { console.log('tagsArr:', tagsArr) alert('이미 존재하는 태그입니다.') return } else { - console.log([...tagsArr, e.currentTarget.value]) - setTagsArr([...tagsArr, e.currentTarget.value]) - e.currentTarget.value = '' + console.log([...tagsArr, inputRef.current?.value]) + setTagsArr([...tagsArr, inputRef.current?.value]) + inputRef.current.value = '' + return } } - } else { - setInputLength(e.currentTarget.value.length) } } return ( <> - {type === 'input' ? ( -
      + {type === 'input' || type === 'number' ? ( +
      {counter && ( @@ -70,12 +96,13 @@ export default function TextInput({

      )}
      -
      + ) : ( )} From 6b938461efecf892db92e72bda20910433d3a698 Mon Sep 17 00:00:00 2001 From: youngeun Date: Wed, 5 Jul 2023 00:20:42 +0900 Subject: [PATCH 41/76] =?UTF-8?q?fix:=20merge=20=EC=B6=A9=EB=8F=8C=20?= =?UTF-8?q?=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/axios.ts | 4 +- src/app/assets/{ => edit}/[assetId]/page.tsx | 5 +- src/app/assets/edit/page.tsx | 98 ++++++++++ src/app/assets/page.tsx | 185 ++++++++++-------- src/app/enroll/page.tsx | 12 -- src/app/page.tsx | 6 +- src/components/Header/Index.tsx | 6 +- src/components/Input/FileUploader.tsx | 2 +- src/components/Input/ImageUploader.tsx | 2 +- src/components/Input/TextInput.tsx | 6 +- .../Page/LoginPage.tsx} | 2 +- src/components/Radio/RadioGroup.tsx | 29 +-- src/components/Select/SelectContainer.tsx | 13 +- src/components/Table/TableItem/index.tsx | 32 ++- tailwind.config.js | 1 + yarn.lock | 146 +------------- 16 files changed, 252 insertions(+), 297 deletions(-) rename src/app/assets/{ => edit}/[assetId]/page.tsx (98%) create mode 100644 src/app/assets/edit/page.tsx delete mode 100644 src/app/enroll/page.tsx rename src/{app/login/page.tsx => components/Page/LoginPage.tsx} (91%) diff --git a/src/api/axios.ts b/src/api/axios.ts index 3239fc6..39026fc 100644 --- a/src/api/axios.ts +++ b/src/api/axios.ts @@ -5,7 +5,9 @@ export const axiosInstance = axios.create({ baseURL: process.env.NEXT_PUBLIC_BASE_URL, headers: { 'Content-Type': 'application/json', - Authorization: `eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJqd3RzdHVkeSIsInJvbGUiOiJBRE1JTiIsImlkIjo4LCJleHAiOjE2ODgyNjgwOTV9.stVJr0feAFnepSo7_Jjs_yA-diD4DK8tShHAaomOi2cN64JKdWxnVrMzCIxpA5oebw0-8XYjlYEQuWx99ZS1iA`, + Authorization: + 'Bearer ' + + `eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJqd3RzdHVkeSIsInJvbGUiOiJBRE1JTiIsImlkIjo4LCJleHAiOjE2ODg0NTQ5ODJ9.39oYa-zExLNiQnw8Nu3B6ozL9gjs2VGPN9riCY00QnZZmvOv6oGxe7rlyoiVY_CrSlrW294c1JVfN9zrGDT-8A`, }, }) diff --git a/src/app/assets/[assetId]/page.tsx b/src/app/assets/edit/[assetId]/page.tsx similarity index 98% rename from src/app/assets/[assetId]/page.tsx rename to src/app/assets/edit/[assetId]/page.tsx index 33e35b0..9a0bc96 100644 --- a/src/app/assets/[assetId]/page.tsx +++ b/src/app/assets/edit/[assetId]/page.tsx @@ -9,6 +9,7 @@ import ImageUploader from '@/components/Input/ImageUploader' import Button from '@/components/Button' import TagsContainer from '@/components/Tag/TagsContainer' import SelectContainer from '@/components/Select/SelectContainer' +import Layout from '@/components/Common/Layout' export default function AssetIdPage() { const data = { @@ -27,7 +28,7 @@ export default function AssetIdPage() { } return ( - <> +
      @@ -134,6 +135,6 @@ export default function AssetIdPage() {
      - + ) } diff --git a/src/app/assets/edit/page.tsx b/src/app/assets/edit/page.tsx new file mode 100644 index 0000000..58ac0ab --- /dev/null +++ b/src/app/assets/edit/page.tsx @@ -0,0 +1,98 @@ +/** + * 에셋 조회/수정 페이지 + */ +import React from 'react' +import Layout from '@/components/Common/Layout' +import Header from '@/components/Header/Index' +import Body from '@/components/Body' +import TableContainer from '@/components/Table/TableContainer' +import TableItem from '@/components/Table/TableItem' +import Button from '@/components/Button' +import Divider from '@/components/Divider' +import SelectContainer from '@/components/Select/SelectContainer' + +export default function AssetsPage() { + return ( + +
      + + + +
      + + +
      +
      +
      + + + + + + {/* + 전체 + 판매중 + 판매중지 + */} + +
      +
      + + +
      + + + +
      + + 에셋 목록 (총 {10}개) + +
      +
      + + + + + + + + + + + + + + + +
      s + 상품번호 + 상품명 + 판매상태 + 판매가대분류소분류 + 상품등록일 + + 최종수정일 + 수정
      +
      + + + ) +} diff --git a/src/app/assets/page.tsx b/src/app/assets/page.tsx index 3ae8282..7fa1b00 100644 --- a/src/app/assets/page.tsx +++ b/src/app/assets/page.tsx @@ -1,108 +1,119 @@ -/** - * 에셋 조회/수정 페이지 - */ -import React from 'react' import Header from '@/components/Header/Index' import Body from '@/components/Body' import TableContainer from '@/components/Table/TableContainer' import TableItem from '@/components/Table/TableItem' -import Radio from '@/components/Radio' -import Button from '@/components/Button' -import Divider from '@/components/Divider' -import RadioGroup from '@/components/Radio/RadioGroup' +import FileUploader from '@/components/Input/FileUploader' import SelectContainer from '@/components/Select/SelectContainer' - +import TextInput from '@/components/Input/TextInput' +import Divider from '@/components/Divider' +import ImageUploader from '@/components/Input/ImageUploader' +import Button from '@/components/Button' +import TagsContainer from '@/components/Tag/TagsContainer' import Layout from '@/components/Common/Layout' -import Assets from '@/components/Assets' - - -export default function AssetsPage() { +export default function Home() { return ( - <> -
      + +
      +
      +
      - -
      - - -
      -
      + + +

      + 파일은 fbx 포맷 (최대 10MB)만 업로드 가능합니다. +

      +
      - + - - - 전체 - 판매중 - 판매중지 - - + + + + +
      + +

      +
      +
      + +
      +
      + +
      + % +
      +

      할인

      +
      +
      + +
      +
      +

      최종판매가

      +

      + {}({}원 할인) +

      +
      +
      +
      + + + + + + + + + +

      + 전체 에셋 리스트 페이지에서 보여지는 대표 썸네일 이미지입니다. +
      + 권장크기: 214 x 266 +
      + jpg, jpeg, gif, png, bmp 형식의 이미지 (최대 10MB)만 등록 가능합니다. +

      +
      + +
      +
      + + + + + +
      +

      + 상세 페이지 최상단에 보여지는 이미지입니다. 최대 5장까지 등록 가능합니다. +
      + 권장 크기: 710 x 520 +
      + jpg, jpeg, gif, png, bmp 형식의 이미지 (최대 10MB)만 등록 가능합니다. +

      +
      +
      - -
      - - -
      - - 에셋 목록 (총 {10}개) - -
      -
      - - - - - - - - - - - - - - - -
      s - 상품번호 - 상품명 - 판매상태 - 판매가대분류소분류 - 상품등록일 - - 최종수정일 - 수정
      -
      - -{/* - - - */} - - +
      ) } diff --git a/src/app/enroll/page.tsx b/src/app/enroll/page.tsx deleted file mode 100644 index 8a70f59..0000000 --- a/src/app/enroll/page.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import AssetEnroll from '@/components/AssetEnroll' -import Layout from '@/components/Common/Layout' - -export default function AssetEnrollPage() { - return ( - <> - - - - - ) -} diff --git a/src/app/page.tsx b/src/app/page.tsx index 1afda48..9294540 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,6 +1,4 @@ - -import LoginPage from './login/page' - +import LoginPage from "@/components/Page/LoginPage" export default function Home() { @@ -9,7 +7,7 @@ export default function Home() { <> {/* */} - ) } + diff --git a/src/components/Header/Index.tsx b/src/components/Header/Index.tsx index 567e6aa..fe05aba 100644 --- a/src/components/Header/Index.tsx +++ b/src/components/Header/Index.tsx @@ -19,8 +19,10 @@ export default function Header({

      - {title} - {required && • 필수항목} + + {title} + + {required && • 필수항목}

      {isButton && }
      diff --git a/src/components/Input/FileUploader.tsx b/src/components/Input/FileUploader.tsx index 84bb3f3..d45ed38 100644 --- a/src/components/Input/FileUploader.tsx +++ b/src/components/Input/FileUploader.tsx @@ -44,7 +44,7 @@ export default function FileUploader({ diff --git a/src/components/Input/ImageUploader.tsx b/src/components/Input/ImageUploader.tsx index 21a4752..36fc457 100644 --- a/src/components/Input/ImageUploader.tsx +++ b/src/components/Input/ImageUploader.tsx @@ -37,7 +37,7 @@ export default function ImageUploader({ required, width, height, id }: ImageUplo className={ isUploaded ? 'hidden px-[1rem] text-[6.4rem] hover:cursor-pointer' - : 'px-[1rem] text-[6.4rem] hover:cursor-pointer' + : 'px-[1rem] text-[6.4rem] text-neutral-navy-200 hover:cursor-pointer' } > + diff --git a/src/components/Input/TextInput.tsx b/src/components/Input/TextInput.tsx index 9589145..41e1af4 100644 --- a/src/components/Input/TextInput.tsx +++ b/src/components/Input/TextInput.tsx @@ -79,7 +79,7 @@ export default function TextInput({ ref={inputRef} style={{ width: `${width}rem`, height: `${height}rem` }} className={ - 'rounded border border-[#474E57] bg-neutral-navy-950 px-[2rem] py-[0.9rem] text-[1.4rem] focus:border-neutral-navy-200 disabled:bg-neutral-navy-850' + 'rounded border border-[#474E57] bg-neutral-navy-950 px-[2rem] py-[0.9rem] text-[1.4rem] text-neutral-navy-200 focus:border-neutral-navy-200 disabled:bg-neutral-navy-850' } placeholder={placeholder} disabled={disabled} @@ -92,7 +92,7 @@ export default function TextInput({ {counter && (

      {inputLength} - / {counter} + / {counter}

      )}
      @@ -100,7 +100,7 @@ export default function TextInput({ ) : ( diff --git a/src/app/login/page.tsx b/src/components/Page/LoginPage.tsx similarity index 91% rename from src/app/login/page.tsx rename to src/components/Page/LoginPage.tsx index dce8495..59cf9bc 100644 --- a/src/app/login/page.tsx +++ b/src/components/Page/LoginPage.tsx @@ -5,7 +5,7 @@ export default function LoginPage() { return (
      -
      +
      logo
      diff --git a/src/components/Radio/RadioGroup.tsx b/src/components/Radio/RadioGroup.tsx index 7b7e57b..423fd13 100644 --- a/src/components/Radio/RadioGroup.tsx +++ b/src/components/Radio/RadioGroup.tsx @@ -1,21 +1,22 @@ -"use client" -import React, { ReactNode, createContext} from "react"; -import { useRadioGroup } from "react-aria"; -import { useRadioGroupState } from "react-stately"; -import { RadioGroupProps} from "react-stately"; +'use client' +import React, { ReactNode, createContext } from 'react' +import { useRadioGroup } from 'react-aria' +import { useRadioGroupState } from 'react-stately' +import { RadioGroupProps } from 'react-stately' +export const RadioContext = createContext(null) -export const RadioContext = createContext(null); - -export default function RadioGroup(props: RadioGroupProps){ +export default function RadioGroup(props: RadioGroupProps) { const { children, label } = props - let state = useRadioGroupState(props); - let { radioGroupProps, labelProps } = useRadioGroup(props, state); + let state = useRadioGroupState(props) + let { radioGroupProps, labelProps } = useRadioGroup(props, state) // console.log('radioGroupProps',radioGroupProps ) // console.log('labelProps',labelProps) return ( - -
      {children}
      -
      - ); + +
      + {children} +
      +
      + ) } diff --git a/src/components/Select/SelectContainer.tsx b/src/components/Select/SelectContainer.tsx index 04a25dd..123f07f 100644 --- a/src/components/Select/SelectContainer.tsx +++ b/src/components/Select/SelectContainer.tsx @@ -7,7 +7,6 @@ type Category = { id: number categoryName: string subCategory?: Category[] - } interface SelectContainerProps { @@ -23,7 +22,7 @@ export default function SelectContainer() { const handleOptionClick = (e) => { console.log(e.target.textContent) - if(e.target.id = 'mainCategory'){ + if ((e.target.id = 'mainCategory')) { setSelectedOption((prev) => ({ ...prev, ['main']: e.target.textContent, @@ -57,7 +56,7 @@ export default function SelectContainer() { > {selectedOption.main} @@ -67,7 +66,7 @@ export default function SelectContainer() { {item.categoryName} @@ -88,8 +87,8 @@ export default function SelectContainer() { id="subCategory" className={ disabled - ? 'flex min-h-[4.2rem] min-w-[24rem] justify-between rounded border border-[#474E57] bg-neutral-navy-850 px-[2rem] py-[0.9rem] text-[1.4rem] focus:border-neutral-navy-200' - : 'flex min-h-[4.2rem] min-w-[24rem] justify-between rounded border border-[#474E57] bg-neutral-navy-950 px-[2rem] py-[0.9rem] text-[1.4rem] focus:border-neutral-navy-200' + ? 'flex min-h-[4.2rem] min-w-[24rem] justify-between rounded border border-[#474E57] bg-neutral-navy-850 px-[2rem] py-[0.9rem] text-[1.4rem] text-neutral-navy-200 focus:border-neutral-navy-200' + : 'flex min-h-[4.2rem] min-w-[24rem] justify-between rounded border border-[#474E57] bg-neutral-navy-950 px-[2rem] py-[0.9rem] text-[1.4rem] text-neutral-navy-200 focus:border-neutral-navy-200' } > {selectedOption.sub} @@ -111,7 +110,7 @@ export default function SelectContainer() { )}
      -

      +

      선택한 카테고리: {selectedOption.main} {' > '} {selectedOption.sub}

      diff --git a/src/components/Table/TableItem/index.tsx b/src/components/Table/TableItem/index.tsx index 8777d2b..3e05d25 100644 --- a/src/components/Table/TableItem/index.tsx +++ b/src/components/Table/TableItem/index.tsx @@ -1,27 +1,25 @@ -import React, { Children,cloneElement} from 'react' +import React, { Children, cloneElement } from 'react' interface TableItemProps { - title: string, - required: boolean, - + title: string + required: boolean - children: any, + children: any } - -export default function TableItem({children, title, required}:TableItemProps) { +export default function TableItem({ children, title, required }: TableItemProps) { return ( -
    • -
      - {title} - {required && } +
    • +
      + {title} + {required && }
      -
      - {Children.map(children,(child,index)=> {return cloneElement(child, { - key: index, - - - })})} +
      + {Children.map(children, (child, index) => { + return cloneElement(child, { + key: index, + }) + })}
    • ) diff --git a/tailwind.config.js b/tailwind.config.js index c8e6384..3ce617d 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -30,6 +30,7 @@ module.exports = { xl: '3.2rem', }, borderRadius: { + DEFAULT: '0.4rem', sm: '0.4rem', lg: '0.8rem', full: '999.9rem', diff --git a/yarn.lock b/yarn.lock index e7bba05..b9833ef 100644 --- a/yarn.lock +++ b/yarn.lock @@ -966,14 +966,6 @@ "@react-types/shared" "^3.18.1" "@swc/helpers" "^0.4.14" -"@react-stately/data@^3.9.2": - version "3.9.2" - resolved "https://registry.yarnpkg.com/@react-stately/data/-/data-3.9.2.tgz#a8fc3173d7407f7ed17dec6c9b5c1a9fe719ff26" - integrity sha512-ze64/M/OOv8Vk/KSNf+PzF0gTnv1y+EqjCdvJWRYD6fo64bRWH19x3X2xbMX0UYCbdjsSlesXn/9uItz8Kws6A== - dependencies: - "@react-types/shared" "^3.18.1" - "@swc/helpers" "^0.4.14" - "@react-stately/datepicker@^3.4.1": version "3.4.1" resolved "https://registry.yarnpkg.com/@react-stately/datepicker/-/datepicker-3.4.1.tgz#3aaf3b439e542aa9bc0dc366a70f9232247865e6" @@ -1472,19 +1464,6 @@ "@types/react" "*" hoist-non-react-statics "^3.3.0" -"@types/cookie@^0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.1.tgz#bfd02c1f2224567676c1545199f87c3a861d878d" - integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== - -"@types/hoist-non-react-statics@^3.3.1": - version "3.3.1" - resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" - integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA== - dependencies: - "@types/react" "*" - hoist-non-react-statics "^3.3.0" - "@types/json5@^0.0.29": version "0.0.29" resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" @@ -1545,11 +1524,6 @@ resolved "https://registry.yarnpkg.com/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz#b6725d5f4af24ace33b36fafd295136e75509f43" integrity sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA== -"@types/use-sync-external-store@^0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz#b6725d5f4af24ace33b36fafd295136e75509f43" - integrity sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA== - "@typescript-eslint/parser@^5.42.0": version "5.60.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.60.0.tgz#08f4daf5fc6548784513524f4f2f359cebb4068a" @@ -1755,11 +1729,6 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - at-least-node@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" @@ -1796,15 +1765,6 @@ axios@^1.4.0: form-data "^4.0.0" proxy-from-env "^1.1.0" -axios@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.4.0.tgz#38a7bf1224cd308de271146038b551d725f0be1f" - integrity sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA== - dependencies: - follow-redirects "^1.15.0" - form-data "^4.0.0" - proxy-from-env "^1.1.0" - axobject-query@^3.1.1: version "3.2.1" resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.2.1.tgz#39c378a6e3b06ca679f29138151e45b2b32da62a" @@ -2023,13 +1983,6 @@ combined-stream@^1.0.8: dependencies: delayed-stream "~1.0.0" -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - commander@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" @@ -2079,20 +2032,6 @@ cookies-next@^2.1.2: "@types/node" "^16.10.2" cookie "^0.4.0" -cookie@^0.4.0: - version "0.4.2" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" - integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== - -cookies-next@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/cookies-next/-/cookies-next-2.1.2.tgz#78fe2f3e7b68eb0e1c6682c9e1f4e94ce4d09904" - integrity sha512-czxcfqVaQlo0Q/3xMgp/2jpspsuLJrIm6D37wlmibP3DAcYT315c8UxQmDMohhAT/GRWpaHzpDEFANBjzTFQGg== - dependencies: - "@types/cookie" "^0.4.1" - "@types/node" "^16.10.2" - cookie "^0.4.0" - copy-anything@^3.0.2: version "3.0.5" resolved "https://registry.yarnpkg.com/copy-anything/-/copy-anything-3.0.5.tgz#2d92dce8c498f790fa7ad16b01a1ae5a45b020a0" @@ -2230,11 +2169,6 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - dequal@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" @@ -2750,11 +2684,6 @@ follow-redirects@^1.15.0: resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== -follow-redirects@^1.15.0: - version "1.15.2" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" - integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== - for-each@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" @@ -2771,15 +2700,6 @@ form-data@^4.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" -form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - fraction.js@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950" @@ -3039,13 +2959,6 @@ hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: dependencies: react-is "^16.7.0" -hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" - integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== - dependencies: - react-is "^16.7.0" - homedir-polyfill@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" @@ -3085,11 +2998,6 @@ immer@^9.0.21: resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.21.tgz#1e025ea31a40f24fb064f1fef23e931496330176" integrity sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA== -immer@^9.0.21: - version "9.0.21" - resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.21.tgz#1e025ea31a40f24fb064f1fef23e931496330176" - integrity sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA== - import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" @@ -3344,14 +3252,6 @@ is-weakref@^1.0.2: dependencies: call-bind "^1.0.2" -is-weakset@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" - integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - is-what@^4.1.8: version "4.1.15" resolved "https://registry.yarnpkg.com/is-what/-/is-what-4.1.15.tgz#de43a81090417a425942d67b1ae86e7fae2eee0e" @@ -3569,18 +3469,6 @@ mime-types@^2.1.12: dependencies: mime-db "1.52.0" -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" @@ -3999,11 +3887,6 @@ proxy-from-env@^1.1.0: resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== -proxy-from-env@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - punycode@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" @@ -4069,12 +3952,7 @@ react-hook-form@^7.45.1: resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.45.1.tgz#e352c7f4dbc7540f0756abbb4dcfd1122fecc9bb" integrity sha512-6dWoFJwycbuFfw/iKMcl+RdAOAOHDiF11KWYhNDRN/OkUt+Di5qsZHwA0OwsVnu9y135gkHpTw9DJA+WzCeR9w== -react-hook-form@^7.45.1: - version "7.45.1" - resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.45.1.tgz#e352c7f4dbc7540f0756abbb4dcfd1122fecc9bb" - integrity sha512-6dWoFJwycbuFfw/iKMcl+RdAOAOHDiF11KWYhNDRN/OkUt+Di5qsZHwA0OwsVnu9y135gkHpTw9DJA+WzCeR9w== - -react-is@^16.13.1, react-is@^16.7.0, react-is@^16.7.0: +react-is@^16.13.1, react-is@^16.7.0: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== @@ -4138,18 +4016,6 @@ redux@^4.2.1: dependencies: "@babel/runtime" "^7.9.2" -redux-thunk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.4.2.tgz#b9d05d11994b99f7a91ea223e8b04cf0afa5ef3b" - integrity sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q== - -redux@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/redux/-/redux-4.2.1.tgz#c08f4306826c49b5e9dc901dee0452ea8fce6197" - integrity sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w== - dependencies: - "@babel/runtime" "^7.9.2" - regenerator-runtime@^0.13.11: version "0.13.11" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" @@ -4179,11 +4045,6 @@ reselect@^4.1.8: resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.8.tgz#3f5dc671ea168dccdeb3e141236f69f02eaec524" integrity sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ== -reselect@^4.1.8: - version "4.1.8" - resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.8.tgz#3f5dc671ea168dccdeb3e141236f69f02eaec524" - integrity sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ== - resolve-dir@^1.0.0, resolve-dir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" @@ -4709,11 +4570,6 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -use-sync-external-store@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" - integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== - use-sync-external-store@^1.0.0, use-sync-external-store@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" From 92436c770ee1af771109c1644fd24b58b5318690 Mon Sep 17 00:00:00 2001 From: youngeun Date: Thu, 6 Jul 2023 00:41:46 +0900 Subject: [PATCH 42/76] chore: :hammer: delete files --- src/app/assets/edit/page.tsx | 98 ----------------- src/app/assets/page.tsx | 119 --------------------- src/components/AssetEnroll/index.tsx | 123 --------------------- src/components/Assets/index.tsx | 141 ------------------------- src/components/Common/Layout/index.tsx | 13 --- src/components/Radio/RadioGroup.tsx | 22 ---- src/components/SideNav.tsx | 37 ------- 7 files changed, 553 deletions(-) delete mode 100644 src/app/assets/edit/page.tsx delete mode 100644 src/app/assets/page.tsx delete mode 100644 src/components/AssetEnroll/index.tsx delete mode 100644 src/components/Assets/index.tsx delete mode 100644 src/components/Common/Layout/index.tsx delete mode 100644 src/components/Radio/RadioGroup.tsx delete mode 100644 src/components/SideNav.tsx diff --git a/src/app/assets/edit/page.tsx b/src/app/assets/edit/page.tsx deleted file mode 100644 index 58ac0ab..0000000 --- a/src/app/assets/edit/page.tsx +++ /dev/null @@ -1,98 +0,0 @@ -/** - * 에셋 조회/수정 페이지 - */ -import React from 'react' -import Layout from '@/components/Common/Layout' -import Header from '@/components/Header/Index' -import Body from '@/components/Body' -import TableContainer from '@/components/Table/TableContainer' -import TableItem from '@/components/Table/TableItem' -import Button from '@/components/Button' -import Divider from '@/components/Divider' -import SelectContainer from '@/components/Select/SelectContainer' - -export default function AssetsPage() { - return ( - -
      - - - -
      - - -
      -
      -
      - - - - - - {/* - 전체 - 판매중 - 판매중지 - */} - -
      -
      - - -
      - - - -
      - - 에셋 목록 (총 {10}개) - -
      -
      - - - - - - - - - - - - - - - -
      s - 상품번호 - 상품명 - 판매상태 - 판매가대분류소분류 - 상품등록일 - - 최종수정일 - 수정
      -
      - - - ) -} diff --git a/src/app/assets/page.tsx b/src/app/assets/page.tsx deleted file mode 100644 index 7fa1b00..0000000 --- a/src/app/assets/page.tsx +++ /dev/null @@ -1,119 +0,0 @@ -import Header from '@/components/Header/Index' -import Body from '@/components/Body' -import TableContainer from '@/components/Table/TableContainer' -import TableItem from '@/components/Table/TableItem' -import FileUploader from '@/components/Input/FileUploader' -import SelectContainer from '@/components/Select/SelectContainer' -import TextInput from '@/components/Input/TextInput' -import Divider from '@/components/Divider' -import ImageUploader from '@/components/Input/ImageUploader' -import Button from '@/components/Button' -import TagsContainer from '@/components/Tag/TagsContainer' -import Layout from '@/components/Common/Layout' - -export default function Home() { - return ( - -
      -
      -
      - - - - -

      - 파일은 fbx 포맷 (최대 10MB)만 업로드 가능합니다. -

      -
      -
      - - - - - - - -
      - -

      -
      -
      - -
      -
      - -
      - % -
      -

      할인

      -
      -
      - -
      -
      -

      최종판매가

      -

      - {}({}원 할인) -

      -
      -
      -
      - - - - - - - - - -

      - 전체 에셋 리스트 페이지에서 보여지는 대표 썸네일 이미지입니다. -
      - 권장크기: 214 x 266 -
      - jpg, jpeg, gif, png, bmp 형식의 이미지 (최대 10MB)만 등록 가능합니다. -

      -
      - -
      -
      - - - - - -
      -

      - 상세 페이지 최상단에 보여지는 이미지입니다. 최대 5장까지 등록 가능합니다. -
      - 권장 크기: 710 x 520 -
      - jpg, jpeg, gif, png, bmp 형식의 이미지 (최대 10MB)만 등록 가능합니다. -

      -
      -
      -
      -
      - - -
      - -
      - ) -} diff --git a/src/components/AssetEnroll/index.tsx b/src/components/AssetEnroll/index.tsx deleted file mode 100644 index f298197..0000000 --- a/src/components/AssetEnroll/index.tsx +++ /dev/null @@ -1,123 +0,0 @@ -import Body from '../Body' -import Button from '../Button' -import Divider from '../Divider' -import Header from '../Header/Index' -import FileUploader from '../Input/FileUploader' -import ImageUploader from '../Input/ImageUploader' -import Select from '../Input/Select' -import TextInput from '../Input/TextInput' -import SideNav from '../SideNav' -import TableContainer from '../TableContainer' -import TableItem from '../TableItem' -import TagsContainer from '../tag/TagsContainer' - -export default function AssetEnroll() { - return ( - <> -
      -
      -
      -
      - - - - -

      - 파일은 fbx 포맷 (최대 10MB)만 업로드 가능합니다. -

      -
      -
      - - - - - - - -
      - -

      -
      -
      - -
      -
      - -
      - % -
      -

      할인

      -
      - -
      -
      -

      최종판매가

      -

      - {}({}원 할인) -

      -
      -
      -
      -
      - - - - - - - - - - -

      - 전체 에셋 리스트 페이지에서 보여지는 대표 썸네일 이미지입니다. -
      - 권장크기: 214 x 266 -
      - jpg, jpeg, gif, png, bmp 형식의 이미지 (최대 10MB)만 등록 가능합니다. -

      -
      - -
      -
      - - - - - -
      -

      - 상세 페이지 최상단에 보여지는 이미지입니다. 최대 5장까지 등록 가능합니다. -
      - 권장 크기: 710 x 520 -
      - jpg, jpeg, gif, png, bmp 형식의 이미지 (최대 10MB)만 등록 가능합니다. -

      -
      -
      -
      -
      - - -
      - -
      - - ) -} diff --git a/src/components/Assets/index.tsx b/src/components/Assets/index.tsx deleted file mode 100644 index 3d4a2e3..0000000 --- a/src/components/Assets/index.tsx +++ /dev/null @@ -1,141 +0,0 @@ -/** - * 에셋 조회/수정 페이지 - */ -import React from 'react' -import Header from '@/components/Header/Index' -import Body from '@/components/Body' -import TableContainer from '@/components/TableContainer' -import TableItem from '@/components/TableItem' -import Select from '@/components/Input/Select' -import Button from '@/components/Button' -import Divider from '@/components/Divider' - -export default function Assets() { - return ( - <> -
      - - - -
      - - -
      -
      -
      - - - - - {/* */} - -
      -
      - - -
      - - - -
      - - 에셋 목록 (총 {10}개) - -
      - + + +
      +
      + + + + + + + {/* + 전체 + 판매중 + 판매중지 + */} + + +
      + + +
      + + + +
      + + 에셋 목록 (총 {10}개) + +
      + + + + ) +} diff --git a/src/app/order/[orderId]/page.tsx b/src/app/order/[orderId]/page.tsx new file mode 100644 index 0000000..b582c8d --- /dev/null +++ b/src/app/order/[orderId]/page.tsx @@ -0,0 +1,7 @@ +import React from 'react' + +export default function OrdersPage() { + return ( +
      Orders
      + ) +} diff --git a/src/app/order/search/page.tsx b/src/app/order/search/page.tsx new file mode 100644 index 0000000..4d2fe90 --- /dev/null +++ b/src/app/order/search/page.tsx @@ -0,0 +1,47 @@ +import React from 'react' +import Layout from '@/components/Layout' +import Header from '@/components/Header/Index' +import Divider from '@/components/Divider' +import Body from '@/components/Body' +import TableContainer from '@/components/Table/TableContainer' +import TableItem from '@/components/Table/TableItem' +import RadioContainer from '@/components/Radio/RadioContainer' +import DateInput from '@/components/Input/DateInput' +import ListBox from '@/components/Select/ListBox' +import TextInput from '@/components/Input/TextInput' +import Button from '@/components/Button' +import OrderTableContainer from '@/components/OrderTableContainer' + +export default function SalesManagementPage() { + return ( + +
      + + + + + + + + + + +
      + + +
      +
      + + + + + ) +} From 14a5e5ca843c9a0fa843a826e1cc147cc27e61d5 Mon Sep 17 00:00:00 2001 From: youngeun Date: Thu, 6 Jul 2023 00:48:50 +0900 Subject: [PATCH 45/76] =?UTF-8?q?refactor:=20:recycle:=20table=20=ED=91=9C?= =?UTF-8?q?=20=ED=81=B4=EB=9D=BC=EC=9D=B4=EC=96=B8=ED=8A=B8=20=EB=A0=8C?= =?UTF-8?q?=EB=8D=94=EB=A7=81=20=ED=95=98=EA=B8=B0=20=EC=9C=84=ED=95=B4=20?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=EC=97=90=EC=84=9C=20=EB=B6=84?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/AssetsTableContainer/index.tsx | 30 +++++ src/components/OrderTableContainer/index.tsx | 104 ++++++++++++++++++ 2 files changed, 134 insertions(+) create mode 100644 src/components/AssetsTableContainer/index.tsx create mode 100644 src/components/OrderTableContainer/index.tsx diff --git a/src/components/AssetsTableContainer/index.tsx b/src/components/AssetsTableContainer/index.tsx new file mode 100644 index 0000000..9c1ad08 --- /dev/null +++ b/src/components/AssetsTableContainer/index.tsx @@ -0,0 +1,30 @@ +import React from 'react' + +export default function AssetsTableContainer() { + return ( + <> +
      + + + + + + + + + + + + + + + +
      s상품번호상품명판매상태판매가대분류소분류 + 상품등록일 + + 최종수정일 + 수정
      +
      + + ) +} diff --git a/src/components/OrderTableContainer/index.tsx b/src/components/OrderTableContainer/index.tsx new file mode 100644 index 0000000..7d789d2 --- /dev/null +++ b/src/components/OrderTableContainer/index.tsx @@ -0,0 +1,104 @@ +import React from 'react' +import TableItem from '../Table/TableItem' +import ListBox from '../Select/ListBox' + +const orderList = [ + { + orderNumber: '20230627-000004', + orderDate: '2023-06-27', + assetName: 'agggg 외 11건', + assetCount: 12, + email: 'leeroun5@nate.com', + price: 21000.0, + paymentTool: '국민카드', + status: true, + }, + { + orderNumber: '20230627-000003', + orderDate: '2023-06-27', + assetName: 'adddd 외 10건', + assetCount: 11, + email: 'leejihun4@nate.com', + price: 21000.0, + paymentTool: '국민카드', + status: true, + }, + { + orderNumber: '20230627-000002', + orderDate: '2023-06-27', + assetName: 'abbbb 외 9건', + assetCount: 10, + email: 'yangjinho3@nate.com', + price: 21000.0, + paymentTool: '국민카드', + status: true, + }, + { + orderNumber: '20230627-000001', + orderDate: '2023-06-27', + assetName: 'aaaaa 외 8건', + assetCount: 9, + email: 'yuhyunju1@nate.com', + price: 21000.0, + paymentTool: '국민카드', + status: true, + }, +] + +export default function OrderTableContainer() { + return ( + <> +
      +
      + 목록 (총 {120}건 ) +
      + +
      +
      + + + + + + + + + + + + {orderList.map((item) => ( + + + + + + + + + + ))} + +
      주문번호주문일상품명 + 구매자 이메일 + 결제금액결제수단결제상태
      + {item.orderNumber} + + {item.orderDate} + + {item.assetName} + + {item.email} + + {item.price} + + {item.paymentTool} + + {item.status?'결제 완료':'결제 미완료'} +
      +
      + + ) +} From f08c26101d7e8004980def7fdaf9d595f821d5c2 Mon Sep 17 00:00:00 2001 From: youngeun Date: Thu, 6 Jul 2023 00:51:01 +0900 Subject: [PATCH 46/76] =?UTF-8?q?style:=20:lipstick:=20tailwind=20CSS?= =?UTF-8?q?=EB=A1=9C=20=EC=8A=A4=ED=83=80=EC=9D=BC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Body/index.tsx | 8 ++-- src/components/Button/index.tsx | 54 ++++++++++++++++++------ src/components/Divider/index.tsx | 12 +++--- src/components/Header/Index.tsx | 4 +- src/components/Input/FileUploader.tsx | 2 +- src/components/Table/TableItem/index.tsx | 7 ++- 6 files changed, 57 insertions(+), 30 deletions(-) diff --git a/src/components/Body/index.tsx b/src/components/Body/index.tsx index 32eb943..6be0932 100644 --- a/src/components/Body/index.tsx +++ b/src/components/Body/index.tsx @@ -1,11 +1,9 @@ import React, { ReactNode } from 'react' interface BodyProps { - children: ReactNode, + children: ReactNode } -export default function Body({children}:BodyProps) { - return ( -
      {children}
      - ) +export default function Body({ children }: BodyProps) { + return
      {children}
      } diff --git a/src/components/Button/index.tsx b/src/components/Button/index.tsx index c39d527..48423cd 100644 --- a/src/components/Button/index.tsx +++ b/src/components/Button/index.tsx @@ -1,26 +1,54 @@ -"use client" +'use client' -import React, {ReactNode, useState} from 'react' +import React, { ReactNode, useState } from 'react' interface ButtonProps { - width?: number, - height?: number, - backgroundColor?: string, - borderRadius?:number, - borderColor?: string, - color?: string, - id?:string, - onClick?:Function, children: ReactNode + width?: number + height?: number + backgroundColor?: string + borderRadius?: number + borderColor?: string + color?: string + id?: string + onClick?: Function } -export default function Button({children, width=13, height= 3.6, backgroundColor='#237FDB',borderRadius=0.4, borderColor='transparent', color='#FFF', id, onClick}:ButtonProps) { +export default function Button({ + children, + + width = 13, + height = 3.6, + backgroundColor = '#237FDB', + borderRadius = 0.4, + borderColor = 'transparent', + color = '#FFF', + id, + onClick, +}: ButtonProps) { const [isClicked, setIsClicked] = useState(false) const clickHandler = () => { setIsClicked(!isClicked) - } return ( - + ) } diff --git a/src/components/Divider/index.tsx b/src/components/Divider/index.tsx index 6c1590e..b5305ae 100644 --- a/src/components/Divider/index.tsx +++ b/src/components/Divider/index.tsx @@ -1,13 +1,15 @@ import React from 'react' interface DividerProps { - width?: string, - height?: string, - + width?: string + height?: number } -export default function Divider({width='100%',height='0.1rem'}:DividerProps) { +export default function Divider({ width = '100%', height = 0.1 }: DividerProps) { return ( -
      +
      ) } diff --git a/src/components/Header/Index.tsx b/src/components/Header/Index.tsx index fe05aba..53217c2 100644 --- a/src/components/Header/Index.tsx +++ b/src/components/Header/Index.tsx @@ -16,7 +16,7 @@ export default function Header({ buttonText = '에셋 등록', }: HeaderProps) { return ( -
      +

      @@ -26,7 +26,7 @@ export default function Header({

      {isButton && }
      - +
      ) } diff --git a/src/components/Input/FileUploader.tsx b/src/components/Input/FileUploader.tsx index d45ed38..84bb3f3 100644 --- a/src/components/Input/FileUploader.tsx +++ b/src/components/Input/FileUploader.tsx @@ -44,7 +44,7 @@ export default function FileUploader({ diff --git a/src/components/Table/TableItem/index.tsx b/src/components/Table/TableItem/index.tsx index 3e05d25..af5cbf1 100644 --- a/src/components/Table/TableItem/index.tsx +++ b/src/components/Table/TableItem/index.tsx @@ -1,20 +1,19 @@ import React, { Children, cloneElement } from 'react' interface TableItemProps { + children: any title: string required: boolean - - children: any } export default function TableItem({ children, title, required }: TableItemProps) { return ( -
    • +
    • {title} {required && }
      -
      +
      {Children.map(children, (child, index) => { return cloneElement(child, { key: index, From 74b44c7779d5689d49c887494a62fe7685cffe06 Mon Sep 17 00:00:00 2001 From: youngeun Date: Thu, 6 Jul 2023 00:52:23 +0900 Subject: [PATCH 47/76] =?UTF-8?q?refactor:=20:recycle:=20selectContainer?= =?UTF-8?q?=20=EC=97=90=EC=84=9C=20ListBox=20=EB=A7=8C=20=EB=94=B0?= =?UTF-8?q?=EB=A1=9C=20=EB=B6=84=EB=A6=AC=ED=95=B4=EC=84=9C=20=EC=BB=B4?= =?UTF-8?q?=ED=8F=AC=EB=84=8C=ED=8A=B8=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Select/ListBox.tsx | 44 +++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/components/Select/ListBox.tsx diff --git a/src/components/Select/ListBox.tsx b/src/components/Select/ListBox.tsx new file mode 100644 index 0000000..5b7eaa9 --- /dev/null +++ b/src/components/Select/ListBox.tsx @@ -0,0 +1,44 @@ +'use client' +import React, { ReactNode } from 'react' +import { Listbox } from '@headlessui/react' +import { DropDownIcon } from '../../../public/icons/icons' + +interface ListBoxProps { + children?: ReactNode + title: string + disabled?: boolean + array: any[] +} + +export default function ListBox({ children, title, disabled = false, array }: ListBoxProps) { + return ( +
      + + + {title} + + + {!disabled && ( + + {array.map((item) => ( + { + console.log('clicked!!') + }} + > + {item} + + ))} + + )} + + {children} +
      + ) +} From a4facbbaac87302caf99881ce923f2618b175e2d Mon Sep 17 00:00:00 2001 From: youngeun Date: Thu, 6 Jul 2023 00:57:15 +0900 Subject: [PATCH 48/76] chore: :hammer: chore --- src/components/Layout/index.tsx | 11 +++ src/components/Select/SelectContainer.tsx | 87 +++-------------------- src/components/SideNav/index.tsx | 29 ++++++++ 3 files changed, 49 insertions(+), 78 deletions(-) create mode 100644 src/components/Layout/index.tsx create mode 100644 src/components/SideNav/index.tsx diff --git a/src/components/Layout/index.tsx b/src/components/Layout/index.tsx new file mode 100644 index 0000000..e249c93 --- /dev/null +++ b/src/components/Layout/index.tsx @@ -0,0 +1,11 @@ +import SideNav from '@/components/SideNav' +import React, { ReactNode } from 'react' + +export default function Layout({ children }: { children: ReactNode }) { + return ( +
      + +
      {children}
      +
      + ) +} diff --git a/src/components/Select/SelectContainer.tsx b/src/components/Select/SelectContainer.tsx index 123f07f..8331910 100644 --- a/src/components/Select/SelectContainer.tsx +++ b/src/components/Select/SelectContainer.tsx @@ -1,17 +1,7 @@ 'use client' import { useEffect, useState } from 'react' -import { Listbox } from '@headlessui/react' -import { DropDownIcon } from '../../../public/icons/icons' +import ListBox from './ListBox' import { getFullCategoryList } from '@/api/service/category' -type Category = { - id: number - categoryName: string - subCategory?: Category[] -} - -interface SelectContainerProps { - categoryList: Category[] -} export default function SelectContainer() { const getSubCategoryList = () => {} @@ -20,7 +10,7 @@ export default function SelectContainer() { const [selectedOption, setSelectedOption] = useState(initialState) const [disabled, setDisabled] = useState(true) - const handleOptionClick = (e) => { + const handleOptionClick = (e: any) => { console.log(e.target.textContent) if ((e.target.id = 'mainCategory')) { setSelectedOption((prev) => ({ @@ -47,73 +37,14 @@ export default function SelectContainer() { return ( <>
      - - - {selectedOption.main} - - - - {categoryList.map((item) => ( - - {item.categoryName} - - ))} - - - - - {selectedOption.sub} - - - {!disabled && ( - - {subCategoryList?.map((item) => ( - - {item.categoryName} - - ))} - - )} - + +

      + 선택한 카테고리: {selectedOption.main} {' > '} + {selectedOption.sub} +

      +
      + {/* */}
      -

      - 선택한 카테고리: {selectedOption.main} {' > '} - {selectedOption.sub} -

      ) } diff --git a/src/components/SideNav/index.tsx b/src/components/SideNav/index.tsx new file mode 100644 index 0000000..2bd6ef4 --- /dev/null +++ b/src/components/SideNav/index.tsx @@ -0,0 +1,29 @@ +import SideNavLogo from './SideNavLogo' +import SideNavListContainer from './SideNavListContainer' +import SideNavListHeader from './SideNavListHeader' +import SideNavListItemsWrapper from './SideNavListItemsWrapper' +import SideNavListItem from './SideNavListItem' +export default function SideNav() { + return ( + + ) +} From f3a1ce635a1c29989827d0764ac5575eb3d1562a Mon Sep 17 00:00:00 2001 From: youngeun Date: Thu, 6 Jul 2023 02:16:32 +0900 Subject: [PATCH 49/76] =?UTF-8?q?feat:=20:sparkles:=20radio=20Select=20?= =?UTF-8?q?=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Radio/RadioContainer.tsx | 35 ++++++++++++++++++++ src/components/Radio/index.tsx | 44 ++++++++++++++----------- 2 files changed, 59 insertions(+), 20 deletions(-) create mode 100644 src/components/Radio/RadioContainer.tsx diff --git a/src/components/Radio/RadioContainer.tsx b/src/components/Radio/RadioContainer.tsx new file mode 100644 index 0000000..2a3d50b --- /dev/null +++ b/src/components/Radio/RadioContainer.tsx @@ -0,0 +1,35 @@ +'use client' +import { useState } from 'react' +import { RadioGroup } from '@headlessui/react' +import { RadioActive, RadioInactive } from '../../../public/icons/icons' +interface RadioGroupProps { + type: 'circle' | 'rectangle' + label: string + array: string[] +} + +export default function RadioContainer({ type, label, array }: RadioGroupProps) { + const [isFocused, setIsFocused] = useState([]) + return ( + + {type === 'circle' + ? array.map((item) => ( + +
      + + {item} +
      +
      + )) + : array.map((item) => ( + + {item} + + ))} +
      + ) +} diff --git a/src/components/Radio/index.tsx b/src/components/Radio/index.tsx index c3aa69b..561fe11 100644 --- a/src/components/Radio/index.tsx +++ b/src/components/Radio/index.tsx @@ -1,28 +1,32 @@ -"use client" -import React , {useState,useRef,useContext, ReactNode}from 'react' -import { VisuallyHidden, useRadio} from 'react-aria'; -import { RadioContext } from './RadioGroup'; -import { RadioActive, RadioInactive } from '../../../public/icons/icons'; +'use client' +import React, { useState, useRef, useContext, ReactNode } from 'react' +import { VisuallyHidden, useRadio } from 'react-aria' +import { RadioContext } from './RadioContainer' +import { RadioActive, RadioInactive } from '../../../public/icons/icons' // RadioGroup is the same as in the previous example interface RadioProps { - children: ReactNode, - value: string, + children: ReactNode + value: string } - -export default function Radio(props:RadioProps) { - const { children, value } = props; - const state = useContext(RadioContext); - const inputRef = useRef(null); - let{ inputProps, isSelected } = useRadio(props, state, inputRef); +export default function Radio(props: RadioProps) { + const { children, value } = props + const state = useContext(RadioContext) + const inputRef = useRef(null) + let { inputProps, isSelected } = useRadio(props, state, inputRef) const radioClickHandler = () => { - isSelected = true; + isSelected = true } return ( -
      + - +
      에셋 목록 (총 {10}개)
      - + ) diff --git a/src/app/order/search/page.tsx b/src/app/order/search/page.tsx index 4d2fe90..9001d5b 100644 --- a/src/app/order/search/page.tsx +++ b/src/app/order/search/page.tsx @@ -13,6 +13,11 @@ import Button from '@/components/Button' import OrderTableContainer from '@/components/OrderTableContainer' export default function SalesManagementPage() { + //주문 번호 ?onum=20230704000004 + // 상품명 &name=cuteboy + // 상품번호 $anum= + // 이메일 $email=sdfkj@naver.com + return (
      diff --git a/src/components/AssetsTableContainer/index.tsx b/src/components/AssetsTableContainer/index.tsx index 9c1ad08..8fa0876 100644 --- a/src/components/AssetsTableContainer/index.tsx +++ b/src/components/AssetsTableContainer/index.tsx @@ -1,13 +1,37 @@ -import React from 'react' +'use client' +import React, { useState } from 'react' +import Image from 'next/image' export default function AssetsTableContainer() { + const [checkboxChecked, setCheckboxChecked] = useState(false) + return ( <>
      - +
      - + diff --git a/src/components/Divider/index.tsx b/src/components/Divider/index.tsx index b5305ae..1ba73ef 100644 --- a/src/components/Divider/index.tsx +++ b/src/components/Divider/index.tsx @@ -5,7 +5,7 @@ interface DividerProps { height?: number } -export default function Divider({ width = '100%', height = 0.1 }: DividerProps) { +export default function Divider({ width = '100%', height = 0.2 }: DividerProps) { return (
      Date: Thu, 6 Jul 2023 02:18:37 +0900 Subject: [PATCH 51/76] =?UTF-8?q?feat:=20:sparkles:=20date=20Input=20?= =?UTF-8?q?=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Input/DateInput.tsx | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 src/components/Input/DateInput.tsx diff --git a/src/components/Input/DateInput.tsx b/src/components/Input/DateInput.tsx new file mode 100644 index 0000000..b27b5c6 --- /dev/null +++ b/src/components/Input/DateInput.tsx @@ -0,0 +1,7 @@ +import React from 'react' +import { DatePicker, Space } from 'antd'; +import type { RangePickerProps } from 'antd/es/date-picker'; + +export default function DateInput() { + return +} From 0139f7e34b31b5fe978b23f81ad4656a28b2d3a0 Mon Sep 17 00:00:00 2001 From: youngeun Date: Thu, 6 Jul 2023 02:19:08 +0900 Subject: [PATCH 52/76] =?UTF-8?q?feat:=20:sparkles:=20cSR=20=EC=97=90?= =?UTF-8?q?=EC=84=9C=20SSG=20=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Table/TableContainer/index.tsx | 23 ++++++------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/src/components/Table/TableContainer/index.tsx b/src/components/Table/TableContainer/index.tsx index a052e6a..62670b0 100644 --- a/src/components/Table/TableContainer/index.tsx +++ b/src/components/Table/TableContainer/index.tsx @@ -1,26 +1,17 @@ -"use client" -import React, { useState, ReactNode,Children, cloneElement, ReactElement } from 'react' +import React, { Children, cloneElement, ReactElement } from 'react' interface TableContainerProps { children: ReactElement[] } -export default function TableContainer({children}:TableContainerProps) { - - +export default function TableContainer({ children }: TableContainerProps) { return ( -
        - { - Children.map(children,(child,index)=> { - return cloneElement(child,{ - key: index, - - - }) +
          + {Children.map(children, (child, index) => { + return cloneElement(child, { + key: index, }) - } + })}
        - - ) } From 8939d04b5bd4125418d6cabd2bd1695e5776ed2b Mon Sep 17 00:00:00 2001 From: youngeun Date: Fri, 7 Jul 2023 21:13:02 +0900 Subject: [PATCH 53/76] =?UTF-8?q?perf:=20:zap:=20=EC=97=90=EC=85=8B?= =?UTF-8?q?=EC=A1=B0=ED=9A=8CAPI=20=EC=9A=94=EC=B2=AD=20Request=20Interfac?= =?UTF-8?q?e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/interface/asset.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/api/interface/asset.ts b/src/api/interface/asset.ts index bfe46ed..dfeff66 100644 --- a/src/api/interface/asset.ts +++ b/src/api/interface/asset.ts @@ -1,4 +1,15 @@ -import { ApiResponse} from './' +import { ApiResponse } from './' + +export interface AssetsSearchRequest { + page?: number + size?: number + sort?: 'createdAt' | 'desc' + num?: number + name?: string + category?: string + subcategory?: string + status?: boolean +} export interface AssetDetail { assetId: number From cd835a1832b3b6dba1147eb5434f36459942f768 Mon Sep 17 00:00:00 2001 From: youngeun Date: Fri, 7 Jul 2023 21:16:01 +0900 Subject: [PATCH 54/76] =?UTF-8?q?refactor:=20:recycle:=20select=20?= =?UTF-8?q?=EC=99=80=20Select=20Container=20=EC=BB=B4=ED=8F=AC=EB=84=8C?= =?UTF-8?q?=ED=8A=B8=20=EB=8D=94=20=EB=8B=A8=EC=88=9C=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Select/AssetCategorySelectContainer.tsx | 48 ++++++++++++++++++ src/components/Select/ListBox.tsx | 31 ++++++++---- .../Select/OrderCategorySelectContainer.tsx | 15 ++++++ src/components/Select/SelectContainer.tsx | 50 ------------------- 4 files changed, 84 insertions(+), 60 deletions(-) create mode 100644 src/components/Select/AssetCategorySelectContainer.tsx create mode 100644 src/components/Select/OrderCategorySelectContainer.tsx delete mode 100644 src/components/Select/SelectContainer.tsx diff --git a/src/components/Select/AssetCategorySelectContainer.tsx b/src/components/Select/AssetCategorySelectContainer.tsx new file mode 100644 index 0000000..dfb9499 --- /dev/null +++ b/src/components/Select/AssetCategorySelectContainer.tsx @@ -0,0 +1,48 @@ +'use client' +import { useEffect, useState } from 'react' +import ListBox from './ListBox' +import { getFullCategoryList, getSubCategoryList } from '@/api/service/category' + +export default function AssetCategorySelectContainer() { + const [mainCategory, setMainCategory] = useState([]) + const [subCategory, setSubCategory] = useState([]) + const [selectedMainOption, setSelectedMainOption] = useState('대분류') + const [selectedSubOption, setSelectedSubOption] = useState('소분류') + + const getMainCategory = async () => { + const res = await getFullCategoryList() + console.log('main:', res.data.categoryList) + setMainCategory(res.data.categoryList) + } + const getSubCategory = async (mainCategory: string) => { + const res = await getSubCategoryList(mainCategory) + console.log('sub:', res.data.subCategoryList) + setSubCategory(res.data.subCategoryList) + } + useEffect(() => { + getMainCategory() + selectedMainOption && getSubCategory(selectedMainOption) + }, []) + return ( + <> +
        + +

        + 선택한 카테고리: {selectedMainOption} {' > '} + {selectedSubOption} +

        +
        + +
        + + ) +} diff --git a/src/components/Select/ListBox.tsx b/src/components/Select/ListBox.tsx index 5b7eaa9..10fc692 100644 --- a/src/components/Select/ListBox.tsx +++ b/src/components/Select/ListBox.tsx @@ -1,24 +1,37 @@ 'use client' -import React, { ReactNode } from 'react' +import React, { useState, ReactNode, Dispatch, SetStateAction, MouseEventHandler } from 'react' import { Listbox } from '@headlessui/react' import { DropDownIcon } from '../../../public/icons/icons' interface ListBoxProps { children?: ReactNode - title: string - disabled?: boolean + array: any[] + selectedOption: string + setSelectedOption: Dispatch> + disabled?: boolean } -export default function ListBox({ children, title, disabled = false, array }: ListBoxProps) { +export default function ListBox({ + children, + array, + selectedOption, + setSelectedOption, + disabled, +}: ListBoxProps) { + const handleOptionClick: MouseEventHandler = (e) => { + setSelectedOption(e.currentTarget.innerHTML) + } + return (
        - {title} + {selectedOption} {!disabled && ( @@ -28,9 +41,7 @@ export default function ListBox({ children, title, disabled = false, array }: Li key={item.index} value={item} className="flex min-h-[3.5rem] w-[24rem] items-center border border-[rgba(0,0,0,0)] px-[2rem] py-[0.9rem] text-neutral-navy-200 hover:border-neutral-navy-200" - onClick={() => { - console.log('clicked!!') - }} + onClick={handleOptionClick} > {item} diff --git a/src/components/Select/OrderCategorySelectContainer.tsx b/src/components/Select/OrderCategorySelectContainer.tsx new file mode 100644 index 0000000..691c1ba --- /dev/null +++ b/src/components/Select/OrderCategorySelectContainer.tsx @@ -0,0 +1,15 @@ +'use client' +import React, { useState } from 'react' +import ListBox from './ListBox' +export default function OrderCategorySelectContainer() { + const [selectedOption, setSelectedOption] = useState('주문번호') + return ( +
        + +
        + ) +} diff --git a/src/components/Select/SelectContainer.tsx b/src/components/Select/SelectContainer.tsx deleted file mode 100644 index 8331910..0000000 --- a/src/components/Select/SelectContainer.tsx +++ /dev/null @@ -1,50 +0,0 @@ -'use client' -import { useEffect, useState } from 'react' -import ListBox from './ListBox' -import { getFullCategoryList } from '@/api/service/category' - -export default function SelectContainer() { - const getSubCategoryList = () => {} - const [categoryList, setCategoryList] = useState([]) - const initialState = { main: '대분류', sub: '소분류' } - const [selectedOption, setSelectedOption] = useState(initialState) - const [disabled, setDisabled] = useState(true) - - const handleOptionClick = (e: any) => { - console.log(e.target.textContent) - if ((e.target.id = 'mainCategory')) { - setSelectedOption((prev) => ({ - ...prev, - ['main']: e.target.textContent, - })) - } else { - setSelectedOption((prev) => ({ - ...prev, - ['sub']: e.target.textContent, - })) - } - } - - useEffect(() => { - ;(async () => { - const res = await getFullCategoryList() - const mainCategoryList = res?.data.categoryList - console.log(res.data.categoryList) - setCategoryList(mainCategoryList) - })() - }, []) - - return ( - <> -
        - -

        - 선택한 카테고리: {selectedOption.main} {' > '} - {selectedOption.sub} -

        -
        - {/* */} -
        - - ) -} From 3a7c4cded1811a5ced9456b28fa5f62f63de4cd2 Mon Sep 17 00:00:00 2001 From: youngeun Date: Fri, 7 Jul 2023 21:18:48 +0900 Subject: [PATCH 55/76] =?UTF-8?q?style:=20:lipstick:=20=EC=BD=94=EB=93=9C?= =?UTF-8?q?=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/axios.ts | 4 +--- src/app/page.tsx | 1 - src/components/tag/TagChip.tsx | 1 - 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/api/axios.ts b/src/api/axios.ts index 39026fc..f7c98d9 100644 --- a/src/api/axios.ts +++ b/src/api/axios.ts @@ -5,9 +5,7 @@ export const axiosInstance = axios.create({ baseURL: process.env.NEXT_PUBLIC_BASE_URL, headers: { 'Content-Type': 'application/json', - Authorization: - 'Bearer ' + - `eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJqd3RzdHVkeSIsInJvbGUiOiJBRE1JTiIsImlkIjo4LCJleHAiOjE2ODg0NTQ5ODJ9.39oYa-zExLNiQnw8Nu3B6ozL9gjs2VGPN9riCY00QnZZmvOv6oGxe7rlyoiVY_CrSlrW294c1JVfN9zrGDT-8A`, + Authorization:'Bearer ' + `eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJqd3RzdHVkeSIsInJvbGUiOiJBRE1JTiIsImlkIjo4LCJleHAiOjE2ODg0NTQ5ODJ9.39oYa-zExLNiQnw8Nu3B6ozL9gjs2VGPN9riCY00QnZZmvOv6oGxe7rlyoiVY_CrSlrW294c1JVfN9zrGDT-8A`, }, }) diff --git a/src/app/page.tsx b/src/app/page.tsx index 9294540..0b33025 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -5,7 +5,6 @@ export default function Home() { return ( <> - {/* */} ) diff --git a/src/components/tag/TagChip.tsx b/src/components/tag/TagChip.tsx index 9c0cbce..0c497e5 100644 --- a/src/components/tag/TagChip.tsx +++ b/src/components/tag/TagChip.tsx @@ -11,7 +11,6 @@ export default function TagChip({ children, tagsArr, setTagsArr }: TagChipProps) const tagRef = useRef(null) const deleteTagHandler = () => { const newArr = tagsArr.filter((item) => item !== tagRef.current?.innerText) - console.log(newArr) setTagsArr(newArr) } return ( From 1a3ba7ca92515220f4f0fdaa9ee6e3cca5138555 Mon Sep 17 00:00:00 2001 From: youngeun Date: Fri, 7 Jul 2023 21:20:39 +0900 Subject: [PATCH 56/76] =?UTF-8?q?refactor:=20:recycle:=20=ED=85=8C?= =?UTF-8?q?=EC=9D=B4=EB=B8=94=ED=91=9C=EC=97=90=EC=84=9C=20=EA=B3=B5?= =?UTF-8?q?=ED=86=B5=20=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EB=A7=8C?= =?UTF-8?q?=EB=93=A4=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AssetsTableContainer/TableRow.tsx | 78 ++++++++++++++++ src/components/AssetsTableContainer/index.tsx | 90 ++++++++++--------- .../OrderTableContainer/TableRow.tsx | 41 +++++++++ src/components/OrderTableContainer/index.tsx | 67 ++++++-------- 4 files changed, 197 insertions(+), 79 deletions(-) create mode 100644 src/components/AssetsTableContainer/TableRow.tsx create mode 100644 src/components/OrderTableContainer/TableRow.tsx diff --git a/src/components/AssetsTableContainer/TableRow.tsx b/src/components/AssetsTableContainer/TableRow.tsx new file mode 100644 index 0000000..c2234e8 --- /dev/null +++ b/src/components/AssetsTableContainer/TableRow.tsx @@ -0,0 +1,78 @@ +'use client' +import React, { useState, Dispatch, SetStateAction } from 'react' +import Image from 'next/image' +import Button from '../Button' + +interface TableRowProps { + num: string + name: string + status: string + price: number | '판매가' + category: string + subcategory: string + releaseDate: string + updatedAt: string + isHeader: boolean +} + +export default function TableRow({ + num, + name, + status, + price, + category, + subcategory, + releaseDate, + updatedAt, + isHeader, +}: TableRowProps) { + const [checkboxChecked, setCheckboxChecked] = useState(false) + return ( +
      + + + + + + + + + + + + ) +} diff --git a/src/components/AssetsTableContainer/index.tsx b/src/components/AssetsTableContainer/index.tsx index 8fa0876..f97c3d8 100644 --- a/src/components/AssetsTableContainer/index.tsx +++ b/src/components/AssetsTableContainer/index.tsx @@ -1,51 +1,59 @@ -'use client' -import React, { useState } from 'react' -import Image from 'next/image' +import React from 'react' +import TableRow from './TableRow' +const assetList = [ + { + assetNumber: '20230601-000001', + assetName: 'cute man', + status: 'active', + price: 1000.0, + categoryName: 'cute', + subCategoryName: 'man', + releaseDate: '2023-06-01', + updatedAt: '2023-07-04', + }, + { + assetNumber: '20230601-000001', + assetName: 'cute man', + status: 'active', + price: 1000.0, + categoryName: 'cute', + subCategoryName: 'man', + releaseDate: '2023-06-01', + updatedAt: '2023-07-04', + }, +] export default function AssetsTableContainer() { - const [checkboxChecked, setCheckboxChecked] = useState(false) - return ( <>
      s + {checkboxChecked ? ( + checkbox on icon setCheckboxChecked(!checkboxChecked)} + className="hover:cursor-pointer" + /> + ) : ( + checkbox off icon setCheckboxChecked(!checkboxChecked)} + className="hover:cursor-pointer" + /> + )} + 상품번호 상품명 판매상태
      + {checkboxChecked ? ( + checkbox on icon setCheckboxChecked(!checkboxChecked)} + className="hover:cursor-pointer" + /> + ) : ( + checkbox off icon setCheckboxChecked(!checkboxChecked)} + className="hover:cursor-pointer" + /> + )} + {num}{name} + {status === 'active' ? '판매중' : '판매중지'} + {price}{category}{subcategory}{releaseDate}{updatedAt} + {isHeader ? ( + '수정' + ) : ( + + )} +
      - - - - - - - - - - - - + + {assetList.map((asset) => ( + + ))}
      - {checkboxChecked ? ( - checkbox on icon setCheckboxChecked(!checkboxChecked)} - className="hover:cursor-pointer" - /> - ) : ( - checkbox off icon setCheckboxChecked(!checkboxChecked)} - className="hover:cursor-pointer" - /> - )} - 상품번호상품명판매상태판매가대분류소분류 - 상품등록일 - - 최종수정일 - 수정
      diff --git a/src/components/OrderTableContainer/TableRow.tsx b/src/components/OrderTableContainer/TableRow.tsx new file mode 100644 index 0000000..a32f4da --- /dev/null +++ b/src/components/OrderTableContainer/TableRow.tsx @@ -0,0 +1,41 @@ +import React from 'react' + +interface TableRowProps { + num: string + orderedDate: string + name: string + email: string + price: number | '결제금액' + payment: string + status: boolean | '결제상태' | '결제완료' | '결제대기' + isHeader: boolean +} + +export default function TableRow({ + num, + orderedDate, + name, + email, + price, + payment, + status, + isHeader, +}: TableRowProps) { + return ( +
      + + {num} + {orderedDate} + {name} + {email} + {price} + {payment} + {status} + +
      + ) +} diff --git a/src/components/OrderTableContainer/index.tsx b/src/components/OrderTableContainer/index.tsx index 7d789d2..0a51a67 100644 --- a/src/components/OrderTableContainer/index.tsx +++ b/src/components/OrderTableContainer/index.tsx @@ -1,6 +1,8 @@ -import React from 'react' +'use client' +import React, { useState } from 'react' import TableItem from '../Table/TableItem' import ListBox from '../Select/ListBox' +import TableRow from './TableRow' const orderList = [ { @@ -46,55 +48,44 @@ const orderList = [ ] export default function OrderTableContainer() { + const [selectedOption, setSelectedOption] = useState('주문일 최신순') return ( <>
      목록 (총 {120}건 )
      - +
      - - - - - - - - - + {orderList.map((item) => ( - - - - - - - - - + num={item.orderNumber} + orderedDate={item.orderDate} + name={item.assetName} + email={item.email} + price={item.price} + payment={item.paymentTool} + status={item.status ? '결제완료' : '결제대기'} + isHeader={false} + /> ))}
      주문번호주문일상품명 - 구매자 이메일 - 결제금액결제수단결제상태
      - {item.orderNumber} - - {item.orderDate} - - {item.assetName} - - {item.email} - - {item.price} - - {item.paymentTool} - - {item.status?'결제 완료':'결제 미완료'} -
      From 15e05a282e8c2b0768968ba74c5f9a18510db8e4 Mon Sep 17 00:00:00 2001 From: youngeun Date: Fri, 7 Jul 2023 21:23:02 +0900 Subject: [PATCH 57/76] =?UTF-8?q?feat:=20:sparkles:=20input=20File=20?= =?UTF-8?q?=EC=83=81=ED=99=A9=EB=B3=84=20=EC=A1=B0=EA=B1=B4=EC=97=90=20?= =?UTF-8?q?=EB=94=B0=EB=9D=BC=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Input/FileUploader.tsx | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/src/components/Input/FileUploader.tsx b/src/components/Input/FileUploader.tsx index 84bb3f3..6593945 100644 --- a/src/components/Input/FileUploader.tsx +++ b/src/components/Input/FileUploader.tsx @@ -1,8 +1,11 @@ 'use client' import React, { ReactNode, useState, ChangeEvent } from 'react' import { useDispatch } from 'react-redux' -import { createFileUrl, createFileExtension, createFileSize } from '@/store/assetSlice' +import { UseSelector } from 'react-redux/es/hooks/useSelector' import Button from '../Button' +import { createFileUrl, createFileExtension, createFileSize } from '@/store/assetSlice' +import { uploadFileAsset } from '@/api/service/asset' +import { debounce } from '@/utils/debounce' interface FileUploaderProps { inputWidth: number @@ -22,18 +25,22 @@ export default function FileUploader({ }: FileUploaderProps) { const [value, setValue] = useState(inputValue ? inputValue : '선택된 파일 없음') const dispatch = useDispatch() - const createFileInfo = (file: File) => { - const fileSize = Number((file.size / 1024).toFixed(2)) - dispatch(createFileUrl(file)) - // dispatch(createFileExtension()) - // dispatch(createFileSize(fileSize)) - } + const uploadFileHandler = (e: ChangeEvent) => { e.preventDefault() + setValue('') if (e.currentTarget.files !== null) { - console.log('file:', e.currentTarget.files[0]) - setValue(e.currentTarget.files[0].name) - // setTimeout(createFileInfo(e.currentTarget.files[0]), 5000) + const fileAsset = e.currentTarget.files[0] + const fileSize = Number((fileAsset.size / 1024 ** 2).toFixed(2)) + if (fileSize > 10) { + alert('최대 10MB까지 업로드 가능합니다.') + } else { + setValue(fileAsset.name) + debounce(() => { + console.log('debounce') + dispatch(createFileUrl(fileAsset)) + }, 2000)() + } } else { alert('파일이 존재하지 않습니다.') } From 2eb7e3bd267d36fe7da377d1eaf23345128bfcb7 Mon Sep 17 00:00:00 2001 From: youngeun Date: Fri, 7 Jul 2023 21:27:09 +0900 Subject: [PATCH 58/76] =?UTF-8?q?feat:=20:sparkles:=20input=20Text=20?= =?UTF-8?q?=EB=94=94=EB=B0=94=EC=9A=B4=EC=8A=A4=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=20->=20=EC=9D=BC=EC=A0=95=ED=95=9C=20?= =?UTF-8?q?=EC=8B=9C=EA=B0=84=20=EC=A7=80=EB=82=98=EC=95=BC=20=EC=83=81?= =?UTF-8?q?=ED=83=9Cset=20=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Input/TextInput.tsx | 73 +++++++++++++++++++++--------- 1 file changed, 52 insertions(+), 21 deletions(-) diff --git a/src/components/Input/TextInput.tsx b/src/components/Input/TextInput.tsx index 41e1af4..a9f6ee9 100644 --- a/src/components/Input/TextInput.tsx +++ b/src/components/Input/TextInput.tsx @@ -1,6 +1,7 @@ 'use client' import React, { useState, useRef, KeyboardEvent, Dispatch, SetStateAction, FormEvent } from 'react' import { useForm } from 'react-hook-form' +import { useDispatch } from 'react-redux' import { createAssetName, createAssetDescription, @@ -8,9 +9,10 @@ import { createAssetDiscount, createTagList, } from '@/store/assetSlice' - +import { debounce } from '@/utils/debounce' interface TextInputProps { type?: 'input' | 'textarea' | 'number' + label?: 'name' | 'price' | 'description' | 'tag' | 'none' required: boolean width: number height?: number @@ -24,6 +26,7 @@ interface TextInputProps { export default function TextInput({ type = 'input', + label = 'none', required, width, height = 4.2, @@ -40,41 +43,68 @@ export default function TextInput({ mode: 'onChange', defaultValues: { inputValue }, }) - const inputRef = useRef() + const inputRef = useRef() const [inputLength, setInputLength] = useState(inputValue?.length) const tagsArr = props.tagsArr const setTagsArr = props.setTagsArr + const dispatch = useDispatch() - const handlerKeyDown = (e: KeyboardEvent) => { - if (counter && e.key !== 'Enter') { - setInputLength(e.currentTarget.value.length) - console.log(e.nativeEvent) + const keyDownHandler = (e: KeyboardEvent) => { + const inputValue = e.currentTarget.value + if (e.key !== 'Enter') { + counter && setInputLength(e.currentTarget.value.length) + if (label !== 'tag') { + debounce(() => { + switch (label) { + case 'name': + dispatch(createAssetName(inputValue)) + console.log('nameRedux') + break + case 'price': + dispatch(createAssetPrice(parseFloat(inputValue))) + console.log('priceRedux') + break + case 'description': + dispatch(createAssetDescription(inputValue)) + console.log('descriptionRedux') + break + } + }, 2000)() + } else if (label === 'tag') { + return + } } } - const submitHandler = (e: FormEvent) => { + + const tagSubmitHandler = (e: FormEvent) => { e.preventDefault() if (tagsArr !== undefined && setTagsArr !== undefined && inputRef.current !== undefined) { - if (tagsArr.length >= 10) { - alert('최대 10개까지 가능합니다.') - return - } else { - if (tagsArr.find((item) => item === inputRef.current?.value)) { - console.log('tagsArr:', tagsArr) - alert('이미 존재하는 태그입니다.') - return - } else { - console.log([...tagsArr, inputRef.current?.value]) - setTagsArr([...tagsArr, inputRef.current?.value]) + if (inputRef.current.value) { + if (tagsArr.length >= 10) { + alert('최대 10개까지 가능합니다.') inputRef.current.value = '' - return + } else { + if (tagsArr.find((item) => item === inputRef.current?.value)) { + alert('이미 존재하는 태그입니다.') + inputRef.current.value = '' + } else { + // console.log([...tagsArr, inputRef.current?.value]) + setTagsArr([...tagsArr, inputRef.current?.value]) + debounce(() => { + dispatch(createTagList([inputRef.current?.value, ...tagsArr])) + }, 2000)() + console.log('tagsDispatch') + } } + } else { + alert('태그명을 입력해주세요.') } } } return ( <> {type === 'input' || type === 'number' ? ( -
      + )} From f6a0d4c3c26ed8cddbf45d4a2e97f89079a95ded Mon Sep 17 00:00:00 2001 From: youngeun Date: Fri, 7 Jul 2023 21:28:13 +0900 Subject: [PATCH 59/76] =?UTF-8?q?feat:=20:sparkles:=20input=20Image(File)?= =?UTF-8?q?=20=EC=83=81=ED=99=A9=EB=B3=84=20=EC=A1=B0=EA=B1=B4=EC=97=90=20?= =?UTF-8?q?=EB=94=B0=EB=A5=B8=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Input/ImageUploader.tsx | 60 ++++++++++++++++++++------ 1 file changed, 47 insertions(+), 13 deletions(-) diff --git a/src/components/Input/ImageUploader.tsx b/src/components/Input/ImageUploader.tsx index 36fc457..d834044 100644 --- a/src/components/Input/ImageUploader.tsx +++ b/src/components/Input/ImageUploader.tsx @@ -1,26 +1,60 @@ 'use client' import React, { useState, useRef, ChangeEvent } from 'react' +import { useDispatch } from 'react-redux' +import { createThumbnailSrc, createPreviewUrlList } from '@/store/assetSlice' +import { debounce } from '@/utils/debounce' interface ImageUploaderProps { + type: 'thumbnail' | 'detail' required: boolean width: number height: number id: number } -export default function ImageUploader({ required, width, height, id }: ImageUploaderProps) { +export default function ImageUploader({ type, required, width, height, id }: ImageUploaderProps) { const [isUploaded, setIsUploaded] = useState(false) const [url, setUrl] = useState('') const inputRef = useRef(null) - const [fileName, setFileName] = useState('') - const [fileSize, setFileSize] = useState(0) + const [imageName, setImageName] = useState('') + const [imageSize, setImageSize] = useState(0) + const dispatch = useDispatch() + let urlList const imageUploadHandler = (e: ChangeEvent) => { - const file = e.currentTarget.files && e.currentTarget.files[0] - const url = URL.createObjectURL(file) - setIsUploaded(true) - setUrl(url) - setFileName(file.name) - setFileSize(file.size) + //이미지 파일이 존재할 때, + if (e.currentTarget.files !== null) { + const image = e.currentTarget.files[0] + const imageSize = Number((image.size / 1024 ** 2).toFixed(2)) + //이미지 파일 사이즈가 10메가바이트 초과면, + if (imageSize > 10) { + setUrl('') + alert('최대 10MB까지 업로드 가능합니다.') + } else { + // 이미지 파일 사이즈가 10메가바이트 이하면, + const url = URL.createObjectURL(image) + //이미지 업로드 상태 = 업로드 => X 버튼 나옴 + setIsUploaded(true) + //선택한 이미지 파일 상자에 렌더 + setUrl(url) + //이미지 파일명과 사이즈 상자 밑에 렌더시키기 + setImageName(image.name) + setImageSize(image.size) + if (type === 'thumbnail') { + //2초 동안 아무 동작 없으면 그제서야 dispatch 하기 + debounce(() => { + dispatch(createThumbnailSrc(url)) + }, 2000)() + console.log('thumbnailRedux') + } else if (type === 'detail') { + // debounce(() => { + // dispatch(createPreviewUrlList(urlList)) + // }, 2000)() + // console.log('detailImageSrcRedux') + } + } + } else { + alert('파일이 존재하지 않습니다.') + } } const imageRemoveHandler = () => { setIsUploaded(false) @@ -30,7 +64,7 @@ export default function ImageUploader({ required, width, height, id }: ImageUplo