(false);
+
+ const { mutate: deletePlanAPI } = useDeletePlanMutation();
+ const setIsMyPlanStore = useSetRecoilState(isMyPlanStore);
+ const isMyPlan = plan.writer.owner;
+
+ useEffect(() => {
+ if (typeof window !== 'undefined') setIsClientSide(true);
+ return () => {
+ setIsClientSide(false);
+ };
+ }, []);
+
+ useEffect(() => {
+ const current = window.location.href;
+ setCurrentURL(current);
+ setIsMyPlanStore(isMyPlan);
+ return () => {
+ setIsMyPlanStore(false);
+ };
+ }, [setIsMyPlanStore, isMyPlan]);
+
+ const handleModalClickYes = () => {
+ setIsDeletePlanModalOpen(false);
+ deletePlanAPI(parseInt(planId, 10));
+ router.push('/home');
+ };
+ const handleCopyLink = async () => {
+ await navigator.clipboard.writeText(currentURL);
+ ajajaToast.success('링크가 복사되었습니다.');
+ };
+
+ const handleModalClickNo = () => {
+ setIsDeletePlanModalOpen(false);
+ };
+ const handleOpenDeleteModal = () => {
+ setIsDeletePlanModalOpen(true);
+ };
+ const createPageContent = () => {
+ if (isClientSide) {
+ if (isMyPlan || plan.public) {
+ return (
+
+ {isMyPlan && isSeason && (
+
+ 수정|
+ 삭제
+
+ )}
+
+ );
+ } else {
+ return ;
+ }
+ } else {
+ return ;
+ }
+ };
+
+ const pageContent = createPageContent();
+ return {
+ planId,
+ isMyPlan,
+ currentURL,
+ isDeletePlanModalOpen,
+ pageContent,
+ handleCopyLink,
+ handleModalClickNo,
+ handleModalClickYes,
+ handleOpenDeleteModal,
+ };
+}
diff --git a/src/app/(header)/plans/[planId]/index.scss b/src/app/plans/[planId]/index.scss
similarity index 100%
rename from src/app/(header)/plans/[planId]/index.scss
rename to src/app/plans/[planId]/index.scss
diff --git a/src/app/plans/[planId]/page.tsx b/src/app/plans/[planId]/page.tsx
new file mode 100644
index 00000000..6351f148
--- /dev/null
+++ b/src/app/plans/[planId]/page.tsx
@@ -0,0 +1,97 @@
+'use client';
+
+import {
+ Button,
+ Icon,
+ KakaoShareButton,
+ Modal,
+ ModalBasic,
+} from '@/components';
+import classNames from 'classnames';
+import Link from 'next/link';
+import usePlanPage from './hooks/usePlanPage';
+import './index.scss';
+
+export default function PlanIdPage({ params }: { params: { planId: string } }) {
+ const {
+ planId,
+ isDeletePlanModalOpen,
+ isMyPlan,
+ currentURL,
+ handleCopyLink,
+ handleModalClickNo,
+ handleModalClickYes,
+ pageContent,
+ } = usePlanPage(params.planId);
+
+ return (
+ <>
+
+
+
+ {isMyPlan ? (
+ 홈
+ ) : (
+ 둘러보기
+ )}
+ >
+ 계획
+
+
+ {pageContent}
+ {isMyPlan && (
+
+
공유하기
+
+
+
+
+
+ )}
+
+
+
+ {isMyPlan && (
+
+
+
+
+
+
+
+
+
+
+ )}
+
+ {isDeletePlanModalOpen && (
+
+
+ 정말 해당 계획을 삭제하시겠습니까 ?
+
+
+ )}
+ >
+ );
+}
diff --git a/src/app/(header)/plans/edit/[planId]/error.tsx b/src/app/plans/edit/[planId]/error.tsx
similarity index 100%
rename from src/app/(header)/plans/edit/[planId]/error.tsx
rename to src/app/plans/edit/[planId]/error.tsx
diff --git a/src/app/plans/edit/[planId]/hooks/usePlanEditPage.tsx b/src/app/plans/edit/[planId]/hooks/usePlanEditPage.tsx
new file mode 100644
index 00000000..a07a85a1
--- /dev/null
+++ b/src/app/plans/edit/[planId]/hooks/usePlanEditPage.tsx
@@ -0,0 +1,62 @@
+import { ajajaToast } from '@/components/Toaster/customToast';
+import { useEditPlanMutation } from '@/hooks/apis/useEditPlanMutation';
+import { useGetPlanQuery } from '@/hooks/apis/useGetPlanQuery';
+import { useWritablePlan } from '@/hooks/useWritablePlan';
+import { useRouter } from 'next/navigation';
+import { useEffect, useState } from 'react';
+
+export default function usePlanEditPage(planId: string) {
+ const router = useRouter();
+ const { plan: planData } = useGetPlanQuery(Number(planId), true);
+ const { mutate: editPlan } = useEditPlanMutation(Number(planId));
+ const isMyPlan = planData.writer.owner;
+
+ useEffect(() => {
+ if (!isMyPlan) {
+ router.replace('/home');
+ }
+ }, [isMyPlan, router]);
+ const {
+ nextTextAreaRef,
+ planContent,
+ handleAddTag,
+ handleChangeCanAjaja,
+ handleChangeDescription,
+ handleChangeIsPublic,
+ handleChangeTitle,
+ handleRemoveTag,
+ handleChangeIconNumber,
+ } = useWritablePlan(planData);
+ const [isSelectIconModalOpen, setIsSelectIconModalOpen] = useState(false);
+
+ const handleEditPlan = () => {
+ editPlan(
+ { planId: Number(planId), planData: planContent },
+ {
+ onError: () => {
+ ajajaToast.error('수정에 실패했습니다.');
+ },
+ onSuccess: () => {
+ router.replace(`/plans/${planId}`);
+ },
+ },
+ );
+ };
+
+ return {
+ planId,
+ nextTextAreaRef,
+ isSelectIconModalOpen,
+ planContent,
+ planData,
+ setIsSelectIconModalOpen,
+ handleAddTag,
+ handleChangeCanAjaja,
+ handleChangeDescription,
+ handleChangeIconNumber,
+ handleChangeIsPublic,
+ handleChangeTitle,
+ handleEditPlan,
+ handleRemoveTag,
+ };
+}
diff --git a/src/app/(header)/plans/edit/[planId]/index.scss b/src/app/plans/edit/[planId]/index.scss
similarity index 100%
rename from src/app/(header)/plans/edit/[planId]/index.scss
rename to src/app/plans/edit/[planId]/index.scss
diff --git a/src/app/(header)/plans/edit/[planId]/page.tsx b/src/app/plans/edit/[planId]/page.tsx
similarity index 81%
rename from src/app/(header)/plans/edit/[planId]/page.tsx
rename to src/app/plans/edit/[planId]/page.tsx
index ee14e6b4..fe643469 100644
--- a/src/app/(header)/plans/edit/[planId]/page.tsx
+++ b/src/app/plans/edit/[planId]/page.tsx
@@ -4,64 +4,37 @@ import {
AjajaButton,
Button,
DeletableTag,
+ HelpButton,
IconSwitchButton,
Modal,
ModalSelectIcon,
PlanInput,
+ TagInput,
} from '@/components';
-import HelpButton from '@/components/HelpButton/HelpButton';
-import TagInput from '@/components/TagInput/TagInput';
-import { ajajaToast } from '@/components/Toaster/customToast';
import { planIcons } from '@/constants/planIcons';
-import { useEditPlanMutation } from '@/hooks/apis/useEditPlanMutation';
-import { useGetPlanQuery } from '@/hooks/apis/useGetPlanQuery';
-import { useWritablePlan } from '@/hooks/useWritablePlan';
import classNames from 'classnames';
import Image from 'next/image';
import Link from 'next/link';
-import { useRouter } from 'next/navigation';
-import { useEffect, useState } from 'react';
+import usePlanEditPage from './hooks/usePlanEditPage';
import './index.scss';
export default function EditPage({ params }: { params: { planId: string } }) {
- const { planId } = params;
- const router = useRouter();
- const { plan: planData } = useGetPlanQuery(Number(planId), true);
- const { mutate: editPlan } = useEditPlanMutation(Number(planId));
- const isMyPlan = planData.writer.owner;
- //TODO: 권한설정 여기서?
- useEffect(() => {
- if (!isMyPlan) {
- router.replace('/home');
- }
- }, [isMyPlan, router]);
const {
+ planId,
nextTextAreaRef,
+ isSelectIconModalOpen,
planContent,
+ planData,
+ setIsSelectIconModalOpen,
handleAddTag,
handleChangeCanAjaja,
handleChangeDescription,
+ handleChangeIconNumber,
handleChangeIsPublic,
handleChangeTitle,
+ handleEditPlan,
handleRemoveTag,
- handleChangeIconNumber,
- } = useWritablePlan(planData);
- const [isSelectIconModalOpen, setIsSelectIconModalOpen] = useState(false);
-
- const handleEditPlan = () => {
- // TODO:
- editPlan(
- { planId: Number(planId), planData: planContent },
- {
- onError: () => {
- ajajaToast.error('수정에 실패했습니다.');
- },
- onSuccess: () => {
- router.replace(`/plans/${planId}`);
- },
- },
- );
- };
+ } = usePlanEditPage(params.planId);
return (
diff --git a/src/app/(header)/reminds/[planId]/error.tsx b/src/app/reminds/[planId]/error.tsx
similarity index 100%
rename from src/app/(header)/reminds/[planId]/error.tsx
rename to src/app/reminds/[planId]/error.tsx
diff --git a/src/app/(header)/reminds/[planId]/index.scss b/src/app/reminds/[planId]/index.scss
similarity index 100%
rename from src/app/(header)/reminds/[planId]/index.scss
rename to src/app/reminds/[planId]/index.scss
diff --git a/src/app/(header)/reminds/[planId]/page.tsx b/src/app/reminds/[planId]/page.tsx
similarity index 100%
rename from src/app/(header)/reminds/[planId]/page.tsx
rename to src/app/reminds/[planId]/page.tsx
diff --git a/src/app/(header)/reminds/edit/[planId]/_hooks/useEditRemindPage.ts b/src/app/reminds/edit/[planId]/_hooks/useEditRemindPage.ts
similarity index 96%
rename from src/app/(header)/reminds/edit/[planId]/_hooks/useEditRemindPage.ts
rename to src/app/reminds/edit/[planId]/_hooks/useEditRemindPage.ts
index a6d70d13..ae55d14f 100644
--- a/src/app/(header)/reminds/edit/[planId]/_hooks/useEditRemindPage.ts
+++ b/src/app/reminds/edit/[planId]/_hooks/useEditRemindPage.ts
@@ -1,5 +1,5 @@
import { SESSION_STORAGE_KEY } from '@/constants';
-import { RemindData } from '@/types/Remind';
+import { RemindData } from '@/types';
import { changeRemindTimeToNumber } from '@/utils/changeRemindTimeToNumber';
import { useState } from 'react';
diff --git a/src/app/(header)/reminds/edit/[planId]/error.tsx b/src/app/reminds/edit/[planId]/error.tsx
similarity index 100%
rename from src/app/(header)/reminds/edit/[planId]/error.tsx
rename to src/app/reminds/edit/[planId]/error.tsx
diff --git a/src/app/(header)/reminds/edit/[planId]/index.scss b/src/app/reminds/edit/[planId]/index.scss
similarity index 100%
rename from src/app/(header)/reminds/edit/[planId]/index.scss
rename to src/app/reminds/edit/[planId]/index.scss
diff --git a/src/app/(header)/reminds/edit/[planId]/page.tsx b/src/app/reminds/edit/[planId]/page.tsx
similarity index 98%
rename from src/app/(header)/reminds/edit/[planId]/page.tsx
rename to src/app/reminds/edit/[planId]/page.tsx
index 88b3a4f9..88879189 100644
--- a/src/app/(header)/reminds/edit/[planId]/page.tsx
+++ b/src/app/reminds/edit/[planId]/page.tsx
@@ -10,8 +10,8 @@ import { ajajaToast } from '@/components/Toaster/customToast';
import { EDIT_REMIND_STEP_TITLE, SESSION_STORAGE_KEY } from '@/constants';
import { useEditRemindMutation } from '@/hooks/apis/useEditRemindMutation';
import { useGetRemindQuery } from '@/hooks/apis/useGetRemindQuery';
-import { RemindItemType, RemindOptionType } from '@/types/Remind';
-import { EditRemindData } from '@/types/apis/plan/EditRemind';
+import { RemindItemType, RemindOptionType } from '@/types';
+import { EditRemindData } from '@/types/apis';
import { changeRemindTimeToString } from '@/utils/changeRemindTimeToString';
import { checkIsSeason } from '@/utils/checkIsSeason';
import { decideRemindDate } from '@/utils/decideRemindDate';
diff --git a/src/components/CreatePlanContent/CreatePlanContent.tsx b/src/components/CreatePlanContent/CreatePlanContent.tsx
index 9ce7052e..046bc395 100644
--- a/src/components/CreatePlanContent/CreatePlanContent.tsx
+++ b/src/components/CreatePlanContent/CreatePlanContent.tsx
@@ -1,12 +1,12 @@
'use client';
+import { HelpButton } from '@/components';
import { INPUT_MAX_LENGTH, SESSION_STORAGE_KEY } from '@/constants';
-import { PlanContentType } from '@/types/Plan';
+import { useSessionStorage } from '@/hooks/useSessionStorage';
+import { PlanContentType } from '@/types';
import classNames from 'classnames';
import { useEffect, useRef } from 'react';
import { DeletableTag, IconSwitchButton, PlanInput, TagInput } from '..';
-import HelpButton from '../HelpButton/HelpButton';
-import { useSessionStorage } from './../../hooks/useSessionStorage';
import './index.scss';
interface CreatePlanContentProps {
diff --git a/src/components/CreatePlanIcon/CreatePlanIcon.tsx b/src/components/CreatePlanIcon/CreatePlanIcon.tsx
index 5b67b47d..f84e1a67 100644
--- a/src/components/CreatePlanIcon/CreatePlanIcon.tsx
+++ b/src/components/CreatePlanIcon/CreatePlanIcon.tsx
@@ -1,11 +1,11 @@
'use client';
+import { CreatePlanIconExample, Modal, ModalSelectIcon } from '@/components';
import { SESSION_STORAGE_KEY, planIcons } from '@/constants';
+import { useSessionStorage } from '@/hooks/useSessionStorage';
import classNames from 'classnames';
import Image from 'next/image';
import { useEffect, useState } from 'react';
-import { CreatePlanIconExample, Modal, ModalSelectIcon } from '..';
-import { useSessionStorage } from './../../hooks/useSessionStorage';
import './index.scss';
interface CreatePlanIconProps {
diff --git a/src/components/CreatePlanRemindDate/CreatePlanRemindDate.tsx b/src/components/CreatePlanRemindDate/CreatePlanRemindDate.tsx
index ef010e97..f842b7a1 100644
--- a/src/components/CreatePlanRemindDate/CreatePlanRemindDate.tsx
+++ b/src/components/CreatePlanRemindDate/CreatePlanRemindDate.tsx
@@ -9,7 +9,7 @@ import {
TOTAL_PERIOD_OPTIONS,
} from '@/constants';
import { useSessionStorage } from '@/hooks/useSessionStorage';
-import { RemindOptionType } from '@/types/Remind';
+import { RemindOptionType } from '@/types';
import classNames from 'classnames';
import React, { useCallback, useEffect, useMemo } from 'react';
import './index.scss';
diff --git a/src/components/CreatePlanRemindMessage/CreatePlanRemindMessage.tsx b/src/components/CreatePlanRemindMessage/CreatePlanRemindMessage.tsx
index 2c7fd781..424b766e 100644
--- a/src/components/CreatePlanRemindMessage/CreatePlanRemindMessage.tsx
+++ b/src/components/CreatePlanRemindMessage/CreatePlanRemindMessage.tsx
@@ -1,12 +1,11 @@
'use client';
+import { ModalSendRemindExample, WritableRemindItem } from '@/components';
import { SESSION_STORAGE_KEY } from '@/constants';
import { useSessionStorage } from '@/hooks/useSessionStorage';
-import { RemindItemType } from '@/types/Remind';
+import { RemindItemType } from '@/types';
import classNames from 'classnames';
import React, { useCallback, useEffect, useState } from 'react';
-import { WritableRemindItem } from '..';
-import ModalSendRemindExample from '../ModalSendRemindExample/ModalSendRemindExample';
import './index.scss';
interface CreatePlanRemindMessageProps {
diff --git a/src/components/ModalContinueCreate/ModalContinueCreate.tsx b/src/components/ModalContinueCreate/ModalContinueCreate.tsx
index af7c31be..f3aba9b4 100644
--- a/src/components/ModalContinueCreate/ModalContinueCreate.tsx
+++ b/src/components/ModalContinueCreate/ModalContinueCreate.tsx
@@ -1,9 +1,9 @@
'use client';
+import { Button, Modal } from '@/components';
import { useModalClose } from '@/hooks/useModalClose';
import classNames from 'classnames';
import React, { useRef } from 'react';
-import { Button, Modal } from '..';
import './index.scss';
interface ModalContinueCreateProps {
diff --git a/src/components/ModalFixRemindDate/ModalFixRemindDate.tsx b/src/components/ModalFixRemindDate/ModalFixRemindDate.tsx
index 2fa11d68..0f5442dd 100644
--- a/src/components/ModalFixRemindDate/ModalFixRemindDate.tsx
+++ b/src/components/ModalFixRemindDate/ModalFixRemindDate.tsx
@@ -1,6 +1,6 @@
+import { Modal, ModalBasic } from '@/components';
import classNames from 'classnames';
import React from 'react';
-import { Modal, ModalBasic } from '..';
import './index.scss';
interface ModalFixRemindDateProps {
diff --git a/src/components/ModalSelectIcon/ModalSelectIcon.tsx b/src/components/ModalSelectIcon/ModalSelectIcon.tsx
index 39e8f687..34e95314 100644
--- a/src/components/ModalSelectIcon/ModalSelectIcon.tsx
+++ b/src/components/ModalSelectIcon/ModalSelectIcon.tsx
@@ -1,6 +1,6 @@
'use client';
-import { planIcons } from '@/constants/planIcons';
+import { planIcons } from '@/constants';
import { useModalClose } from '@/hooks/useModalClose';
import classNames from 'classnames';
import Image from 'next/image';
diff --git a/src/components/ReadOnlyPlan/ReadOnlyPlan.tsx b/src/components/ReadOnlyPlan/ReadOnlyPlan.tsx
index e2eb8c3d..6dcf6df3 100644
--- a/src/components/ReadOnlyPlan/ReadOnlyPlan.tsx
+++ b/src/components/ReadOnlyPlan/ReadOnlyPlan.tsx
@@ -1,11 +1,16 @@
-import { planIcons } from '@/constants/planIcons';
+import {
+ AjajaButton,
+ DebounceSwitchButton,
+ HelpButton,
+ PlanInput,
+ Tag,
+} from '@/components';
+import { ajajaToast } from '@/components/Toaster/customToast';
+import { planIcons } from '@/constants';
import { useToggleAjajaNotificationMutation } from '@/hooks/apis/useToggleAjajaNotificationMutation';
import { useToggleIsPublicMutation } from '@/hooks/apis/useToggleIsPublicMutation';
-import { PlanData } from '@/types/apis/plan/GetPlan';
+import { PlanData } from '@/types/apis';
import Image from 'next/image';
-import { AjajaButton, DebounceSwitchButton, PlanInput, Tag } from '..';
-import HelpButton from '../HelpButton/HelpButton';
-import { ajajaToast } from '../Toaster/customToast';
import './index.scss';
interface ReadOnlyPlanProps {
diff --git a/src/components/RemindItem/ReadOnlyRemindItem/ReadOnlyRemindItem.tsx b/src/components/RemindItem/ReadOnlyRemindItem/ReadOnlyRemindItem.tsx
index a7c19dbd..0246a091 100644
--- a/src/components/RemindItem/ReadOnlyRemindItem/ReadOnlyRemindItem.tsx
+++ b/src/components/RemindItem/ReadOnlyRemindItem/ReadOnlyRemindItem.tsx
@@ -1,7 +1,7 @@
'use client';
import { Icon, RemindInput } from '@/components';
-import { ReadOnlyRemindItemData } from '@/types/Remind';
+import { ReadOnlyRemindItemData } from '@/types';
import { checkIsSeason } from '@/utils/checkIsSeason';
import classNames from 'classnames';
import React, { useMemo, useState } from 'react';
diff --git a/src/components/RemindItem/WritableRemindItem/WritableRemindItem.tsx b/src/components/RemindItem/WritableRemindItem/WritableRemindItem.tsx
index 823dca02..dad9660f 100644
--- a/src/components/RemindItem/WritableRemindItem/WritableRemindItem.tsx
+++ b/src/components/RemindItem/WritableRemindItem/WritableRemindItem.tsx
@@ -1,7 +1,7 @@
'use client';
import { Icon, Modal, ModalBasic, RemindInput } from '@/components';
-import { INPUT_MAX_LENGTH } from '@/constants/userInputMaxLength';
+import { INPUT_MAX_LENGTH } from '@/constants';
import classNames from 'classnames';
import React, { useEffect, useMemo, useState } from 'react';
import './index.scss';
diff --git a/src/constants/addressRegex.ts b/src/constants/addressRegex.ts
new file mode 100644
index 00000000..a1a172e2
--- /dev/null
+++ b/src/constants/addressRegex.ts
@@ -0,0 +1,7 @@
+export const address = {
+ isEdit: /^\/plans\/edit\/\d+/,
+ isPlan: /^\/plans\/\d+/,
+ isRemind: /^\/reminds\/.*$/,
+ isFeedback: /^\/feedback\/\d+/,
+ isFeedbackEvaluate: /^\/feedback\/evaluate/,
+};
diff --git a/src/constants/index.ts b/src/constants/index.ts
index 82c9a627..fbf3d3a6 100644
--- a/src/constants/index.ts
+++ b/src/constants/index.ts
@@ -21,3 +21,5 @@ export {
} from '@/constants/remindOptions';
export { REMIND_TIME_TEXT } from '@/constants/remindTimeText';
export { INPUT_MAX_LENGTH } from '@/constants/userInputMaxLength';
+export { address } from '@/constants/addressRegex';
+export { options } from '@/constants/radio';
diff --git a/src/constants/radio.ts b/src/constants/radio.ts
new file mode 100644
index 00000000..e8d73fe3
--- /dev/null
+++ b/src/constants/radio.ts
@@ -0,0 +1,9 @@
+import { Option } from '@/types';
+
+export const options: Option[] = [
+ { value: '100', label: '매우 잘함 (100%)' },
+ { value: '75', label: '잘 함 (75%)' },
+ { value: '50', label: '보통 (50%)' },
+ { value: '25', label: '대체로 못함 (25%)' },
+ { value: '0', label: '전혀 못함 (0%)' },
+];
diff --git a/src/hooks/apis/index.ts b/src/hooks/apis/index.ts
new file mode 100644
index 00000000..6137aa7f
--- /dev/null
+++ b/src/hooks/apis/index.ts
@@ -0,0 +1,20 @@
+export { useAllPlansQuery } from '@/hooks/apis/useAllPlansQuery';
+export { useDeletePlanMutation } from '@/hooks/apis/useDeletePlanMutation';
+export { useEditPlanMutation } from '@/hooks/apis/useEditPlanMutation';
+export { useEditRemindMutation } from '@/hooks/apis/useEditRemindMutation';
+export { useGetFeedbacksQuery } from '@/hooks/apis/useGetFeedbacksQuery';
+export { useGetMyPlansQuery } from '@/hooks/apis/useGetMyPlansQuery';
+export { useGetPlanQuery } from '@/hooks/apis/useGetPlanQuery';
+export { useGetRemindQuery } from '@/hooks/apis/useGetRemindQuery';
+export { useGetUserInformationQuery } from '@/hooks/apis/useGetUserInformationQuery';
+export { usePostAjajaMutation } from '@/hooks/apis/usePostAjajaMutation';
+export { usePostFeedbacksMutation } from '@/hooks/apis/usePostFeedbacksMutation';
+export { usePostNewPlanMutation } from '@/hooks/apis/usePostNewPlanMutation';
+export { usePostRemindTest } from '@/hooks/apis/usePostRemindTest';
+export { usePostSendVerificationMutation } from '@/hooks/apis/usePostSendVerificationMutation';
+export { usePostVerifyMutation } from '@/hooks/apis/usePostVerifyMutation';
+export { usePutUserReceiveMutation } from '@/hooks/apis/usePutUserReceiveMutation';
+export { usePostUsersRefreshMutation } from '@/hooks/apis/useRefreshNicknameMutation';
+export { useToggleAjajaNotificationMutation } from '@/hooks/apis/useToggleAjajaNotificationMutation';
+export { useToggleIsPublicMutation } from '@/hooks/apis/useToggleIsPublicMutation';
+export { useToggleIsRemindableMutation } from '@/hooks/apis/useToggleIsRemindable';
diff --git a/src/hooks/index.ts b/src/hooks/index.ts
new file mode 100644
index 00000000..2504672c
--- /dev/null
+++ b/src/hooks/index.ts
@@ -0,0 +1,6 @@
+export { useDebounce } from '@/hooks/useDebounce';
+export { useIsLogIn } from '@/hooks/useIsLogIn';
+export { useModalClose } from '@/hooks/useModalClose';
+export { useSessionStorage } from '@/hooks/useSessionStorage';
+export { useThrottle } from '@/hooks/useThrottle';
+export { useWritablePlan } from '@/hooks/useWritablePlan';
diff --git a/src/types/ProgressBar.ts b/src/types/ProgressBar.ts
new file mode 100644
index 00000000..41b79cad
--- /dev/null
+++ b/src/types/ProgressBar.ts
@@ -0,0 +1,3 @@
+export type ProgressBarProps = {
+ percent: number;
+};
diff --git a/src/types/Radio.ts b/src/types/Radio.ts
new file mode 100644
index 00000000..441a5862
--- /dev/null
+++ b/src/types/Radio.ts
@@ -0,0 +1,9 @@
+export type EvaluateRadioProps = {
+ evaluateOption: number;
+ setEvaluateOption: React.Dispatch>;
+};
+
+export type Option = {
+ value: string;
+ label: string;
+};
diff --git a/src/types/Tab.ts b/src/types/Tab.ts
new file mode 100644
index 00000000..c2589cce
--- /dev/null
+++ b/src/types/Tab.ts
@@ -0,0 +1,6 @@
+import { SortType } from './apis';
+
+export type TabProps = {
+ handleSort: (condition: SortType) => void;
+ handleYear: (isNewYear: boolean) => void;
+};
diff --git a/src/types/index.ts b/src/types/index.ts
index a9bbdbfc..101ceeeb 100644
--- a/src/types/index.ts
+++ b/src/types/index.ts
@@ -12,3 +12,6 @@ export type {
RemindData,
} from '@/types/Remind';
export type { SvgProps } from '@/types/Svg';
+export type { TabProps } from '@/types/Tab';
+export type { ProgressBarProps } from '@/types/ProgressBar';
+export type { EvaluateRadioProps, Option } from '@/types/Radio';
diff --git a/src/utils/decideRandomIconNumber.ts b/src/utils/decideRandomIconNumber.ts
deleted file mode 100644
index 019d6dd6..00000000
--- a/src/utils/decideRandomIconNumber.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-export const decideRandomIconNumber = () => {
- return Math.floor(Math.random() * 10) + 1;
-};
diff --git a/src/utils/index.ts b/src/utils/index.ts
new file mode 100644
index 00000000..86cedc6e
--- /dev/null
+++ b/src/utils/index.ts
@@ -0,0 +1,10 @@
+export { checkIsMyPlan } from '@/utils/checkIsMyPlan';
+export { checkIsSeason } from '@/utils/checkIsSeason';
+export { checkIsTokenExpired } from '@/utils/checkIsTokenExpired';
+export { checkThisYear } from '@/utils/checkThisYear';
+export { clearCreatePlanSessionData } from '@/utils/clearCreatePlanSessionData';
+export { currentMonth } from '@/utils/currentMonth';
+export { decideRemindDate } from '@/utils/decideRemindDate';
+export { decodeJWT } from '@/utils/decodeJWT';
+export { getSessionStorageData } from '@/utils/getSessionStorageData';
+export { getUserIdFromJWT } from '@/utils/getUserIdFromJWT';