diff --git a/app/routes/business/components/CampaignBrandCard.tsx b/app/routes/business/components/CampaignBrandCard.tsx index d709672..ade6281 100644 --- a/app/routes/business/components/CampaignBrandCard.tsx +++ b/app/routes/business/components/CampaignBrandCard.tsx @@ -3,18 +3,18 @@ import chatIcon from "../../../assets/chat-icon.svg"; import arrowRightIcon from "../../../assets/icon/arrow-right.svg"; interface CampaignBrandCardProps { - showChatSection?: boolean; - statusText?: string; - brandName?: string; - brandTags?: string[]; - brandImageUrl?: string; + showChatSection?: boolean; + statusText?: string; + brandName?: string; + brandTags?: string[]; + brandImageUrl?: string; matchingRate?: number; brandId?: number | string; category?: string; } -export default function CampaignBrandCard({ - showChatSection, +export default function CampaignBrandCard({ + showChatSection, statusText, brandName, brandTags, @@ -23,9 +23,9 @@ export default function CampaignBrandCard({ brandId, category }: CampaignBrandCardProps) { - const navigate = useNavigate(); + const navigate = useNavigate(); const handleBrandClick = (e: React.MouseEvent) => { - e.stopPropagation(); + e.stopPropagation(); if (brandId && category) { navigate(`/brand?brandId=${brandId}&domain=${category}`); } else { @@ -41,13 +41,12 @@ export default function CampaignBrandCard({
{brandName}
-

- {brandName || "브랜드명"} + {brandName || "리얼매치"}

-

- {brandTags && brandTags.length > 0 - ? brandTags.map(tag => `#${tag}`).join(" ") - : "#태그정보없음"} + {brandTags && brandTags.length > 0 + ? brandTags.map(tag => `#${tag}`).join(" ") + : "#정밀매칭 #원스톱협업 #쌍방향제안"}

-
- 매칭률 - {matchingRate || 0}% -
+ {matchingRate === 0 ? ( +
+ 광고 +
+ ) : ( +
+ 매칭률 + {matchingRate || 0}% +
+ )} {statusText}
diff --git a/app/routes/business/proposal/sent-proposal-content.tsx b/app/routes/business/proposal/sent-proposal-content.tsx index 8edb810..0d19d7a 100644 --- a/app/routes/business/proposal/sent-proposal-content.tsx +++ b/app/routes/business/proposal/sent-proposal-content.tsx @@ -17,6 +17,7 @@ import arrowRightIcon from "../../../assets/icon/arrow-right.svg"; import arrowPurpleIcon from "../../../assets/arrow-purple.svg"; import profileIcon from "../../../assets/icon-profile.svg"; import ConfirmModal from "../../../components/common/ConfirmModal"; +import adRealmatchLogo from "../../../assets/ad/ad-realmatch-logo.png"; export default function ProposalContent() { const [searchParams] = useSearchParams(); @@ -54,7 +55,16 @@ export default function ProposalContent() { const proposalResult = await getProposalDetail(proposalId); setData(proposalResult); - if (proposalResult.brandId) { + if (proposalResult.brandId === 0) { + // brandId가 0이면 리얼매치 광고로 하드코딩 + setBrand({ + brandId: 0, + brandName: "리얼매치", + brandTags: ["정밀매칭", "원스톱협업", "쌍방향제안"], + brandImageUrl: adRealmatchLogo, + matchingRate: 0 + }); + } else if (proposalResult.brandId) { const brandResult = await getBrandSummary(proposalResult.brandId); setBrand(brandResult); } @@ -184,7 +194,7 @@ export default function ProposalContent() {
- {data.productId} + {data.productId !== 0 ? data.productId : ""} arrow
diff --git a/app/routes/home/components/BannerCarousel.tsx b/app/routes/home/components/BannerCarousel.tsx index ec3739d..388df06 100644 --- a/app/routes/home/components/BannerCarousel.tsx +++ b/app/routes/home/components/BannerCarousel.tsx @@ -28,8 +28,10 @@ const fashionBanners: BannerItem[] = [ export default function BannerCarousel({ category, + loading, }: { category: CategoryKey; + loading?: boolean; }) { const banners = category === "beauty" ? beautyBanners : fashionBanners; const displayBanners = [banners[banners.length - 1], ...banners, banners[0]]; @@ -79,6 +81,12 @@ export default function BannerCarousel({ } }, [isSilentJumping]); + if (loading) { + return ( +
+ ); + } + const handleStart = (clientX: number) => { stop(); setIsDragging(true); diff --git a/app/routes/home/home-after-match.tsx b/app/routes/home/home-after-match.tsx index 83806de..6f36108 100644 --- a/app/routes/home/home-after-match.tsx +++ b/app/routes/home/home-after-match.tsx @@ -481,7 +481,7 @@ export default function HomeAfterMatchPage() { return (
- + @@ -561,46 +561,46 @@ export default function HomeAfterMatchPage() {
{homeCoreLoading ? Array.from({ length: 4 }).map((_, i) => ( -
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
- )) +
+ )) : campaigns.map((campaign, i) => { - const safeCampaignId = getCampaignId(campaign); - if (!safeCampaignId) return null; - - return ( - goCampaignDetail(campaign)} - onLikeToggle={handleCampaignLikeToggle} - /> - ); - })} + const safeCampaignId = getCampaignId(campaign); + if (!safeCampaignId) return null; + + return ( + goCampaignDetail(campaign)} + onLikeToggle={handleCampaignLikeToggle} + /> + ); + })}
{profileModel && ( @@ -623,46 +623,46 @@ export default function HomeAfterMatchPage() {
{homeCoreLoading ? Array.from({ length: 4 }).map((_, i) => ( -
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
- )) +
+ )) : popularCampaigns.map((campaign, i) => { - const safeCampaignId = getCampaignId(campaign); - if (!safeCampaignId) return null; - - return ( - goCampaignDetail(campaign)} - onLikeToggle={handleCampaignLikeToggle} - /> - ); - })} + const safeCampaignId = getCampaignId(campaign); + if (!safeCampaignId) return null; + + return ( + goCampaignDetail(campaign)} + onLikeToggle={handleCampaignLikeToggle} + /> + ); + })}
diff --git a/app/routes/matching/suggest/create/components/SelectBottomSheet.tsx b/app/routes/matching/suggest/create/components/SelectBottomSheet.tsx index bd9ee5f..1dde87c 100644 --- a/app/routes/matching/suggest/create/components/SelectBottomSheet.tsx +++ b/app/routes/matching/suggest/create/components/SelectBottomSheet.tsx @@ -74,8 +74,9 @@ function SelectBottomSheetInner({