diff --git a/.gitignore b/.gitignore
index 8f322f0d8..acd03f6cc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -17,6 +17,9 @@
# misc
.DS_Store
+._.DS_Store
+**/.DS_Store
+**/._.DS_Store
*.pem
# debug
diff --git a/components/SinginForm/index.js b/components/SinginForm/index.js
deleted file mode 100644
index cb1c03248..000000000
--- a/components/SinginForm/index.js
+++ /dev/null
@@ -1 +0,0 @@
-export * from "./SinginForm";
diff --git a/components/SingupForm/index.js b/components/SingupForm/index.js
deleted file mode 100644
index cb1c03248..000000000
--- a/components/SingupForm/index.js
+++ /dev/null
@@ -1 +0,0 @@
-export * from "./SinginForm";
diff --git a/components/SocalLogin/index.js b/components/SocalLogin/index.js
deleted file mode 100644
index e22f2f9c7..000000000
--- a/components/SocalLogin/index.js
+++ /dev/null
@@ -1 +0,0 @@
-export * from "./SocalLogin";
diff --git a/jsconfig.json b/jsconfig.json
index eb1cb0947..5875dc5b6 100644
--- a/jsconfig.json
+++ b/jsconfig.json
@@ -1,6 +1,6 @@
{
"compilerOptions": {
- "baseUrl": "5-Weekly-Mission"
+ "baseUrl": "src"
},
- "include": ["5-Weekly-Mission"]
+ "include": ["src"]
}
diff --git a/package-lock.json b/package-lock.json
index fb04282ec..786131932 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,7 +9,7 @@
"version": "0.1.0",
"dependencies": {
"@hookform/error-message": "^2.0.1",
- "axios": "^1.6.8",
+ "axios": "^1.7.2",
"classnames": "^2.5.1",
"next": "^13.5.6",
"react": "^18",
@@ -783,9 +783,9 @@
}
},
"node_modules/axios": {
- "version": "1.6.8",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz",
- "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==",
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz",
+ "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==",
"dependencies": {
"follow-redirects": "^1.15.6",
"form-data": "^4.0.0",
diff --git a/package.json b/package.json
index 466efc393..fac454890 100644
--- a/package.json
+++ b/package.json
@@ -10,7 +10,7 @@
},
"dependencies": {
"@hookform/error-message": "^2.0.1",
- "axios": "^1.6.8",
+ "axios": "^1.7.2",
"classnames": "^2.5.1",
"next": "^13.5.6",
"react": "^18",
diff --git a/pages/_app.tsx b/pages/_app.tsx
index 0258bb32a..248bf29c9 100644
--- a/pages/_app.tsx
+++ b/pages/_app.tsx
@@ -1,5 +1,5 @@
import type { AppProps } from "next/app";
-import "styles/giobal.css";
+import "src/styles/global.css";
export default function App({ Component, pageProps }: AppProps) {
return ;
diff --git a/pages/folder.js b/pages/folder.js
deleted file mode 100644
index f32368ef5..000000000
--- a/pages/folder.js
+++ /dev/null
@@ -1,95 +0,0 @@
-import {
- Header,
- SearchBar,
- Footer,
- LinkInput,
- LinkList,
- Sorting,
- ErrorComponent,
- FolderTitle,
-} from "components";
-import { getData, ApiUrl } from "../utils";
-import styles from "../styles/folder.module.scss";
-import { useEffect, useState } from "react";
-import classNames from "classnames/bind";
-
-const cx = classNames.bind(styles);
-
-export async function getServerSideProps() {
- const user = await getData(ApiUrl.sampleUser);
- const Folders = await getData(ApiUrl.usersFolders);
- const AllLinks = await getData(ApiUrl.usersLinks);
-
- return {
- props: {
- user,
- Folders,
- AllLinks,
- },
- };
-}
-
-function FolderPage({ user, Folders, AllLinks }) {
- const [selectedId, setSelectedId] = useState("1");
- const [urlBySelectedId, setUrlBySelectedId] = useState("");
- const [name, setName] = useState("");
- const [links, setLinks] = useState(AllLinks.data);
- const [searchKeyWord, setSearchKeyWord] = useState("");
-
- function checkArrayBlank(array) {
- return array ? array.length === 0 : true;
- }
-
- async function fetchData() {
- if (selectedId) {
- const newLinks = await getData(urlBySelectedId);
- setLinks(newLinks.data);
- } else setLinks(AllLinks.data);
- }
-
- useEffect(() => {
- const newUrl = `${ApiUrl.usersLinks}?folderId=${selectedId}`;
- setUrlBySelectedId(newUrl);
- }, [selectedId]);
-
- useEffect(() => {
- fetchData();
- }, [urlBySelectedId, selectedId]);
-
- return (
-
-
-
-
-
-
-
-
- {checkArrayBlank(links) ? (
-
- ) : (
-
- )}
-
-
-
-
- );
-}
-
-export default FolderPage;
diff --git a/pages/folder/[folderId].js b/pages/folder/[folderId].js
new file mode 100644
index 000000000..bed974574
--- /dev/null
+++ b/pages/folder/[folderId].js
@@ -0,0 +1,83 @@
+import {
+ Header,
+ SearchBar,
+ Footer,
+ LinkInput,
+ LinkList,
+ Sorting,
+ ErrorComponent,
+ FolderTitle,
+} from "../../src/components";
+import { getData } from "../../src/utils";
+import styles from "src/styles/folder.module.scss";
+import { useEffect, useState } from "react";
+import classNames from "classnames/bind";
+import { useRouter } from "next/router";
+
+const cx = classNames.bind(styles);
+
+function FolderPage() {
+ const [linksByQuery, setLinksByQuery] = useState([]);
+ const [Folders, setFolders] = useState([]);
+ const [user, setUser] = useState([]);
+ const [searchKeyWord, setSearchKeyWord] = useState("");
+ const [name, setName] = useState("");
+
+ const router = useRouter();
+ const { folderId } = router.query;
+
+ /* 받아온 배열이 비어있을 경우 체크. */
+ function checkArrayBlank(array) {
+ return !Array.isArray(array) || array.length === 0;
+ }
+
+ /* 쿼리id로 받은 링크들, 유저데이터, 선택한 폴더 이름 데이터 가져오기*/
+ async function fetchData() {
+ const linkUrl = `/links?folderId=${folderId}`;
+ const FolderUrl = `/folders/${folderId}`;
+
+ const Folders = await getData("/folders");
+ const linksByQuery = await getData(linkUrl);
+ const user = await getData("/users");
+ const name = await getData(FolderUrl);
+
+ setLinksByQuery(linksByQuery.data.folder);
+ setUser(user.data[0]);
+ setName(name.data[0].name);
+ setFolders(Folders.data.folder);
+ }
+
+ useEffect(() => {
+ fetchData();
+ }, [folderId]);
+
+ return (
+
+
+
+
+
+
+
+
+ {checkArrayBlank(linksByQuery) ? (
+
+ ) : (
+
+ )}
+
+
+
+
+ );
+}
+
+export default FolderPage;
diff --git a/pages/folder/index.js b/pages/folder/index.js
new file mode 100644
index 000000000..18e647135
--- /dev/null
+++ b/pages/folder/index.js
@@ -0,0 +1,75 @@
+import {
+ Header,
+ SearchBar,
+ Footer,
+ LinkInput,
+ LinkList,
+ Sorting,
+ ErrorComponent,
+ FolderTitle,
+} from "../../src/components";
+import { checkAccessToken, getData } from "../../src/utils";
+import styles from "src/styles/folder.module.scss";
+import { useEffect, useState } from "react";
+import classNames from "classnames/bind";
+
+const cx = classNames.bind(styles);
+
+function FolderPage() {
+ const [searchKeyWord, setSearchKeyWord] = useState("");
+ const [user, setUser] = useState("");
+ const [Folders, setFolders] = useState("");
+ const [AllLinks, setAllLinks] = useState("");
+
+ function checkArrayBlank(array) {
+ return array.length && array.length !== 0 ? false : true;
+ }
+
+ async function fetchData() {
+ const user = await getData("/users");
+ const Folders = await getData("/folders");
+ const AllLinks = await getData("/links");
+
+ setUser(user.data[0]);
+ setFolders(Folders.data.folder);
+ setAllLinks(AllLinks.data.folder);
+ }
+
+ useEffect(() => {
+ /* AccessToken없으면 signin페이지로 이동*/
+ if (!checkAccessToken("signInToken")) {
+ location.href = "signin";
+ }
+ fetchData();
+ }, []);
+
+ return (
+
+
+
+
+
+
+
+
+ {checkArrayBlank(AllLinks) ? (
+
+ ) : (
+
+ )}
+
+
+
+
+ );
+}
+
+export default FolderPage;
diff --git a/pages/shared.js b/pages/shared.js
new file mode 100644
index 000000000..5473acd50
--- /dev/null
+++ b/pages/shared.js
@@ -0,0 +1,52 @@
+import styles from "src/styles/SharedPage.module.scss";
+import classNames from "classnames/bind";
+import {
+ Header,
+ FolderInfo,
+ SearchBar,
+ LinkList,
+ Footer,
+} from "../src/components";
+import { getLinkList, getData, ApiUrl } from "../src/utils";
+import { useEffect, useState } from "react";
+
+const cx = classNames.bind(styles);
+
+function SharedPage() {
+ const [links, setLinks] = useState([]);
+ const [user, setUser] = useState([]);
+ const [searchKeyWord, setSearchKeyWord] = useState("");
+
+ const getUserData = async () => {
+ const { links } = await getLinkList();
+ const user = await getData(ApiUrl.sampleUser);
+ setLinks(links);
+ setUser(user);
+ };
+
+ useEffect(() => {
+ getUserData();
+ }, []);
+
+ return (
+ <>
+
+
+
+
+
+
+
+ >
+ );
+}
+
+export default SharedPage;
diff --git a/pages/signin.js b/pages/signin.js
index 59e7dbe97..3e9a1b7aa 100644
--- a/pages/signin.js
+++ b/pages/signin.js
@@ -1,12 +1,17 @@
import Link from "next/link";
-import styles from "../styles/sign.module.scss";
+import styles from "src/styles/sign.module.scss";
import classNames from "classnames/bind";
-import { SinginForm } from "../components/SinginForm/SinginForm";
-import { SocalLogin } from "../components/SocalLogin/SocalLogin";
+import { SignInForm, SocialLogin } from "../src/components";
+import { useEffect } from "react";
+import { checkAccessToken } from "../src/utils";
const cx = classNames.bind(styles);
function singInPage() {
+ useEffect(() => {
+ checkAccessToken("signInToken");
+ }, []);
+
return (
@@ -16,13 +21,13 @@ function singInPage() {
회원이 아니신가요?
-
+
회원가입하기
-
-
+
+
);
diff --git a/pages/signup.js b/pages/signup.js
index b72443df0..57de6a944 100644
--- a/pages/signup.js
+++ b/pages/signup.js
@@ -1,12 +1,15 @@
import Link from "next/link";
-import styles from "../styles/sign.module.scss";
+import styles from "../src/styles/sign.module.scss";
import classNames from "classnames/bind";
-import { SocalLogin } from "../components/SocalLogin/SocalLogin";
-import { SingupForm } from "../components/SingupForm/SingupForm";
+import { SocialLogin, SignUpForm } from "../src/components";
const cx = classNames.bind(styles);
-function singupPage() {
+function signUpPage() {
+ useEffect(() => {
+ checkAccessToken("signInToken");
+ }, []);
+
return (
@@ -16,16 +19,16 @@ function singupPage() {
이미 회원이신가요?
-
+
로그인하기
-
-
+
+
);
}
-export default singupPage;
+export default signUpPage;
diff --git a/public/axios.js b/public/axios.js
deleted file mode 100644
index 0ca06d335..000000000
--- a/public/axios.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import axios from "axios";
-
-const instance = axios.create({
- baseURL: "https://bootcamp-api.codeit.kr/api",
-});
-
-export default instance;
diff --git a/components/ErrorComponent/ErrorComponent.js b/src/components/ErrorComponent/ErrorComponent.js
similarity index 100%
rename from components/ErrorComponent/ErrorComponent.js
rename to src/components/ErrorComponent/ErrorComponent.js
diff --git a/components/ErrorComponent/ErrorComponent.module.scss b/src/components/ErrorComponent/ErrorComponent.module.scss
similarity index 100%
rename from components/ErrorComponent/ErrorComponent.module.scss
rename to src/components/ErrorComponent/ErrorComponent.module.scss
diff --git a/components/ErrorComponent/index.js b/src/components/ErrorComponent/index.js
similarity index 100%
rename from components/ErrorComponent/index.js
rename to src/components/ErrorComponent/index.js
diff --git a/components/FolderInfo/FolderInfo.js b/src/components/FolderInfo/FolderInfo.js
similarity index 100%
rename from components/FolderInfo/FolderInfo.js
rename to src/components/FolderInfo/FolderInfo.js
diff --git a/components/FolderInfo/FolderInfo.module.scss b/src/components/FolderInfo/FolderInfo.module.scss
similarity index 100%
rename from components/FolderInfo/FolderInfo.module.scss
rename to src/components/FolderInfo/FolderInfo.module.scss
diff --git a/components/FolderInfo/index.js b/src/components/FolderInfo/index.js
similarity index 100%
rename from components/FolderInfo/index.js
rename to src/components/FolderInfo/index.js
diff --git a/components/FolderTitle/FolderTitle.js b/src/components/FolderTitle/FolderTitle.js
similarity index 100%
rename from components/FolderTitle/FolderTitle.js
rename to src/components/FolderTitle/FolderTitle.js
diff --git a/components/FolderTitle/FolderTitle.module.scss b/src/components/FolderTitle/FolderTitle.module.scss
similarity index 100%
rename from components/FolderTitle/FolderTitle.module.scss
rename to src/components/FolderTitle/FolderTitle.module.scss
diff --git a/components/FolderTitle/index.js b/src/components/FolderTitle/index.js
similarity index 100%
rename from components/FolderTitle/index.js
rename to src/components/FolderTitle/index.js
diff --git a/components/Footer/Footer.js b/src/components/Footer/Footer.js
similarity index 73%
rename from components/Footer/Footer.js
rename to src/components/Footer/Footer.js
index 7ed0e0084..fb0fbb596 100644
--- a/components/Footer/Footer.js
+++ b/src/components/Footer/Footer.js
@@ -1,5 +1,4 @@
import styles from "./Footer.module.scss";
-import Image from "next/image";
import classNames from "classnames/bind";
const cx = classNames.bind(styles);
@@ -16,19 +15,19 @@ export function Footer() {
{" "}
-
{" "}
+
{" "}
-
+
diff --git a/components/Footer/Footer.module.scss b/src/components/Footer/Footer.module.scss
similarity index 100%
rename from components/Footer/Footer.module.scss
rename to src/components/Footer/Footer.module.scss
diff --git a/components/Footer/index.js b/src/components/Footer/index.js
similarity index 100%
rename from components/Footer/index.js
rename to src/components/Footer/index.js
diff --git a/components/Header/Header.js b/src/components/Header/Header.js
similarity index 78%
rename from components/Header/Header.js
rename to src/components/Header/Header.js
index 2b3a9a662..805ad60d0 100644
--- a/components/Header/Header.js
+++ b/src/components/Header/Header.js
@@ -9,14 +9,14 @@ export function Header({ userEmail }) {
-
![linklabrary로고](images/logo.svg)
+
diff --git a/components/Header/Header.module.scss b/src/components/Header/Header.module.scss
similarity index 100%
rename from components/Header/Header.module.scss
rename to src/components/Header/Header.module.scss
diff --git a/components/Header/index.js b/src/components/Header/index.js
similarity index 100%
rename from components/Header/index.js
rename to src/components/Header/index.js
diff --git a/components/InputBox/InputBox.js b/src/components/InputBox/InputBox.js
similarity index 79%
rename from components/InputBox/InputBox.js
rename to src/components/InputBox/InputBox.js
index a08fc1bc1..ea6c6f015 100644
--- a/components/InputBox/InputBox.js
+++ b/src/components/InputBox/InputBox.js
@@ -6,26 +6,13 @@ import { ErrorMessage } from "@hookform/error-message";
const cx = classNames.bind(styles);
-export function InputBox({
- label,
- name,
- errors,
- register,
- placeholder,
- valid,
- validate,
-}) {
+export function InputBox({ label, name, errors, register, placeholder }) {
const [isToggle, setIsToggle] = useState(false);
const handleToggle = () => {
setIsToggle(!isToggle);
};
- const validationProps = {
- ...valid, // 이메일 필드에 대한 기본 유효성 검사를 포함합니다.
- validate,
- };
-
return (
@@ -36,7 +23,7 @@ export function InputBox({
})}
type={name !== "email" ? (isToggle ? "test" : "password") : "text"}
placeholder={placeholder}
- {...register(name, validationProps)}
+ {...register}
/>
@@ -65,7 +65,7 @@ export function LinkInput({ folders }) {
{selectedFolder === item.name && (
-
+
)}
diff --git a/components/LinkInput/LinkInput.module.scss b/src/components/LinkInput/LinkInput.module.scss
similarity index 100%
rename from components/LinkInput/LinkInput.module.scss
rename to src/components/LinkInput/LinkInput.module.scss
diff --git a/components/LinkInput/index.js b/src/components/LinkInput/index.js
similarity index 100%
rename from components/LinkInput/index.js
rename to src/components/LinkInput/index.js
diff --git a/components/LinkList/LinkList.js b/src/components/LinkList/LinkList.js
similarity index 76%
rename from components/LinkList/LinkList.js
rename to src/components/LinkList/LinkList.js
index c90944dac..59c087953 100644
--- a/components/LinkList/LinkList.js
+++ b/src/components/LinkList/LinkList.js
@@ -1,11 +1,11 @@
+import { useSearch } from "../../hooks";
import { LinkItem } from "../ListItem";
-import { useSearch } from "hooks";
-import styles from "./Linklist.module.scss";
+import styles from "./LinkList.module.scss";
import classNames from "classnames/bind";
const cx = classNames.bind(styles);
-export function LinkList({ searchKeyWord, links, createdtime, image }) {
+export function LinkList({ searchKeyWord, links, createdTime, image }) {
const filteredLinks = useSearch(searchKeyWord, links);
return (
@@ -16,7 +16,7 @@ export function LinkList({ searchKeyWord, links, createdtime, image }) {
![kebab-button](images/kebab.svg)
toggleHandler("open")}
/>
diff --git a/components/ListItem/index.js b/src/components/ListItem/index.js
similarity index 100%
rename from components/ListItem/index.js
rename to src/components/ListItem/index.js
diff --git a/components/ModalLayout/ModalLayout.js b/src/components/ModalLayout/ModalLayout.js
similarity index 100%
rename from components/ModalLayout/ModalLayout.js
rename to src/components/ModalLayout/ModalLayout.js
diff --git a/components/ModalLayout/ModalLayout.module.scss b/src/components/ModalLayout/ModalLayout.module.scss
similarity index 100%
rename from components/ModalLayout/ModalLayout.module.scss
rename to src/components/ModalLayout/ModalLayout.module.scss
diff --git a/components/ModalLayout/index.js b/src/components/ModalLayout/index.js
similarity index 100%
rename from components/ModalLayout/index.js
rename to src/components/ModalLayout/index.js
diff --git a/components/SearchBar/SearchBar.js b/src/components/SearchBar/SearchBar.js
similarity index 92%
rename from components/SearchBar/SearchBar.js
rename to src/components/SearchBar/SearchBar.js
index ba326a0cb..4a166b55a 100644
--- a/components/SearchBar/SearchBar.js
+++ b/src/components/SearchBar/SearchBar.js
@@ -1,6 +1,5 @@
import { useState } from "react";
import styles from "./SearchBar.module.scss";
-import Image from "next/image";
import classNames from "classnames/bind";
const cx = classNames.bind(styles);
@@ -23,7 +22,7 @@ export function SearchBar({ searchKeyWord, setSearchKeyWord }) {
<>
-
![searcher](./images/Search.svg)
+
{
- postIdPwd(ApiUrl.signin, data, setError, "signInToken");
+ postIdPwd(ApiUrl.signIn, data, setError, "signInToken");
};
return (
@@ -41,17 +39,15 @@ export function SinginForm() {
label="이메일"
name="email"
placeholder="이메일을 입력해 주세요"
- valid={ValidData.email}
errors={errors}
- register={register}
+ register={{ ...register("email", ValidData.email) }}
/>