From 08027d8b845af8b55ad555eedffdeaa30451e30a Mon Sep 17 00:00:00 2001 From: changui <122252160+changuii@users.noreply.github.com> Date: Wed, 24 Dec 2025 13:14:39 +0900 Subject: [PATCH 1/7] =?UTF-8?q?[REFACTOR]=20=EB=A1=9C=EA=B7=B8=EC=9D=B8,?= =?UTF-8?q?=20=ED=99=88,=20=EC=9D=BC=EC=A0=95,=20=EA=B3=B5=EC=A7=80?= =?UTF-8?q?=EC=82=AC=ED=95=AD,=20FAQ,=20=EB=B6=84=EC=8B=A4=EB=AC=BC=20?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=20modal=20=EB=AA=A8=EB=B0=94?= =?UTF-8?q?=EC=9D=BC=20=ED=99=98=EA=B2=BD=20=EC=82=AC=EC=9D=B4=EC=A6=88=20?= =?UTF-8?q?=EB=A6=AC=ED=8C=A9=ED=84=B0=EB=A7=81=20(#21)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * refactor: 로그인, 홈, 일정, 공지사항, FAQ, 분실물 페이지 modal 모바일 환경 사이즈 리팩터링 * refactor: 모바일 환경일때만 여백 추가 --- src/components/modals/AnnouncementModal.jsx | 4 +- src/components/modals/EventDateModal.jsx | 2 +- src/components/modals/EventModal.jsx | 2 +- src/components/modals/FaqModal.jsx | 2 +- src/components/modals/FestivalImagesModal.jsx | 37 ++++++++++++------- src/components/modals/FestivalInfoModal.jsx | 2 +- src/components/modals/LineupAddModal.jsx | 2 +- src/components/modals/LineupEditModal.jsx | 2 +- src/components/modals/LostItemGuideModal.jsx | 4 +- src/components/modals/LostItemModal.jsx | 4 +- src/components/modals/PasswordChangeModal.jsx | 2 +- src/components/modals/PlaceImagesModal.jsx | 2 +- .../modals/PushNotificationConfirmModal.jsx | 2 +- src/pages/CouncilLoginPage.jsx | 4 +- 14 files changed, 41 insertions(+), 30 deletions(-) diff --git a/src/components/modals/AnnouncementModal.jsx b/src/components/modals/AnnouncementModal.jsx index 7620410..390e1d0 100644 --- a/src/components/modals/AnnouncementModal.jsx +++ b/src/components/modals/AnnouncementModal.jsx @@ -79,7 +79,7 @@ const AnnouncementModal = ({ notice, onSave, onClose, showToast }) => { const isSaveDisabled = isTitleOverflow || isContentOverflow; return ( - +

{notice ? "공지사항 수정" : "새 공지사항"}

@@ -184,7 +184,7 @@ const AnnouncementDetailModal = ({ notice, onClose }) => { }, [onClose]); return ( - +

공지사항 상세

diff --git a/src/components/modals/EventDateModal.jsx b/src/components/modals/EventDateModal.jsx index bd03a76..4432ef2 100644 --- a/src/components/modals/EventDateModal.jsx +++ b/src/components/modals/EventDateModal.jsx @@ -44,7 +44,7 @@ const EventDateModal = ({ onSave, onClose, defaultDate }) => { }, [date]); return ( - +

새 날짜 추가

diff --git a/src/components/modals/EventModal.jsx b/src/components/modals/EventModal.jsx index e387e8c..e7730c3 100644 --- a/src/components/modals/EventModal.jsx +++ b/src/components/modals/EventModal.jsx @@ -170,7 +170,7 @@ const EventModal = ({ event, onSave, onClose, availableDates, activeDate, showTo }, [form]); // form이 변경될 때마다 이벤트 리스너 재등록 return ( - +

{event ? '이벤트 수정' : '새 이벤트'}

diff --git a/src/components/modals/FaqModal.jsx b/src/components/modals/FaqModal.jsx index 43f429a..5480d97 100644 --- a/src/components/modals/FaqModal.jsx +++ b/src/components/modals/FaqModal.jsx @@ -50,7 +50,7 @@ const FaqModal = ({ faq, onSave, onClose, showToast }) => { }, [question, answer, onClose, handleSave]); return ( - +

{faq ? 'FAQ 수정' : '새 FAQ 등록'}

diff --git a/src/components/modals/FestivalImagesModal.jsx b/src/components/modals/FestivalImagesModal.jsx index a4d4dea..1957e0d 100644 --- a/src/components/modals/FestivalImagesModal.jsx +++ b/src/components/modals/FestivalImagesModal.jsx @@ -2,6 +2,7 @@ import React, { useState, useEffect, useCallback } from 'react'; import Modal from '../common/Modal'; import AddImageModal from './AddImageModal'; import { festivalAPI } from '../../utils/api'; +import { useIsMobile } from '../layout/UseIsMobile'; const FestivalImagesModal = ({ isOpen, onClose, festival, showToast, onUpdate }) => { const [selectedImage, setSelectedImage] = useState(null); @@ -11,6 +12,7 @@ const FestivalImagesModal = ({ isOpen, onClose, festival, showToast, onUpdate }) const [draggedItem, setDraggedItem] = useState(null); const [selectedImageToDelete, setSelectedImageToDelete] = useState(null); const [showAddImageModal, setShowAddImageModal] = useState(false); + const isMobile = useIsMobile(); const handleCancelMode = useCallback(() => { setIsReorderMode(false); @@ -193,11 +195,16 @@ const FestivalImagesModal = ({ isOpen, onClose, festival, showToast, onUpdate }) }; return ( - -
-
-

축제 이미지 관리

-
+ +
+
+

축제 이미지 관리

+
{!isReorderMode && !isDeleteMode && ( <> -
+ {!isReorderMode && !isDeleteMode && ( +
+ +
+ )}
{/* 새 이미지 추가 모달 (중첩) */} diff --git a/src/components/modals/FestivalInfoModal.jsx b/src/components/modals/FestivalInfoModal.jsx index b09eeeb..8635b36 100644 --- a/src/components/modals/FestivalInfoModal.jsx +++ b/src/components/modals/FestivalInfoModal.jsx @@ -73,7 +73,7 @@ const FestivalInfoModal = ({ isOpen, onClose, festival, showToast, onUpdate }) = }, [onClose]); return ( - +

축제 정보 수정

diff --git a/src/components/modals/LineupAddModal.jsx b/src/components/modals/LineupAddModal.jsx index 1aa23f0..dc9f6d9 100644 --- a/src/components/modals/LineupAddModal.jsx +++ b/src/components/modals/LineupAddModal.jsx @@ -240,7 +240,7 @@ const LineupAddModal = ({ isOpen, onClose, showToast, onUpdate }) => { }; return ( - +

라인업 추가

diff --git a/src/components/modals/LineupEditModal.jsx b/src/components/modals/LineupEditModal.jsx index 2fe5792..bdc623b 100644 --- a/src/components/modals/LineupEditModal.jsx +++ b/src/components/modals/LineupEditModal.jsx @@ -294,7 +294,7 @@ const LineupEditModal = ({ isOpen, onClose, lineup, showToast, onUpdate }) => { }; return ( - +

라인업 수정

diff --git a/src/components/modals/LostItemGuideModal.jsx b/src/components/modals/LostItemGuideModal.jsx index acc395a..55ddd4d 100644 --- a/src/components/modals/LostItemGuideModal.jsx +++ b/src/components/modals/LostItemGuideModal.jsx @@ -9,8 +9,8 @@ const LostItemGuideModal = ({ initialGuide, onSave, onClose }) => { }, [initialGuide]); return ( - -
+ +

분실물 안내 수정

분실물 수령/제보 가이드를 입력하세요.

diff --git a/src/components/modals/LostItemModal.jsx b/src/components/modals/LostItemModal.jsx index 97cedce..a668a61 100644 --- a/src/components/modals/LostItemModal.jsx +++ b/src/components/modals/LostItemModal.jsx @@ -147,8 +147,8 @@ const LostItemModal = ({ item, onSave, onClose, showToast }) => { }; return ( - -
+ +

{item ? '분실물 정보 수정' : '새 분실물 등록'}

diff --git a/src/components/modals/PasswordChangeModal.jsx b/src/components/modals/PasswordChangeModal.jsx index 5d59fe6..6e8b140 100644 --- a/src/components/modals/PasswordChangeModal.jsx +++ b/src/components/modals/PasswordChangeModal.jsx @@ -110,7 +110,7 @@ const PasswordChangeModal = ({ isOpen, onClose, showToast }) => { }, [onClose]); return ( - +

비밀번호 변경

diff --git a/src/components/modals/PlaceImagesModal.jsx b/src/components/modals/PlaceImagesModal.jsx index f471e74..a44f289 100644 --- a/src/components/modals/PlaceImagesModal.jsx +++ b/src/components/modals/PlaceImagesModal.jsx @@ -411,7 +411,7 @@ const PlaceImagesModal = ({ place, onUpdate, onClose }) => {
-
+

📸 플레이스 이미지는 최대 5개까지 저장할 수 있습니다.

diff --git a/src/components/modals/PushNotificationConfirmModal.jsx b/src/components/modals/PushNotificationConfirmModal.jsx index 4a132f8..450de56 100644 --- a/src/components/modals/PushNotificationConfirmModal.jsx +++ b/src/components/modals/PushNotificationConfirmModal.jsx @@ -20,7 +20,7 @@ const PushNotificationConfirmModal = ({ notice, onConfirm, onCancel }) => { }, [onConfirm, onCancel]); return ( - +

푸시 알림 전송 확인

diff --git a/src/pages/CouncilLoginPage.jsx b/src/pages/CouncilLoginPage.jsx index 543e905..04fe028 100644 --- a/src/pages/CouncilLoginPage.jsx +++ b/src/pages/CouncilLoginPage.jsx @@ -1,11 +1,13 @@ import React, { useState } from 'react'; import { councilLogin } from '../auth/councilAuth'; +import { useIsMobile } from '../components/layout/UseIsMobile'; const CouncilLoginPage = ({ onSuccess }) => { const [username, setUsername] = useState(''); const [password, setPassword] = useState(''); const [loading, setLoading] = useState(false); const [error, setError] = useState(''); + const isMobile = useIsMobile(); const handleSubmit = async (e) => { e.preventDefault(); @@ -43,7 +45,7 @@ const CouncilLoginPage = ({ onSuccess }) => {
{/* Foreground container */} -
+

로그인

흩어진 정보를 하나로, 축제를 한 권에 담다

From 88f72a4708471c813045ccc353819e13bb75122a Mon Sep 17 00:00:00 2001 From: changui <122252160+changuii@users.noreply.github.com> Date: Wed, 24 Dec 2025 13:24:01 +0900 Subject: [PATCH 2/7] =?UTF-8?q?[REFACTOR]=20=EC=82=AC=EC=9D=B4=EB=93=9C?= =?UTF-8?q?=EB=B0=94=20=EB=8C=80=EB=AC=B8=EC=9E=90=20F=EC=A0=9C=EA=B1=B0,?= =?UTF-8?q?=20=EB=AA=A8=EB=B0=94=EC=9D=BC=20=ED=99=98=EA=B2=BD=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=EB=B9=84=EB=B0=80=EB=B2=88=ED=98=B8=20=EB=B2=84?= =?UTF-8?q?=ED=8A=BC=20=EB=B0=8F=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EB=A1=9C?= =?UTF-8?q?=EA=B3=A0=20=EC=9C=84=EC=B9=98=20=EB=B3=80=EA=B2=BD=20(#24)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/layout/Sidebar.jsx | 2 +- src/pages/CouncilLoginPage.jsx | 2 +- src/pages/FestivalPage.jsx | 6 ++++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/components/layout/Sidebar.jsx b/src/components/layout/Sidebar.jsx index 847e1c5..7d6d793 100644 --- a/src/components/layout/Sidebar.jsx +++ b/src/components/layout/Sidebar.jsx @@ -124,7 +124,7 @@ const Sidebar = ({ open, setOpen }) => { className={`text-xl font-bold cursor-pointer transition-all duration-300 whitespace-nowrap overflow-hidden text-ellipsis ${textVisible ? 'opacity-100' : 'opacity-0'}`} onClick={() => setPage('home')} > - Festabook + festabook
{/* 닫기 버튼: 이제 가장 오른쪽 */} diff --git a/src/pages/CouncilLoginPage.jsx b/src/pages/CouncilLoginPage.jsx index 04fe028..22ead82 100644 --- a/src/pages/CouncilLoginPage.jsx +++ b/src/pages/CouncilLoginPage.jsx @@ -39,7 +39,7 @@ const CouncilLoginPage = ({ onSuccess }) => {
{/* Background logo and tagline */} -
+
FestaBook
diff --git a/src/pages/FestivalPage.jsx b/src/pages/FestivalPage.jsx index 856428a..b10f1c4 100644 --- a/src/pages/FestivalPage.jsx +++ b/src/pages/FestivalPage.jsx @@ -1,9 +1,11 @@ import React, { useState, useEffect, useRef } from 'react'; import { useModal } from '../hooks/useModal'; import { festivalAPI, lineupAPI } from '../utils/api'; +import { useIsMobile } from '../components/layout/UseIsMobile'; const FestivalPage = () => { const { openModal, showToast } = useModal(); + const isMobile = useIsMobile(); const [festival, setFestival] = useState(null); const [lineups, setLineups] = useState([]); const [loading, setLoading] = useState(true); @@ -137,7 +139,7 @@ const FestivalPage = () => {
{/* 헤더 섹션 */}
-
+

{festival.universityName} 관리 @@ -145,7 +147,7 @@ const FestivalPage = () => {