pricelees 6bcec4c0ed [#44] 매장 기능 도입 (#45)
<!-- 제목 양식 -->
<!-- [이슈번호] 작업 요약 (예시: [#10] Gitea 템플릿 생성) -->

## 📝 관련 이슈 및 PR

**PR과 관련된 이슈 번호**
- #44

##  작업 내용
<!-- 어떤 작업을 했는지 알려주세요! -->
- 매장 기능 도입 및 기존 기능에 적용
- 관리자 타입(본사, 매장, 전체) 분리 및 API별 적용

## 🧪 테스트
<!-- 어떤 테스트를 생각했고 진행했는지 알려주세요! -->
- 신규 기능 및 매장 기능 도입으로 수정된 기존 API 모두 통합 테스트 완료

## 📚 참고 자료 및 기타
<!-- 참고한 자료, 또는 논의할 사항이 있다면 알려주세요! -->
- 아직 미결제 예약 스케쥴링 작업 등 추가적인 작업이 필요하긴 하지만, 이 작업들은 배포 후 추가로 진행할 예정
- 다음 작업은 배포 + 초기 데이터 삽입

Reviewed-on: #45
Co-authored-by: pricelees <priceelees@gmail.com>
Co-committed-by: pricelees <priceelees@gmail.com>
2025-09-20 03:15:06 +00:00

46 lines
1.7 KiB
TypeScript

import { useAdminAuth } from '@_context/AdminAuthContext';
import React from 'react';
import { Link, useNavigate } from 'react-router-dom';
import '@_css/navbar.css';
const AdminNavbar: React.FC = () => {
const { isAdmin, name, type, logout } = useAdminAuth();
const navigate = useNavigate();
const handleLogout = async (e: React.MouseEvent) => {
e.preventDefault();
try {
await logout();
navigate('/');
} catch (error) {
console.error("Logout failed", error);
}
};
return (
<nav className="navbar-container">
<div className="nav-links">
<Link className="nav-link" to="/admin"></Link>
{type === 'HQ' && <Link className="nav-link" to="/admin/theme"></Link>}
{type === 'HQ' && <Link className="nav-link" to="/admin/store"></Link>}
<Link className="nav-link" to="/admin/schedule"></Link>
</div>
<div className="nav-actions">
{!isAdmin ? (
<button className="btn btn-primary" onClick={() => navigate('/admin/login')}>Login</button>
) : (
<div className="profile-info">
<img className="profile-image" src="/image/default-profile.png" alt="Profile" />
<span>{name || 'Profile'}</span>
<div className="dropdown-menu">
<a className="dropdown-item" href="#" onClick={handleLogout}>Logout</a>
</div>
</div>
)}
</div>
</nav>
);
};
export default AdminNavbar;