This commit is contained in:
@@ -8,6 +8,7 @@ import {
|
||||
apiFetchClassSessionLogs,
|
||||
apiFetchClasses,
|
||||
apiFetchScheduleConflicts,
|
||||
apiMyClasses,
|
||||
} from '../api';
|
||||
import { DEFAULT_ALLOWED_APPS } from '../constants';
|
||||
import type {
|
||||
@@ -40,32 +41,29 @@ export const LearningTab: React.FC = () => {
|
||||
const [dayFilter, setDayFilter] = useState<number | null>(null);
|
||||
const [viewMode, setViewMode] = useState<ViewMode>('list');
|
||||
const [onlyMyClasses, setOnlyMyClasses] = useState<boolean>(false);
|
||||
const [myClasses, setMyClasses] = useState<number[]>(() => {
|
||||
try {
|
||||
const stored = localStorage.getItem('sc_my_classes_details');
|
||||
const list = stored ? JSON.parse(stored) : [];
|
||||
return Array.isArray(list) ? list.map((item: any) => item.id) : [];
|
||||
} catch {
|
||||
return [];
|
||||
}
|
||||
});
|
||||
const [myClasses, setMyClasses] = useState<number[]>([]);
|
||||
|
||||
const toggleMyClass = (classId: number, name: string, code: string) => {
|
||||
let list: any[] = [];
|
||||
try {
|
||||
const stored = localStorage.getItem('sc_my_classes_details');
|
||||
list = stored ? JSON.parse(stored) : [];
|
||||
} catch (e) {}
|
||||
const refreshMyClasses = () => {
|
||||
apiMyClasses.list().then((items) => {
|
||||
setMyClasses(items.map((c) => c.rkId));
|
||||
}).catch(() => {});
|
||||
};
|
||||
|
||||
const exists = list.some(item => item.id === classId);
|
||||
let nextList;
|
||||
if (exists) {
|
||||
nextList = list.filter(item => item.id !== classId);
|
||||
useEffect(() => {
|
||||
refreshMyClasses();
|
||||
window.addEventListener('my-classes-updated', refreshMyClasses);
|
||||
return () => window.removeEventListener('my-classes-updated', refreshMyClasses);
|
||||
}, []);
|
||||
|
||||
const toggleMyClass = (classId: number, _name: string, _code: string) => {
|
||||
const isMyClass = myClasses.includes(classId);
|
||||
if (isMyClass) {
|
||||
setMyClasses((prev) => prev.filter((id) => id !== classId));
|
||||
apiMyClasses.remove(classId).catch(() => {});
|
||||
} else {
|
||||
nextList = [...list, { id: classId, name, code }];
|
||||
setMyClasses((prev) => [...prev, classId]);
|
||||
apiMyClasses.add(classId).catch(() => {});
|
||||
}
|
||||
localStorage.setItem('sc_my_classes_details', JSON.stringify(nextList));
|
||||
setMyClasses(nextList.map(item => item.id));
|
||||
window.dispatchEvent(new Event('my-classes-updated'));
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user