parent
2dd5219265
commit
0f7d3d6f39
4 changed files with 8 additions and 31 deletions
|
|
@ -136,8 +136,6 @@ function AdminSchedule() {
|
||||||
selectedDate, setSelectedDate,
|
selectedDate, setSelectedDate,
|
||||||
currentDate, setCurrentDate,
|
currentDate, setCurrentDate,
|
||||||
scrollPosition, setScrollPosition,
|
scrollPosition, setScrollPosition,
|
||||||
preserveState, setPreserveState,
|
|
||||||
reset,
|
|
||||||
} = useScheduleStore();
|
} = useScheduleStore();
|
||||||
|
|
||||||
// 로컬 상태 (페이지 이동 시 유지할 필요 없는 것들)
|
// 로컬 상태 (페이지 이동 시 유지할 필요 없는 것들)
|
||||||
|
|
@ -193,18 +191,10 @@ function AdminSchedule() {
|
||||||
}
|
}
|
||||||
}, [inView, hasNextPage, isFetchingNextPage, fetchNextPage, isSearchMode, searchTerm]);
|
}, [inView, hasNextPage, isFetchingNextPage, fetchNextPage, isSearchMode, searchTerm]);
|
||||||
|
|
||||||
// 페이지 진입 시 상태 초기화 (preserveState가 false인 경우만)
|
// selectedDate가 없으면 오늘 날짜로 초기화
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (preserveState) {
|
if (!selectedDate) {
|
||||||
// 일정 추가/수정, 봇 관리에서 돌아온 경우 - 플래그만 리셋
|
|
||||||
setPreserveState(false);
|
|
||||||
} else {
|
|
||||||
// 다른 페이지에서 돌아온 경우 - 오늘 날짜로 초기화
|
|
||||||
setSelectedDate(getTodayKST());
|
setSelectedDate(getTodayKST());
|
||||||
setCurrentDate(new Date());
|
|
||||||
setSearchInput('');
|
|
||||||
setSearchTerm('');
|
|
||||||
setIsSearchMode(false);
|
|
||||||
}
|
}
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,12 +9,10 @@ import Toast from '../../../components/Toast';
|
||||||
import Tooltip from '../../../components/Tooltip';
|
import Tooltip from '../../../components/Tooltip';
|
||||||
import AdminHeader from '../../../components/admin/AdminHeader';
|
import AdminHeader from '../../../components/admin/AdminHeader';
|
||||||
import useToast from '../../../hooks/useToast';
|
import useToast from '../../../hooks/useToast';
|
||||||
import useScheduleStore from '../../../stores/useScheduleStore';
|
|
||||||
import * as botsApi from '../../../api/admin/bots';
|
import * as botsApi from '../../../api/admin/bots';
|
||||||
|
|
||||||
function AdminScheduleBots() {
|
function AdminScheduleBots() {
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
const { setPreserveState } = useScheduleStore();
|
|
||||||
const [user, setUser] = useState(null);
|
const [user, setUser] = useState(null);
|
||||||
const { toast, setToast } = useToast();
|
const { toast, setToast } = useToast();
|
||||||
const [bots, setBots] = useState([]);
|
const [bots, setBots] = useState([]);
|
||||||
|
|
@ -200,12 +198,9 @@ function AdminScheduleBots() {
|
||||||
<Home size={16} />
|
<Home size={16} />
|
||||||
</Link>
|
</Link>
|
||||||
<ChevronRight size={14} />
|
<ChevronRight size={14} />
|
||||||
<button
|
<Link to="/admin/schedule" className="hover:text-primary transition-colors">
|
||||||
onClick={() => { setPreserveState(true); navigate('/admin/schedule'); }}
|
|
||||||
className="hover:text-primary transition-colors"
|
|
||||||
>
|
|
||||||
일정 관리
|
일정 관리
|
||||||
</button>
|
</Link>
|
||||||
<ChevronRight size={14} />
|
<ChevronRight size={14} />
|
||||||
<span className="text-gray-700">봇 관리</span>
|
<span className="text-gray-700">봇 관리</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,6 @@ import CustomTimePicker from "../../../components/admin/CustomTimePicker";
|
||||||
import AdminHeader from "../../../components/admin/AdminHeader";
|
import AdminHeader from "../../../components/admin/AdminHeader";
|
||||||
import ConfirmDialog from "../../../components/admin/ConfirmDialog";
|
import ConfirmDialog from "../../../components/admin/ConfirmDialog";
|
||||||
import useToast from "../../../hooks/useToast";
|
import useToast from "../../../hooks/useToast";
|
||||||
import useScheduleStore from "../../../stores/useScheduleStore";
|
|
||||||
import * as authApi from "../../../api/admin/auth";
|
import * as authApi from "../../../api/admin/auth";
|
||||||
import * as categoriesApi from "../../../api/admin/categories";
|
import * as categoriesApi from "../../../api/admin/categories";
|
||||||
import * as schedulesApi from "../../../api/admin/schedules";
|
import * as schedulesApi from "../../../api/admin/schedules";
|
||||||
|
|
@ -37,7 +36,6 @@ import { getMembers } from "../../../api/public/members";
|
||||||
|
|
||||||
function AdminScheduleForm() {
|
function AdminScheduleForm() {
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
const { setPreserveState } = useScheduleStore();
|
|
||||||
const { id } = useParams();
|
const { id } = useParams();
|
||||||
const isEditMode = !!id;
|
const isEditMode = !!id;
|
||||||
|
|
||||||
|
|
@ -497,7 +495,6 @@ function AdminScheduleForm() {
|
||||||
: "일정이 추가되었습니다.",
|
: "일정이 추가되었습니다.",
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
setPreserveState(true);
|
|
||||||
navigate("/admin/schedule");
|
navigate("/admin/schedule");
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("일정 저장 오류:", error);
|
console.error("일정 저장 오류:", error);
|
||||||
|
|
@ -681,12 +678,12 @@ function AdminScheduleForm() {
|
||||||
<Home size={16} />
|
<Home size={16} />
|
||||||
</Link>
|
</Link>
|
||||||
<ChevronRight size={14} />
|
<ChevronRight size={14} />
|
||||||
<button
|
<Link
|
||||||
onClick={() => { setPreserveState(true); navigate('/admin/schedule'); }}
|
to="/admin/schedule"
|
||||||
className="hover:text-primary transition-colors"
|
className="hover:text-primary transition-colors"
|
||||||
>
|
>
|
||||||
일정 관리
|
일정 관리
|
||||||
</button>
|
</Link>
|
||||||
<ChevronRight size={14} />
|
<ChevronRight size={14} />
|
||||||
<span className="text-gray-700">
|
<span className="text-gray-700">
|
||||||
{isEditMode ? "일정 수정" : "일정 추가"}
|
{isEditMode ? "일정 수정" : "일정 추가"}
|
||||||
|
|
@ -1158,7 +1155,7 @@ function AdminScheduleForm() {
|
||||||
<div className="flex items-center justify-end gap-4">
|
<div className="flex items-center justify-end gap-4">
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
onClick={() => { setPreserveState(true); navigate("/admin/schedule"); }}
|
onClick={() => navigate("/admin/schedule")}
|
||||||
className="px-6 py-3 text-gray-700 hover:bg-gray-100 rounded-xl transition-colors font-medium"
|
className="px-6 py-3 text-gray-700 hover:bg-gray-100 rounded-xl transition-colors font-medium"
|
||||||
>
|
>
|
||||||
취소
|
취소
|
||||||
|
|
|
||||||
|
|
@ -16,9 +16,6 @@ const useScheduleStore = create((set) => ({
|
||||||
// 스크롤 위치
|
// 스크롤 위치
|
||||||
scrollPosition: 0,
|
scrollPosition: 0,
|
||||||
|
|
||||||
// 상태 유지 플래그 (일정 추가/수정, 봇 관리 페이지에서 돌아올 때만 true)
|
|
||||||
preserveState: false,
|
|
||||||
|
|
||||||
// 상태 업데이트 함수
|
// 상태 업데이트 함수
|
||||||
setSearchInput: (value) => set({ searchInput: value }),
|
setSearchInput: (value) => set({ searchInput: value }),
|
||||||
setSearchTerm: (value) => set({ searchTerm: value }),
|
setSearchTerm: (value) => set({ searchTerm: value }),
|
||||||
|
|
@ -27,7 +24,6 @@ const useScheduleStore = create((set) => ({
|
||||||
setSelectedDate: (value) => set({ selectedDate: value }),
|
setSelectedDate: (value) => set({ selectedDate: value }),
|
||||||
setCurrentDate: (value) => set({ currentDate: value }),
|
setCurrentDate: (value) => set({ currentDate: value }),
|
||||||
setScrollPosition: (value) => set({ scrollPosition: value }),
|
setScrollPosition: (value) => set({ scrollPosition: value }),
|
||||||
setPreserveState: (value) => set({ preserveState: value }),
|
|
||||||
|
|
||||||
// 상태 초기화
|
// 상태 초기화
|
||||||
reset: () =>
|
reset: () =>
|
||||||
|
|
@ -39,7 +35,6 @@ const useScheduleStore = create((set) => ({
|
||||||
selectedDate: null,
|
selectedDate: null,
|
||||||
currentDate: new Date(),
|
currentDate: new Date(),
|
||||||
scrollPosition: 0,
|
scrollPosition: 0,
|
||||||
preserveState: false,
|
|
||||||
}),
|
}),
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue