feat(admin): remove all department/campus scoping from frontend
- Delete CampusSwitcher component and useCampus hook - Delete Departments page and its route - Remove campus header interceptor from API client - Remove departmentId from Class interfaces - Remove campusLocation from student profile - Remove department permissions from test fixtures - Remove currentCampusId from test cleanup TypeScript compiles clean.
This commit is contained in:
@@ -1,40 +0,0 @@
|
||||
import { useState, useEffect, useCallback } from 'react';
|
||||
import api from '../api';
|
||||
|
||||
interface Department {
|
||||
id: number;
|
||||
name: string;
|
||||
type: string;
|
||||
parentId: number | null;
|
||||
}
|
||||
|
||||
export function useCampus() {
|
||||
const [campuses, setCampuses] = useState<Department[]>([]);
|
||||
const [currentId, setCurrentId] = useState<string>(
|
||||
() => localStorage.getItem('currentCampusId') || ''
|
||||
);
|
||||
const [loading, setLoading] = useState(true);
|
||||
|
||||
const fetchCampuses = useCallback(async () => {
|
||||
try {
|
||||
const data = await api.get('/departments') as unknown as Department[];
|
||||
const campusList = data.filter((d) => d.type === 'campus');
|
||||
setCampuses(campusList);
|
||||
if (!currentId && campusList.length > 0) {
|
||||
setCurrentId(String(campusList[0].id));
|
||||
localStorage.setItem('currentCampusId', String(campusList[0].id));
|
||||
}
|
||||
} catch { /* ignore */ }
|
||||
finally { setLoading(false); }
|
||||
}, [currentId]);
|
||||
|
||||
useEffect(() => { fetchCampuses(); }, []);
|
||||
|
||||
const switchCampus = useCallback((id: string) => {
|
||||
setCurrentId(id);
|
||||
localStorage.setItem('currentCampusId', id);
|
||||
window.dispatchEvent(new CustomEvent('campus-changed', { detail: id }));
|
||||
}, []);
|
||||
|
||||
return { campuses, currentId, switchCampus, loading };
|
||||
}
|
||||
Reference in New Issue
Block a user