- Add centralized API type definitions (types/api.d.ts) - Interfaces for all API responses matching Go handler JSON - Snake_case field names matching actual API responses - Source file references in comments for verification - Add API client module (api.ts) - Procedural get/post/put/delete functions - Automatic auth header injection - Exported to window for cross-module access - Add DOM utilities (dom.ts) - escapeHtml for safe HTML rendering - querySelector wrappers with null checks - Element creation helpers - Add event delegation helpers (events.ts) - Reusable event delegation pattern - Data attribute selectors for dynamic content - Add localStorage wrapper (storage.ts) - Type-safe token management - Theme persistence helpers
84 lines
1.7 KiB
TypeScript
84 lines
1.7 KiB
TypeScript
function getToken(): string | null {
|
|
return localStorage.getItem('token');
|
|
}
|
|
|
|
function setToken(token: string): void {
|
|
localStorage.setItem('token', token);
|
|
}
|
|
|
|
function removeToken(): void {
|
|
localStorage.removeItem('token');
|
|
}
|
|
|
|
function getRefreshToken(): string | null {
|
|
return localStorage.getItem('refresh_token');
|
|
}
|
|
|
|
function setRefreshToken(token: string): void {
|
|
localStorage.setItem('refresh_token', token);
|
|
}
|
|
|
|
function removeRefreshToken(): void {
|
|
localStorage.removeItem('refresh_token');
|
|
}
|
|
|
|
function getTheme(): string {
|
|
return localStorage.getItem('theme') || 'tokyo-night';
|
|
}
|
|
|
|
function setTheme(theme: string): void {
|
|
localStorage.setItem('theme', theme);
|
|
}
|
|
|
|
function getSelectedLibrary(): string | null {
|
|
return localStorage.getItem('selectedLibrary');
|
|
}
|
|
|
|
function setSelectedLibrary(libraryId: string): void {
|
|
localStorage.setItem('selectedLibrary', libraryId);
|
|
}
|
|
|
|
function getSelectedBook(): string | null {
|
|
return localStorage.getItem('selectedBook');
|
|
}
|
|
|
|
function setSelectedBook(bookId: string): void {
|
|
localStorage.setItem('selectedBook', bookId);
|
|
}
|
|
|
|
function clearAll(): void {
|
|
localStorage.clear();
|
|
}
|
|
|
|
(window as any).storage = {
|
|
getToken,
|
|
setToken,
|
|
removeToken,
|
|
getRefreshToken,
|
|
setRefreshToken,
|
|
removeRefreshToken,
|
|
getTheme,
|
|
setTheme,
|
|
getSelectedLibrary,
|
|
setSelectedLibrary,
|
|
getSelectedBook,
|
|
setSelectedBook,
|
|
clearAll
|
|
};
|
|
|
|
export {
|
|
getToken,
|
|
setToken,
|
|
removeToken,
|
|
getRefreshToken,
|
|
setRefreshToken,
|
|
removeRefreshToken,
|
|
getTheme,
|
|
setTheme,
|
|
getSelectedLibrary,
|
|
setSelectedLibrary,
|
|
getSelectedBook,
|
|
setSelectedBook,
|
|
clearAll
|
|
};
|