Skip to content

Commit 1f36b1f

Browse files
authored
πŸ› Fix event button & horizontal width (#64)
### πŸ“ μž‘μ—… λ‚΄μš© - 일정 μ‹ μ²­ νŽ˜μ΄μ§€μ—μ„œ μ‹ μ²­ν•˜κΈ° λ²„νŠΌμ΄ μ£½μ–΄μžˆλ˜κ±Έ λ‹€μ‹œ μ—°κ²°ν–ˆμŠ΅λ‹ˆλ‹€. - μ°Έμ—¬μž λͺ©λ‘ νŽ˜μ΄μ§€μ—μ„œ κ°•μ œ μ·¨μ†Œ λ²„νŠΌμ— apiλ₯Ό μ—°κ²°ν–ˆμŠ΅λ‹ˆλ‹€. - 일정 상세 νŽ˜μ΄μ§€μ—μ„œ κ°€λ‘œ 길이 였λ₯˜λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€. - μ·¨μ†Œ λͺ¨λ‹¬μ—μ„œ λ²„νŠΌ 색상을 νŒŒλž€μƒ‰μœΌλ‘œ μˆ˜μ •ν–ˆμŠ΅λ‹ˆλ‹€. ### πŸ“Έ μŠ€ν¬λ¦°μƒ· (선택) ### πŸš€ 리뷰 μš”κ΅¬μ‚¬ν•­ (선택)
1 parent 80bea50 commit 1f36b1f

File tree

6 files changed

+51
-10
lines changed

6 files changed

+51
-10
lines changed

β€Žsrc/components/EventDetailContent.tsxβ€Ž

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ interface ShortEventDetailContentProps {
1414

1515
export function EventDetailContent({ view, event }: EventDetailContentProps) {
1616
return (
17-
<div className="w-full flex flex-col items-start gap-10">
17+
<div className="w-full flex flex-col gap-10">
1818
<section className="space-y-6">
1919
<div className="bg-white border border-gray-100 rounded-2xl p-6 shadow-sm space-y-4">
2020
<h2 className="text-2xl font-extrabold text-gray-900">
@@ -36,7 +36,7 @@ export function EventDetailContent({ view, event }: EventDetailContentProps) {
3636
</div>
3737

3838
<div className="bg-gray-50 rounded-2xl p-4 flex flex-col gap-2 text-lg">
39-
<div className="flex items-start gap-2 text-gray-900">
39+
<div className="flex gap-2 text-gray-900">
4040
<Clock className="w-4 h-4 mt-0.5 flex-shrink-0" />
4141
<div className="flex flex-wrap gap-x-1.5 leading-snug">
4242
<span className="font-medium">μ‹ μ²­ κΈ°κ°„:</span>

β€Žsrc/hooks/useEventDetail.tsβ€Ž

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,24 @@ export default function useEventDetail(id?: string) {
157157
}
158158
};
159159

160+
// 7. μ°Έμ—¬ κ°•μ œ μ·¨μ†Œ 둜직 ν•Έλ“€λŸ¬
161+
const handleBanEvent = async (registrationId: string) => {
162+
setLoading(true);
163+
try {
164+
await patchRegistration(registrationId, {
165+
status: 'BANNED',
166+
});
167+
if (id) await handleFetchDetail(id);
168+
return true;
169+
} catch (error) {
170+
toast.error('μ·¨μ†Œ 처리 쀑 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.');
171+
console.error('Ban event error:', error);
172+
return false;
173+
} finally {
174+
setLoading(false);
175+
}
176+
};
177+
160178
return {
161179
loading,
162180
data,
@@ -167,5 +185,6 @@ export default function useEventDetail(id?: string) {
167185
handleJoinEvent,
168186
handleCancelEvent,
169187
handleDeleteEvent,
188+
handleBanEvent,
170189
};
171190
}

β€Žsrc/mocks/handlers/event.tsβ€Ž

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@ export const eventHandlers = [
1414
event: {
1515
publicId: id as string,
1616
title: 'λͺ¨μ΄μƒ€ μ •κΈ°λͺ¨μž„',
17-
description:
18-
'2μ›” 2일 λͺ¨μ΄μƒ€ μ •κΈ°λͺ¨μž„을 κ°€μ§‘λ‹ˆλ‹€!\nμž₯μ†ŒλŠ” μ„œμšΈλŒ€ μž”λ””κ΄‘μž₯이며 μ‹ μ²­ 마감 μ‹œ ν™•μ • μ‹ μ²­μžλŠ” μ°Έκ°€λΉ„ 2,000원을 κ±·μœΌλ‹ˆ μ°Έκ³  λΆ€νƒλ“œλ¦½λ‹ˆλ‹€!',
17+
description: '2μ›” 2일 λͺ¨μ΄μƒ€ μ •κΈ°λͺ¨μž„을 κ°€μ§‘λ‹ˆλ‹€!',
1918
totalApplicants: 15,
2019
// DetailedEventλŠ” Eventλ₯Ό μƒμ†λ°›μœΌλ―€λ‘œ ν•„μš”ν•œ κΈ°λ³Έ ν•„λ“œλ“€(μž₯μ†Œ, μ‹œκ°„ λ“±)이 ν¬ν•¨λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.
2120
location: 'μ„œμšΈλŒ€ μž”λ””κ΄‘μž₯',

β€Žsrc/routes/EventMain.tsxβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ export default function EventMain() {
187187
<AlertDialogCancel>μ·¨μ†Œ</AlertDialogCancel>
188188
<AlertDialogAction
189189
onClick={onDeleteClick}
190-
className="bg-red-600 hover:bg-red-700"
190+
className="bg-primary text-white hover:bg-primary/90 rounded-xl"
191191
>
192192
μ‚­μ œ
193193
</AlertDialogAction>

β€Žsrc/routes/EventRegister.tsxβ€Ž

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,23 @@ export default function EventRegister() {
187187
</a>
188188
</div>
189189
</div>
190+
191+
{/* λΈ”λŸ¬ ν‘Έν„° (κΆŒν•œλ³„ λΆ„κΈ°) */}
192+
<footer className="fixed bottom-0 left-0 right-0 z-40">
193+
<div className="h-16 bg-gradient-to-t from-white to-transparent" />
194+
<div className="bg-white/90 backdrop-blur-xl px-6 pb-10 pt-2 flex flex-col items-center gap-2">
195+
<div className="max-w-2xl min-w-[320px] mx-auto w-[90%] px-6 flex flex-col items-center gap-3">
196+
<Button
197+
variant="moiming"
198+
size="xl"
199+
type="submit"
200+
className="w-full px-6 flex"
201+
>
202+
μ‹ μ²­ν•˜κΈ°
203+
</Button>
204+
</div>
205+
</div>
206+
</footer>
190207
</form>
191208

192209
{/* λΈ”λŸ¬ ν‘Έν„° (κΆŒν•œλ³„ λΆ„κΈ°) */}

β€Žsrc/routes/Guests.tsxβ€Ž

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import LoadingSkeleton from '@/components/LoadingSkeleton';
2+
import useEventDetail from '@/hooks/useEventDetail';
23
import { useEffect, useState } from 'react';
34
import { useInView } from 'react-intersection-observer';
45
import { useNavigate, useParams } from 'react-router';
@@ -26,6 +27,7 @@ export default function Guests() {
2627
const { id } = useParams<{ id: string }>();
2728
const navigate = useNavigate();
2829
const [activeTab, setActiveTab] = useState<GuestStatus>('CONFIRMED');
30+
const { handleBanEvent } = useEventDetail(id);
2931

3032
// 1. λ¬΄ν•œ 슀크둀 ν›… μ—°κ²°
3133
const { data, isLoading, fetchNextPage, hasNextPage, isFetchingNextPage } =
@@ -48,9 +50,11 @@ export default function Guests() {
4850
}
4951
}, [inView, hasNextPage, isFetchingNextPage, fetchNextPage]);
5052

51-
const handleCancelGuest = (name: string | null) => {
52-
// TODO: patchRegistration API 호좜 둜직 μΆ”κ°€ ν•„μš”
53-
toast.success(`${name} λ‹˜μ˜ μ°Έμ—¬κ°€ μ·¨μ†Œλ˜μ—ˆμŠ΅λ‹ˆλ‹€.`);
53+
const handleCancelGuest = async (name: string | null, regId: string) => {
54+
const success = await handleBanEvent(regId);
55+
if (success) {
56+
toast.success(`${name} λ‹˜μ˜ μ°Έμ—¬κ°€ μ·¨μ†Œλ˜μ—ˆμŠ΅λ‹ˆλ‹€.`);
57+
}
5458
};
5559

5660
// λ‘œλ”© μ€‘μ΄κ±°λ‚˜ 데이터가 아직 없을 λ•Œ (λ¦¬λ‹€μ΄λ ‰νŠΈ νŒλ‹¨ μ „) μŠ€ν”Όλ„ˆλ‚˜ 빈 ν™”λ©΄ ν‘œμ‹œ
@@ -156,8 +160,10 @@ export default function Guests() {
156160
<AlertDialogFooter>
157161
<AlertDialogCancel>μ‹ μ²­ μœ μ§€ν•˜κΈ°</AlertDialogCancel>
158162
<AlertDialogAction
159-
onClick={() => handleCancelGuest(guest.name)}
160-
className="bg-red-600 hover:bg-red-700"
163+
onClick={() =>
164+
handleCancelGuest(guest.name, guest.registrationId)
165+
}
166+
className="bg-primary text-white hover:bg-primary/90 rounded-xl"
161167
>
162168
μ·¨μ†Œν•˜κΈ°
163169
</AlertDialogAction>

0 commit comments

Comments
Β (0)