diff --git a/frontend/src/pages/pc/Schedule.jsx b/frontend/src/pages/pc/Schedule.jsx
index 14c43b8..3be511e 100644
--- a/frontend/src/pages/pc/Schedule.jsx
+++ b/frontend/src/pages/pc/Schedule.jsx
@@ -687,16 +687,34 @@ function Schedule() {
)}
- {/* 검색 모드가 아닐 때만 개수 표시 */}
- {!isSearchMode && (
- {filteredSchedules.length}개 일정
- )}
+
+ {!isSearchMode && (
+
+ {filteredSchedules.length}개 일정
+
+ )}
+
+
-
+
{loading ? (
로딩 중...
) : filteredSchedules.length > 0 ? (
+
filteredSchedules.map((schedule, index) => {
const formatted = formatDate(schedule.date);
const categoryColor = getCategoryColor(schedule.category_id);
@@ -704,10 +722,11 @@ function Schedule() {
return (
handleScheduleClick(schedule)}
className="flex items-stretch bg-white rounded-2xl shadow-sm hover:shadow-md transition-shadow overflow-hidden cursor-pointer"
>
@@ -788,8 +807,9 @@ function Schedule() {
{selectedDate ? '선택한 날짜에 일정이 없습니다.' : '예정된 일정이 없습니다.'}
)}
-
+
+
diff --git a/frontend/src/pages/pc/admin/AdminSchedule.jsx b/frontend/src/pages/pc/admin/AdminSchedule.jsx
index c2dd421..1d70cbd 100644
--- a/frontend/src/pages/pc/admin/AdminSchedule.jsx
+++ b/frontend/src/pages/pc/admin/AdminSchedule.jsx
@@ -19,17 +19,29 @@ function AdminSchedule() {
return kstDate.toISOString().split('T')[0];
};
+ // sessionStorage에서 저장된 상태 복원
+ const getStoredState = () => {
+ try {
+ const stored = sessionStorage.getItem('adminScheduleState');
+ return stored ? JSON.parse(stored) : null;
+ } catch { return null; }
+ };
+ const storedState = getStoredState();
+
const [loading, setLoading] = useState(false);
const [user, setUser] = useState(null);
const [toast, setToast] = useState(null);
- const [searchInput, setSearchInput] = useState('');
- const [searchTerm, setSearchTerm] = useState('');
- const [isSearchMode, setIsSearchMode] = useState(false);
+ const [searchInput, setSearchInput] = useState(storedState?.searchInput || '');
+ const [searchTerm, setSearchTerm] = useState(storedState?.searchTerm || '');
+ const [isSearchMode, setIsSearchMode] = useState(storedState?.isSearchMode || false);
const [searchResults, setSearchResults] = useState([]);
const [searchLoading, setSearchLoading] = useState(false);
- const [selectedCategories, setSelectedCategories] = useState([]);
- const [selectedDate, setSelectedDate] = useState(getTodayKST()); // KST 기준 오늘
- const [currentDate, setCurrentDate] = useState(new Date());
+ const [selectedCategories, setSelectedCategories] = useState(storedState?.selectedCategories || []);
+ const [selectedDate, setSelectedDate] = useState(storedState?.selectedDate || getTodayKST());
+ const [currentDate, setCurrentDate] = useState(
+ storedState?.currentDate ? new Date(storedState.currentDate) : new Date()
+ );
+
const [slideDirection, setSlideDirection] = useState(0);
@@ -157,6 +169,27 @@ function AdminSchedule() {
fetchSchedules();
}, [year, month]);
+ // 상태를 sessionStorage에 저장 (페이지 이동 시 복원용)
+ useEffect(() => {
+ const stateToSave = {
+ searchInput,
+ searchTerm,
+ isSearchMode,
+ selectedCategories,
+ selectedDate,
+ currentDate: currentDate.toISOString(),
+ };
+ sessionStorage.setItem('adminScheduleState', JSON.stringify(stateToSave));
+ }, [searchInput, searchTerm, isSearchMode, selectedCategories, selectedDate, currentDate]);
+
+ // 검색 모드로 돌아왔을 때 검색 결과 다시 로드
+ useEffect(() => {
+ if (isSearchMode && searchTerm) {
+ searchSchedules(searchTerm);
+ }
+ }, []); // 컴포넌트 마운트 시에만
+
+
// 카테고리 로드 함수
const fetchCategories = async () => {
try {
@@ -882,7 +915,7 @@ function AdminSchedule() {
className="flex items-center gap-1 px-2 py-1 bg-gray-100 rounded-md text-sm text-gray-600 hover:bg-gray-200 transition-colors"
>
- {selectedCategories.length}개
+ {selectedCategories.length}개 일정
{showCategoryTooltip && (
@@ -911,7 +944,7 @@ function AdminSchedule() {
)}
- {filteredSchedules.length}개
+ {filteredSchedules.length}개 일정
)}
@@ -928,14 +961,16 @@ function AdminSchedule() {
등록된 일정이 없습니다
) : (
-
+
{filteredSchedules.map((schedule, index) => (