- PC/Admin 스케줄 페이지에 검색어 추천 드롭다운 추가
- 3영역 검색창 레이아웃 (뒤로가기 / 입력 / 검색 버튼)
- 방향키로 추천 검색어 선택 시 입력창 반영 (유튜브 스타일)
- 외부 클릭 시 드롭다운 닫기
- 검색 모드 진입 시 기존 카테고리 유지
- 검색 모드 종료 시 스크롤 위치 초기화
- 전환 애니메이션 개선 (scale + opacity)
- AdminLayout.jsx 컴포넌트 생성 (헤더 고정 + overflow-y-auto)
- AdminDashboard, AdminMembers, AdminMemberEdit에 적용
- AdminAlbums, AdminAlbumForm, AdminAlbumPhotos에 적용
- AdminScheduleCategory, AdminScheduleBots, AdminScheduleForm에 적용
- AdminSchedule은 내부 스크롤 처리로 자동 감지하여 제외
- 화면 고정 레이아웃으로 변경 (h-[calc(100vh-64px)] overflow-hidden)
- grid grid-cols-3 레이아웃으로 변경
- 왼쪽 달력/카테고리 영역 고정, 오른쪽 일정 목록만 스크롤
- Layout.jsx에서 일정 페이지 Footer 숨김 처리
- X 봇 서비스 추가 (x-bot.js)
- Nitter를 통한 @realfromis_9 트윗 수집
- 트윗을 일정으로 자동 저장 (카테고리 12)
- 관리 채널 외 유튜브 링크 감지 시 별도 일정 추가
- 1분 간격 동기화 지원
- DB 스키마 변경
- bots.type enum 수정 (vlive, weverse 제거, x 추가)
- bot_x_config 테이블 추가
- 봇 스케줄러 수정 (youtube-scheduler.js)
- 봇 타입별 동기화 함수 분기 (syncBot)
- X 봇 지원 추가
- 관리자 페이지 개선 (AdminScheduleBots.jsx)
- 봇 타입별 아이콘 표시 (YouTube/X)
- X 아이콘 SVG 컴포넌트 추가
- last_added_count 로직 수정
- 추가 항목 없으면 이전 값 유지 (0으로 초기화 방지)
- 기존 X 일정에서 유튜브 영상 추출 스크립트 추가
- 입력 시마다 검색 → 키패드 검색 버튼 눌러야 검색으로 변경
- searchInput과 searchTerm 분리
- type='search', enterKeyHint='search' 추가로 모바일 키보드 최적화
- 취소 버튼 잘림 현상 수정 (flex-shrink-0, min-w-0)
- main을 flex flex-col로 변경
- 브레드크럼, 타이틀에 flex-shrink-0 추가
- 그리드에 flex-1 min-h-0 추가
- 일정 목록 컬럼에 flex flex-col min-h-0 추가
- 스크롤 컨테이너에서 max-h 고정값 제거하고 flex-1로 변경
1. 외부 스크롤 제거 (h-screen overflow-hidden flex flex-col)
2. HTML 엔티티 디코딩 함수 추가 (< > 등 올바르게 표시)
3. decodeHtmlEntities 함수를 컴포넌트 외부로 이동하여 ScheduleItem에서 접근 가능
문제: 일정 관리 페이지에서 날짜 선택 후 홈으로 갔다왔을 때
오늘 날짜로 초기화가 안됨
해결:
- useScheduleStore에 preserveState 플래그 추가
- AdminSchedule에서 preserveState가 false면 오늘 날짜로 초기화
- AdminScheduleForm, AdminScheduleBots에서 일정 관리로 돌아갈 때
preserveState를 true로 설정하여 상태 유지
새로 생성된 파일:
- components/admin/ConfirmDialog.jsx (109줄)
- 삭제 확인 등 위험한 작업을 위한 공통 다이얼로그
- Props: isOpen, onClose, onConfirm, title, message, loading, variant 등
수정된 파일:
- pages/pc/admin/AdminAlbums.jsx (60줄 → 15줄)
- pages/pc/admin/AdminSchedule.jsx (70줄 → 17줄)
총 약 100줄의 중복 코드 제거
새로 생성된 파일:
- components/admin/AdminHeader.jsx (47줄)
- 로고, Admin 배지, 사용자 정보, 로그아웃 버튼 포함
수정된 파일:
- pages/pc/admin/AdminMembers.jsx
- AdminHeader import 추가
- 중복 헤더 JSX 제거 (24줄 -> 1줄)
- handleLogout 함수 제거 (5줄)
나머지 9개 Admin 페이지도 동일한 패턴으로 적용 가능
- components/admin/CustomDatePicker.jsx 생성 (269줄)
- AdminMemberEdit에서 중복 제거 (-237줄)
- AdminAlbumForm에서 중복 제거 (-273줄)
- AdminScheduleForm에서 중복 제거 (-349줄)
- 현재 년도/월 표시: 테두리 제거, 글씨색만 유지
- 오늘 날짜: 배경색 제거, 글씨색만 유지
- 요일/일요일/토요일 색상 구분 추가
총 코드 감소: 약 860줄
- AdminMemberEdit API 모듈 적용
- AdminScheduleForm API 모듈 적용
- AdminAlbumPhotos API 모듈 적용 (업로드는 SSE 유지)
- api/admin/albums.js에 getAlbumTeasers, deleteAlbumTeaser 추가
총 적용 완료:
- Public 페이지: 7개
- Admin 페이지: 10개 전체 완료
- AdminAlbums API 모듈 적용
총 적용 완료:
- Public 페이지: 7개 (PC 6 + 모바일 1)
- Admin 페이지: 7개 (Schedule, ScheduleBots, ScheduleCategory, Login, Dashboard, Albums, Schedule)
- api/admin/auth.js 인증 모듈 생성 (verifyToken, login, logout, hasToken 등)
- categories.js reorderCategories 경로 수정
- AdminScheduleCategory 전체 API 모듈 적용
- AdminLogin API 모듈 적용
- AdminDashboard API 모듈 적용
남은 작업: AdminAlbums, AdminAlbumPhotos, AdminMemberEdit, AdminScheduleForm