Skip to content

Commit 1547071

Browse files
committed
refactor: 캠페인 신규 제안하기 brandId 하드 코딩 버그 수정
1 parent 3818571 commit 1547071

6 files changed

Lines changed: 35 additions & 181 deletions

File tree

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

Lines changed: 0 additions & 159 deletions
This file was deleted.

app/routes/business/campaign/route.tsx

Lines changed: 0 additions & 5 deletions
This file was deleted.

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,7 @@ export default function CampaignDetailContent({
334334

335335
if (!campaign) return;
336336

337-
const brandIdNum = Number(brandData.id);
337+
const brandIdNum = Number(searchParams.get("brandId"));
338338
if (!Number.isFinite(brandIdNum) || brandIdNum < 0) return;
339339

340340
const domainParam = searchParams.get("domain");

app/routes/chat/resuggest/resuggest-content.tsx

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -127,18 +127,19 @@ export default function ReSuggestContent() {
127127
const usageScopeOptions = USAGE_RANGE_TAGS.map((t) => ({ value: String(t.id), label: t.name }));
128128

129129
const sponsorProductOptions = useMemo(() => {
130-
const baseOptions = proposalData?.product && proposalData.product !== "0"
131-
? [{ value: proposalData.product, label: proposalData.product }]
132-
: (proposalData?.products ?? [])
133-
.filter((p) => p.id && p.name && String(p.id) !== "0")
134-
.map((p) => ({ value: String(p.id), label: p.name }));
130+
const baseOptions = (proposalData?.products ?? [])
131+
.filter((p) => p.id && p.name && String(p.id) !== "0" && p.name !== "0")
132+
.map((p) => ({ value: String(p.id), label: p.name }));
133+
134+
if (proposalData?.product && proposalData.product !== "0" && !baseOptions.find(opt => opt.label === proposalData.product)) {
135+
baseOptions.unshift({ value: proposalData.product, label: proposalData.product });
136+
}
135137

136-
// formValues.sponsorProduct 배열에 있는데 options에 없는 항목들 추가 (0 제외)
137138
const missingOptions = (formValues.sponsorProduct || [])
138139
.filter(sp => sp !== "0" && !baseOptions.find(opt => opt.value === sp))
139140
.map(sp => ({ value: sp, label: sp }));
140141

141-
return [...missingOptions, ...baseOptions];
142+
return [...baseOptions, ...missingOptions];
142143
}, [proposalData, formValues.sponsorProduct]);
143144

144145
// ID 배열로 label들 찾기 헬퍼 함수
@@ -171,8 +172,13 @@ export default function ReSuggestContent() {
171172
return;
172173
}
173174

175+
if (!proposalData?.brandId) {
176+
toast.error("브랜드 정보가 없습니다. 다시 시도해주세요.");
177+
return;
178+
}
179+
174180
const requestData = {
175-
brandId: proposalData?.brandId || 1,
181+
brandId: proposalData.brandId,
176182
creatorId: Number(userId),
177183
campaignId: proposalData?.campaignId || null,
178184
campaignName: formData.campaignName || "",

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

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,6 @@ export default function CreateCampaignContent() {
105105
}, []);
106106

107107
useEffect(() => {
108-
// 신규/기존 모두 폼 초기화 (기존 제안도 빈 폼으로 시작)
109108
reset(defaultCampaignFormValues);
110109
}, [type, reset]);
111110

@@ -122,13 +121,21 @@ export default function CreateCampaignContent() {
122121
const usageScopeOptions = toOptions(USAGE_RANGE_TAGS);
123122

124123
const sponsorProductOptions = useMemo(() => {
125-
// 사용자가 직접 입력한 협찬품 항목만 표시
126-
const customOptions = (formValues.sponsorProduct || [])
127-
.filter(sp => sp !== "0")
124+
// 이전 페이지에서 받아온 협찬품 목록 표시
125+
const baseOptions = (proposalData?.products ?? [])
126+
.filter((p) => p.id && p.name && String(p.id) !== "0" && p.name !== "0")
127+
.map((p) => ({ value: String(p.id), label: p.name }));
128+
129+
if (proposalData?.product && proposalData.product !== "0" && !baseOptions.find(opt => opt.label === proposalData.product)) {
130+
baseOptions.unshift({ value: proposalData.product, label: proposalData.product });
131+
}
132+
133+
const missingOptions = (formValues.sponsorProduct || [])
134+
.filter(sp => sp !== "0" && !baseOptions.find(opt => opt.value === sp))
128135
.map(sp => ({ value: sp, label: sp }));
129136

130-
return customOptions;
131-
}, [formValues.sponsorProduct]);
137+
return [...baseOptions, ...missingOptions];
138+
}, [proposalData, formValues.sponsorProduct]);
132139

133140
// ID 배열로 label들 찾기 헬퍼 함수
134141
const findLabels = (options: { value: string; label: string }[], values?: string[]) => {
@@ -161,7 +168,12 @@ export default function CreateCampaignContent() {
161168

162169
const brandId = brandIdParam
163170
? Number(brandIdParam)
164-
: proposalData?.brandId || 1;
171+
: proposalData?.brandId;
172+
173+
if (!brandId) {
174+
toast.error("브랜드 정보가 없습니다. 다시 시도해주세요.");
175+
return;
176+
}
165177

166178
const campaignId = type === "existing"
167179
? (campaignIdParam ? Number(campaignIdParam) : (proposalData?.campaignId || null))

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ export default function MatchingSuggestContent() {
3030
useHideBottomTab(isSheetOpen);
3131

3232
const handleNewCampaign = () => {
33-
navigate("/matching/suggest/create?type=new");
33+
navigate(`/matching/suggest/create?type=new&brandId=${proposalData?.brandId}&domain=${proposalData?.domain}`);
3434
};
3535

3636
const handleExistingCampaign = async () => {

0 commit comments

Comments
 (0)