Skip to content

Commit 364fcba

Browse files
authored
Merge pull request #60 from codeit9-temporary/feature/modalAction
Feat : 링크 생성 시 폴더 선택 모달창 수정
2 parents e5bbacb + 6087795 commit 364fcba

File tree

14 files changed

+233
-115
lines changed

14 files changed

+233
-115
lines changed

components/modal/AddFolderModal.tsx

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import ModalContainer from "./modalComponents/ModalContainer";
33
import ModalInput from "./modalComponents/ModalInput";
44
import { postFolders } from "@/lib/api/folder";
55
import useModalStore from "@/store/useModalStore";
6+
import SubmitButton from "../SubMitButton";
67

78
const AddFolderModal = ({ folderName }: { folderName: string }) => {
89
const [value, setValue] = useState("");
@@ -18,26 +19,30 @@ const AddFolderModal = ({ folderName }: { folderName: string }) => {
1819
};
1920
if (value !== "") {
2021
try {
21-
const res = await postFolders(body);
22-
console.log(res);
22+
await postFolders(body);
2323
} catch (error) {
24-
console.log(error);
24+
console.log(error, "폴더 생성 에러");
2525
}
2626
}
2727
closeModal();
2828
};
2929
return (
30-
<ModalContainer
31-
title="폴더 추가"
32-
buttonText="추가하기"
33-
onClick={handleSubmit}
34-
>
30+
<ModalContainer title="폴더 추가">
3531
<ModalInput
3632
placeholder="내용 입력"
3733
name={folderName}
3834
value={value}
3935
onChange={handleChange}
4036
/>
37+
<SubmitButton
38+
type="button"
39+
onClick={handleSubmit}
40+
width="w-full"
41+
height="h-[51px]"
42+
color="positive"
43+
>
44+
추가하기
45+
</SubmitButton>
4146
</ModalContainer>
4247
);
4348
};

components/modal/AddModal.tsx

Lines changed: 45 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,53 @@
11
import { FolderItemType } from "@/types/modalTypes";
22
import FolderList from "./modalComponents/FolderList";
33
import ModalContainer from "./modalComponents/ModalContainer";
4+
import SubmitButton from "../SubMitButton";
5+
import { useState } from "react";
6+
import { postLink } from "@/lib/api/link";
7+
import useModalStore from "@/store/useModalStore";
48

