diff --git a/app/data/brand.ts b/app/data/brand.ts
index 0f5afbc..3a0e344 100644
--- a/app/data/brand.ts
+++ b/app/data/brand.ts
@@ -20,3 +20,20 @@ export const BRAND_DATA: Brand[] = [
{ id: 5, name: "디스이즈네버댓", matchRate: 88, tags: ["스트릿", "캐주얼", "트렌디"], isLiked: true, category: "FASHION" },
{ id: 6, name: "커버낫", matchRate: 82, tags: ["아메리칸 캐주얼", "빈티지", "유니섹스"], isLiked: false, category: "FASHION" },
];
+
+// 캠페인 보기에서 사용하는 브랜드
+export interface BrandDetail {
+ brandName: string;
+ brandTag: string[];
+ brandDescription: string;
+ brandMatchingRatio: number;
+ brandIsLiked: boolean;
+ brandCategory: string[];
+}
+
+export interface BrandResponse {
+ isSuccess: boolean;
+ code: string;
+ message: string;
+ result: BrandDetail[];
+}
diff --git a/app/routes/business/calendar/calendar-content.tsx b/app/routes/business/calendar/calendar-content.tsx
index e8b9930..d1f8722 100644
--- a/app/routes/business/calendar/calendar-content.tsx
+++ b/app/routes/business/calendar/calendar-content.tsx
@@ -1,4 +1,5 @@
import { useState, useEffect } from "react";
+import { useNavigate } from "react-router-dom";
import { getMyCollaborations } from "./api/calendar";
import type { CampaignCollaboration } from "./api/calendar";
import FilterBottomSheet from "../components/FilterBottomSheet";
@@ -13,6 +14,7 @@ import EmptyState from "../components/EmptyState";
export default function CalendarContent() {
+ const navigate = useNavigate();
const [mainTab, setMainTab] = useState<"collaboration" | "matching">("collaboration");
const [activeTab, setActiveTab] = useState<"thisMonth" | "today">("thisMonth");
const [matchingSubTab, setMatchingSubTab] = useState<"sent" | "received">("sent");
@@ -54,6 +56,10 @@ export default function CalendarContent() {
return item.startDate.includes(currentMonthStr) || item.endDate.includes(currentMonthStr);
});
+ const handleCardClick = (type: "sent" | "received") => {
+ navigate(`/business/proposal?type=${type}`);
+ };
+
return (
{/* 탭 네비게이션 */}
@@ -156,17 +162,41 @@ export default function CalendarContent() {
{matchingSubTab === "sent" ? (
<>
-
-
-
-
+ handleCardClick("sent")} // 4. 핸들러 연결
+ />
+ handleCardClick("sent")}
+ />
+ handleCardClick("sent")}
+ />
+ handleCardClick("sent")}
+ />
>
) : (
<>
-
-
-
-
+ handleCardClick("received")} // 4. 핸들러 연결
+ />
+ handleCardClick("received")}
+ />
+ handleCardClick("received")}
+ />
+ handleCardClick("received")}
+ />
>
)}
diff --git a/app/routes/business/components/CampaignBrandCard.tsx b/app/routes/business/components/CampaignBrandCard.tsx
index aac6572..aedd1ce 100644
--- a/app/routes/business/components/CampaignBrandCard.tsx
+++ b/app/routes/business/components/CampaignBrandCard.tsx
@@ -3,13 +3,18 @@ import chatIcon from "../../../assets/chat-icon.svg";
import arrowRightIcon from "../../../assets/icon/arrow-right.svg";
interface CampaignBrandCardProps {
- showChatSection?: boolean; // 채팅 섹션 표시 여부
+ showChatSection?: boolean;
statusText?: string; // '보낸 제안' 또는 '검토 중'
+ brandName?: string;
+ brandTags?: string[];
+
}
export default function CampaignBrandCard({
showChatSection = true,
- statusText = "보낸 제안"
+ statusText = "보낸 제안",
+ brandName,
+ brandTags
}: CampaignBrandCardProps) {
return (
@@ -27,11 +32,15 @@ export default function CampaignBrandCard({
-
비플레인
+
+ {brandName || "브랜드명"}
+
- #저자극 #천연재료 #민감성피부
+ {brandTags && brandTags.length > 0
+ ? brandTags.map(tag => `#${tag}`).join(" ")
+ : "#태그정보없음"}
diff --git a/app/routes/business/components/MatchingCard.tsx b/app/routes/business/components/MatchingCard.tsx
index 97fb2fa..62868e5 100644
--- a/app/routes/business/components/MatchingCard.tsx
+++ b/app/routes/business/components/MatchingCard.tsx
@@ -6,6 +6,7 @@ interface MatchingCardProps {
status: "매칭" | "검토 중" | "거절";
date: string;
actionLabel: string;
+ onClick?: () => void;
}
export default function MatchingCard({
@@ -13,6 +14,7 @@ export default function MatchingCard({
status,
date,
actionLabel,
+ onClick,
}: MatchingCardProps) {
// 상태에 따른 텍스트 컬러
const getStatusStyle = () => {
@@ -53,7 +55,10 @@ export default function MatchingCard({
{/* 제안 보기 버튼 */}
-