Skip to content

Commit 5c451bc

Browse files
authored
Merge pull request #203 from RealMatchTeam/style/matchinglist-and-test
[fix] 브랜드/캠페인 페이지 버그 수정
2 parents 0332908 + c76536e commit 5c451bc

4 files changed

Lines changed: 29 additions & 15 deletions

File tree

app/routes/brand-detail/brand-detail-content.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -520,7 +520,11 @@ export default function BrandDetailContent({ data }: Props) {
520520

521521
<OngoingCampaignSection
522522
campaigns={ongoingCampaigns}
523-
onMore={() => {}}
523+
onMore={() => {
524+
const domain = searchParams.get("domain");
525+
const categoryParam = domain === "fashion" ? "FASHION" : "BEAUTY";
526+
navigate(`/matching/brand?type=${categoryParam}&search=${encodeURIComponent(data.name)}`);
527+
}}
524528
onCampaignClick={goOngoingCampaignDetail}
525529
onLikeToggle={handleOngoingLikeToggle}
526530
/>

app/routes/campaign-detail/campaign-detail.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -502,7 +502,11 @@ export default function CampaignDetailContent({
502502
<OngoingCampaignSection
503503
campaigns={ongoingCampaigns}
504504
brandLogoUrl={brandData.logoImageUrl}
505-
onMore={() => {}}
505+
onMore={() => {
506+
const domain = searchParams.get("domain");
507+
const categoryParam = domain === "fashion" ? "FASHION" : "BEAUTY";
508+
navigate(`/matching/campaign?type=${categoryParam}&search=${encodeURIComponent(brandData.name)}`);
509+
}}
506510
onCampaignClick={goOngoingCampaignDetail}
507511
onLikeToggle={handleOngoingLikeToggle}
508512
/>

app/routes/matching/brand/brand-content.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ export default function BrandContent() {
2626
const [selectedTags, setSelectedTags] = useState<string[]>([]);
2727

2828
// 검색 상태
29-
const [searchKeyword, setSearchKeyword] = useState("");
29+
const [searchKeyword, setSearchKeyword] = useState(searchParams.get("search") || "");
3030
const deferredKeyword = useDeferredValue(searchKeyword);
3131

3232
// 정렬 옵션 매핑
@@ -126,7 +126,6 @@ export default function BrandContent() {
126126
return category === "BEAUTY" ? "뷰티 필터" : "패션 필터";
127127
};
128128

129-
// 로딩 중
130129
if (isLoading) {
131130
return (
132131
<div className="flex items-center justify-center h-full" style={{ background: "linear-gradient(180deg, #F6F6FF 0%, #F3F3FA 48.08%, #E8E8FB 100%)" }}>

app/routes/matching/campaign/campaign-content.tsx

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ export default function CampaignContent() {
2727
const [selectedTags, setSelectedTags] = useState<string[]>([]);
2828

2929
// 검색 상태
30-
const [searchKeyword, setSearchKeyword] = useState("");
30+
const [searchKeyword, setSearchKeyword] = useState(searchParams.get("search") || "");
3131
const deferredKeyword = useDeferredValue(searchKeyword);
3232

3333
// 정렬 옵션 매핑
@@ -49,14 +49,14 @@ export default function CampaignContent() {
4949
hasNextPage,
5050
isFetchingNextPage
5151
} = useInfiniteQuery({
52-
queryKey: ["matching-campaigns", category, sortOption, selectedTags, deferredKeyword],
52+
queryKey: ["matching-campaigns", category, sortOption, selectedTags],
5353
queryFn: async ({ pageParam = 0 }) => {
5454
const tagsToSend = selectedTags.length > 0 ? selectedTags : await getTagNamesByCategory();
5555
const response = await getMatchingCampaigns(
5656
sortBy,
5757
category,
5858
tagsToSend,
59-
deferredKeyword || undefined,
59+
undefined,
6060
pageParam,
6161
20
6262
);
@@ -83,6 +83,17 @@ export default function CampaignContent() {
8383
return data?.pages.flatMap(page => page.campaigns) || [];
8484
}, [data]);
8585

86+
// 검색어 필터링
87+
const filteredCampaigns = useMemo(() => {
88+
return campaigns.filter(campaign => {
89+
const matchesSearch = deferredKeyword === "" ||
90+
campaign.brandName?.toLowerCase().includes(deferredKeyword.toLowerCase()) ||
91+
campaign.campaignName?.toLowerCase().includes(deferredKeyword.toLowerCase()) ||
92+
campaign.title?.toLowerCase().includes(deferredKeyword.toLowerCase());
93+
return matchesSearch;
94+
});
95+
}, [campaigns, deferredKeyword]);
96+
8697
// 바텀탭 숨기기
8798
useHideBottomTab(isFilterOpen);
8899

@@ -91,7 +102,7 @@ export default function CampaignContent() {
91102
};
92103

93104
const toggleLike = async (id: number) => {
94-
const queryKey = ["matching-campaigns", category, sortOption, selectedTags, deferredKeyword];
105+
const queryKey = ["matching-campaigns", category, sortOption, selectedTags];
95106

96107
// 낙관적 업데이트
97108
queryClient.setQueryData(queryKey, (oldData: { pages: { campaigns: MatchingCampaign[] }[] } | undefined) => {
@@ -133,16 +144,13 @@ export default function CampaignContent() {
133144
setSortApplied(true);
134145
};
135146

136-
137-
138147
const getFilterButtonLabel = () => {
139148
if (selectedTags.length > 0) {
140149
return selectedTags.slice(0, 2).join(", ") + (selectedTags.length > 2 ? "..." : "");
141150
}
142151
return "콘텐츠 필터";
143152
};
144153

145-
// 로딩 중
146154
if (isLoading) {
147155
return (
148156
<div className="flex items-center justify-center h-full" style={{ background: "linear-gradient(180deg, #F6F6FF 0%, #F3F3FA 48.08%, #E8E8FB 100%)" }}>
@@ -151,8 +159,8 @@ export default function CampaignContent() {
151159
);
152160
}
153161

154-
// 매칭 결과가 없거나 에러
155-
if (error || (campaigns.length === 0 && !isLoading)) {
162+
// 매칭 검사를 안한 경우
163+
if (error || (campaigns.length === 0 && !isLoading && !deferredKeyword)) {
156164
if (error) console.error("Failed to fetch matching campaigns:", error);
157165

158166
return <EmptyMatchState
@@ -163,7 +171,6 @@ export default function CampaignContent() {
163171
/>
164172
}
165173

166-
// 매칭 결과가 있을 때
167174
return (
168175
<div className="flex flex-col h-full" style={{ background: "linear-gradient(180deg, #F6F6FF 0%, #F3F3FA 48.08%, #E8E8FB 100%)" }}>
169176
{/* 뷰티/패션 필터 & 검색창 */}
@@ -196,7 +203,7 @@ export default function CampaignContent() {
196203

197204
{/* 캠페인 리스트 */}
198205
<div className="space-y-3 pb-20">
199-
{campaigns.map((campaign) => (
206+
{filteredCampaigns.map((campaign) => (
200207
<CampaignCard
201208
key={campaign.id}
202209
brandName={campaign.brandName}

0 commit comments

Comments
 (0)