5-
const AddModal = ({ list }: { list: FolderItemType[] }) => {
9+
const AddModal = ({ list, link }: { list: FolderItemType[]; link: string }) => {
10+
const [selectedId, setSelectedId] = useState<number | null>(null);
11+
const { closeModal } = useModalStore();
12+
const handleSubmit = async () => {
13+
const body = {
14+
folderId: Number(selectedId),
15+
url: link,
16+
};
17+
if (link !== "" && selectedId) {
18+
try {
19+
await postLink(body);
20+
} catch (error) {
21+
console.log(error, "링크 생성 에러");
22+
} finally {
23+
closeModal();
24+
}
25+
}
26+
};
27+
28+
const handleClickFolderItem = (id: number) => {
29+
if (selectedId === id) {
30+
setSelectedId(null);
31+
} else {
32+
setSelectedId(id);
33+
}
34+
};
635
return (
7-
<ModalContainer
8-
title="폴더에 추가"
9-
subtitle="링크 주소"
10-
buttonText="추가하기"
11-
>
12-
<FolderList list={list} />
36+
<ModalContainer title="폴더에 추가" subtitle={link}>
37+
<FolderList
38+
list={list}
39+
selectedId={selectedId}
40+
onClick={handleClickFolderItem}
41+
/>
42+
<SubmitButton
43+
type="button"
44+
onClick={handleSubmit}
45+
width="w-full"
46+
height="h-[51px] "
47+
color="positive"
48+
>
49+
추가하기
50+
</SubmitButton>
1351
</ModalContainer>
1452
);
1553
};
Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,20 @@
1+
import SubmitButton from "../SubMitButton";
12
import ModalContainer from "./modalComponents/ModalContainer";
23

34
const DeleteFolderModal = ({ folderName }: { folderName: string }) => {
5+
console.log("folderName", folderName);
46
return (
5-
<ModalContainer
6-
title="폴더 삭제"
7-
subtitle={folderName}
8-
buttonText="삭제하기"
9-
buttonColor="negative"
10-
></ModalContainer>
7+
<ModalContainer title="폴더 삭제" subtitle={folderName}>
8+
<SubmitButton
9+
type="button"
10+
// onClick={handleSubmit}
11+
width="w-full"
12+
height="h-[51px] "
13+
color="negative"
14+
>
15+
삭제하기
16+
</SubmitButton>
17+
</ModalContainer>
1118
);
1219
};
1320
export default DeleteFolderModal;
Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,19 @@
1+
import SubmitButton from "../SubMitButton";
12
import ModalContainer from "./modalComponents/ModalContainer";
23

34
const DeleteLinkModal = ({ link }: { link: string }) => {
45
return (
5-
<ModalContainer
6-
title="링크 삭제"
7-
subtitle={link}
8-
buttonText="삭제하기"
9-
buttonColor="negative"
10-
></ModalContainer>
6+
<ModalContainer title="링크 삭제" subtitle={link}>
7+
<SubmitButton
8+
type="button"
9+
// onClick={handleSubmit}
10+
width="w-full"
11+
height="h-[51px] "
12+
color="negative"
13+
>
14+
삭제하기
15+
</SubmitButton>
16+
</ModalContainer>
1117
);
1218
};
1319
export default DeleteLinkModal;

components/modal/EditModal.tsx

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import ModalContainer from "./modalComponents/ModalContainer";
33
import ModalInput from "./modalComponents/ModalInput";
44
import useModalStore from "@/store/useModalStore";
55
import { putFolder } from "@/lib/api/folder";
6+
import SubmitButton from "../SubMitButton";
67

78
const EditModal = ({ folderName }: { folderName: string }) => {
89
const [value, setValue] = useState("");
@@ -29,17 +30,22 @@ const EditModal = ({ folderName }: { folderName: string }) => {
2930
closeModal();
3031
};
3132
return (
32-
<ModalContainer
33-
title="폴더 이름 변경"
34-
buttonText="변경하기"
35-
onClick={handleSubmit}
36-
>
33+
<ModalContainer title="폴더 이름 변경">
3734
<ModalInput
3835
placeholder="내용 입력"
3936
name={folderName}
4037
value={value}
4138
onChange={handleChange}
4239
/>
40+
<SubmitButton
41+
type="button"
42+
// onClick={handleSubmit}
43+
width="w-full"
44+
height="h-[51px] "
45+
color="positive"
46+
>
47+
변경하기
48+
</SubmitButton>
4349
</ModalContainer>
4450
);
4551
};

components/modal/modalComponents/FolderItem.tsx

Lines changed: 0 additions & 43 deletions
This file was deleted.
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import { bindCls } from "@/lib/utils";
2+
import { FolderItemType } from "@/types/modalTypes";
3+
import { FaCheck } from "react-icons/fa6";
4+
5+
const FolderItemRadio = ({
6+
item,
7+
selectedId,
8+
onClick,
9+
}: {
10+
item: FolderItemType;
11+
selectedId: number | null;
12+
onClick: (id: number) => void;
13+
}) => {
14+
const { name, linkCount, id } = item;
15+
let isSelected = id === selectedId;
16+
const bgColor = isSelected ? "bg-gray100" : "bg-white";
17+
18+
const onClickFolderItem = () => {
19+
onClick(id);
20+
};
21+
return (
22+
<li
23+
className={bindCls(
24+
bgColor,
25+
"w-full p-2 flex h-10 rounded-lg items-center justify-between cursor-pointer"
26+
)}
27+
onClick={onClickFolderItem}
28+
>
29+
<div className="flex justify-start items-center p-2">
30+
<label htmlFor={String(id)}>{name}</label>
31+
<input
32+
value={name}
33+
type="radio"
34+
className="opacity-0"
35+
id={String(id)}
36+
/>
37+
<div className="text-gray400 text-sm">{linkCount}개 링크</div>
38+
</div>
39+
{isSelected && (
40+
<div>
41+
<FaCheck className="text-purple100" />
42+
</div>
43+
)}
44+
</li>
45+
);
46+
};
47+
export default FolderItemRadio;

components/modal/modalComponents/FolderList.tsx

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,25 @@
11
import { FolderItemType } from "@/types/modalTypes";
2-
import FolderItem from "./FolderItem";
2+
import FolderItemRadio from "./FolderItemRadio";
33

4-
const FolderList = ({ list }: { list: FolderItemType[] | undefined }) => {
4+
const FolderList = ({
5+
list,
6+
selectedId,
7+
onClick,
8+
}: {
9+
list: FolderItemType[] | undefined;
10+
selectedId: number | null;
11+
onClick: (id: number) => void;
12+
}) => {
513
return (
614
<ul className="mb-6 flex flex-col gap-1 w-full">
7-
{list?.map((item) => <FolderItem key={item.id} item={item} />)}
15+
{list?.map((item) => (
16+
<FolderItemRadio
17+
key={item.id}
18+
item={item}
19+
selectedId={selectedId}
20+
onClick={onClick}
21+
/>
22+
))}
823
</ul>
924
);
1025
};

components/modal/modalComponents/ModalContainer.tsx

Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,7 @@ import { ModalPropType } from "@/types/modalTypes";
44
import useModalStore from "@/store/useModalStore";
55
import { MouseEvent, useRef } from "react";
66

7-
const ModalContainer = ({
8-
title,
9-
subtitle,
10-
children,
11-
buttonText,
12-
buttonColor,
13-
onClick,
14-
}: ModalPropType) => {
7+
const ModalContainer = ({ title, subtitle, children }: ModalPropType) => {
158
const { closeModal } = useModalStore();
169
const modalRef = useRef<HTMLDivElement | null>(null);
1710
const onClickBackDrop = (e: MouseEvent<HTMLDivElement>) => {
@@ -41,22 +34,9 @@ const ModalContainer = ({
4134
</div>
4235
)}
4336
</div>
44-
{/* children -> inpul, sns공유, folder list 등.. */}
37+
{/* children -> input, sns공유, folder list 등.. */}
4538
<div className="flex justify-center items-center flex-col">
4639
{children && <>{children}</>}
47-
48-
{/* 제출 버튼 */}
49-
{buttonText && (
50-
<SubmitButton
51-
type="button"
52-
onClick={onClick}
53-
width="w-full"
54-
height="h-[51px] "
55-
color={buttonColor}
56-
>
57-
{buttonText}
58-
</SubmitButton>
59-
)}
6040
</div>
6141

6242
{/* 모달 닫기 버튼 */}

components/modal/modalManager/ModalManager.tsx

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,21 +30,22 @@ export const Modal = () => {
3030
<AddModal
3131
list={
3232
props.list || [
33-
{ id: 1, name: "코딩팁", linkCount: 7, createAt: "" },
34-
{ id: 2, name: "채용 사이트", linkCount: 7, createAt: "" },
35-
{ id: 3, name: "유용한 글", linkCount: 7, createAt: "" },
36-
{ id: 4, name: "나만의 장소", linkCount: 7, createAt: "" },
33+
{ id: 1, name: "코딩팁", linkCount: 7, createdAt: "" },
34+
{ id: 2, name: "채용 사이트", linkCount: 7, createdAt: "" },
35+
{ id: 3, name: "유용한 글", linkCount: 7, createdAt: "" },
36+
{ id: 4, name: "나만의 장소", linkCount: 7, createdAt: "" },
3737
]
3838
}
39+
link={props.link || ""}
3940
/>
4041
);
4142
case "DeleteFolderModal":
42-
return <DeleteFolderModal folderName={props.folderName || ""} />;
43+
return <DeleteFolderModal folderName={props.folderName || "폴더이름"} />;
4344
case "DeleteLinkModal":
44-
return <DeleteLinkModal link={props.link || ""} />;
45+
return <DeleteLinkModal link={props.link || "링크"} />;
4546
case "EditModal":
46-
return <EditModal folderName={props.folderName || ""} />;
47+
return <EditModal folderName={props.folderName || "폴더이름"} />;
4748
case "SNSModal":
48-
return <SNSModal folderName={props.folderName || ""} />;
49+
return <SNSModal folderName={props.folderName || "폴더이름"} />;
4950
}
5051
};

0 commit comments

Comments
 (0)