diff --git a/src/app/designer/layout.tsx b/src/app/designer/layout.tsx index 371dd54..5bfc1df 100644 --- a/src/app/designer/layout.tsx +++ b/src/app/designer/layout.tsx @@ -1,8 +1,8 @@ import { ReactNode } from "react"; -import Header from "@/components/common/Header"; -import Sidebar from "@/components/common/Sidebar"; -import SidebarMenu from "@/components/common/SidebarMenu"; +import Header from "@/shared/ui/Header"; +import Sidebar from "@/shared/ui/Sidebar"; +import SidebarMenu from "@/shared/ui/SidebarMenu"; const DesignerLayout = ({ children }: { children: ReactNode }) => { return ( diff --git a/src/app/instructor/layout.tsx b/src/app/instructor/layout.tsx index df786ef..9b6cafe 100644 --- a/src/app/instructor/layout.tsx +++ b/src/app/instructor/layout.tsx @@ -1,8 +1,8 @@ import { ReactNode } from "react"; -import Header from "@/components/common/Header"; -import Sidebar from "@/components/common/Sidebar"; -import SidebarMenu from "@/components/common/SidebarMenu"; +import Header from "@/shared/ui/Header"; +import Sidebar from "@/shared/ui/Sidebar"; +import SidebarMenu from "@/shared/ui/SidebarMenu"; const InstructorLayout = ({ children }: { children: ReactNode }) => { return ( diff --git a/src/app/instructor/page.tsx b/src/app/instructor/page.tsx index 157e9b1..929fcc6 100644 --- a/src/app/instructor/page.tsx +++ b/src/app/instructor/page.tsx @@ -1,6 +1,8 @@ -import DraftSubmissionStatusSection from "@/containers/instructor/home/DraftSubmissionStatusSection"; -import MatchingCommissionsSection from "@/containers/instructor/home/MatchingCommissionsSection"; -import ModifyingCommissionsSection from "@/containers/instructor/home/ModifyingCommissionsSection"; +import { + DraftSubmissionStatusSection, + MatchingCommissionsSection, + ModifyingCommissionsSection, +} from "@/widgets/instructor/home"; const page = () => { return ( diff --git a/src/app/instructor/write/layout.tsx b/src/app/instructor/write/layout.tsx index f215948..eaa40bb 100644 --- a/src/app/instructor/write/layout.tsx +++ b/src/app/instructor/write/layout.tsx @@ -2,8 +2,7 @@ import { ReactNode, useEffect } from "react"; -import StepHeader from "@/components/instructor/write/StepHeader"; -import { useWriteFormStore } from "@/store/writeFormStore"; +import { StepHeader, useWriteFormStore } from "@/features/instructor/write"; const WriteLayout = ({ children }: { children: ReactNode }) => { const clearAfterSubmit = useWriteFormStore(s => s.clearAfterSubmit); diff --git a/src/app/instructor/write/page.tsx b/src/app/instructor/write/page.tsx index 1e490bf..1db6de1 100644 --- a/src/app/instructor/write/page.tsx +++ b/src/app/instructor/write/page.tsx @@ -3,11 +3,9 @@ import { useRouter } from "next/navigation"; import { useEffect, useState } from "react"; -import Modal from "@/components/common/Modal"; -import Step1Content from "@/containers/instructor/write/Steps/Step1Content"; -import Step2Content from "@/containers/instructor/write/Steps/Step2Content"; -import Step3Content from "@/containers/instructor/write/Steps/Step3Content"; -import { useWriteFormStore } from "@/store/writeFormStore"; +import { useWriteFormStore } from "@/features/instructor/write"; +import Modal from "@/shared/ui/Modal"; +import { Step1Content, Step2Content, Step3Content } from "@/widgets/instructor/write"; const WritePageContent = () => { const { currentStep } = useWriteFormStore(); diff --git a/src/app/login/layout.tsx b/src/app/login/layout.tsx index c3e06b5..8a962d8 100644 --- a/src/app/login/layout.tsx +++ b/src/app/login/layout.tsx @@ -1,6 +1,6 @@ import { ReactNode } from "react"; -import Header from "@/components/common/Header"; +import Header from "@/shared/ui/Header"; const LoginLayout = ({ children }: { children: ReactNode }) => { return ( diff --git a/src/app/login/page.tsx b/src/app/login/page.tsx index 86fba24..5214ff4 100644 --- a/src/app/login/page.tsx +++ b/src/app/login/page.tsx @@ -3,9 +3,9 @@ import Link from "next/link"; import { useState } from "react"; -import { BlackLogo } from "@/assets/logos"; -import Button from "@/components/common/Button"; -import InputField from "@/components/common/input/InputField"; +import { BlackLogo } from "@/shared/assets/logos"; +import Button from "@/shared/ui/Button"; +import InputField from "@/shared/ui/input/InputField"; const Page = () => { const [loginId, setLoginId] = useState(""); diff --git a/src/app/signup/designer/step1/page.tsx b/src/app/signup/designer/step1/page.tsx index 31d12f8..2d43133 100644 --- a/src/app/signup/designer/step1/page.tsx +++ b/src/app/signup/designer/step1/page.tsx @@ -3,14 +3,19 @@ import { useRouter } from "next/navigation"; import { type ChangeEvent, useState } from "react"; -import { CheckboxFillIcon, CheckboxGrayIcon, CloseIcon, StepOneDesignerIcon } from "@/assets/icons"; -import Button from "@/components/common/Button"; -import InputField from "@/components/common/input/InputField"; import { DESIGNER_TERMS, SIGNUP_MAX_NAME_LENGTH, SIGNUP_MAX_PHONE_NUMBER_LENGTH, -} from "@/constants/signup"; +} from "@/features/signup"; +import { + CheckboxFillIcon, + CheckboxGrayIcon, + CloseIcon, + StepOneDesignerIcon, +} from "@/shared/assets/icons"; +import Button from "@/shared/ui/Button"; +import InputField from "@/shared/ui/input/InputField"; type DesignerTermsId = (typeof DESIGNER_TERMS)[number]["id"]; diff --git a/src/app/signup/designer/step2/page.tsx b/src/app/signup/designer/step2/page.tsx index a55398e..5842e6a 100644 --- a/src/app/signup/designer/step2/page.tsx +++ b/src/app/signup/designer/step2/page.tsx @@ -2,11 +2,14 @@ import { useRouter } from "next/navigation"; -import { StepTwoDesignerIcon } from "@/assets/icons"; -import Button from "@/components/common/Button"; -import InputField from "@/components/common/input/InputField"; -import { SIGNUP_MAX_ID_LENGTH, SIGNUP_MAX_PASSWORD_LENGTH } from "@/constants/signup"; -import { useSignupStep2Form } from "@/lib/hooks/useSignupStep2Form"; +import { + SIGNUP_MAX_ID_LENGTH, + SIGNUP_MAX_PASSWORD_LENGTH, + useSignupStep2Form, +} from "@/features/signup"; +import { StepTwoDesignerIcon } from "@/shared/assets/icons"; +import Button from "@/shared/ui/Button"; +import InputField from "@/shared/ui/input/InputField"; const Page = () => { const router = useRouter(); diff --git a/src/app/signup/designer/step3/page.tsx b/src/app/signup/designer/step3/page.tsx index 4fa7ed3..5005858 100644 --- a/src/app/signup/designer/step3/page.tsx +++ b/src/app/signup/designer/step3/page.tsx @@ -3,14 +3,13 @@ import { useRouter } from "next/navigation"; import { type ChangeEvent, useState } from "react"; -import { StepThreeDesignerIcon } from "@/assets/icons"; -import Button from "@/components/common/Button"; -import BankDropdown from "@/components/common/dropdown/BankDropdown"; -import FileDragAndDrop from "@/components/common/FileDragAndDrop"; -import FileUpload from "@/components/common/FileUpload"; -import InputField from "@/components/common/input/InputField"; -import { type BankCode, type BankOption } from "@/constants/signup"; -import { useUploadedFiles } from "@/lib/hooks/useUploadedFiles"; +import { type BankCode, BankDropdown, type BankOption } from "@/features/signup"; +import { StepThreeDesignerIcon } from "@/shared/assets/icons"; +import { useUploadedFiles } from "@/shared/lib/hooks/useUploadedFiles"; +import Button from "@/shared/ui/Button"; +import FileDragAndDrop from "@/shared/ui/FileDragAndDrop"; +import FileUpload from "@/shared/ui/FileUpload"; +import InputField from "@/shared/ui/input/InputField"; const PORTFOLIO_MAX_FILE_COUNT = 3; const PORTFOLIO_ALLOWED_EXTENSIONS = [".pdf", ".png"]; diff --git a/src/app/signup/instructor/step1/page.tsx b/src/app/signup/instructor/step1/page.tsx index 453ed10..9985ff3 100644 --- a/src/app/signup/instructor/step1/page.tsx +++ b/src/app/signup/instructor/step1/page.tsx @@ -3,19 +3,19 @@ import { useRouter } from "next/navigation"; import { type ChangeEvent, useState } from "react"; +import { + INSTRUCTOR_TERMS, + SIGNUP_MAX_NAME_LENGTH, + SIGNUP_MAX_PHONE_NUMBER_LENGTH, +} from "@/features/signup"; import { CheckboxFillIcon, CheckboxGrayIcon, CloseIcon, StepOneInstructorIcon, -} from "@/assets/icons"; -import Button from "@/components/common/Button"; -import InputField from "@/components/common/input/InputField"; -import { - INSTRUCTOR_TERMS, - SIGNUP_MAX_NAME_LENGTH, - SIGNUP_MAX_PHONE_NUMBER_LENGTH, -} from "@/constants/signup"; +} from "@/shared/assets/icons"; +import Button from "@/shared/ui/Button"; +import InputField from "@/shared/ui/input/InputField"; type InstructorTermsId = (typeof INSTRUCTOR_TERMS)[number]["id"]; diff --git a/src/app/signup/instructor/step2/page.tsx b/src/app/signup/instructor/step2/page.tsx index f6cde4b..37b0b56 100644 --- a/src/app/signup/instructor/step2/page.tsx +++ b/src/app/signup/instructor/step2/page.tsx @@ -2,11 +2,14 @@ import { useRouter } from "next/navigation"; -import { StepTwoInstructorIcon } from "@/assets/icons"; -import Button from "@/components/common/Button"; -import InputField from "@/components/common/input/InputField"; -import { SIGNUP_MAX_ID_LENGTH, SIGNUP_MAX_PASSWORD_LENGTH } from "@/constants/signup"; -import { useSignupStep2Form } from "@/lib/hooks/useSignupStep2Form"; +import { + SIGNUP_MAX_ID_LENGTH, + SIGNUP_MAX_PASSWORD_LENGTH, + useSignupStep2Form, +} from "@/features/signup"; +import { StepTwoInstructorIcon } from "@/shared/assets/icons"; +import Button from "@/shared/ui/Button"; +import InputField from "@/shared/ui/input/InputField"; const Page = () => { const router = useRouter(); diff --git a/src/app/signup/layout.tsx b/src/app/signup/layout.tsx index d191b32..81691a9 100644 --- a/src/app/signup/layout.tsx +++ b/src/app/signup/layout.tsx @@ -1,6 +1,6 @@ import { ReactNode } from "react"; -import Header from "@/components/common/Header"; +import Header from "@/shared/ui/Header"; const SignupLayout = ({ children }: { children: ReactNode }) => { return ( diff --git a/src/app/signup/page.tsx b/src/app/signup/page.tsx index 7498ddf..ea40e64 100644 --- a/src/app/signup/page.tsx +++ b/src/app/signup/page.tsx @@ -3,9 +3,9 @@ import { useRouter } from "next/navigation"; import { useState } from "react"; -import { UserTypeDesignerIcon, UserTypeInstructorIcon } from "@/assets/icons"; -import Button from "@/components/common/Button"; -import UserTypeBtn from "@/components/signup/UserTypeBtn"; +import { UserTypeBtn } from "@/features/signup"; +import { UserTypeDesignerIcon, UserTypeInstructorIcon } from "@/shared/assets/icons"; +import Button from "@/shared/ui/Button"; type UserType = "designer" | "instructor"; diff --git a/src/assets/icons/index.ts b/src/assets/icons/index.ts deleted file mode 100644 index 157f73d..0000000 --- a/src/assets/icons/index.ts +++ /dev/null @@ -1,42 +0,0 @@ -export { default as ArrowDownIcon } from "@/assets/icons/icon_arrow_down.svg"; -export { default as ArrowLeftIcon } from "@/assets/icons/icon_arrow_left.svg"; -export { default as PrevButton } from "@/assets/icons/icon_arrow_left_circle_fill.svg"; -export { default as ArrowRightIcon } from "@/assets/icons/icon_arrow_right.svg"; -export { default as NextButton } from "@/assets/icons/icon_arrow_right_circle_fill.svg"; -export { default as ArrowUpIcon } from "@/assets/icons/icon_arrow_up.svg"; -export { default as CheckCircleFillIcon } from "@/assets/icons/icon_check_circle_fill.svg"; -export { default as CheckboxGrayIcon } from "@/assets/icons/icon_checkbox_border_gray.svg"; -export { default as CheckboxWhiteIcon } from "@/assets/icons/icon_checkbox_border_white.svg"; -export { default as CheckboxFillIcon } from "@/assets/icons/icon_checkbox_fill.svg"; -export { default as CloseIcon } from "@/assets/icons/icon_close.svg"; -export { default as CloseCircleIcon } from "@/assets/icons/icon_close_circle.svg"; -export { default as CloseCircleFillIcon } from "@/assets/icons/icon_close_circle_fill.svg"; -export { default as EnterIcon } from "@/assets/icons/icon_enter.svg"; -export { default as ExclamationMarkCircleIcon } from "@/assets/icons/icon_exclamation_mark_circle.svg"; -export { default as ExitIcon } from "@/assets/icons/icon_exit.svg"; -export { default as ExitBoldIcon } from "@/assets/icons/icon_exit_bold.svg"; -export { default as ClosedEyeIcon } from "@/assets/icons/icon_eye_closed.svg"; -export { default as OpenEyeIcon } from "@/assets/icons/icon_eye_open.svg"; -export { default as FileIcon } from "@/assets/icons/icon_file.svg"; -export { default as FileBoldIcon } from "@/assets/icons/icon_file_bold.svg"; -export { default as FileImageIcon } from "@/assets/icons/icon_file_image.svg"; -export { default as FileImageBoldIcon } from "@/assets/icons/icon_file_image_bold.svg"; -export { default as FolderAddIcon } from "@/assets/icons/icon_folder_add.svg"; -export { default as LoadingIcon } from "@/assets/icons/icon_loading.svg"; -export { default as MatchingOffIcon } from "@/assets/icons/icon_matching_off.svg"; -export { default as MatchingOnIcon } from "@/assets/icons/icon_matching_on.svg"; -export { default as OneCircleIcon } from "@/assets/icons/icon_number_one_circle_fill.svg"; -export { default as ThreeCircleIcon } from "@/assets/icons/icon_number_three_circle_fill.svg"; -export { default as TwoCircleIcon } from "@/assets/icons/icon_number_two_circle_fill.svg"; -export { default as ProfileCircleIcon } from "@/assets/icons/icon_profile_circle.svg"; -export { default as ProfileCircleBoldIcon } from "@/assets/icons/icon_profile_circle_bold.svg"; -export { default as SearchIcon } from "@/assets/icons/icon_search.svg"; -export { default as SearchBoldIcon } from "@/assets/icons/icon_search_bold.svg"; -export { default as ShareIcon } from "@/assets/icons/icon_share.svg"; -export { default as StepOneDesignerIcon } from "@/assets/icons/icon_step_one_designer.svg"; -export { default as StepOneInstructorIcon } from "@/assets/icons/icon_step_one_instructor.svg"; -export { default as StepThreeDesignerIcon } from "@/assets/icons/icon_step_three_designer.svg"; -export { default as StepTwoDesignerIcon } from "@/assets/icons/icon_step_two_designer.svg"; -export { default as StepTwoInstructorIcon } from "@/assets/icons/icon_step_two_instructor.svg"; -export { default as UserTypeDesignerIcon } from "@/assets/icons/icon_user_type_designer.svg"; -export { default as UserTypeInstructorIcon } from "@/assets/icons/icon_user_type_instructor.svg"; diff --git a/src/assets/logos/index.ts b/src/assets/logos/index.ts deleted file mode 100644 index bb9a8b1..0000000 --- a/src/assets/logos/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { default as BlackLogo } from "@/assets/logos/ditda_logo_black.svg"; -export { default as PurpleLogo } from "@/assets/logos/ditda_logo_purple.svg"; diff --git a/src/features/instructor/home/index.ts b/src/features/instructor/home/index.ts new file mode 100644 index 0000000..2b58348 --- /dev/null +++ b/src/features/instructor/home/index.ts @@ -0,0 +1,16 @@ +export { getDDay } from "@/features/instructor/home/lib/getDDay"; +export type { + DraftSubmissionItem, + MatchingItem, + ModifyingItem, +} from "@/features/instructor/home/model/home"; +export { + CATEGORY_DISPLAY_MAP, + draftSubmissionStatusData, + matchingStatusData, + modifyingStatusData, +} from "@/features/instructor/home/model/home"; +export { default as CommissionsHeader } from "@/features/instructor/home/ui/CommissionsHeader"; +export { default as DraftSubmissionStatusRow } from "@/features/instructor/home/ui/DraftSubmissionStatusRow"; +export { default as MatchingCommissionsRow } from "@/features/instructor/home/ui/MatchingCommissionsRow"; +export { default as ModifyingCommissionsRow } from "@/features/instructor/home/ui/ModifyingCommissionsRow"; diff --git a/src/features/instructor/home/lib/getDDay.ts b/src/features/instructor/home/lib/getDDay.ts new file mode 100644 index 0000000..3e0f265 --- /dev/null +++ b/src/features/instructor/home/lib/getDDay.ts @@ -0,0 +1,8 @@ +export const getDDay = (deadline: string) => { + const today = new Date(); + today.setHours(0, 0, 0, 0); + const target = new Date(deadline); + target.setHours(0, 0, 0, 0); + const diff = Math.ceil((target.getTime() - today.getTime()) / (1000 * 60 * 60 * 24)); + return diff >= 0 ? `D-${diff}` : `D+${Math.abs(diff)}`; +}; diff --git a/src/data/instructor/home.ts b/src/features/instructor/home/model/home.ts similarity index 100% rename from src/data/instructor/home.ts rename to src/features/instructor/home/model/home.ts diff --git a/src/components/instructor/home/CommissionsHeader.tsx b/src/features/instructor/home/ui/CommissionsHeader.tsx similarity index 100% rename from src/components/instructor/home/CommissionsHeader.tsx rename to src/features/instructor/home/ui/CommissionsHeader.tsx diff --git a/src/components/instructor/home/DraftSubmissionStatusRow.tsx b/src/features/instructor/home/ui/DraftSubmissionStatusRow.tsx similarity index 87% rename from src/components/instructor/home/DraftSubmissionStatusRow.tsx rename to src/features/instructor/home/ui/DraftSubmissionStatusRow.tsx index 8b54633..aea3332 100644 --- a/src/components/instructor/home/DraftSubmissionStatusRow.tsx +++ b/src/features/instructor/home/ui/DraftSubmissionStatusRow.tsx @@ -1,7 +1,7 @@ -import { ArrowRightIcon, MatchingOffIcon, MatchingOnIcon } from "@/assets/icons"; -import Tag from "@/components/common/Tag"; -import { CATEGORY_DISPLAY_MAP, DraftSubmissionItem } from "@/data/instructor/home"; -import { getDDay } from "@/lib/utils/date"; +import { getDDay } from "@/features/instructor/home/lib/getDDay"; +import { CATEGORY_DISPLAY_MAP, DraftSubmissionItem } from "@/features/instructor/home/model/home"; +import { ArrowRightIcon, MatchingOffIcon, MatchingOnIcon } from "@/shared/assets/icons"; +import Tag from "@/shared/ui/Tag"; const DraftSubmissionStatusRow = ({ item }: { item: DraftSubmissionItem }) => { const { title, category, draftSubmission, firstDraftDeadline } = item; diff --git a/src/components/instructor/home/MatchingCommissionsRow.tsx b/src/features/instructor/home/ui/MatchingCommissionsRow.tsx similarity index 80% rename from src/components/instructor/home/MatchingCommissionsRow.tsx rename to src/features/instructor/home/ui/MatchingCommissionsRow.tsx index 18404d0..21aa839 100644 --- a/src/components/instructor/home/MatchingCommissionsRow.tsx +++ b/src/features/instructor/home/ui/MatchingCommissionsRow.tsx @@ -1,7 +1,7 @@ -import { ArrowRightIcon } from "@/assets/icons"; -import Tag from "@/components/common/Tag"; -import { MatchingItem } from "@/data/instructor/home"; -import { getDDay } from "@/lib/utils/date"; +import { getDDay } from "@/features/instructor/home/lib/getDDay"; +import { MatchingItem } from "@/features/instructor/home/model/home"; +import { ArrowRightIcon } from "@/shared/assets/icons"; +import Tag from "@/shared/ui/Tag"; const MatchingCommissionsRow = ({ item }: { item: MatchingItem }) => { const { title, finalDeadline, matching } = item; diff --git a/src/components/instructor/home/ModifyingCommissionsRow.tsx b/src/features/instructor/home/ui/ModifyingCommissionsRow.tsx similarity index 81% rename from src/components/instructor/home/ModifyingCommissionsRow.tsx rename to src/features/instructor/home/ui/ModifyingCommissionsRow.tsx index cec061e..af58fb7 100644 --- a/src/components/instructor/home/ModifyingCommissionsRow.tsx +++ b/src/features/instructor/home/ui/ModifyingCommissionsRow.tsx @@ -1,8 +1,8 @@ -import Button from "@/components/common/Button"; -import Tag from "@/components/common/Tag"; -import { ModifyingItem } from "@/data/instructor/home"; -import { cn } from "@/lib/utils/cn"; -import { getDDay } from "@/lib/utils/date"; +import { getDDay } from "@/features/instructor/home/lib/getDDay"; +import { ModifyingItem } from "@/features/instructor/home/model/home"; +import { cn } from "@/shared/lib/utils/cn"; +import Button from "@/shared/ui/Button"; +import Tag from "@/shared/ui/Tag"; const ModifyingCommissionsRow = ({ item }: { item: ModifyingItem }) => { const { title, finalDeadline, isSubmitted, hasUpdate } = item; diff --git a/src/constants/write.ts b/src/features/instructor/write/config/write.ts similarity index 99% rename from src/constants/write.ts rename to src/features/instructor/write/config/write.ts index 38028c8..eef415b 100644 --- a/src/constants/write.ts +++ b/src/features/instructor/write/config/write.ts @@ -1,7 +1,7 @@ import React from "react"; -import { OneCircleIcon, ThreeCircleIcon, TwoCircleIcon } from "@/assets/icons"; -import { BadgeVariant } from "@/components/common/Badge"; +import { OneCircleIcon, ThreeCircleIcon, TwoCircleIcon } from "@/shared/assets/icons"; +import { BadgeVariant } from "@/shared/ui/Badge"; export type WriteStep = 1 | 2 | 3; diff --git a/src/features/instructor/write/index.ts b/src/features/instructor/write/index.ts new file mode 100644 index 0000000..902734f --- /dev/null +++ b/src/features/instructor/write/index.ts @@ -0,0 +1,13 @@ +export * from "@/features/instructor/write/config/write"; +export type { RgbaColor } from "@/features/instructor/write/lib/color"; +export { formatDate, getMinFinalDate, getYesterday } from "@/features/instructor/write/lib/date"; +export type { BasicInfo } from "@/features/instructor/write/model/writeFormStore"; +export { useWriteFormStore } from "@/features/instructor/write/model/writeFormStore"; +export { default as ColorChooseCard } from "@/features/instructor/write/ui/ColorChooseCard"; +export { default as ColorPicker } from "@/features/instructor/write/ui/ColorPicker"; +export { default as ConceptKeywordCard } from "@/features/instructor/write/ui/ConceptKeywordCard"; +export { default as PaperSizeCard } from "@/features/instructor/write/ui/PaperSizeCard"; +export { default as PaymentModal } from "@/features/instructor/write/ui/PaymentModal/PaymentModal"; +export { default as PlanChooseCard } from "@/features/instructor/write/ui/PlanChooseCard"; +export { default as SizeRecommendedCard } from "@/features/instructor/write/ui/SizeRecommendedCard"; +export { default as StepHeader } from "@/features/instructor/write/ui/StepHeader"; diff --git a/src/lib/utils/color.ts b/src/features/instructor/write/lib/color.ts similarity index 100% rename from src/lib/utils/color.ts rename to src/features/instructor/write/lib/color.ts diff --git a/src/lib/utils/date.ts b/src/features/instructor/write/lib/date.ts similarity index 69% rename from src/lib/utils/date.ts rename to src/features/instructor/write/lib/date.ts index 0d45b22..73f069d 100644 --- a/src/lib/utils/date.ts +++ b/src/features/instructor/write/lib/date.ts @@ -24,12 +24,3 @@ export const toApiDate = (date: Date) => { const d = String(date.getDate()).padStart(2, "0"); return `${y}-${m}-${d}`; }; - -export const getDDay = (deadline: string) => { - const today = new Date(); - today.setHours(0, 0, 0, 0); - const target = new Date(deadline); - target.setHours(0, 0, 0, 0); - const diff = Math.ceil((target.getTime() - today.getTime()) / (1000 * 60 * 60 * 24)); - return diff >= 0 ? `D-${diff}` : `D+${Math.abs(diff)}`; -}; diff --git a/src/types/write.ts b/src/features/instructor/write/model/write.ts similarity index 93% rename from src/types/write.ts rename to src/features/instructor/write/model/write.ts index 59d148c..a4346fb 100644 --- a/src/types/write.ts +++ b/src/features/instructor/write/model/write.ts @@ -1,4 +1,4 @@ -import { PageType } from "@/constants/write"; +import { PageType } from "@/features/instructor/write/config/write"; export interface WriteOrderColorRequest { role: "MAIN" | "SUB1" | "SUB2"; diff --git a/src/store/writeFormStore.ts b/src/features/instructor/write/model/writeFormStore.ts similarity index 95% rename from src/store/writeFormStore.ts rename to src/features/instructor/write/model/writeFormStore.ts index dbdf35e..79f6418 100644 --- a/src/store/writeFormStore.ts +++ b/src/features/instructor/write/model/writeFormStore.ts @@ -8,11 +8,11 @@ import { type PlanType, SIZE_API_MAP, type WriteStep, -} from "@/constants/write"; -import { type RgbaColor, toHex } from "@/lib/utils/color"; -import { toApiDate } from "@/lib/utils/date"; -import type { UploadedFile } from "@/types/file"; -import type { WriteOrderRequest } from "@/types/write"; +} from "@/features/instructor/write/config/write"; +import { type RgbaColor, toHex } from "@/features/instructor/write/lib/color"; +import { toApiDate } from "@/features/instructor/write/lib/date"; +import type { WriteOrderRequest } from "@/features/instructor/write/model/write"; +import type { UploadedFile } from "@/shared/types/file"; const STORAGE_KEY = "write-form"; diff --git a/src/components/instructor/write/ColorChooseCard.tsx b/src/features/instructor/write/ui/ColorChooseCard.tsx similarity index 94% rename from src/components/instructor/write/ColorChooseCard.tsx rename to src/features/instructor/write/ui/ColorChooseCard.tsx index c78f075..f23a860 100644 --- a/src/components/instructor/write/ColorChooseCard.tsx +++ b/src/features/instructor/write/ui/ColorChooseCard.tsx @@ -2,10 +2,10 @@ import { useState } from "react"; -import Radio from "@/components/common/Radio"; -import { cn } from "@/lib/utils/cn"; -import type { RgbaColor } from "@/lib/utils/color"; -import { clamp, hexToRgb, toHex } from "@/lib/utils/color"; +import type { RgbaColor } from "@/features/instructor/write/lib/color"; +import { clamp, hexToRgb, toHex } from "@/features/instructor/write/lib/color"; +import { cn } from "@/shared/lib/utils/cn"; +import Radio from "@/shared/ui/Radio"; type ColorChooseCardProps = { index: number; diff --git a/src/components/instructor/write/ColorPicker.tsx b/src/features/instructor/write/ui/ColorPicker.tsx similarity index 94% rename from src/components/instructor/write/ColorPicker.tsx rename to src/features/instructor/write/ui/ColorPicker.tsx index 9d61019..2ab39b5 100644 --- a/src/components/instructor/write/ColorPicker.tsx +++ b/src/features/instructor/write/ui/ColorPicker.tsx @@ -3,8 +3,8 @@ import { useState } from "react"; import { RgbaColorPicker } from "react-colorful"; -import type { RgbaColor } from "@/lib/utils/color"; -import { clamp, hexToRgb, toHex } from "@/lib/utils/color"; +import type { RgbaColor } from "@/features/instructor/write/lib/color"; +import { clamp, hexToRgb, toHex } from "@/features/instructor/write/lib/color"; interface ColorPickerProps { value?: RgbaColor; diff --git a/src/components/instructor/write/ConceptKeywordCard.tsx b/src/features/instructor/write/ui/ConceptKeywordCard.tsx similarity index 94% rename from src/components/instructor/write/ConceptKeywordCard.tsx rename to src/features/instructor/write/ui/ConceptKeywordCard.tsx index a7c91a6..8ccd202 100644 --- a/src/components/instructor/write/ConceptKeywordCard.tsx +++ b/src/features/instructor/write/ui/ConceptKeywordCard.tsx @@ -1,4 +1,4 @@ -import Chip from "@/components/common/Chip"; +import Chip from "@/shared/ui/Chip"; interface ConceptKeywordCardProps { title: string; diff --git a/src/components/instructor/write/PaperSizeCard.tsx b/src/features/instructor/write/ui/PaperSizeCard.tsx similarity index 94% rename from src/components/instructor/write/PaperSizeCard.tsx rename to src/features/instructor/write/ui/PaperSizeCard.tsx index e3ec26f..6a189ff 100644 --- a/src/components/instructor/write/PaperSizeCard.tsx +++ b/src/features/instructor/write/ui/PaperSizeCard.tsx @@ -1,4 +1,4 @@ -import { cn } from "@/lib/utils/cn"; +import { cn } from "@/shared/lib/utils/cn"; const PAPER_SIZES = [ { label: "A4", sizeClassName: "w-24 h-34.5" }, diff --git a/src/components/instructor/write/PaymentModal/PaymentModal.tsx b/src/features/instructor/write/ui/PaymentModal/PaymentModal.tsx similarity index 84% rename from src/components/instructor/write/PaymentModal/PaymentModal.tsx rename to src/features/instructor/write/ui/PaymentModal/PaymentModal.tsx index 759824f..f1905cf 100644 --- a/src/components/instructor/write/PaymentModal/PaymentModal.tsx +++ b/src/features/instructor/write/ui/PaymentModal/PaymentModal.tsx @@ -2,10 +2,10 @@ import { useEffect, useState } from "react"; -import { CloseIcon } from "@/assets/icons"; -import Step1 from "@/components/instructor/write/PaymentModal/Step1"; -import Step2 from "@/components/instructor/write/PaymentModal/Step2"; -import { useWriteFormStore } from "@/store/writeFormStore"; +import { useWriteFormStore } from "@/features/instructor/write/model/writeFormStore"; +import Step1 from "@/features/instructor/write/ui/PaymentModal/Step1"; +import Step2 from "@/features/instructor/write/ui/PaymentModal/Step2"; +import { CloseIcon } from "@/shared/assets/icons"; const PaymentModalContent = ({ onClose }: { onClose?: () => void }) => { const [step, setStep] = useState<1 | 2>(1); diff --git a/src/components/instructor/write/PaymentModal/Step1.tsx b/src/features/instructor/write/ui/PaymentModal/Step1.tsx similarity index 95% rename from src/components/instructor/write/PaymentModal/Step1.tsx rename to src/features/instructor/write/ui/PaymentModal/Step1.tsx index fb688f8..4c74263 100644 --- a/src/components/instructor/write/PaymentModal/Step1.tsx +++ b/src/features/instructor/write/ui/PaymentModal/Step1.tsx @@ -1,11 +1,15 @@ import { useState } from "react"; -import { ArrowDownIcon, CheckboxFillIcon, CheckboxGrayIcon } from "@/assets/icons"; -import Button from "@/components/common/Button"; -import Chip from "@/components/common/Chip"; -import { PLAN_MAP, SIZE_DISPLAY_MAP, TERMS_CONTENT } from "@/constants/write"; -import { formatDate } from "@/lib/utils/date"; -import { useWriteFormStore } from "@/store/writeFormStore"; +import { + PLAN_MAP, + SIZE_DISPLAY_MAP, + TERMS_CONTENT, +} from "@/features/instructor/write/config/write"; +import { formatDate } from "@/features/instructor/write/lib/date"; +import { useWriteFormStore } from "@/features/instructor/write/model/writeFormStore"; +import { ArrowDownIcon, CheckboxFillIcon, CheckboxGrayIcon } from "@/shared/assets/icons"; +import Button from "@/shared/ui/Button"; +import Chip from "@/shared/ui/Chip"; /* ───────────────────────────────────────────── InfoRow diff --git a/src/components/instructor/write/PaymentModal/Step2.tsx b/src/features/instructor/write/ui/PaymentModal/Step2.tsx similarity index 89% rename from src/components/instructor/write/PaymentModal/Step2.tsx rename to src/features/instructor/write/ui/PaymentModal/Step2.tsx index 892a391..9f240a0 100644 --- a/src/components/instructor/write/PaymentModal/Step2.tsx +++ b/src/features/instructor/write/ui/PaymentModal/Step2.tsx @@ -2,10 +2,10 @@ import { useRouter } from "next/navigation"; -import { ArrowLeftIcon, ExclamationMarkCircleIcon } from "@/assets/icons"; -import Button from "@/components/common/Button"; -import { PLAN_MAP } from "@/constants/write"; -import { useWriteFormStore } from "@/store/writeFormStore"; +import { PLAN_MAP } from "@/features/instructor/write/config/write"; +import { useWriteFormStore } from "@/features/instructor/write/model/writeFormStore"; +import { ArrowLeftIcon, ExclamationMarkCircleIcon } from "@/shared/assets/icons"; +import Button from "@/shared/ui/Button"; const Step2 = ({ onBack }: { onBack: () => void }) => { const router = useRouter(); diff --git a/src/components/instructor/write/PlanChooseCard.tsx b/src/features/instructor/write/ui/PlanChooseCard.tsx similarity index 90% rename from src/components/instructor/write/PlanChooseCard.tsx rename to src/features/instructor/write/ui/PlanChooseCard.tsx index 9c4459b..b69fa14 100644 --- a/src/components/instructor/write/PlanChooseCard.tsx +++ b/src/features/instructor/write/ui/PlanChooseCard.tsx @@ -1,5 +1,5 @@ -import Badge from "@/components/common/Badge"; -import { PLAN_MAP, PlanType } from "@/constants/write"; +import { PLAN_MAP, PlanType } from "@/features/instructor/write/config/write"; +import Badge from "@/shared/ui/Badge"; interface PlanChooseCardProps { plan: PlanType; diff --git a/src/components/instructor/write/ProgressBar.tsx b/src/features/instructor/write/ui/ProgressBar.tsx similarity index 90% rename from src/components/instructor/write/ProgressBar.tsx rename to src/features/instructor/write/ui/ProgressBar.tsx index f87bbdf..280324c 100644 --- a/src/components/instructor/write/ProgressBar.tsx +++ b/src/features/instructor/write/ui/ProgressBar.tsx @@ -1,4 +1,4 @@ -import { WRITE_STEPS, WriteStep } from "@/constants/write"; +import { WRITE_STEPS, WriteStep } from "@/features/instructor/write/config/write"; interface ProgressBarProps { currentStep?: WriteStep; diff --git a/src/components/instructor/write/SizeRecommendedCard.tsx b/src/features/instructor/write/ui/SizeRecommendedCard.tsx similarity index 100% rename from src/components/instructor/write/SizeRecommendedCard.tsx rename to src/features/instructor/write/ui/SizeRecommendedCard.tsx diff --git a/src/components/instructor/write/StepHeader.tsx b/src/features/instructor/write/ui/StepHeader.tsx similarity index 68% rename from src/components/instructor/write/StepHeader.tsx rename to src/features/instructor/write/ui/StepHeader.tsx index d202ec2..68ce3bc 100644 --- a/src/components/instructor/write/StepHeader.tsx +++ b/src/features/instructor/write/ui/StepHeader.tsx @@ -1,7 +1,7 @@ "use client"; -import ProgressBar from "@/components/instructor/write/ProgressBar"; -import { useWriteFormStore } from "@/store/writeFormStore"; +import { useWriteFormStore } from "@/features/instructor/write/model/writeFormStore"; +import ProgressBar from "@/features/instructor/write/ui/ProgressBar"; const StepHeader = () => { const { currentStep } = useWriteFormStore(); diff --git a/src/constants/signup.ts b/src/features/signup/config/signup.ts similarity index 100% rename from src/constants/signup.ts rename to src/features/signup/config/signup.ts diff --git a/src/features/signup/index.ts b/src/features/signup/index.ts new file mode 100644 index 0000000..023b545 --- /dev/null +++ b/src/features/signup/index.ts @@ -0,0 +1,4 @@ +export * from "@/features/signup/config/signup"; +export { useSignupStep2Form } from "@/features/signup/model/useSignupStep2Form"; +export { default as BankDropdown } from "@/features/signup/ui/BankDropdown"; +export { default as UserTypeBtn } from "@/features/signup/ui/UserTypeBtn"; diff --git a/src/lib/hooks/useSignupStep2Form.ts b/src/features/signup/model/useSignupStep2Form.ts similarity index 99% rename from src/lib/hooks/useSignupStep2Form.ts rename to src/features/signup/model/useSignupStep2Form.ts index 07ff5c0..5e876ba 100644 --- a/src/lib/hooks/useSignupStep2Form.ts +++ b/src/features/signup/model/useSignupStep2Form.ts @@ -17,7 +17,7 @@ import { SIGNUP_PASSWORD_CONFIRM_ERROR_MESSAGE, SIGNUP_PASSWORD_CONFIRM_FORMAT_ERROR_MESSAGE, SIGNUP_PASSWORD_ERROR_MESSAGE, -} from "@/constants/signup"; +} from "@/features/signup/config/signup"; type SignupUserIdCheckStatus = "idle" | "available" | "duplicated"; type SignupEmailVerificationStatus = "idle" | "sent" | "verified"; diff --git a/src/components/common/dropdown/BankDropdown.tsx b/src/features/signup/ui/BankDropdown.tsx similarity index 96% rename from src/components/common/dropdown/BankDropdown.tsx rename to src/features/signup/ui/BankDropdown.tsx index a2a646f..8ec9f9e 100644 --- a/src/components/common/dropdown/BankDropdown.tsx +++ b/src/features/signup/ui/BankDropdown.tsx @@ -2,14 +2,14 @@ import { useEffect, useRef, useState } from "react"; -import { ArrowDownIcon, ArrowUpIcon } from "@/assets/icons"; import { BANK_DROPDOWN_MAX_HEIGHT, BANK_OPTIONS, type BankCode, type BankOption, -} from "@/constants/signup"; -import { cn } from "@/lib/utils/cn"; +} from "@/features/signup/config/signup"; +import { ArrowDownIcon, ArrowUpIcon } from "@/shared/assets/icons"; +import { cn } from "@/shared/lib/utils/cn"; interface BankDropdownProps { className?: string; diff --git a/src/components/signup/UserTypeBtn.tsx b/src/features/signup/ui/UserTypeBtn.tsx similarity index 97% rename from src/components/signup/UserTypeBtn.tsx rename to src/features/signup/ui/UserTypeBtn.tsx index 528ecd9..82577af 100644 --- a/src/components/signup/UserTypeBtn.tsx +++ b/src/features/signup/ui/UserTypeBtn.tsx @@ -1,6 +1,6 @@ import type { ComponentPropsWithoutRef, ReactNode } from "react"; -import { cn } from "@/lib/utils/cn"; +import { cn } from "@/shared/lib/utils/cn"; type UserTypeBtnProps = Omit< ComponentPropsWithoutRef<"button">, diff --git a/src/assets/icons/icon_arrow_down.svg b/src/shared/assets/icons/icon_arrow_down.svg similarity index 100% rename from src/assets/icons/icon_arrow_down.svg rename to src/shared/assets/icons/icon_arrow_down.svg diff --git a/src/assets/icons/icon_arrow_left.svg b/src/shared/assets/icons/icon_arrow_left.svg similarity index 100% rename from src/assets/icons/icon_arrow_left.svg rename to src/shared/assets/icons/icon_arrow_left.svg diff --git a/src/assets/icons/icon_arrow_left_circle_fill.svg b/src/shared/assets/icons/icon_arrow_left_circle_fill.svg similarity index 100% rename from src/assets/icons/icon_arrow_left_circle_fill.svg rename to src/shared/assets/icons/icon_arrow_left_circle_fill.svg diff --git a/src/assets/icons/icon_arrow_right.svg b/src/shared/assets/icons/icon_arrow_right.svg similarity index 100% rename from src/assets/icons/icon_arrow_right.svg rename to src/shared/assets/icons/icon_arrow_right.svg diff --git a/src/assets/icons/icon_arrow_right_circle_fill.svg b/src/shared/assets/icons/icon_arrow_right_circle_fill.svg similarity index 100% rename from src/assets/icons/icon_arrow_right_circle_fill.svg rename to src/shared/assets/icons/icon_arrow_right_circle_fill.svg diff --git a/src/assets/icons/icon_arrow_up.svg b/src/shared/assets/icons/icon_arrow_up.svg similarity index 100% rename from src/assets/icons/icon_arrow_up.svg rename to src/shared/assets/icons/icon_arrow_up.svg diff --git a/src/assets/icons/icon_check_circle_fill.svg b/src/shared/assets/icons/icon_check_circle_fill.svg similarity index 100% rename from src/assets/icons/icon_check_circle_fill.svg rename to src/shared/assets/icons/icon_check_circle_fill.svg diff --git a/src/assets/icons/icon_checkbox_border_gray.svg b/src/shared/assets/icons/icon_checkbox_border_gray.svg similarity index 100% rename from src/assets/icons/icon_checkbox_border_gray.svg rename to src/shared/assets/icons/icon_checkbox_border_gray.svg diff --git a/src/assets/icons/icon_checkbox_border_white.svg b/src/shared/assets/icons/icon_checkbox_border_white.svg similarity index 100% rename from src/assets/icons/icon_checkbox_border_white.svg rename to src/shared/assets/icons/icon_checkbox_border_white.svg diff --git a/src/assets/icons/icon_checkbox_fill.svg b/src/shared/assets/icons/icon_checkbox_fill.svg similarity index 100% rename from src/assets/icons/icon_checkbox_fill.svg rename to src/shared/assets/icons/icon_checkbox_fill.svg diff --git a/src/assets/icons/icon_close.svg b/src/shared/assets/icons/icon_close.svg similarity index 100% rename from src/assets/icons/icon_close.svg rename to src/shared/assets/icons/icon_close.svg diff --git a/src/assets/icons/icon_close_circle.svg b/src/shared/assets/icons/icon_close_circle.svg similarity index 100% rename from src/assets/icons/icon_close_circle.svg rename to src/shared/assets/icons/icon_close_circle.svg diff --git a/src/assets/icons/icon_close_circle_fill.svg b/src/shared/assets/icons/icon_close_circle_fill.svg similarity index 100% rename from src/assets/icons/icon_close_circle_fill.svg rename to src/shared/assets/icons/icon_close_circle_fill.svg diff --git a/src/assets/icons/icon_enter.svg b/src/shared/assets/icons/icon_enter.svg similarity index 100% rename from src/assets/icons/icon_enter.svg rename to src/shared/assets/icons/icon_enter.svg diff --git a/src/assets/icons/icon_exclamation_mark_circle.svg b/src/shared/assets/icons/icon_exclamation_mark_circle.svg similarity index 100% rename from src/assets/icons/icon_exclamation_mark_circle.svg rename to src/shared/assets/icons/icon_exclamation_mark_circle.svg diff --git a/src/assets/icons/icon_exit.svg b/src/shared/assets/icons/icon_exit.svg similarity index 100% rename from src/assets/icons/icon_exit.svg rename to src/shared/assets/icons/icon_exit.svg diff --git a/src/assets/icons/icon_exit_bold.svg b/src/shared/assets/icons/icon_exit_bold.svg similarity index 100% rename from src/assets/icons/icon_exit_bold.svg rename to src/shared/assets/icons/icon_exit_bold.svg diff --git a/src/assets/icons/icon_eye_closed.svg b/src/shared/assets/icons/icon_eye_closed.svg similarity index 100% rename from src/assets/icons/icon_eye_closed.svg rename to src/shared/assets/icons/icon_eye_closed.svg diff --git a/src/assets/icons/icon_eye_open.svg b/src/shared/assets/icons/icon_eye_open.svg similarity index 100% rename from src/assets/icons/icon_eye_open.svg rename to src/shared/assets/icons/icon_eye_open.svg diff --git a/src/assets/icons/icon_file.svg b/src/shared/assets/icons/icon_file.svg similarity index 100% rename from src/assets/icons/icon_file.svg rename to src/shared/assets/icons/icon_file.svg diff --git a/src/assets/icons/icon_file_bold.svg b/src/shared/assets/icons/icon_file_bold.svg similarity index 100% rename from src/assets/icons/icon_file_bold.svg rename to src/shared/assets/icons/icon_file_bold.svg diff --git a/src/assets/icons/icon_file_image.svg b/src/shared/assets/icons/icon_file_image.svg similarity index 100% rename from src/assets/icons/icon_file_image.svg rename to src/shared/assets/icons/icon_file_image.svg diff --git a/src/assets/icons/icon_file_image_bold.svg b/src/shared/assets/icons/icon_file_image_bold.svg similarity index 100% rename from src/assets/icons/icon_file_image_bold.svg rename to src/shared/assets/icons/icon_file_image_bold.svg diff --git a/src/assets/icons/icon_folder_add.svg b/src/shared/assets/icons/icon_folder_add.svg similarity index 100% rename from src/assets/icons/icon_folder_add.svg rename to src/shared/assets/icons/icon_folder_add.svg diff --git a/src/assets/icons/icon_loading.svg b/src/shared/assets/icons/icon_loading.svg similarity index 100% rename from src/assets/icons/icon_loading.svg rename to src/shared/assets/icons/icon_loading.svg diff --git a/src/assets/icons/icon_matching_off.svg b/src/shared/assets/icons/icon_matching_off.svg similarity index 100% rename from src/assets/icons/icon_matching_off.svg rename to src/shared/assets/icons/icon_matching_off.svg diff --git a/src/assets/icons/icon_matching_on.svg b/src/shared/assets/icons/icon_matching_on.svg similarity index 100% rename from src/assets/icons/icon_matching_on.svg rename to src/shared/assets/icons/icon_matching_on.svg diff --git a/src/assets/icons/icon_number_one_circle_fill.svg b/src/shared/assets/icons/icon_number_one_circle_fill.svg similarity index 100% rename from src/assets/icons/icon_number_one_circle_fill.svg rename to src/shared/assets/icons/icon_number_one_circle_fill.svg diff --git a/src/assets/icons/icon_number_three_circle_fill.svg b/src/shared/assets/icons/icon_number_three_circle_fill.svg similarity index 100% rename from src/assets/icons/icon_number_three_circle_fill.svg rename to src/shared/assets/icons/icon_number_three_circle_fill.svg diff --git a/src/assets/icons/icon_number_two_circle_fill.svg b/src/shared/assets/icons/icon_number_two_circle_fill.svg similarity index 100% rename from src/assets/icons/icon_number_two_circle_fill.svg rename to src/shared/assets/icons/icon_number_two_circle_fill.svg diff --git a/src/assets/icons/icon_profile_circle.svg b/src/shared/assets/icons/icon_profile_circle.svg similarity index 100% rename from src/assets/icons/icon_profile_circle.svg rename to src/shared/assets/icons/icon_profile_circle.svg diff --git a/src/assets/icons/icon_profile_circle_bold.svg b/src/shared/assets/icons/icon_profile_circle_bold.svg similarity index 100% rename from src/assets/icons/icon_profile_circle_bold.svg rename to src/shared/assets/icons/icon_profile_circle_bold.svg diff --git a/src/assets/icons/icon_search.svg b/src/shared/assets/icons/icon_search.svg similarity index 100% rename from src/assets/icons/icon_search.svg rename to src/shared/assets/icons/icon_search.svg diff --git a/src/assets/icons/icon_search_bold.svg b/src/shared/assets/icons/icon_search_bold.svg similarity index 100% rename from src/assets/icons/icon_search_bold.svg rename to src/shared/assets/icons/icon_search_bold.svg diff --git a/src/assets/icons/icon_share.svg b/src/shared/assets/icons/icon_share.svg similarity index 100% rename from src/assets/icons/icon_share.svg rename to src/shared/assets/icons/icon_share.svg diff --git a/src/assets/icons/icon_step_one_designer.svg b/src/shared/assets/icons/icon_step_one_designer.svg similarity index 100% rename from src/assets/icons/icon_step_one_designer.svg rename to src/shared/assets/icons/icon_step_one_designer.svg diff --git a/src/assets/icons/icon_step_one_instructor.svg b/src/shared/assets/icons/icon_step_one_instructor.svg similarity index 100% rename from src/assets/icons/icon_step_one_instructor.svg rename to src/shared/assets/icons/icon_step_one_instructor.svg diff --git a/src/assets/icons/icon_step_three_designer.svg b/src/shared/assets/icons/icon_step_three_designer.svg similarity index 100% rename from src/assets/icons/icon_step_three_designer.svg rename to src/shared/assets/icons/icon_step_three_designer.svg diff --git a/src/assets/icons/icon_step_two_designer.svg b/src/shared/assets/icons/icon_step_two_designer.svg similarity index 100% rename from src/assets/icons/icon_step_two_designer.svg rename to src/shared/assets/icons/icon_step_two_designer.svg diff --git a/src/assets/icons/icon_step_two_instructor.svg b/src/shared/assets/icons/icon_step_two_instructor.svg similarity index 100% rename from src/assets/icons/icon_step_two_instructor.svg rename to src/shared/assets/icons/icon_step_two_instructor.svg diff --git a/src/assets/icons/icon_user_type_designer.svg b/src/shared/assets/icons/icon_user_type_designer.svg similarity index 100% rename from src/assets/icons/icon_user_type_designer.svg rename to src/shared/assets/icons/icon_user_type_designer.svg diff --git a/src/assets/icons/icon_user_type_instructor.svg b/src/shared/assets/icons/icon_user_type_instructor.svg similarity index 100% rename from src/assets/icons/icon_user_type_instructor.svg rename to src/shared/assets/icons/icon_user_type_instructor.svg diff --git a/src/shared/assets/icons/index.ts b/src/shared/assets/icons/index.ts new file mode 100644 index 0000000..20791a9 --- /dev/null +++ b/src/shared/assets/icons/index.ts @@ -0,0 +1,42 @@ +export { default as ArrowDownIcon } from "@/shared/assets/icons/icon_arrow_down.svg"; +export { default as ArrowLeftIcon } from "@/shared/assets/icons/icon_arrow_left.svg"; +export { default as PrevButton } from "@/shared/assets/icons/icon_arrow_left_circle_fill.svg"; +export { default as ArrowRightIcon } from "@/shared/assets/icons/icon_arrow_right.svg"; +export { default as NextButton } from "@/shared/assets/icons/icon_arrow_right_circle_fill.svg"; +export { default as ArrowUpIcon } from "@/shared/assets/icons/icon_arrow_up.svg"; +export { default as CheckCircleFillIcon } from "@/shared/assets/icons/icon_check_circle_fill.svg"; +export { default as CheckboxGrayIcon } from "@/shared/assets/icons/icon_checkbox_border_gray.svg"; +export { default as CheckboxWhiteIcon } from "@/shared/assets/icons/icon_checkbox_border_white.svg"; +export { default as CheckboxFillIcon } from "@/shared/assets/icons/icon_checkbox_fill.svg"; +export { default as CloseIcon } from "@/shared/assets/icons/icon_close.svg"; +export { default as CloseCircleIcon } from "@/shared/assets/icons/icon_close_circle.svg"; +export { default as CloseCircleFillIcon } from "@/shared/assets/icons/icon_close_circle_fill.svg"; +export { default as EnterIcon } from "@/shared/assets/icons/icon_enter.svg"; +export { default as ExclamationMarkCircleIcon } from "@/shared/assets/icons/icon_exclamation_mark_circle.svg"; +export { default as ExitIcon } from "@/shared/assets/icons/icon_exit.svg"; +export { default as ExitBoldIcon } from "@/shared/assets/icons/icon_exit_bold.svg"; +export { default as ClosedEyeIcon } from "@/shared/assets/icons/icon_eye_closed.svg"; +export { default as OpenEyeIcon } from "@/shared/assets/icons/icon_eye_open.svg"; +export { default as FileIcon } from "@/shared/assets/icons/icon_file.svg"; +export { default as FileBoldIcon } from "@/shared/assets/icons/icon_file_bold.svg"; +export { default as FileImageIcon } from "@/shared/assets/icons/icon_file_image.svg"; +export { default as FileImageBoldIcon } from "@/shared/assets/icons/icon_file_image_bold.svg"; +export { default as FolderAddIcon } from "@/shared/assets/icons/icon_folder_add.svg"; +export { default as LoadingIcon } from "@/shared/assets/icons/icon_loading.svg"; +export { default as MatchingOffIcon } from "@/shared/assets/icons/icon_matching_off.svg"; +export { default as MatchingOnIcon } from "@/shared/assets/icons/icon_matching_on.svg"; +export { default as OneCircleIcon } from "@/shared/assets/icons/icon_number_one_circle_fill.svg"; +export { default as ThreeCircleIcon } from "@/shared/assets/icons/icon_number_three_circle_fill.svg"; +export { default as TwoCircleIcon } from "@/shared/assets/icons/icon_number_two_circle_fill.svg"; +export { default as ProfileCircleIcon } from "@/shared/assets/icons/icon_profile_circle.svg"; +export { default as ProfileCircleBoldIcon } from "@/shared/assets/icons/icon_profile_circle_bold.svg"; +export { default as SearchIcon } from "@/shared/assets/icons/icon_search.svg"; +export { default as SearchBoldIcon } from "@/shared/assets/icons/icon_search_bold.svg"; +export { default as ShareIcon } from "@/shared/assets/icons/icon_share.svg"; +export { default as StepOneDesignerIcon } from "@/shared/assets/icons/icon_step_one_designer.svg"; +export { default as StepOneInstructorIcon } from "@/shared/assets/icons/icon_step_one_instructor.svg"; +export { default as StepThreeDesignerIcon } from "@/shared/assets/icons/icon_step_three_designer.svg"; +export { default as StepTwoDesignerIcon } from "@/shared/assets/icons/icon_step_two_designer.svg"; +export { default as StepTwoInstructorIcon } from "@/shared/assets/icons/icon_step_two_instructor.svg"; +export { default as UserTypeDesignerIcon } from "@/shared/assets/icons/icon_user_type_designer.svg"; +export { default as UserTypeInstructorIcon } from "@/shared/assets/icons/icon_user_type_instructor.svg"; diff --git a/src/assets/logos/ditda_logo_black.svg b/src/shared/assets/logos/ditda_logo_black.svg similarity index 100% rename from src/assets/logos/ditda_logo_black.svg rename to src/shared/assets/logos/ditda_logo_black.svg diff --git a/src/assets/logos/ditda_logo_purple.svg b/src/shared/assets/logos/ditda_logo_purple.svg similarity index 100% rename from src/assets/logos/ditda_logo_purple.svg rename to src/shared/assets/logos/ditda_logo_purple.svg diff --git a/src/shared/assets/logos/index.ts b/src/shared/assets/logos/index.ts new file mode 100644 index 0000000..90c0160 --- /dev/null +++ b/src/shared/assets/logos/index.ts @@ -0,0 +1,2 @@ +export { default as BlackLogo } from "@/shared/assets/logos/ditda_logo_black.svg"; +export { default as PurpleLogo } from "@/shared/assets/logos/ditda_logo_purple.svg"; diff --git a/src/constants/dropdown.ts b/src/shared/config/dropdown.ts similarity index 100% rename from src/constants/dropdown.ts rename to src/shared/config/dropdown.ts diff --git a/src/constants/sidebarMenu.ts b/src/shared/config/sidebarMenu.ts similarity index 95% rename from src/constants/sidebarMenu.ts rename to src/shared/config/sidebarMenu.ts index 100dd00..80278c0 100644 --- a/src/constants/sidebarMenu.ts +++ b/src/shared/config/sidebarMenu.ts @@ -9,7 +9,7 @@ import { ProfileCircleIcon, SearchBoldIcon, SearchIcon, -} from "@/assets/icons"; +} from "@/shared/assets/icons"; type IconComponent = React.FC>; diff --git a/src/lib/hooks/useUploadedFiles.ts b/src/shared/lib/hooks/useUploadedFiles.ts similarity index 92% rename from src/lib/hooks/useUploadedFiles.ts rename to src/shared/lib/hooks/useUploadedFiles.ts index 81ba6c9..5b3dd3e 100644 --- a/src/lib/hooks/useUploadedFiles.ts +++ b/src/shared/lib/hooks/useUploadedFiles.ts @@ -1,7 +1,7 @@ import { useEffect, useRef, useState } from "react"; -import { formatFileSize } from "@/lib/utils/file"; -import { UploadedFile } from "@/types/file"; +import { formatFileSize } from "@/shared/lib/utils/file"; +import { UploadedFile } from "@/shared/types/file"; export const useUploadedFiles = ( externalFiles?: UploadedFile[], diff --git a/src/lib/hooks/useWheelColumn.ts b/src/shared/lib/hooks/useWheelColumn.ts similarity index 98% rename from src/lib/hooks/useWheelColumn.ts rename to src/shared/lib/hooks/useWheelColumn.ts index bf69e91..31db7e6 100644 --- a/src/lib/hooks/useWheelColumn.ts +++ b/src/shared/lib/hooks/useWheelColumn.ts @@ -1,7 +1,7 @@ import { useCallback, useEffect, useRef, type WheelEvent } from "react"; -import { SCROLL_ANIMATION_MS, SNAP_DELAY, STEP, WHEEL_COOLDOWN } from "@/constants/dropdown"; -import { easeOutCubic, getNearestIndex, getScrollTopForIndex } from "@/lib/utils/dropdown"; +import { SCROLL_ANIMATION_MS, SNAP_DELAY, STEP, WHEEL_COOLDOWN } from "@/shared/config/dropdown"; +import { easeOutCubic, getNearestIndex, getScrollTopForIndex } from "@/shared/lib/utils/dropdown"; interface UseWheelColumnProps { items: string[]; diff --git a/src/lib/utils/cn.ts b/src/shared/lib/utils/cn.ts similarity index 100% rename from src/lib/utils/cn.ts rename to src/shared/lib/utils/cn.ts diff --git a/src/lib/utils/dropdown.ts b/src/shared/lib/utils/dropdown.ts similarity index 92% rename from src/lib/utils/dropdown.ts rename to src/shared/lib/utils/dropdown.ts index 660b3d8..5ccdc3d 100644 --- a/src/lib/utils/dropdown.ts +++ b/src/shared/lib/utils/dropdown.ts @@ -1,4 +1,4 @@ -import { SELECTED_EXTRA, STEP } from "@/constants/dropdown"; +import { SELECTED_EXTRA, STEP } from "@/shared/config/dropdown"; export const easeOutCubic = (progress: number) => 1 - (1 - progress) ** 3; diff --git a/src/lib/utils/file.ts b/src/shared/lib/utils/file.ts similarity index 100% rename from src/lib/utils/file.ts rename to src/shared/lib/utils/file.ts diff --git a/src/types/file.ts b/src/shared/types/file.ts similarity index 100% rename from src/types/file.ts rename to src/shared/types/file.ts diff --git a/src/components/common/AccordionMenu.tsx b/src/shared/ui/AccordionMenu.tsx similarity index 91% rename from src/components/common/AccordionMenu.tsx rename to src/shared/ui/AccordionMenu.tsx index c9ac8ae..5774cc3 100644 --- a/src/components/common/AccordionMenu.tsx +++ b/src/shared/ui/AccordionMenu.tsx @@ -1,4 +1,4 @@ -import { ArrowDownIcon } from "@/assets/icons"; +import { ArrowDownIcon } from "@/shared/assets/icons"; interface AccordionMenuProps { label: string; diff --git a/src/components/common/Badge.tsx b/src/shared/ui/Badge.tsx similarity index 100% rename from src/components/common/Badge.tsx rename to src/shared/ui/Badge.tsx diff --git a/src/components/common/Button.tsx b/src/shared/ui/Button.tsx similarity index 98% rename from src/components/common/Button.tsx rename to src/shared/ui/Button.tsx index bb0b4f0..b5a08b7 100644 --- a/src/components/common/Button.tsx +++ b/src/shared/ui/Button.tsx @@ -1,6 +1,6 @@ import { ButtonHTMLAttributes } from "react"; -import { cn } from "@/lib/utils/cn"; +import { cn } from "@/shared/lib/utils/cn"; type ButtonVariant = | "small_primary" diff --git a/src/components/common/Chip.tsx b/src/shared/ui/Chip.tsx similarity index 95% rename from src/components/common/Chip.tsx rename to src/shared/ui/Chip.tsx index b4b282a..5bf8fc7 100644 --- a/src/components/common/Chip.tsx +++ b/src/shared/ui/Chip.tsx @@ -1,5 +1,5 @@ -import { CloseIcon } from "@/assets/icons"; -import { cn } from "@/lib/utils/cn"; +import { CloseIcon } from "@/shared/assets/icons"; +import { cn } from "@/shared/lib/utils/cn"; type ChipVariant = "selectable" | "removable"; diff --git a/src/components/common/FileDragAndDrop.tsx b/src/shared/ui/FileDragAndDrop.tsx similarity index 94% rename from src/components/common/FileDragAndDrop.tsx rename to src/shared/ui/FileDragAndDrop.tsx index 4968c4c..45e2b65 100644 --- a/src/components/common/FileDragAndDrop.tsx +++ b/src/shared/ui/FileDragAndDrop.tsx @@ -2,9 +2,9 @@ import { DragEvent, useRef, useState } from "react"; -import { FolderAddIcon } from "@/assets/icons"; -import Button from "@/components/common/Button"; -import { cn } from "@/lib/utils/cn"; +import { FolderAddIcon } from "@/shared/assets/icons"; +import { cn } from "@/shared/lib/utils/cn"; +import Button from "@/shared/ui/Button"; interface FileDragAndDropProps { onFilesAdded: (files: File[]) => void; diff --git a/src/components/common/FileUpload.tsx b/src/shared/ui/FileUpload.tsx similarity index 97% rename from src/components/common/FileUpload.tsx rename to src/shared/ui/FileUpload.tsx index 2abb47d..fcbe48b 100644 --- a/src/components/common/FileUpload.tsx +++ b/src/shared/ui/FileUpload.tsx @@ -1,4 +1,4 @@ -import { CheckCircleFillIcon, CloseCircleFillIcon, LoadingIcon } from "@/assets/icons"; +import { CheckCircleFillIcon, CloseCircleFillIcon, LoadingIcon } from "@/shared/assets/icons"; interface FileUploadProps { fileName: string; diff --git a/src/components/common/Header.tsx b/src/shared/ui/Header.tsx similarity index 92% rename from src/components/common/Header.tsx rename to src/shared/ui/Header.tsx index 50db84d..b0c2c5e 100644 --- a/src/components/common/Header.tsx +++ b/src/shared/ui/Header.tsx @@ -3,8 +3,8 @@ import Link from "next/link"; import { useState } from "react"; -import { EnterIcon, ProfileCircleIcon } from "@/assets/icons"; -import { PurpleLogo } from "@/assets/logos"; +import { EnterIcon, ProfileCircleIcon } from "@/shared/assets/icons"; +import { PurpleLogo } from "@/shared/assets/logos"; const Header = () => { const [isLoggedIn, setIsLoggedIn] = useState(true); diff --git a/src/components/common/Modal.tsx b/src/shared/ui/Modal.tsx similarity index 97% rename from src/components/common/Modal.tsx rename to src/shared/ui/Modal.tsx index 3e23377..7becc01 100644 --- a/src/components/common/Modal.tsx +++ b/src/shared/ui/Modal.tsx @@ -1,6 +1,6 @@ import { useEffect } from "react"; -import Button from "@/components/common/Button"; +import Button from "@/shared/ui/Button"; type BaseProps = { isOpen: boolean; diff --git a/src/components/common/PageIndicator.tsx b/src/shared/ui/PageIndicator.tsx similarity index 100% rename from src/components/common/PageIndicator.tsx rename to src/shared/ui/PageIndicator.tsx diff --git a/src/components/common/Radio.tsx b/src/shared/ui/Radio.tsx similarity index 100% rename from src/components/common/Radio.tsx rename to src/shared/ui/Radio.tsx diff --git a/src/components/common/Sidebar.tsx b/src/shared/ui/Sidebar.tsx similarity index 100% rename from src/components/common/Sidebar.tsx rename to src/shared/ui/Sidebar.tsx diff --git a/src/components/common/SidebarMenu.tsx b/src/shared/ui/SidebarMenu.tsx similarity index 95% rename from src/components/common/SidebarMenu.tsx rename to src/shared/ui/SidebarMenu.tsx index 6341c06..aa02a84 100644 --- a/src/components/common/SidebarMenu.tsx +++ b/src/shared/ui/SidebarMenu.tsx @@ -4,7 +4,7 @@ import Link from "next/link"; import { usePathname } from "next/navigation"; import { useState } from "react"; -import { SIDEBAR_ICON_MAP } from "@/constants/sidebarMenu"; +import { SIDEBAR_ICON_MAP } from "@/shared/config/sidebarMenu"; interface SidebarMenuProps { label: string; diff --git a/src/components/common/Tag.tsx b/src/shared/ui/Tag.tsx similarity index 100% rename from src/components/common/Tag.tsx rename to src/shared/ui/Tag.tsx diff --git a/src/components/common/Toggle.tsx b/src/shared/ui/Toggle.tsx similarity index 96% rename from src/components/common/Toggle.tsx rename to src/shared/ui/Toggle.tsx index e802599..874dbc8 100644 --- a/src/components/common/Toggle.tsx +++ b/src/shared/ui/Toggle.tsx @@ -1,4 +1,4 @@ -import { cn } from "@/lib/utils/cn"; +import { cn } from "@/shared/lib/utils/cn"; interface ToggleProps { options: [{ value: T; label: string }, { value: T; label: string }]; diff --git a/src/components/common/dropdown/DateDropdownBox.tsx b/src/shared/ui/dropdown/DateDropdownBox.tsx similarity index 95% rename from src/components/common/dropdown/DateDropdownBox.tsx rename to src/shared/ui/dropdown/DateDropdownBox.tsx index c9bae48..4502364 100644 --- a/src/components/common/dropdown/DateDropdownBox.tsx +++ b/src/shared/ui/dropdown/DateDropdownBox.tsx @@ -1,4 +1,4 @@ -import { ArrowDownIcon } from "@/assets/icons"; +import { ArrowDownIcon } from "@/shared/assets/icons"; interface DropdownBoxProps { label: string; diff --git a/src/components/common/dropdown/DateDropdownMenu.tsx b/src/shared/ui/dropdown/DateDropdownMenu.tsx similarity index 94% rename from src/components/common/dropdown/DateDropdownMenu.tsx rename to src/shared/ui/dropdown/DateDropdownMenu.tsx index e6d8575..f7191a1 100644 --- a/src/components/common/dropdown/DateDropdownMenu.tsx +++ b/src/shared/ui/dropdown/DateDropdownMenu.tsx @@ -2,11 +2,10 @@ import { useCallback, useState } from "react"; -import { PAD_TOP, YEAR_RANGE } from "@/constants/dropdown"; -import { cn } from "@/lib/utils/cn"; -import { getDaysInMonth } from "@/lib/utils/dropdown"; - -import WheelColumn from "./WheelColumn"; +import { PAD_TOP, YEAR_RANGE } from "@/shared/config/dropdown"; +import { cn } from "@/shared/lib/utils/cn"; +import { getDaysInMonth } from "@/shared/lib/utils/dropdown"; +import WheelColumn from "@/shared/ui/dropdown/WheelColumn"; interface DropdownMenuProps { onConfirm?: (date: Date) => void; diff --git a/src/components/common/dropdown/WheelColumn.tsx b/src/shared/ui/dropdown/WheelColumn.tsx similarity index 89% rename from src/components/common/dropdown/WheelColumn.tsx rename to src/shared/ui/dropdown/WheelColumn.tsx index 040e852..3f94c1a 100644 --- a/src/components/common/dropdown/WheelColumn.tsx +++ b/src/shared/ui/dropdown/WheelColumn.tsx @@ -1,8 +1,8 @@ "use client"; -import { ITEM_GAP, LIST_H, PAD_BOTTOM, PAD_TOP } from "@/constants/dropdown"; -import { useWheelColumn } from "@/lib/hooks/useWheelColumn"; -import { cn } from "@/lib/utils/cn"; +import { ITEM_GAP, LIST_H, PAD_BOTTOM, PAD_TOP } from "@/shared/config/dropdown"; +import { useWheelColumn } from "@/shared/lib/hooks/useWheelColumn"; +import { cn } from "@/shared/lib/utils/cn"; interface WheelColumnProps { items: string[]; diff --git a/src/components/common/input/InputField.tsx b/src/shared/ui/input/InputField.tsx similarity index 98% rename from src/components/common/input/InputField.tsx rename to src/shared/ui/input/InputField.tsx index a3f66ef..0623044 100644 --- a/src/components/common/input/InputField.tsx +++ b/src/shared/ui/input/InputField.tsx @@ -9,8 +9,8 @@ import { ClosedEyeIcon, ExclamationMarkCircleIcon, OpenEyeIcon, -} from "@/assets/icons"; -import { cn } from "@/lib/utils/cn"; +} from "@/shared/assets/icons"; +import { cn } from "@/shared/lib/utils/cn"; const iconButtonClassName = "disabled:text-gray-30 inline-flex size-6 shrink-0 cursor-pointer items-center justify-center transition-colors disabled:cursor-not-allowed"; diff --git a/src/components/common/input/SmallInput.tsx b/src/shared/ui/input/SmallInput.tsx similarity index 94% rename from src/components/common/input/SmallInput.tsx rename to src/shared/ui/input/SmallInput.tsx index a25c76f..41c6bfc 100644 --- a/src/components/common/input/SmallInput.tsx +++ b/src/shared/ui/input/SmallInput.tsx @@ -2,7 +2,7 @@ import type { ComponentPropsWithoutRef } from "react"; -import { cn } from "@/lib/utils/cn"; +import { cn } from "@/shared/lib/utils/cn"; export type SmallInputProps = Omit, "children"> & { children?: string | number; diff --git a/src/components/common/input/TextField.tsx b/src/shared/ui/input/TextField.tsx similarity index 97% rename from src/components/common/input/TextField.tsx rename to src/shared/ui/input/TextField.tsx index 19c5ae9..e63a717 100644 --- a/src/components/common/input/TextField.tsx +++ b/src/shared/ui/input/TextField.tsx @@ -3,7 +3,7 @@ import type { ChangeEventHandler, ComponentPropsWithoutRef } from "react"; import { useState } from "react"; -import { cn } from "@/lib/utils/cn"; +import { cn } from "@/shared/lib/utils/cn"; const DEFAULT_TEXT_FIELD_MAX_LENGTH = 300; diff --git a/src/constants/home.ts b/src/widgets/instructor/home/config/home.ts similarity index 100% rename from src/constants/home.ts rename to src/widgets/instructor/home/config/home.ts diff --git a/src/widgets/instructor/home/index.ts b/src/widgets/instructor/home/index.ts new file mode 100644 index 0000000..eb215b9 --- /dev/null +++ b/src/widgets/instructor/home/index.ts @@ -0,0 +1,3 @@ +export { default as DraftSubmissionStatusSection } from "@/widgets/instructor/home/ui/DraftSubmissionStatusSection"; +export { default as MatchingCommissionsSection } from "@/widgets/instructor/home/ui/MatchingCommissionsSection"; +export { default as ModifyingCommissionsSection } from "@/widgets/instructor/home/ui/ModifyingCommissionsSection"; diff --git a/src/lib/hooks/usePagination.ts b/src/widgets/instructor/home/lib/usePagination.ts similarity index 100% rename from src/lib/hooks/usePagination.ts rename to src/widgets/instructor/home/lib/usePagination.ts diff --git a/src/containers/instructor/home/DraftSubmissionStatusSection.tsx b/src/widgets/instructor/home/ui/DraftSubmissionStatusSection.tsx similarity index 74% rename from src/containers/instructor/home/DraftSubmissionStatusSection.tsx rename to src/widgets/instructor/home/ui/DraftSubmissionStatusSection.tsx index c6d7738..b0beace 100644 --- a/src/containers/instructor/home/DraftSubmissionStatusSection.tsx +++ b/src/widgets/instructor/home/ui/DraftSubmissionStatusSection.tsx @@ -1,12 +1,14 @@ "use client"; -import { NextButton, PrevButton } from "@/assets/icons"; -import PageIndicator from "@/components/common/PageIndicator"; -import CommissionsHeader from "@/components/instructor/home/CommissionsHeader"; -import DraftSubmissionStatusRow from "@/components/instructor/home/DraftSubmissionStatusRow"; -import { DRAFT_SUBMISSION_ITEMS_PER_PAGE } from "@/constants/home"; -import { draftSubmissionStatusData } from "@/data/instructor/home"; -import usePagination from "@/lib/hooks/usePagination"; +import { + CommissionsHeader, + draftSubmissionStatusData, + DraftSubmissionStatusRow, +} from "@/features/instructor/home"; +import { NextButton, PrevButton } from "@/shared/assets/icons"; +import PageIndicator from "@/shared/ui/PageIndicator"; +import { DRAFT_SUBMISSION_ITEMS_PER_PAGE } from "@/widgets/instructor/home/config/home"; +import usePagination from "@/widgets/instructor/home/lib/usePagination"; const DraftSubmissionStatusSection = () => { const { current, totalPages, pageItems, handlePrev, handleNext } = usePagination( diff --git a/src/containers/instructor/home/MatchingCommissionsSection.tsx b/src/widgets/instructor/home/ui/MatchingCommissionsSection.tsx similarity index 72% rename from src/containers/instructor/home/MatchingCommissionsSection.tsx rename to src/widgets/instructor/home/ui/MatchingCommissionsSection.tsx index 70e4eef..cb0778a 100644 --- a/src/containers/instructor/home/MatchingCommissionsSection.tsx +++ b/src/widgets/instructor/home/ui/MatchingCommissionsSection.tsx @@ -1,12 +1,14 @@ "use client"; -import { NextButton, PrevButton } from "@/assets/icons"; -import PageIndicator from "@/components/common/PageIndicator"; -import CommissionsHeader from "@/components/instructor/home/CommissionsHeader"; -import MatchingStatusCommissionsRow from "@/components/instructor/home/MatchingCommissionsRow"; -import { MATCHING_ITEMS_PER_PAGE } from "@/constants/home"; -import { matchingStatusData } from "@/data/instructor/home"; -import usePagination from "@/lib/hooks/usePagination"; +import { + CommissionsHeader, + MatchingCommissionsRow as MatchingStatusCommissionsRow, + matchingStatusData, +} from "@/features/instructor/home"; +import { NextButton, PrevButton } from "@/shared/assets/icons"; +import PageIndicator from "@/shared/ui/PageIndicator"; +import { MATCHING_ITEMS_PER_PAGE } from "@/widgets/instructor/home/config/home"; +import usePagination from "@/widgets/instructor/home/lib/usePagination"; const MatchingCommissionsSection = () => { const { current, totalPages, pageItems, handlePrev, handleNext } = usePagination( diff --git a/src/containers/instructor/home/ModifyingCommissionsSection.tsx b/src/widgets/instructor/home/ui/ModifyingCommissionsSection.tsx similarity index 73% rename from src/containers/instructor/home/ModifyingCommissionsSection.tsx rename to src/widgets/instructor/home/ui/ModifyingCommissionsSection.tsx index 11cbac4..2cf2c98 100644 --- a/src/containers/instructor/home/ModifyingCommissionsSection.tsx +++ b/src/widgets/instructor/home/ui/ModifyingCommissionsSection.tsx @@ -1,12 +1,14 @@ "use client"; -import { NextButton, PrevButton } from "@/assets/icons"; -import PageIndicator from "@/components/common/PageIndicator"; -import CommissionsHeader from "@/components/instructor/home/CommissionsHeader"; -import ModifyingCommissionsRow from "@/components/instructor/home/ModifyingCommissionsRow"; -import { MODIFYING_ITEMS_PER_PAGE } from "@/constants/home"; -import { modifyingStatusData } from "@/data/instructor/home"; -import usePagination from "@/lib/hooks/usePagination"; +import { + CommissionsHeader, + ModifyingCommissionsRow, + modifyingStatusData, +} from "@/features/instructor/home"; +import { NextButton, PrevButton } from "@/shared/assets/icons"; +import PageIndicator from "@/shared/ui/PageIndicator"; +import { MODIFYING_ITEMS_PER_PAGE } from "@/widgets/instructor/home/config/home"; +import usePagination from "@/widgets/instructor/home/lib/usePagination"; const ModifyingCommissionsSection = () => { const { current, totalPages, pageItems, handlePrev, handleNext } = usePagination( diff --git a/src/widgets/instructor/write/index.ts b/src/widgets/instructor/write/index.ts new file mode 100644 index 0000000..5391f33 --- /dev/null +++ b/src/widgets/instructor/write/index.ts @@ -0,0 +1,3 @@ +export { default as Step1Content } from "@/widgets/instructor/write/ui/Step1Content"; +export { default as Step2Content } from "@/widgets/instructor/write/ui/Step2Content"; +export { default as Step3Content } from "@/widgets/instructor/write/ui/Step3Content"; diff --git a/src/containers/instructor/write/AttachFileSection.tsx b/src/widgets/instructor/write/ui/AttachFileSection.tsx similarity index 86% rename from src/containers/instructor/write/AttachFileSection.tsx rename to src/widgets/instructor/write/ui/AttachFileSection.tsx index 7c912ae..1699e2f 100644 --- a/src/containers/instructor/write/AttachFileSection.tsx +++ b/src/widgets/instructor/write/ui/AttachFileSection.tsx @@ -1,10 +1,10 @@ "use client"; -import FileDragAndDrop from "@/components/common/FileDragAndDrop"; -import FileUpload from "@/components/common/FileUpload"; -import TextField from "@/components/common/input/TextField"; -import { useUploadedFiles } from "@/lib/hooks/useUploadedFiles"; -import { useWriteFormStore } from "@/store/writeFormStore"; +import { useWriteFormStore } from "@/features/instructor/write"; +import { useUploadedFiles } from "@/shared/lib/hooks/useUploadedFiles"; +import FileDragAndDrop from "@/shared/ui/FileDragAndDrop"; +import FileUpload from "@/shared/ui/FileUpload"; +import TextField from "@/shared/ui/input/TextField"; const AttachFileSection = () => { const { materialFiles, setMaterialFiles, materialDescription, setMaterialDescription } = diff --git a/src/containers/instructor/write/BasicInfoTypingSection.tsx b/src/widgets/instructor/write/ui/BasicInfoTypingSection.tsx similarity index 87% rename from src/containers/instructor/write/BasicInfoTypingSection.tsx rename to src/widgets/instructor/write/ui/BasicInfoTypingSection.tsx index b928c41..a9c401a 100644 --- a/src/containers/instructor/write/BasicInfoTypingSection.tsx +++ b/src/widgets/instructor/write/ui/BasicInfoTypingSection.tsx @@ -1,8 +1,7 @@ "use client"; -import SmallInput from "@/components/common/input/SmallInput"; -import { BASIC_INFO_FIELDS } from "@/constants/write"; -import { type BasicInfo, useWriteFormStore } from "@/store/writeFormStore"; +import { BASIC_INFO_FIELDS, type BasicInfo, useWriteFormStore } from "@/features/instructor/write"; +import SmallInput from "@/shared/ui/input/SmallInput"; const BasicInfoTypingSection = () => { const { basicInfo, setBasicInfo } = useWriteFormStore(); diff --git a/src/containers/instructor/write/CategorySection.tsx b/src/widgets/instructor/write/ui/CategorySection.tsx similarity index 92% rename from src/containers/instructor/write/CategorySection.tsx rename to src/widgets/instructor/write/ui/CategorySection.tsx index b87b405..4fcb8a8 100644 --- a/src/containers/instructor/write/CategorySection.tsx +++ b/src/widgets/instructor/write/ui/CategorySection.tsx @@ -2,10 +2,9 @@ import { useState } from "react"; -import AccordionMenu from "@/components/common/AccordionMenu"; -import Radio from "@/components/common/Radio"; -import { CATEGORIES } from "@/constants/write"; -import { useWriteFormStore } from "@/store/writeFormStore"; +import { CATEGORIES, useWriteFormStore } from "@/features/instructor/write"; +import AccordionMenu from "@/shared/ui/AccordionMenu"; +import Radio from "@/shared/ui/Radio"; const CategorySection = () => { const { selectedCategory, setSelectedCategory } = useWriteFormStore(); diff --git a/src/containers/instructor/write/ColorChooseSection.tsx b/src/widgets/instructor/write/ui/ColorChooseSection.tsx similarity index 89% rename from src/containers/instructor/write/ColorChooseSection.tsx rename to src/widgets/instructor/write/ui/ColorChooseSection.tsx index 8f94c22..b9be509 100644 --- a/src/containers/instructor/write/ColorChooseSection.tsx +++ b/src/widgets/instructor/write/ui/ColorChooseSection.tsx @@ -2,12 +2,14 @@ import { useEffect, useRef, useState } from "react"; -import Toggle from "@/components/common/Toggle"; -import ColorChooseCard from "@/components/instructor/write/ColorChooseCard"; -import ColorPicker from "@/components/instructor/write/ColorPicker"; -import { cn } from "@/lib/utils/cn"; -import type { RgbaColor } from "@/lib/utils/color"; -import { useWriteFormStore } from "@/store/writeFormStore"; +import { + ColorChooseCard, + ColorPicker, + type RgbaColor, + useWriteFormStore, +} from "@/features/instructor/write"; +import { cn } from "@/shared/lib/utils/cn"; +import Toggle from "@/shared/ui/Toggle"; const ColorChooseSection = () => { const { colorMode, setColorMode, colors, setColors, mainColorIndex, setMainColorIndex } = diff --git a/src/containers/instructor/write/DeadlineChooseSection.tsx b/src/widgets/instructor/write/ui/DeadlineChooseSection.tsx similarity index 91% rename from src/containers/instructor/write/DeadlineChooseSection.tsx rename to src/widgets/instructor/write/ui/DeadlineChooseSection.tsx index 4651da3..ffcea58 100644 --- a/src/containers/instructor/write/DeadlineChooseSection.tsx +++ b/src/widgets/instructor/write/ui/DeadlineChooseSection.tsx @@ -2,10 +2,14 @@ import { useEffect, useRef, useState } from "react"; -import DateDropdownBox from "@/components/common/dropdown/DateDropdownBox"; -import DateDropdownMenu from "@/components/common/dropdown/DateDropdownMenu"; -import { formatDate, getMinFinalDate, getYesterday } from "@/lib/utils/date"; -import { useWriteFormStore } from "@/store/writeFormStore"; +import { + formatDate, + getMinFinalDate, + getYesterday, + useWriteFormStore, +} from "@/features/instructor/write"; +import DateDropdownBox from "@/shared/ui/dropdown/DateDropdownBox"; +import DateDropdownMenu from "@/shared/ui/dropdown/DateDropdownMenu"; const DeadlineChooseSection = () => { const { firstDate, setFirstDate, finalDate, setFinalDate } = useWriteFormStore(); diff --git a/src/containers/instructor/write/DesignConceptSection.tsx b/src/widgets/instructor/write/ui/DesignConceptSection.tsx similarity index 88% rename from src/containers/instructor/write/DesignConceptSection.tsx rename to src/widgets/instructor/write/ui/DesignConceptSection.tsx index 56b4403..11e635d 100644 --- a/src/containers/instructor/write/DesignConceptSection.tsx +++ b/src/widgets/instructor/write/ui/DesignConceptSection.tsx @@ -1,10 +1,13 @@ "use client"; -import Chip from "@/components/common/Chip"; -import TextField from "@/components/common/input/TextField"; -import ConceptKeywordCard from "@/components/instructor/write/ConceptKeywordCard"; -import { CONCEPT_CATEGORIES, MAX_CONCEPT_SELECT } from "@/constants/write"; -import { useWriteFormStore } from "@/store/writeFormStore"; +import { + CONCEPT_CATEGORIES, + ConceptKeywordCard, + MAX_CONCEPT_SELECT, + useWriteFormStore, +} from "@/features/instructor/write"; +import Chip from "@/shared/ui/Chip"; +import TextField from "@/shared/ui/input/TextField"; const DesignConceptSection = () => { const { selectedKeywords, setSelectedKeywords, additionalConcept, setAdditionalConcept } = diff --git a/src/containers/instructor/write/NecessaryPageChooseSection.tsx b/src/widgets/instructor/write/ui/NecessaryPageChooseSection.tsx similarity index 91% rename from src/containers/instructor/write/NecessaryPageChooseSection.tsx rename to src/widgets/instructor/write/ui/NecessaryPageChooseSection.tsx index 6a13413..3ac6edd 100644 --- a/src/containers/instructor/write/NecessaryPageChooseSection.tsx +++ b/src/widgets/instructor/write/ui/NecessaryPageChooseSection.tsx @@ -1,9 +1,8 @@ "use client"; -import Chip from "@/components/common/Chip"; -import TextField from "@/components/common/input/TextField"; -import { PAGE_OPTIONS } from "@/constants/write"; -import { useWriteFormStore } from "@/store/writeFormStore"; +import { PAGE_OPTIONS, useWriteFormStore } from "@/features/instructor/write"; +import Chip from "@/shared/ui/Chip"; +import TextField from "@/shared/ui/input/TextField"; const NecessaryPageChooseSection = () => { const { selectedPages, setSelectedPages, pageDescriptions, setPageDescription } = diff --git a/src/containers/instructor/write/PlanChooseSection.tsx b/src/widgets/instructor/write/ui/PlanChooseSection.tsx similarity index 83% rename from src/containers/instructor/write/PlanChooseSection.tsx rename to src/widgets/instructor/write/ui/PlanChooseSection.tsx index 74aca82..43840d7 100644 --- a/src/containers/instructor/write/PlanChooseSection.tsx +++ b/src/widgets/instructor/write/ui/PlanChooseSection.tsx @@ -1,8 +1,6 @@ "use client"; -import PlanChooseCard from "@/components/instructor/write/PlanChooseCard"; -import type { PlanType } from "@/constants/write"; -import { useWriteFormStore } from "@/store/writeFormStore"; +import { PlanChooseCard, type PlanType, useWriteFormStore } from "@/features/instructor/write"; const PLANS: PlanType[] = ["기본", "플러스", "맥스"]; diff --git a/src/containers/instructor/write/ReferenceSection.tsx b/src/widgets/instructor/write/ui/ReferenceSection.tsx similarity index 86% rename from src/containers/instructor/write/ReferenceSection.tsx rename to src/widgets/instructor/write/ui/ReferenceSection.tsx index 56784ba..2b0c703 100644 --- a/src/containers/instructor/write/ReferenceSection.tsx +++ b/src/widgets/instructor/write/ui/ReferenceSection.tsx @@ -1,10 +1,10 @@ "use client"; -import FileDragAndDrop from "@/components/common/FileDragAndDrop"; -import FileUpload from "@/components/common/FileUpload"; -import TextField from "@/components/common/input/TextField"; -import { useUploadedFiles } from "@/lib/hooks/useUploadedFiles"; -import { useWriteFormStore } from "@/store/writeFormStore"; +import { useWriteFormStore } from "@/features/instructor/write"; +import { useUploadedFiles } from "@/shared/lib/hooks/useUploadedFiles"; +import FileDragAndDrop from "@/shared/ui/FileDragAndDrop"; +import FileUpload from "@/shared/ui/FileUpload"; +import TextField from "@/shared/ui/input/TextField"; const ReferenceSection = () => { const { referenceFiles, setReferenceFiles, referenceDescription, setReferenceDescription } = diff --git a/src/containers/instructor/write/SizeSection.tsx b/src/widgets/instructor/write/ui/SizeSection.tsx similarity index 83% rename from src/containers/instructor/write/SizeSection.tsx rename to src/widgets/instructor/write/ui/SizeSection.tsx index 36060ba..a333890 100644 --- a/src/containers/instructor/write/SizeSection.tsx +++ b/src/widgets/instructor/write/ui/SizeSection.tsx @@ -1,9 +1,11 @@ "use client"; -import PaperSizeCard from "@/components/instructor/write/PaperSizeCard"; -import SizeRecommendedCard from "@/components/instructor/write/SizeRecommendedCard"; -import { SIZE_OPTIONS } from "@/constants/write"; -import { useWriteFormStore } from "@/store/writeFormStore"; +import { + PaperSizeCard, + SIZE_OPTIONS, + SizeRecommendedCard, + useWriteFormStore, +} from "@/features/instructor/write"; const SizeSection = () => { const { selectedCategory, selectedSize, setSelectedSize } = useWriteFormStore(); diff --git a/src/containers/instructor/write/Steps/Step1Content.tsx b/src/widgets/instructor/write/ui/Step1Content.tsx similarity index 72% rename from src/containers/instructor/write/Steps/Step1Content.tsx rename to src/widgets/instructor/write/ui/Step1Content.tsx index 283e668..fcfa311 100644 --- a/src/containers/instructor/write/Steps/Step1Content.tsx +++ b/src/widgets/instructor/write/ui/Step1Content.tsx @@ -1,11 +1,11 @@ "use client"; -import Button from "@/components/common/Button"; -import CategorySection from "@/containers/instructor/write/CategorySection"; -import ColorChooseSection from "@/containers/instructor/write/ColorChooseSection"; -import DesignConceptSection from "@/containers/instructor/write/DesignConceptSection"; -import SizeSection from "@/containers/instructor/write/SizeSection"; -import { useWriteFormStore } from "@/store/writeFormStore"; +import { useWriteFormStore } from "@/features/instructor/write"; +import Button from "@/shared/ui/Button"; +import CategorySection from "@/widgets/instructor/write/ui/CategorySection"; +import ColorChooseSection from "@/widgets/instructor/write/ui/ColorChooseSection"; +import DesignConceptSection from "@/widgets/instructor/write/ui/DesignConceptSection"; +import SizeSection from "@/widgets/instructor/write/ui/SizeSection"; const Step1Content = () => { const { selectedCategory, selectedSize, selectedKeywords, colorMode, colors, setCurrentStep } = diff --git a/src/containers/instructor/write/Steps/Step2Content.tsx b/src/widgets/instructor/write/ui/Step2Content.tsx similarity index 70% rename from src/containers/instructor/write/Steps/Step2Content.tsx rename to src/widgets/instructor/write/ui/Step2Content.tsx index df49f82..9996eb4 100644 --- a/src/containers/instructor/write/Steps/Step2Content.tsx +++ b/src/widgets/instructor/write/ui/Step2Content.tsx @@ -1,11 +1,11 @@ "use client"; -import Button from "@/components/common/Button"; -import AttachFileSection from "@/containers/instructor/write/AttachFileSection"; -import BasicInfoTypingSection from "@/containers/instructor/write/BasicInfoTypingSection"; -import NecessaryPageChooseSection from "@/containers/instructor/write/NecessaryPageChooseSection"; -import ReferenceSection from "@/containers/instructor/write/ReferenceSection"; -import { useWriteFormStore } from "@/store/writeFormStore"; +import { useWriteFormStore } from "@/features/instructor/write"; +import Button from "@/shared/ui/Button"; +import AttachFileSection from "@/widgets/instructor/write/ui/AttachFileSection"; +import BasicInfoTypingSection from "@/widgets/instructor/write/ui/BasicInfoTypingSection"; +import NecessaryPageChooseSection from "@/widgets/instructor/write/ui/NecessaryPageChooseSection"; +import ReferenceSection from "@/widgets/instructor/write/ui/ReferenceSection"; const Step2Content = () => { const { basicInfo, selectedPages, setCurrentStep } = useWriteFormStore(); diff --git a/src/containers/instructor/write/Steps/Step3Content.tsx b/src/widgets/instructor/write/ui/Step3Content.tsx similarity index 77% rename from src/containers/instructor/write/Steps/Step3Content.tsx rename to src/widgets/instructor/write/ui/Step3Content.tsx index 4dd21f1..8d58c97 100644 --- a/src/containers/instructor/write/Steps/Step3Content.tsx +++ b/src/widgets/instructor/write/ui/Step3Content.tsx @@ -2,11 +2,11 @@ import { useState } from "react"; -import Button from "@/components/common/Button"; -import PaymentModal from "@/components/instructor/write/PaymentModal/PaymentModal"; -import DeadlineChooseSection from "@/containers/instructor/write/DeadlineChooseSection"; -import PlanChooseSection from "@/containers/instructor/write/PlanChooseSection"; -import { useWriteFormStore } from "@/store/writeFormStore"; +import { useWriteFormStore } from "@/features/instructor/write"; +import { PaymentModal } from "@/features/instructor/write"; +import Button from "@/shared/ui/Button"; +import DeadlineChooseSection from "@/widgets/instructor/write/ui/DeadlineChooseSection"; +import PlanChooseSection from "@/widgets/instructor/write/ui/PlanChooseSection"; const Step3Content = () => { const { setCurrentStep, selectedPlan, firstDate, finalDate } = useWriteFormStore();