From 45f6a9f6abfbc85317cd34f7703e05fd3e9ddb2f Mon Sep 17 00:00:00 2001 From: minheon Date: Thu, 2 Apr 2026 10:55:09 +0900 Subject: [PATCH] =?UTF-8?q?[fix]=20=EB=94=94=EB=A0=89=ED=86=A0=EB=A6=AC=20?= =?UTF-8?q?=EA=B5=AC=EC=A1=B0=20=EB=B3=80=EA=B2=BD=20=EB=B0=8F=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=EB=AA=85=EC=B9=AD=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 33 +++++++++----- src/app/providers/index.tsx | 0 src/components/card/TopVideoCard.tsx | 2 +- src/components/index.ts | 3 -- src/components/rating/StarRatingDisplay.tsx | 2 +- .../cta_contents.ts => content/cta.ts} | 0 .../hero_contents.ts => content/hero.ts} | 0 .../modules.ts} | 0 .../problem.ts} | 0 .../process.ts} | 0 .../solution.ts} | 0 .../useCases.ts} | 0 src/features/home/ui/CTASection.tsx | 2 +- src/features/home/ui/HeroSection.tsx | 2 +- src/features/home/ui/ProblemSection.tsx | 2 +- src/features/home/ui/SolutionSection.tsx | 2 +- src/features/home/ui/SystemSection.tsx | 2 +- src/features/home/ui/UseCaseSection.tsx | 2 +- .../home/ui/process/AgdpEngineDiagram.tsx | 2 +- .../home/ui/process/AgdpOrbitNode.tsx | 4 +- .../home/ui/system/CoreModuleCard.tsx | 2 +- .../planSections.ts} | 0 src/features/plan/hooks/useMarketingPlan.ts | 2 +- src/features/plan/hooks/usePlanSubNav.ts | 2 +- .../{constants/mock_plan.ts => mocks/plan.ts} | 0 src/features/plan/ui/MarketingPlanPage.tsx | 44 ------------------- src/features/plan/ui/PlanHeaderSection.tsx | 2 +- .../assetCollection/AssetCollectionPanel.tsx | 2 +- ...lass.ts => assetCollectionBadgeClasses.ts} | 0 .../ui/branding/BrandingChannelRulesTab.tsx | 2 +- .../plan/ui/branding/BrandingGuidePanel.tsx | 2 +- ...ass.ts => brandingChannelStatusClasses.ts} | 0 .../{brandingTabItems.ts => brandingTabs.ts} | 0 .../channelStrategy/ChannelStrategyGrid.tsx | 2 +- ...Class.ts => channelStrategyPillClasses.ts} | 0 .../contentCalendar/ContentCalendarPanel.tsx | 2 +- ...isual.ts => calendarContentTypeClasses.ts} | 0 .../contentStrategy/ContentStrategyPanel.tsx | 2 +- .../ContentStrategyTypesTab.tsx | 2 +- ... => contentStrategyChannelBadgeClasses.ts} | 0 ...tegyTabItems.ts => contentStrategyTabs.ts} | 0 .../plan/ui/header/PlanHeaderMetaChips.tsx | 2 +- ...nStyles.ts => planHeaderSectionClasses.ts} | 0 .../reportSections.ts} | 0 src/features/report/hooks/useReportSubNav.ts | 2 +- .../channelScores.ts} | 0 .../clinicSnapshot.ts} | 0 .../facebookAudit.ts} | 0 .../instagramAudit.ts} | 0 .../{constants/mock_kpi.ts => mocks/kpi.ts} | 0 .../otherChannels.ts} | 2 +- .../problemDiagnosis.ts} | 0 .../reportOverview.ts} | 0 .../mock_roadmap.ts => mocks/roadmap.ts} | 0 .../transformation.ts} | 0 .../youtubeAudit.ts} | 0 .../report}/types/otherChannels.ts | 0 .../report/ui/ReportChannelsSection.tsx | 2 +- .../report/ui/ReportClinicSection.tsx | 2 +- .../report/ui/ReportDiagnosisSection.tsx | 2 +- .../report/ui/ReportFacebookSection.tsx | 4 +- .../report/ui/ReportInstagramSection.tsx | 4 +- src/features/report/ui/ReportKpiSection.tsx | 2 +- .../report/ui/ReportOtherChannelsSection.tsx | 4 +- .../report/ui/ReportOverviewSection.tsx | 4 +- src/features/report/ui/ReportPage.tsx | 40 ----------------- .../report/ui/ReportRoadmapSection.tsx | 2 +- .../report/ui/ReportTransformationSection.tsx | 2 +- .../report/ui/ReportYouTubeSection.tsx | 4 +- .../ui/clinic/clinicSnapshotStatRows.tsx | 2 +- .../report/ui}/diagnosis/DiagnosisRow.tsx | 0 .../ui/diagnosis/ProblemDiagnosisCard.tsx | 2 +- ...erityDotClass.ts => severityDotClasses.ts} | 0 .../report/ui/facebook/FacebookPageCard.tsx | 6 +-- ...{langBadgeClass.ts => langBadgeClasses.ts} | 0 .../ui/instagram/InstagramAccountCard.tsx | 6 +-- ...{langBadgeClass.ts => langBadgeClasses.ts} | 0 .../ui/otherChannels}/OtherChannelRow.tsx | 4 +- .../ui/otherChannels/OtherChannelsList.tsx | 4 +- .../otherChannels/WebsiteTechAuditBlock.tsx | 2 +- .../report/ui/overview/OverviewMetaChips.tsx | 2 +- ...ionStyles.ts => overviewSectionClasses.ts} | 0 .../ui/transformation}/ComparisonRow.tsx | 0 .../NewChannelProposalsTable.tsx | 2 +- .../TransformationTabbedView.tsx | 2 +- ...yClass.ts => newChannelPriorityClasses.ts} | 0 .../ui/youtube/YouTubeChannelInfoCard.tsx | 2 +- .../report/ui/youtube/YouTubeMetricsGrid.tsx | 2 +- src/layouts/PageNavigator.tsx | 6 +-- src/pages/Plan.tsx | 43 +++++++++++++++++- src/pages/Report.tsx | 33 +++++++++++++- src/services/index.ts | 2 + src/store/index.ts | 2 + src/{lib => utils}/formatNumber.ts | 0 src/{lib => utils}/safeUrl.ts | 0 95 files changed, 160 insertions(+), 164 deletions(-) delete mode 100644 src/app/providers/index.tsx rename src/features/home/{constants/cta_contents.ts => content/cta.ts} (100%) rename src/features/home/{constants/hero_contents.ts => content/hero.ts} (100%) rename src/features/home/{constants/modules_contents.ts => content/modules.ts} (100%) rename src/features/home/{constants/problem_contents.ts => content/problem.ts} (100%) rename src/features/home/{constants/process_contents.ts => content/process.ts} (100%) rename src/features/home/{constants/solution_contents.ts => content/solution.ts} (100%) rename src/features/home/{constants/use_cases_contents.ts => content/useCases.ts} (100%) rename src/features/plan/{constants/plan_sections.ts => config/planSections.ts} (100%) rename src/features/plan/{constants/mock_plan.ts => mocks/plan.ts} (100%) delete mode 100644 src/features/plan/ui/MarketingPlanPage.tsx rename src/features/plan/ui/assetCollection/{assetCollectionBadgeClass.ts => assetCollectionBadgeClasses.ts} (100%) rename src/features/plan/ui/branding/{brandingChannelStatusClass.ts => brandingChannelStatusClasses.ts} (100%) rename src/features/plan/ui/branding/{brandingTabItems.ts => brandingTabs.ts} (100%) rename src/features/plan/ui/channelStrategy/{channelStrategyPillClass.ts => channelStrategyPillClasses.ts} (100%) rename src/features/plan/ui/contentCalendar/{calendarContentTypeVisual.ts => calendarContentTypeClasses.ts} (100%) rename src/features/plan/ui/contentStrategy/{contentStrategyChannelBadgeClass.ts => contentStrategyChannelBadgeClasses.ts} (100%) rename src/features/plan/ui/contentStrategy/{contentStrategyTabItems.ts => contentStrategyTabs.ts} (100%) rename src/features/plan/ui/header/{planHeaderSectionStyles.ts => planHeaderSectionClasses.ts} (100%) rename src/features/report/{constants/report_sections.ts => config/reportSections.ts} (100%) rename src/features/report/{constants/mock_channel_scores.ts => mocks/channelScores.ts} (100%) rename src/features/report/{constants/mock_clinic_snapshot.ts => mocks/clinicSnapshot.ts} (100%) rename src/features/report/{constants/mock_facebook_audit.ts => mocks/facebookAudit.ts} (100%) rename src/features/report/{constants/mock_instagram_audit.ts => mocks/instagramAudit.ts} (100%) rename src/features/report/{constants/mock_kpi.ts => mocks/kpi.ts} (100%) rename src/features/report/{constants/mock_other_channels.ts => mocks/otherChannels.ts} (95%) rename src/features/report/{constants/mock_problem_diagnosis.ts => mocks/problemDiagnosis.ts} (100%) rename src/features/report/{constants/mock_report_overview.ts => mocks/reportOverview.ts} (100%) rename src/features/report/{constants/mock_roadmap.ts => mocks/roadmap.ts} (100%) rename src/features/report/{constants/mock_transformation.ts => mocks/transformation.ts} (100%) rename src/features/report/{constants/mock_youtube_audit.ts => mocks/youtubeAudit.ts} (100%) rename src/{ => features/report}/types/otherChannels.ts (100%) delete mode 100644 src/features/report/ui/ReportPage.tsx rename src/{components => features/report/ui}/diagnosis/DiagnosisRow.tsx (100%) rename src/features/report/ui/diagnosis/{severityDotClass.ts => severityDotClasses.ts} (100%) rename src/features/report/ui/facebook/{langBadgeClass.ts => langBadgeClasses.ts} (100%) rename src/features/report/ui/instagram/{langBadgeClass.ts => langBadgeClasses.ts} (100%) rename src/{components/channel => features/report/ui/otherChannels}/OtherChannelRow.tsx (94%) rename src/features/report/ui/overview/{overviewSectionStyles.ts => overviewSectionClasses.ts} (100%) rename src/{components/compare => features/report/ui/transformation}/ComparisonRow.tsx (100%) rename src/features/report/ui/transformation/{newChannelPriorityClass.ts => newChannelPriorityClasses.ts} (100%) create mode 100644 src/services/index.ts create mode 100644 src/store/index.ts rename src/{lib => utils}/formatNumber.ts (100%) rename src/{lib => utils}/safeUrl.ts (100%) diff --git a/README.md b/README.md index c206def..5d4b642 100644 --- a/README.md +++ b/README.md @@ -10,25 +10,36 @@ ## 디렉토리 구조 -디렉토리 구조는 다음을 따를 예정입니다. ```bash src/ ├── app/ # 애플리케이션 진입점 및 전역 설정 (Router, Providers, 글로벌 스타일) -├── assets/ # 정적 파일 (이미지, 폰트, 로티 애니메이션 등) -├── components/ # 도메인에 종속되지 않는 공통 UI 컴포넌트 (버튼, 모달, 디자인 시스템) +│ └── providers/ # React Context Provider 모음 (QueryProvider 등) +├── assets/ # 정적 파일 (이미지, 폰트, SVG 아이콘 등) +├── components/ # 도메인에 종속되지 않는 공통 UI 컴포넌트 (버튼, 카드, 디자인 시스템) ├── features/ # 핵심 비즈니스 로직 및 도메인 영역 (이 구조의 핵심) -│ ├── auth/ # 특정 도메인 (예: 인증) -│ │ ├── api/ # 해당 도메인 전용 API 통신 함수 +│ ├── home/ # 홈(랜딩) 도메인 +│ │ ├── content/ # 해당 도메인 전용 UI 텍스트·카피 (정적 콘텐츠) │ │ ├── hooks/ # 해당 도메인 전용 커스텀 훅 -│ │ ├── store/ # 해당 도메인 전용 상태 (Zustand 등) +│ │ └── ui/ # 해당 도메인 전용 UI 컴포넌트 +│ ├── report/ # 리포트 도메인 +│ │ ├── config/ # 섹션 ID·레이블 등 UI 설정값 +│ │ ├── hooks/ # 해당 도메인 전용 커스텀 훅 +│ │ ├── mocks/ # API 연동 전 임시 목업 데이터 │ │ ├── types/ # 해당 도메인 전용 타입 정의 │ │ └── ui/ # 해당 도메인 전용 UI 컴포넌트 -├── hooks/ # 전역에서 사용하는 공통 훅 (useClickOutside 등) -├── layouts/ # 페이지 레이아웃 (GNB, Sidebar, 풋터 등) -├── pages/ # 라우팅과 1:1 매칭되는 페이지 진입점 (여기서는 features의 컴포넌트만 조립) +│ └── plan/ # 마케팅 플랜 도메인 (report와 동일한 구조) +│ ├── config/ +│ ├── hooks/ +│ ├── mocks/ +│ ├── types/ +│ └── ui/ +├── hooks/ # 전역에서 사용하는 공통 훅 (useInView 등) +├── layouts/ # 페이지 레이아웃 (GNB, SubNav, Footer 등) +├── pages/ # 라우팅과 1:1 매칭되는 페이지 진입점 (features의 컴포넌트만 조립) ├── services/ # 공통 API 클라이언트 설정 (Axios 인스턴스, 인터셉터 등) ├── store/ # 전역 상태 관리 (사용자 세션, 테마 등) -└── utils/ # 공통 유틸리티 함수 (날짜 포맷팅, 정규식 등) +├── types/ # 여러 도메인에서 공유하는 공통 타입 정의 +└── utils/ # 공통 유틸리티 함수 (숫자 포맷팅, URL 처리 등) ``` ## 시작하기 @@ -41,4 +52,4 @@ npm install ### 실행 ```bash npm run dev -``` \ No newline at end of file +``` diff --git a/src/app/providers/index.tsx b/src/app/providers/index.tsx deleted file mode 100644 index e69de29..0000000 diff --git a/src/components/card/TopVideoCard.tsx b/src/components/card/TopVideoCard.tsx index 790624f..7af811e 100644 --- a/src/components/card/TopVideoCard.tsx +++ b/src/components/card/TopVideoCard.tsx @@ -1,6 +1,6 @@ import type { CSSProperties } from "react"; import EyeIcon from "@/assets/icons/eye.svg?react"; -import { formatCompactNumber } from "@/lib/formatNumber"; +import { formatCompactNumber } from "@/utils/formatNumber"; export type TopVideoCardProps = { title: string; diff --git a/src/components/index.ts b/src/components/index.ts index e083438..f4d7f9d 100644 --- a/src/components/index.ts +++ b/src/components/index.ts @@ -1,6 +1,4 @@ -export { ComparisonRow, type ComparisonRowProps } from "@/components/compare/ComparisonRow"; export { BrandConsistencyMap, type BrandConsistencyMapProps } from "@/components/brand/BrandConsistencyMap"; -export { OtherChannelRow, type OtherChannelRowProps } from "@/components/channel/OtherChannelRow"; export { SeverityBadge, type SeverityBadgeProps } from "@/components/badge/SeverityBadge"; export { ChannelScoreCard, type ChannelScoreCardProps } from "@/components/card/ChannelScoreCard"; export { InfoStatCard, type InfoStatCardProps } from "@/components/card/InfoStatCard"; @@ -8,7 +6,6 @@ export { MetricCard, type MetricCardProps } from "@/components/card/MetricCard"; export { PixelInstallCard, type PixelInstallCardProps } from "@/components/card/PixelInstallCard"; export { TopVideoCard, type TopVideoCardProps } from "@/components/card/TopVideoCard"; export { TagChipList, type TagChipListProps } from "@/components/chip/TagChipList"; -export { DiagnosisRow, type DiagnosisRowProps } from "@/components/diagnosis/DiagnosisRow"; export { ConsolidationCallout, type ConsolidationCalloutProps } from "@/components/panel/ConsolidationCallout"; export { HighlightPanel, type HighlightPanelProps } from "@/components/panel/HighlightPanel"; export { ScoreRing, type ScoreRingProps } from "@/components/rating/ScoreRing"; diff --git a/src/components/rating/StarRatingDisplay.tsx b/src/components/rating/StarRatingDisplay.tsx index 5faade3..be71c1d 100644 --- a/src/components/rating/StarRatingDisplay.tsx +++ b/src/components/rating/StarRatingDisplay.tsx @@ -1,5 +1,5 @@ import StarIcon from "@/assets/icons/star.svg?react"; -import { formatCompactNumber } from "@/lib/formatNumber"; +import { formatCompactNumber } from "@/utils/formatNumber"; export type StarRatingDisplayProps = { rating: number; diff --git a/src/features/home/constants/cta_contents.ts b/src/features/home/content/cta.ts similarity index 100% rename from src/features/home/constants/cta_contents.ts rename to src/features/home/content/cta.ts diff --git a/src/features/home/constants/hero_contents.ts b/src/features/home/content/hero.ts similarity index 100% rename from src/features/home/constants/hero_contents.ts rename to src/features/home/content/hero.ts diff --git a/src/features/home/constants/modules_contents.ts b/src/features/home/content/modules.ts similarity index 100% rename from src/features/home/constants/modules_contents.ts rename to src/features/home/content/modules.ts diff --git a/src/features/home/constants/problem_contents.ts b/src/features/home/content/problem.ts similarity index 100% rename from src/features/home/constants/problem_contents.ts rename to src/features/home/content/problem.ts diff --git a/src/features/home/constants/process_contents.ts b/src/features/home/content/process.ts similarity index 100% rename from src/features/home/constants/process_contents.ts rename to src/features/home/content/process.ts diff --git a/src/features/home/constants/solution_contents.ts b/src/features/home/content/solution.ts similarity index 100% rename from src/features/home/constants/solution_contents.ts rename to src/features/home/content/solution.ts diff --git a/src/features/home/constants/use_cases_contents.ts b/src/features/home/content/useCases.ts similarity index 100% rename from src/features/home/constants/use_cases_contents.ts rename to src/features/home/content/useCases.ts diff --git a/src/features/home/ui/CTASection.tsx b/src/features/home/ui/CTASection.tsx index 1f125ff..728c631 100644 --- a/src/features/home/ui/CTASection.tsx +++ b/src/features/home/ui/CTASection.tsx @@ -5,7 +5,7 @@ import { CTA_FOOTNOTE, CTA_HEADLINE, CTA_URL_PLACEHOLDER, -} from "@/features/home/constants/cta_contents"; +} from "@/features/home/content/cta"; import { useAnalyze } from "@/features/home/hooks/useAnalyze"; import { useInView } from "@/hooks/useInView"; diff --git a/src/features/home/ui/HeroSection.tsx b/src/features/home/ui/HeroSection.tsx index 752acef..3e6cb2e 100644 --- a/src/features/home/ui/HeroSection.tsx +++ b/src/features/home/ui/HeroSection.tsx @@ -7,7 +7,7 @@ import { HERO_LEAD_EN, HERO_LEAD_KO, HERO_URL_PLACEHOLDER, -} from "@/features/home/constants/hero_contents"; +} from "@/features/home/content/hero"; import { useAnalyze } from "@/features/home/hooks/useAnalyze"; export function HeroSection() { diff --git a/src/features/home/ui/ProblemSection.tsx b/src/features/home/ui/ProblemSection.tsx index f8e86e0..7df2d8b 100644 --- a/src/features/home/ui/ProblemSection.tsx +++ b/src/features/home/ui/ProblemSection.tsx @@ -1,4 +1,4 @@ -import { PROBLEM_CARDS, PROBLEM_CARD_STAGGER } from "@/features/home/constants/problem_contents"; +import { PROBLEM_CARDS, PROBLEM_CARD_STAGGER } from "@/features/home/content/problem"; import { useInView } from "@/hooks/useInView"; export function ProblemSection() { diff --git a/src/features/home/ui/SolutionSection.tsx b/src/features/home/ui/SolutionSection.tsx index 476dbeb..5117eaa 100644 --- a/src/features/home/ui/SolutionSection.tsx +++ b/src/features/home/ui/SolutionSection.tsx @@ -1,4 +1,4 @@ -import { SOLUTION_CARDS } from "@/features/home/constants/solution_contents"; +import { SOLUTION_CARDS } from "@/features/home/content/solution"; import { useInView } from "@/hooks/useInView"; export function SolutionSection() { diff --git a/src/features/home/ui/SystemSection.tsx b/src/features/home/ui/SystemSection.tsx index 2f027cb..c676294 100644 --- a/src/features/home/ui/SystemSection.tsx +++ b/src/features/home/ui/SystemSection.tsx @@ -1,4 +1,4 @@ -import { CORE_MODULES, MODULE_CARD_STAGGER } from "@/features/home/constants/modules_contents"; +import { CORE_MODULES, MODULE_CARD_STAGGER } from "@/features/home/content/modules"; import { useInView } from "@/hooks/useInView"; import { CoreModuleCard } from "./system/CoreModuleCard"; import { CoreModulesCenterHeading } from "./system/CoreModulesCenterHeading"; diff --git a/src/features/home/ui/UseCaseSection.tsx b/src/features/home/ui/UseCaseSection.tsx index 3dd69f6..ab3d32c 100644 --- a/src/features/home/ui/UseCaseSection.tsx +++ b/src/features/home/ui/UseCaseSection.tsx @@ -1,5 +1,5 @@ import CheckCircleIcon from "@/assets/home/check-circle.svg?react"; -import { USE_CASE_CARDS } from "@/features/home/constants/use_cases_contents"; +import { USE_CASE_CARDS } from "@/features/home/content/useCases"; import { useInView } from "@/hooks/useInView"; export function UseCaseSection() { diff --git a/src/features/home/ui/process/AgdpEngineDiagram.tsx b/src/features/home/ui/process/AgdpEngineDiagram.tsx index 01abb4d..6432a50 100644 --- a/src/features/home/ui/process/AgdpEngineDiagram.tsx +++ b/src/features/home/ui/process/AgdpEngineDiagram.tsx @@ -1,4 +1,4 @@ -import { AGDP_NODES } from "@/features/home/constants/process_contents"; +import { AGDP_NODES } from "@/features/home/content/process"; import { AgdpOrbitNode } from "./AgdpOrbitNode"; import { AgdpRewardPathLabel } from "./AgdpRewardPathLabel"; diff --git a/src/features/home/ui/process/AgdpOrbitNode.tsx b/src/features/home/ui/process/AgdpOrbitNode.tsx index eb139d0..5703f6f 100644 --- a/src/features/home/ui/process/AgdpOrbitNode.tsx +++ b/src/features/home/ui/process/AgdpOrbitNode.tsx @@ -1,5 +1,5 @@ -import type { AgdpNodeDef } from "@/features/home/constants/process_contents"; -import { AGDP_SLOT_WRAPPER_CLASS } from "@/features/home/constants/process_contents"; +import type { AgdpNodeDef } from "@/features/home/content/process"; +import { AGDP_SLOT_WRAPPER_CLASS } from "@/features/home/content/process"; type Props = { node: AgdpNodeDef }; diff --git a/src/features/home/ui/system/CoreModuleCard.tsx b/src/features/home/ui/system/CoreModuleCard.tsx index c0dc52a..198131f 100644 --- a/src/features/home/ui/system/CoreModuleCard.tsx +++ b/src/features/home/ui/system/CoreModuleCard.tsx @@ -1,4 +1,4 @@ -import type { CoreModule } from "@/features/home/constants/modules_contents"; +import type { CoreModule } from "@/features/home/content/modules"; type Props = { mod: CoreModule; diff --git a/src/features/plan/constants/plan_sections.ts b/src/features/plan/config/planSections.ts similarity index 100% rename from src/features/plan/constants/plan_sections.ts rename to src/features/plan/config/planSections.ts diff --git a/src/features/plan/hooks/useMarketingPlan.ts b/src/features/plan/hooks/useMarketingPlan.ts index 5db5b48..35c0b5e 100644 --- a/src/features/plan/hooks/useMarketingPlan.ts +++ b/src/features/plan/hooks/useMarketingPlan.ts @@ -1,5 +1,5 @@ import { useMemo } from "react"; -import { MOCK_PLAN } from "@/features/plan/constants/mock_plan"; +import { MOCK_PLAN } from "@/features/plan/mocks/plan"; import type { MarketingPlan } from "@/features/plan/types/marketingPlan"; type UseMarketingPlanResult = { diff --git a/src/features/plan/hooks/usePlanSubNav.ts b/src/features/plan/hooks/usePlanSubNav.ts index d085a90..efd36f3 100644 --- a/src/features/plan/hooks/usePlanSubNav.ts +++ b/src/features/plan/hooks/usePlanSubNav.ts @@ -1,7 +1,7 @@ import { useEffect, useMemo, useState } from "react"; import { useMainSubNav } from "@/layouts/MainSubNavLayout"; import type { SubNavItem } from "@/layouts/SubNav"; -import { PLAN_SECTIONS } from "@/features/plan/constants/plan_sections"; +import { PLAN_SECTIONS } from "@/features/plan/config/planSections"; export function usePlanSubNav() { const { setSubNav } = useMainSubNav(); diff --git a/src/features/plan/constants/mock_plan.ts b/src/features/plan/mocks/plan.ts similarity index 100% rename from src/features/plan/constants/mock_plan.ts rename to src/features/plan/mocks/plan.ts diff --git a/src/features/plan/ui/MarketingPlanPage.tsx b/src/features/plan/ui/MarketingPlanPage.tsx deleted file mode 100644 index 095f469..0000000 --- a/src/features/plan/ui/MarketingPlanPage.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import { useCurrentMarketingPlan } from "@/features/plan/hooks/useCurrentMarketingPlan"; -import { usePlanSubNav } from "@/features/plan/hooks/usePlanSubNav"; -import { PlanAssetCollectionSection } from "@/features/plan/ui/PlanAssetCollectionSection"; -import { PlanBrandingGuideSection } from "@/features/plan/ui/PlanBrandingGuideSection"; -import { PlanChannelStrategySection } from "@/features/plan/ui/PlanChannelStrategySection"; -import { PlanContentCalendarSection } from "@/features/plan/ui/PlanContentCalendarSection"; -import { PlanContentStrategySection } from "@/features/plan/ui/PlanContentStrategySection"; -import { PlanCtaSection } from "@/features/plan/ui/PlanCtaSection"; -import { PlanHeaderSection } from "@/features/plan/ui/PlanHeaderSection"; -import { PlanMyAssetUploadSection } from "@/features/plan/ui/PlanMyAssetUploadSection"; - -export function MarketingPlanPage() { - const { data, error } = useCurrentMarketingPlan(); - - usePlanSubNav(); - - if (error || !data) { - return ( -
-
-

