You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
99 lines
2.7 KiB
99 lines
2.7 KiB
import { useCallback } from "react"; |
|
|
|
import { LoginResponse, SessionResponse } from "@/backend/accounts/auth"; |
|
import { SettingsResponse } from "@/backend/accounts/settings"; |
|
import { |
|
BookmarkResponse, |
|
ProgressResponse, |
|
UserResponse, |
|
bookmarkResponsesToEntries, |
|
progressResponsesToEntries, |
|
} from "@/backend/accounts/user"; |
|
import { useAuthStore } from "@/stores/auth"; |
|
import { useBookmarkStore } from "@/stores/bookmarks"; |
|
import { useLanguageStore } from "@/stores/language"; |
|
import { useProgressStore } from "@/stores/progress"; |
|
import { useSubtitleStore } from "@/stores/subtitles"; |
|
import { useThemeStore } from "@/stores/theme"; |
|
|
|
export function useAuthData() { |
|
const loggedIn = !!useAuthStore((s) => s.account); |
|
const setAccount = useAuthStore((s) => s.setAccount); |
|
const removeAccount = useAuthStore((s) => s.removeAccount); |
|
const clearBookmarks = useBookmarkStore((s) => s.clear); |
|
const clearProgress = useProgressStore((s) => s.clear); |
|
const setTheme = useThemeStore((s) => s.setTheme); |
|
const setAppLanguage = useLanguageStore((s) => s.setLanguage); |
|
const importSubtitleLanguage = useSubtitleStore( |
|
(s) => s.importSubtitleLanguage, |
|
); |
|
|
|
const replaceBookmarks = useBookmarkStore((s) => s.replaceBookmarks); |
|
const replaceItems = useProgressStore((s) => s.replaceItems); |
|
|
|
const login = useCallback( |
|
async ( |
|
loginResponse: LoginResponse, |
|
user: UserResponse, |
|
session: SessionResponse, |
|
seed: string, |
|
) => { |
|
const account = { |
|
token: loginResponse.token, |
|
userId: user.id, |
|
sessionId: loginResponse.session.id, |
|
deviceName: session.device, |
|
profile: user.profile, |
|
seed, |
|
}; |
|
setAccount(account); |
|
return account; |
|
}, |
|
[setAccount], |
|
); |
|
|
|
const logout = useCallback(async () => { |
|
removeAccount(); |
|
clearBookmarks(); |
|
clearProgress(); |
|
}, [removeAccount, clearBookmarks, clearProgress]); |
|
|
|
const syncData = useCallback( |
|
async ( |
|
_user: UserResponse, |
|
_session: SessionResponse, |
|
progress: ProgressResponse[], |
|
bookmarks: BookmarkResponse[], |
|
settings: SettingsResponse, |
|
) => { |
|
replaceBookmarks(bookmarkResponsesToEntries(bookmarks)); |
|
replaceItems(progressResponsesToEntries(progress)); |
|
|
|
if (settings.applicationLanguage) { |
|
setAppLanguage(settings.applicationLanguage); |
|
} |
|
|
|
if (settings.defaultSubtitleLanguage) { |
|
importSubtitleLanguage(settings.defaultSubtitleLanguage); |
|
} |
|
|
|
if (settings.applicationTheme) { |
|
setTheme(settings.applicationTheme); |
|
} |
|
}, |
|
[ |
|
replaceBookmarks, |
|
replaceItems, |
|
setAppLanguage, |
|
importSubtitleLanguage, |
|
setTheme, |
|
], |
|
); |
|
|
|
return { |
|
loggedIn, |
|
login, |
|
logout, |
|
syncData, |
|
}; |
|
}
|
|
|