- 오류가 발생했습니다 -

-

- {error ?? "마케팅 플랜을 찾을 수 없습니다."} -

-
-
- ); - } - - return ( -
- - - - - - - - -
- ); -} diff --git a/src/features/plan/ui/PlanHeaderSection.tsx b/src/features/plan/ui/PlanHeaderSection.tsx index a09ac68..8830fa8 100644 --- a/src/features/plan/ui/PlanHeaderSection.tsx +++ b/src/features/plan/ui/PlanHeaderSection.tsx @@ -2,7 +2,7 @@ import { useCurrentMarketingPlan } from "@/features/plan/hooks/useCurrentMarketi import { PlanHeaderDaysBadge } from "@/features/plan/ui/header/PlanHeaderDaysBadge"; import { PlanHeaderHeroBlobs } from "@/features/plan/ui/header/PlanHeaderHeroBlobs"; import { PlanHeaderHeroColumn } from "@/features/plan/ui/header/PlanHeaderHeroColumn"; -import { PLAN_HEADER_BG_CLASS } from "@/features/plan/ui/header/planHeaderSectionStyles"; +import { PLAN_HEADER_BG_CLASS } from "@/features/plan/ui/header/planHeaderSectionClasses"; export function PlanHeaderSection() { const { data, error } = useCurrentMarketingPlan(); diff --git a/src/features/plan/ui/assetCollection/AssetCollectionPanel.tsx b/src/features/plan/ui/assetCollection/AssetCollectionPanel.tsx index eb49762..a5020b6 100644 --- a/src/features/plan/ui/assetCollection/AssetCollectionPanel.tsx +++ b/src/features/plan/ui/assetCollection/AssetCollectionPanel.tsx @@ -14,7 +14,7 @@ import { assetTypeBadgeClass, assetTypeDisplayLabel, formatYoutubeViews, -} from "@/features/plan/ui/assetCollection/assetCollectionBadgeClass"; +} from "@/features/plan/ui/assetCollection/assetCollectionBadgeClasses"; type AssetCollectionPanelProps = { data: AssetCollectionData; diff --git a/src/features/plan/ui/assetCollection/assetCollectionBadgeClass.ts b/src/features/plan/ui/assetCollection/assetCollectionBadgeClasses.ts similarity index 100% rename from src/features/plan/ui/assetCollection/assetCollectionBadgeClass.ts rename to src/features/plan/ui/assetCollection/assetCollectionBadgeClasses.ts diff --git a/src/features/plan/ui/branding/BrandingChannelRulesTab.tsx b/src/features/plan/ui/branding/BrandingChannelRulesTab.tsx index 3fea650..f15c7fd 100644 --- a/src/features/plan/ui/branding/BrandingChannelRulesTab.tsx +++ b/src/features/plan/ui/branding/BrandingChannelRulesTab.tsx @@ -4,7 +4,7 @@ import { BrandingChannelIcon } from "@/features/plan/ui/branding/BrandingChannel import { brandingChannelStatusBadgeClass, brandingChannelStatusLabel, -} from "@/features/plan/ui/branding/brandingChannelStatusClass"; +} from "@/features/plan/ui/branding/brandingChannelStatusClasses"; type BrandingChannelRulesTabProps = { channels: BrandGuide["channelBranding"]; diff --git a/src/features/plan/ui/branding/BrandingGuidePanel.tsx b/src/features/plan/ui/branding/BrandingGuidePanel.tsx index c350514..694816c 100644 --- a/src/features/plan/ui/branding/BrandingGuidePanel.tsx +++ b/src/features/plan/ui/branding/BrandingGuidePanel.tsx @@ -2,7 +2,7 @@ import { useState } from "react"; import { BrandConsistencyMap } from "@/components/brand/BrandConsistencyMap"; import { SegmentTabButton } from "@/features/plan/ui/SegmentTabButton"; import type { BrandGuide } from "@/features/plan/types/marketingPlan"; -import { BRANDING_GUIDE_TAB_ITEMS, type BrandingGuideTabKey } from "@/features/plan/ui/branding/brandingTabItems"; +import { BRANDING_GUIDE_TAB_ITEMS, type BrandingGuideTabKey } from "@/features/plan/ui/branding/brandingTabs"; import { BrandingChannelRulesTab } from "@/features/plan/ui/branding/BrandingChannelRulesTab"; import { BrandingToneVoiceTab } from "@/features/plan/ui/branding/BrandingToneVoiceTab"; import { BrandingVisualIdentityTab } from "@/features/plan/ui/branding/BrandingVisualIdentityTab"; diff --git a/src/features/plan/ui/branding/brandingChannelStatusClass.ts b/src/features/plan/ui/branding/brandingChannelStatusClasses.ts similarity index 100% rename from src/features/plan/ui/branding/brandingChannelStatusClass.ts rename to src/features/plan/ui/branding/brandingChannelStatusClasses.ts diff --git a/src/features/plan/ui/branding/brandingTabItems.ts b/src/features/plan/ui/branding/brandingTabs.ts similarity index 100% rename from src/features/plan/ui/branding/brandingTabItems.ts rename to src/features/plan/ui/branding/brandingTabs.ts diff --git a/src/features/plan/ui/channelStrategy/ChannelStrategyGrid.tsx b/src/features/plan/ui/channelStrategy/ChannelStrategyGrid.tsx index 0c0c577..6a731f2 100644 --- a/src/features/plan/ui/channelStrategy/ChannelStrategyGrid.tsx +++ b/src/features/plan/ui/channelStrategy/ChannelStrategyGrid.tsx @@ -3,7 +3,7 @@ import { Pill } from "@/components/atoms/Pill"; import { Surface } from "@/components/atoms/Surface"; import type { ChannelStrategyCard } from "@/features/plan/types/marketingPlan"; import { BrandingChannelIcon } from "@/features/plan/ui/branding/BrandingChannelIcon"; -import { channelStrategyPriorityPillClass } from "@/features/plan/ui/channelStrategy/channelStrategyPillClass"; +import { channelStrategyPriorityPillClass } from "@/features/plan/ui/channelStrategy/channelStrategyPillClasses"; type ChannelStrategyGridProps = { channels: ChannelStrategyCard[]; diff --git a/src/features/plan/ui/channelStrategy/channelStrategyPillClass.ts b/src/features/plan/ui/channelStrategy/channelStrategyPillClasses.ts similarity index 100% rename from src/features/plan/ui/channelStrategy/channelStrategyPillClass.ts rename to src/features/plan/ui/channelStrategy/channelStrategyPillClasses.ts diff --git a/src/features/plan/ui/contentCalendar/ContentCalendarPanel.tsx b/src/features/plan/ui/contentCalendar/ContentCalendarPanel.tsx index df6729d..d8bb16e 100644 --- a/src/features/plan/ui/contentCalendar/ContentCalendarPanel.tsx +++ b/src/features/plan/ui/contentCalendar/ContentCalendarPanel.tsx @@ -5,7 +5,7 @@ import { CALENDAR_CONTENT_TYPE_LABELS, CALENDAR_DAY_HEADERS, calendarContentTypeVisual, -} from "@/features/plan/ui/contentCalendar/calendarContentTypeVisual"; +} from "@/features/plan/ui/contentCalendar/calendarContentTypeClasses"; import { ContentCalendarTypeIcon } from "@/features/plan/ui/contentCalendar/ContentCalendarTypeIcon"; type ContentCalendarPanelProps = { diff --git a/src/features/plan/ui/contentCalendar/calendarContentTypeVisual.ts b/src/features/plan/ui/contentCalendar/calendarContentTypeClasses.ts similarity index 100% rename from src/features/plan/ui/contentCalendar/calendarContentTypeVisual.ts rename to src/features/plan/ui/contentCalendar/calendarContentTypeClasses.ts diff --git a/src/features/plan/ui/contentStrategy/ContentStrategyPanel.tsx b/src/features/plan/ui/contentStrategy/ContentStrategyPanel.tsx index a591be8..8fddf43 100644 --- a/src/features/plan/ui/contentStrategy/ContentStrategyPanel.tsx +++ b/src/features/plan/ui/contentStrategy/ContentStrategyPanel.tsx @@ -4,7 +4,7 @@ import type { ContentStrategyData } from "@/features/plan/types/marketingPlan"; import { CONTENT_STRATEGY_TAB_ITEMS, type ContentStrategyTabKey, -} from "@/features/plan/ui/contentStrategy/contentStrategyTabItems"; +} from "@/features/plan/ui/contentStrategy/contentStrategyTabs"; import { ContentStrategyPillarsTab } from "@/features/plan/ui/contentStrategy/ContentStrategyPillarsTab"; import { ContentStrategyRepurposingTab } from "@/features/plan/ui/contentStrategy/ContentStrategyRepurposingTab"; import { ContentStrategyTypesTab } from "@/features/plan/ui/contentStrategy/ContentStrategyTypesTab"; diff --git a/src/features/plan/ui/contentStrategy/ContentStrategyTypesTab.tsx b/src/features/plan/ui/contentStrategy/ContentStrategyTypesTab.tsx index 2d29a22..f326001 100644 --- a/src/features/plan/ui/contentStrategy/ContentStrategyTypesTab.tsx +++ b/src/features/plan/ui/contentStrategy/ContentStrategyTypesTab.tsx @@ -1,6 +1,6 @@ import { Pill } from "@/components/atoms/Pill"; import type { ContentTypeRow } from "@/features/plan/types/marketingPlan"; -import { contentStrategyChannelBadgeClass } from "@/features/plan/ui/contentStrategy/contentStrategyChannelBadgeClass"; +import { contentStrategyChannelBadgeClass } from "@/features/plan/ui/contentStrategy/contentStrategyChannelBadgeClasses"; type ContentStrategyTypesTabProps = { rows: ContentTypeRow[]; diff --git a/src/features/plan/ui/contentStrategy/contentStrategyChannelBadgeClass.ts b/src/features/plan/ui/contentStrategy/contentStrategyChannelBadgeClasses.ts similarity index 100% rename from src/features/plan/ui/contentStrategy/contentStrategyChannelBadgeClass.ts rename to src/features/plan/ui/contentStrategy/contentStrategyChannelBadgeClasses.ts diff --git a/src/features/plan/ui/contentStrategy/contentStrategyTabItems.ts b/src/features/plan/ui/contentStrategy/contentStrategyTabs.ts similarity index 100% rename from src/features/plan/ui/contentStrategy/contentStrategyTabItems.ts rename to src/features/plan/ui/contentStrategy/contentStrategyTabs.ts diff --git a/src/features/plan/ui/header/PlanHeaderMetaChips.tsx b/src/features/plan/ui/header/PlanHeaderMetaChips.tsx index e9d542a..8209915 100644 --- a/src/features/plan/ui/header/PlanHeaderMetaChips.tsx +++ b/src/features/plan/ui/header/PlanHeaderMetaChips.tsx @@ -1,6 +1,6 @@ import CalendarIcon from "@/assets/report/calendar.svg?react"; import GlobeIcon from "@/assets/report/globe.svg?react"; -import { PLAN_HEADER_META_CHIP_CLASS } from "@/features/plan/ui/header/planHeaderSectionStyles"; +import { PLAN_HEADER_META_CHIP_CLASS } from "@/features/plan/ui/header/planHeaderSectionClasses"; type PlanHeaderMetaChipsProps = { date: string; diff --git a/src/features/plan/ui/header/planHeaderSectionStyles.ts b/src/features/plan/ui/header/planHeaderSectionClasses.ts similarity index 100% rename from src/features/plan/ui/header/planHeaderSectionStyles.ts rename to src/features/plan/ui/header/planHeaderSectionClasses.ts diff --git a/src/features/report/constants/report_sections.ts b/src/features/report/config/reportSections.ts similarity index 100% rename from src/features/report/constants/report_sections.ts rename to src/features/report/config/reportSections.ts diff --git a/src/features/report/hooks/useReportSubNav.ts b/src/features/report/hooks/useReportSubNav.ts index 950daaa..7188e27 100644 --- a/src/features/report/hooks/useReportSubNav.ts +++ b/src/features/report/hooks/useReportSubNav.ts @@ -1,7 +1,7 @@ import { useEffect, useMemo, useState } from "react"; import { useMainSubNav } from "@/layouts/MainSubNavLayout"; import type { SubNavItem } from "@/layouts/SubNav"; -import { REPORT_SECTIONS } from "@/features/report/constants/report_sections"; +import { REPORT_SECTIONS } from "@/features/report/config/reportSections"; export function useReportSubNav() { const { setSubNav } = useMainSubNav(); diff --git a/src/features/report/constants/mock_channel_scores.ts b/src/features/report/mocks/channelScores.ts similarity index 100% rename from src/features/report/constants/mock_channel_scores.ts rename to src/features/report/mocks/channelScores.ts diff --git a/src/features/report/constants/mock_clinic_snapshot.ts b/src/features/report/mocks/clinicSnapshot.ts similarity index 100% rename from src/features/report/constants/mock_clinic_snapshot.ts rename to src/features/report/mocks/clinicSnapshot.ts diff --git a/src/features/report/constants/mock_facebook_audit.ts b/src/features/report/mocks/facebookAudit.ts similarity index 100% rename from src/features/report/constants/mock_facebook_audit.ts rename to src/features/report/mocks/facebookAudit.ts diff --git a/src/features/report/constants/mock_instagram_audit.ts b/src/features/report/mocks/instagramAudit.ts similarity index 100% rename from src/features/report/constants/mock_instagram_audit.ts rename to src/features/report/mocks/instagramAudit.ts diff --git a/src/features/report/constants/mock_kpi.ts b/src/features/report/mocks/kpi.ts similarity index 100% rename from src/features/report/constants/mock_kpi.ts rename to src/features/report/mocks/kpi.ts diff --git a/src/features/report/constants/mock_other_channels.ts b/src/features/report/mocks/otherChannels.ts similarity index 95% rename from src/features/report/constants/mock_other_channels.ts rename to src/features/report/mocks/otherChannels.ts index d2b29fb..a970a54 100644 --- a/src/features/report/constants/mock_other_channels.ts +++ b/src/features/report/mocks/otherChannels.ts @@ -1,4 +1,4 @@ -import type { OtherChannelsReport } from "@/types/otherChannels"; +import type { OtherChannelsReport } from "@/features/report/types/otherChannels"; /** DEMO `mockReport` 기타 채널 + 웹사이트 진단 */ export const MOCK_OTHER_CHANNELS_REPORT: OtherChannelsReport = { diff --git a/src/features/report/constants/mock_problem_diagnosis.ts b/src/features/report/mocks/problemDiagnosis.ts similarity index 100% rename from src/features/report/constants/mock_problem_diagnosis.ts rename to src/features/report/mocks/problemDiagnosis.ts diff --git a/src/features/report/constants/mock_report_overview.ts b/src/features/report/mocks/reportOverview.ts similarity index 100% rename from src/features/report/constants/mock_report_overview.ts rename to src/features/report/mocks/reportOverview.ts diff --git a/src/features/report/constants/mock_roadmap.ts b/src/features/report/mocks/roadmap.ts similarity index 100% rename from src/features/report/constants/mock_roadmap.ts rename to src/features/report/mocks/roadmap.ts diff --git a/src/features/report/constants/mock_transformation.ts b/src/features/report/mocks/transformation.ts similarity index 100% rename from src/features/report/constants/mock_transformation.ts rename to src/features/report/mocks/transformation.ts diff --git a/src/features/report/constants/mock_youtube_audit.ts b/src/features/report/mocks/youtubeAudit.ts similarity index 100% rename from src/features/report/constants/mock_youtube_audit.ts rename to src/features/report/mocks/youtubeAudit.ts diff --git a/src/types/otherChannels.ts b/src/features/report/types/otherChannels.ts similarity index 100% rename from src/types/otherChannels.ts rename to src/features/report/types/otherChannels.ts diff --git a/src/features/report/ui/ReportChannelsSection.tsx b/src/features/report/ui/ReportChannelsSection.tsx index 5a1392f..acced32 100644 --- a/src/features/report/ui/ReportChannelsSection.tsx +++ b/src/features/report/ui/ReportChannelsSection.tsx @@ -1,5 +1,5 @@ import { PageSection } from "@/components/section/PageSection"; -import { MOCK_CHANNEL_SCORES } from "@/features/report/constants/mock_channel_scores"; +import { MOCK_CHANNEL_SCORES } from "@/features/report/mocks/channelScores"; import type { ChannelScore } from "@/features/report/types/channelScore"; import { ChannelScoreGrid } from "@/features/report/ui/channels/ChannelScoreGrid"; diff --git a/src/features/report/ui/ReportClinicSection.tsx b/src/features/report/ui/ReportClinicSection.tsx index f44ff2f..86ba7ec 100644 --- a/src/features/report/ui/ReportClinicSection.tsx +++ b/src/features/report/ui/ReportClinicSection.tsx @@ -1,5 +1,5 @@ import { PageSection } from "@/components/section/PageSection"; -import { MOCK_CLINIC_SNAPSHOT } from "@/features/report/constants/mock_clinic_snapshot"; +import { MOCK_CLINIC_SNAPSHOT } from "@/features/report/mocks/clinicSnapshot"; import type { ClinicSnapshot } from "@/features/report/types/clinicSnapshot"; import { ClinicCertificationsBlock } from "@/features/report/ui/clinic/ClinicCertificationsBlock"; import { ClinicInfoStatGrid } from "@/features/report/ui/clinic/ClinicInfoStatGrid"; diff --git a/src/features/report/ui/ReportDiagnosisSection.tsx b/src/features/report/ui/ReportDiagnosisSection.tsx index c463579..774ab84 100644 --- a/src/features/report/ui/ReportDiagnosisSection.tsx +++ b/src/features/report/ui/ReportDiagnosisSection.tsx @@ -1,5 +1,5 @@ import { PageSection } from "@/components/section/PageSection"; -import { MOCK_PROBLEM_DIAGNOSIS } from "@/features/report/constants/mock_problem_diagnosis"; +import { MOCK_PROBLEM_DIAGNOSIS } from "@/features/report/mocks/problemDiagnosis"; import type { DiagnosisItem } from "@/features/report/types/diagnosis"; import { ProblemDiagnosisCard } from "@/features/report/ui/diagnosis/ProblemDiagnosisCard"; diff --git a/src/features/report/ui/ReportFacebookSection.tsx b/src/features/report/ui/ReportFacebookSection.tsx index 099ad9f..d1c4b19 100644 --- a/src/features/report/ui/ReportFacebookSection.tsx +++ b/src/features/report/ui/ReportFacebookSection.tsx @@ -1,9 +1,9 @@ import GlobeIcon from "@/assets/report/globe.svg?react"; import { BrandConsistencyMap } from "@/components/brand/BrandConsistencyMap"; -import { DiagnosisRow } from "@/components/diagnosis/DiagnosisRow"; +import { DiagnosisRow } from "@/features/report/ui/diagnosis/DiagnosisRow"; import { ConsolidationCallout } from "@/components/panel/ConsolidationCallout"; import { PageSection } from "@/components/section/PageSection"; -import { MOCK_FACEBOOK_AUDIT } from "@/features/report/constants/mock_facebook_audit"; +import { MOCK_FACEBOOK_AUDIT } from "@/features/report/mocks/facebookAudit"; import type { FacebookAudit } from "@/features/report/types/facebookAudit"; import { FacebookPageCard } from "@/features/report/ui/facebook/FacebookPageCard"; diff --git a/src/features/report/ui/ReportInstagramSection.tsx b/src/features/report/ui/ReportInstagramSection.tsx index f88808f..9c796ed 100644 --- a/src/features/report/ui/ReportInstagramSection.tsx +++ b/src/features/report/ui/ReportInstagramSection.tsx @@ -1,6 +1,6 @@ -import { DiagnosisRow } from "@/components/diagnosis/DiagnosisRow"; +import { DiagnosisRow } from "@/features/report/ui/diagnosis/DiagnosisRow"; import { PageSection } from "@/components/section/PageSection"; -import { MOCK_INSTAGRAM_AUDIT } from "@/features/report/constants/mock_instagram_audit"; +import { MOCK_INSTAGRAM_AUDIT } from "@/features/report/mocks/instagramAudit"; import type { InstagramAudit } from "@/features/report/types/instagramAudit"; import { InstagramAccountCard } from "@/features/report/ui/instagram/InstagramAccountCard"; diff --git a/src/features/report/ui/ReportKpiSection.tsx b/src/features/report/ui/ReportKpiSection.tsx index a0de3b3..d7ac409 100644 --- a/src/features/report/ui/ReportKpiSection.tsx +++ b/src/features/report/ui/ReportKpiSection.tsx @@ -1,5 +1,5 @@ import { PageSection } from "@/components/section/PageSection"; -import { MOCK_KPI_METRICS } from "@/features/report/constants/mock_kpi"; +import { MOCK_KPI_METRICS } from "@/features/report/mocks/kpi"; import type { KpiMetric } from "@/features/report/types/kpiDashboard"; import { KpiMetricsTable } from "@/features/report/ui/kpi/KpiMetricsTable"; import { KpiTransformationCtaCard } from "@/features/report/ui/kpi/KpiTransformationCtaCard"; diff --git a/src/features/report/ui/ReportOtherChannelsSection.tsx b/src/features/report/ui/ReportOtherChannelsSection.tsx index 8b3c0c4..dc88de5 100644 --- a/src/features/report/ui/ReportOtherChannelsSection.tsx +++ b/src/features/report/ui/ReportOtherChannelsSection.tsx @@ -1,6 +1,6 @@ import { PageSection } from "@/components/section/PageSection"; -import { MOCK_OTHER_CHANNELS_REPORT } from "@/features/report/constants/mock_other_channels"; -import type { OtherChannelsReport } from "@/types/otherChannels"; +import { MOCK_OTHER_CHANNELS_REPORT } from "@/features/report/mocks/otherChannels"; +import type { OtherChannelsReport } from "@/features/report/types/otherChannels"; import { OtherChannelsList } from "@/features/report/ui/otherChannels/OtherChannelsList"; import { WebsiteTechAuditBlock } from "@/features/report/ui/otherChannels/WebsiteTechAuditBlock"; diff --git a/src/features/report/ui/ReportOverviewSection.tsx b/src/features/report/ui/ReportOverviewSection.tsx index a3ecc3d..77cf445 100644 --- a/src/features/report/ui/ReportOverviewSection.tsx +++ b/src/features/report/ui/ReportOverviewSection.tsx @@ -1,9 +1,9 @@ -import { MOCK_REPORT_OVERVIEW } from "@/features/report/constants/mock_report_overview"; +import { MOCK_REPORT_OVERVIEW } from "@/features/report/mocks/reportOverview"; import type { ReportOverviewData } from "@/features/report/types/reportOverview"; import { OverviewHeroBlobs } from "@/features/report/ui/overview/OverviewHeroBlobs"; import { OverviewHeroColumn } from "@/features/report/ui/overview/OverviewHeroColumn"; import { OverviewScorePanel } from "@/features/report/ui/overview/OverviewScorePanel"; -import { OVERVIEW_SECTION_BG_CLASS } from "@/features/report/ui/overview/overviewSectionStyles"; +import { OVERVIEW_SECTION_BG_CLASS } from "@/features/report/ui/overview/overviewSectionClasses"; type ReportOverviewSectionProps = { data?: ReportOverviewData; diff --git a/src/features/report/ui/ReportPage.tsx b/src/features/report/ui/ReportPage.tsx deleted file mode 100644 index c4e7891..0000000 --- a/src/features/report/ui/ReportPage.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import { useParams } from "react-router-dom"; -import { useReportSubNav } from "@/features/report/hooks/useReportSubNav"; -import { ReportChannelsSection } from "@/features/report/ui/ReportChannelsSection"; -import { ReportClinicSection } from "@/features/report/ui/ReportClinicSection"; -import { ReportDiagnosisSection } from "@/features/report/ui/ReportDiagnosisSection"; -import { ReportFacebookSection } from "@/features/report/ui/ReportFacebookSection"; -import { ReportInstagramSection } from "@/features/report/ui/ReportInstagramSection"; -import { ReportKpiSection } from "@/features/report/ui/ReportKpiSection"; -import { ReportOtherChannelsSection } from "@/features/report/ui/ReportOtherChannelsSection"; -import { ReportOverviewSection } from "@/features/report/ui/ReportOverviewSection"; -import { ReportRoadmapSection } from "@/features/report/ui/ReportRoadmapSection"; -import { ReportTransformationSection } from "@/features/report/ui/ReportTransformationSection"; -import { ReportYouTubeSection } from "@/features/report/ui/ReportYouTubeSection"; - -export function ReportPage() { - const { id } = useParams<{ id: string }>(); - useReportSubNav(); - - return ( -
-

- Report ID: {id} -

- -
- - - - - - - - - - - -
-
- ); -} diff --git a/src/features/report/ui/ReportRoadmapSection.tsx b/src/features/report/ui/ReportRoadmapSection.tsx index c376c98..c840144 100644 --- a/src/features/report/ui/ReportRoadmapSection.tsx +++ b/src/features/report/ui/ReportRoadmapSection.tsx @@ -1,5 +1,5 @@ import { PageSection } from "@/components/section/PageSection"; -import { MOCK_ROADMAP } from "@/features/report/constants/mock_roadmap"; +import { MOCK_ROADMAP } from "@/features/report/mocks/roadmap"; import type { RoadmapMonth } from "@/features/report/types/roadmap"; import { RoadmapMonthsGrid } from "@/features/report/ui/roadmap/RoadmapMonthsGrid"; diff --git a/src/features/report/ui/ReportTransformationSection.tsx b/src/features/report/ui/ReportTransformationSection.tsx index 0c88b83..c935fee 100644 --- a/src/features/report/ui/ReportTransformationSection.tsx +++ b/src/features/report/ui/ReportTransformationSection.tsx @@ -1,5 +1,5 @@ import { PageSection } from "@/components/section/PageSection"; -import { MOCK_TRANSFORMATION } from "@/features/report/constants/mock_transformation"; +import { MOCK_TRANSFORMATION } from "@/features/report/mocks/transformation"; import type { TransformationProposal } from "@/features/report/types/transformationProposal"; import { TransformationTabbedView } from "@/features/report/ui/transformation/TransformationTabbedView"; diff --git a/src/features/report/ui/ReportYouTubeSection.tsx b/src/features/report/ui/ReportYouTubeSection.tsx index 4c64914..eca4e52 100644 --- a/src/features/report/ui/ReportYouTubeSection.tsx +++ b/src/features/report/ui/ReportYouTubeSection.tsx @@ -1,7 +1,7 @@ import { TagChipList } from "@/components/chip/TagChipList"; -import { DiagnosisRow } from "@/components/diagnosis/DiagnosisRow"; +import { DiagnosisRow } from "@/features/report/ui/diagnosis/DiagnosisRow"; import { PageSection } from "@/components/section/PageSection"; -import { MOCK_YOUTUBE_AUDIT } from "@/features/report/constants/mock_youtube_audit"; +import { MOCK_YOUTUBE_AUDIT } from "@/features/report/mocks/youtubeAudit"; import type { YouTubeAudit } from "@/features/report/types/youtubeAudit"; import { YouTubeChannelInfoCard } from "@/features/report/ui/youtube/YouTubeChannelInfoCard"; import { YouTubeMetricsGrid } from "@/features/report/ui/youtube/YouTubeMetricsGrid"; diff --git a/src/features/report/ui/clinic/clinicSnapshotStatRows.tsx b/src/features/report/ui/clinic/clinicSnapshotStatRows.tsx index 50c9f83..46a012f 100644 --- a/src/features/report/ui/clinic/clinicSnapshotStatRows.tsx +++ b/src/features/report/ui/clinic/clinicSnapshotStatRows.tsx @@ -6,7 +6,7 @@ import CalendarIcon from "@/assets/report/calendar.svg?react"; import GlobeIcon from "@/assets/report/globe.svg?react"; import MapPinIcon from "@/assets/report/map-pin.svg?react"; import type { ClinicSnapshot } from "@/features/report/types/clinicSnapshot"; -import { formatCompactNumber } from "@/lib/formatNumber"; +import { formatCompactNumber } from "@/utils/formatNumber"; export type ClinicStatRow = { label: string; diff --git a/src/components/diagnosis/DiagnosisRow.tsx b/src/features/report/ui/diagnosis/DiagnosisRow.tsx similarity index 100% rename from src/components/diagnosis/DiagnosisRow.tsx rename to src/features/report/ui/diagnosis/DiagnosisRow.tsx diff --git a/src/features/report/ui/diagnosis/ProblemDiagnosisCard.tsx b/src/features/report/ui/diagnosis/ProblemDiagnosisCard.tsx index 2e4337b..a465ef5 100644 --- a/src/features/report/ui/diagnosis/ProblemDiagnosisCard.tsx +++ b/src/features/report/ui/diagnosis/ProblemDiagnosisCard.tsx @@ -1,6 +1,6 @@ import AlertCircleIcon from "@/assets/icons/alert-circle.svg?react"; import type { DiagnosisItem } from "@/features/report/types/diagnosis"; -import { problemDiagnosisSeverityDotClass } from "@/features/report/ui/diagnosis/severityDotClass"; +import { problemDiagnosisSeverityDotClass } from "@/features/report/ui/diagnosis/severityDotClasses"; export type ProblemDiagnosisCardProps = { item: DiagnosisItem; diff --git a/src/features/report/ui/diagnosis/severityDotClass.ts b/src/features/report/ui/diagnosis/severityDotClasses.ts similarity index 100% rename from src/features/report/ui/diagnosis/severityDotClass.ts rename to src/features/report/ui/diagnosis/severityDotClasses.ts diff --git a/src/features/report/ui/facebook/FacebookPageCard.tsx b/src/features/report/ui/facebook/FacebookPageCard.tsx index 918ebdb..0635074 100644 --- a/src/features/report/ui/facebook/FacebookPageCard.tsx +++ b/src/features/report/ui/facebook/FacebookPageCard.tsx @@ -8,9 +8,9 @@ import ImageIcon from "@/assets/report/image.svg?react"; import Link2Icon from "@/assets/report/link-2.svg?react"; import MessageCircleIcon from "@/assets/report/message-circle.svg?react"; import type { FacebookPage } from "@/features/report/types/facebookAudit"; -import { facebookLangBadgeClass } from "@/features/report/ui/facebook/langBadgeClass"; -import { formatCompactNumber } from "@/lib/formatNumber"; -import { safeUrl } from "@/lib/safeUrl"; +import { facebookLangBadgeClass } from "@/features/report/ui/facebook/langBadgeClasses"; +import { formatCompactNumber } from "@/utils/formatNumber"; +import { safeUrl } from "@/utils/safeUrl"; export type FacebookPageCardProps = { page: FacebookPage; diff --git a/src/features/report/ui/facebook/langBadgeClass.ts b/src/features/report/ui/facebook/langBadgeClasses.ts similarity index 100% rename from src/features/report/ui/facebook/langBadgeClass.ts rename to src/features/report/ui/facebook/langBadgeClasses.ts diff --git a/src/features/report/ui/instagram/InstagramAccountCard.tsx b/src/features/report/ui/instagram/InstagramAccountCard.tsx index 866faca..60ae0e8 100644 --- a/src/features/report/ui/instagram/InstagramAccountCard.tsx +++ b/src/features/report/ui/instagram/InstagramAccountCard.tsx @@ -3,9 +3,9 @@ import ChannelInstagramIcon from "@/assets/icons/channel-instagram.svg?react"; import ExternalLinkIcon from "@/assets/icons/external-link.svg?react"; import { TagChipList } from "@/components/chip/TagChipList"; import type { InstagramAccount } from "@/features/report/types/instagramAudit"; -import { instagramLangBadgeClass } from "@/features/report/ui/instagram/langBadgeClass"; -import { formatCompactNumber } from "@/lib/formatNumber"; -import { safeUrl } from "@/lib/safeUrl"; +import { instagramLangBadgeClass } from "@/features/report/ui/instagram/langBadgeClasses"; +import { formatCompactNumber } from "@/utils/formatNumber"; +import { safeUrl } from "@/utils/safeUrl"; export type InstagramAccountCardProps = { account: InstagramAccount; diff --git a/src/features/report/ui/instagram/langBadgeClass.ts b/src/features/report/ui/instagram/langBadgeClasses.ts similarity index 100% rename from src/features/report/ui/instagram/langBadgeClass.ts rename to src/features/report/ui/instagram/langBadgeClasses.ts diff --git a/src/components/channel/OtherChannelRow.tsx b/src/features/report/ui/otherChannels/OtherChannelRow.tsx similarity index 94% rename from src/components/channel/OtherChannelRow.tsx rename to src/features/report/ui/otherChannels/OtherChannelRow.tsx index dbb2c32..24efdcf 100644 --- a/src/components/channel/OtherChannelRow.tsx +++ b/src/features/report/ui/otherChannels/OtherChannelRow.tsx @@ -2,8 +2,8 @@ import ExternalLinkIcon from "@/assets/icons/external-link.svg?react"; import CheckCircleIcon from "@/assets/report/check-circle.svg?react"; import HelpCircleIcon from "@/assets/report/help-circle.svg?react"; import XCircleIcon from "@/assets/report/x-circle.svg?react"; -import type { OtherChannelStatus } from "@/types/otherChannels"; -import { safeUrl } from "@/lib/safeUrl"; +import type { OtherChannelStatus } from "@/features/report/types/otherChannels"; +import { safeUrl } from "@/utils/safeUrl"; export type OtherChannelRowProps = { name: string; diff --git a/src/features/report/ui/otherChannels/OtherChannelsList.tsx b/src/features/report/ui/otherChannels/OtherChannelsList.tsx index e9ad3ef..9b5ccc0 100644 --- a/src/features/report/ui/otherChannels/OtherChannelsList.tsx +++ b/src/features/report/ui/otherChannels/OtherChannelsList.tsx @@ -1,5 +1,5 @@ -import { OtherChannelRow } from "@/components/channel/OtherChannelRow"; -import type { OtherChannel } from "@/types/otherChannels"; +import { OtherChannelRow } from "@/features/report/ui/otherChannels/OtherChannelRow"; +import type { OtherChannel } from "@/features/report/types/otherChannels"; export type OtherChannelsListProps = { channels: OtherChannel[]; diff --git a/src/features/report/ui/otherChannels/WebsiteTechAuditBlock.tsx b/src/features/report/ui/otherChannels/WebsiteTechAuditBlock.tsx index 09735b0..67b7e2b 100644 --- a/src/features/report/ui/otherChannels/WebsiteTechAuditBlock.tsx +++ b/src/features/report/ui/otherChannels/WebsiteTechAuditBlock.tsx @@ -2,7 +2,7 @@ import AlertCircleIcon from "@/assets/icons/alert-circle.svg?react"; import CheckCircleIcon from "@/assets/report/check-circle.svg?react"; import GlobeIcon from "@/assets/report/globe.svg?react"; import { PixelInstallCard } from "@/components/card/PixelInstallCard"; -import type { WebsiteAudit } from "@/types/otherChannels"; +import type { WebsiteAudit } from "@/features/report/types/otherChannels"; export type WebsiteTechAuditBlockProps = { website: WebsiteAudit; diff --git a/src/features/report/ui/overview/OverviewMetaChips.tsx b/src/features/report/ui/overview/OverviewMetaChips.tsx index 20a9740..bc16b51 100644 --- a/src/features/report/ui/overview/OverviewMetaChips.tsx +++ b/src/features/report/ui/overview/OverviewMetaChips.tsx @@ -1,7 +1,7 @@ import CalendarIcon from "@/assets/report/calendar.svg?react"; import GlobeIcon from "@/assets/report/globe.svg?react"; import MapPinIcon from "@/assets/report/map-pin.svg?react"; -import { OVERVIEW_META_CHIP_CLASS } from "@/features/report/ui/overview/overviewSectionStyles"; +import { OVERVIEW_META_CHIP_CLASS } from "@/features/report/ui/overview/overviewSectionClasses"; export type OverviewMetaChipsProps = { date: string; diff --git a/src/features/report/ui/overview/overviewSectionStyles.ts b/src/features/report/ui/overview/overviewSectionClasses.ts similarity index 100% rename from src/features/report/ui/overview/overviewSectionStyles.ts rename to src/features/report/ui/overview/overviewSectionClasses.ts diff --git a/src/components/compare/ComparisonRow.tsx b/src/features/report/ui/transformation/ComparisonRow.tsx similarity index 100% rename from src/components/compare/ComparisonRow.tsx rename to src/features/report/ui/transformation/ComparisonRow.tsx diff --git a/src/features/report/ui/transformation/NewChannelProposalsTable.tsx b/src/features/report/ui/transformation/NewChannelProposalsTable.tsx index 0d41f64..813b627 100644 --- a/src/features/report/ui/transformation/NewChannelProposalsTable.tsx +++ b/src/features/report/ui/transformation/NewChannelProposalsTable.tsx @@ -1,5 +1,5 @@ import type { NewChannelProposal } from "@/features/report/types/transformationProposal"; -import { newChannelPriorityClass } from "@/features/report/ui/transformation/newChannelPriorityClass"; +import { newChannelPriorityClass } from "@/features/report/ui/transformation/newChannelPriorityClasses"; export type NewChannelProposalsTableProps = { rows: NewChannelProposal[]; diff --git a/src/features/report/ui/transformation/TransformationTabbedView.tsx b/src/features/report/ui/transformation/TransformationTabbedView.tsx index 9cc9478..54c8a2c 100644 --- a/src/features/report/ui/transformation/TransformationTabbedView.tsx +++ b/src/features/report/ui/transformation/TransformationTabbedView.tsx @@ -1,5 +1,5 @@ import { useState } from "react"; -import { ComparisonRow } from "@/components/compare/ComparisonRow"; +import { ComparisonRow } from "@/features/report/ui/transformation/ComparisonRow"; import type { TransformationProposal } from "@/features/report/types/transformationProposal"; import { NewChannelProposalsTable } from "@/features/report/ui/transformation/NewChannelProposalsTable"; import { PlatformStrategyCard } from "@/features/report/ui/transformation/PlatformStrategyCard"; diff --git a/src/features/report/ui/transformation/newChannelPriorityClass.ts b/src/features/report/ui/transformation/newChannelPriorityClasses.ts similarity index 100% rename from src/features/report/ui/transformation/newChannelPriorityClass.ts rename to src/features/report/ui/transformation/newChannelPriorityClasses.ts diff --git a/src/features/report/ui/youtube/YouTubeChannelInfoCard.tsx b/src/features/report/ui/youtube/YouTubeChannelInfoCard.tsx index d01c710..30cb067 100644 --- a/src/features/report/ui/youtube/YouTubeChannelInfoCard.tsx +++ b/src/features/report/ui/youtube/YouTubeChannelInfoCard.tsx @@ -1,7 +1,7 @@ import ChannelYoutubeIcon from "@/assets/icons/channel-youtube.svg?react"; import ExternalLinkIcon from "@/assets/icons/external-link.svg?react"; import type { YouTubeAudit } from "@/features/report/types/youtubeAudit"; -import { safeUrl } from "@/lib/safeUrl"; +import { safeUrl } from "@/utils/safeUrl"; export type YouTubeChannelInfoCardProps = { data: YouTubeAudit; diff --git a/src/features/report/ui/youtube/YouTubeMetricsGrid.tsx b/src/features/report/ui/youtube/YouTubeMetricsGrid.tsx index b332eff..66d14ad 100644 --- a/src/features/report/ui/youtube/YouTubeMetricsGrid.tsx +++ b/src/features/report/ui/youtube/YouTubeMetricsGrid.tsx @@ -4,7 +4,7 @@ import VideoIcon from "@/assets/icons/video.svg?react"; import UsersIcon from "@/assets/icons/users.svg?react"; import { MetricCard } from "@/components/card/MetricCard"; import type { YouTubeAudit } from "@/features/report/types/youtubeAudit"; -import { formatCompactNumber } from "@/lib/formatNumber"; +import { formatCompactNumber } from "@/utils/formatNumber"; export type YouTubeMetricsGridProps = { data: YouTubeAudit; diff --git a/src/layouts/PageNavigator.tsx b/src/layouts/PageNavigator.tsx index 4364820..e815e48 100644 --- a/src/layouts/PageNavigator.tsx +++ b/src/layouts/PageNavigator.tsx @@ -68,7 +68,7 @@ export function PageNavigator() { {/* 이전 페이지 */}