diff --git a/src/models/account.svelte.js b/src/models/account.svelte.ts similarity index 65% rename from src/models/account.svelte.js rename to src/models/account.svelte.ts index 5ff6466..65a98f2 100644 --- a/src/models/account.svelte.js +++ b/src/models/account.svelte.ts @@ -2,28 +2,26 @@ import { BlueskyAPI } from '../api/api.js'; import { pdsEndpointForIdentifier } from '../api/identity.js'; class Account { - - #isIncognito; - #biohazardEnabled; - #loggedIn; - #avatarURL; - #avatarIsLoading; + #isIncognito: boolean; + #biohazardEnabled: boolean | undefined; + #loggedIn: boolean; + #avatarURL: string | undefined; + #avatarIsLoading: boolean; constructor() { let incognito = localStorage.getItem('incognito'); - let biohazard = JSON.parse(localStorage.getItem('biohazard') ?? 'null'); + let biohazard = localStorage.getItem('biohazard'); + let biohazardEnabled = biohazard ? !!JSON.parse(biohazard) : undefined; let accountAPI = new BlueskyAPI(null, true); this.#isIncognito = $state(accountAPI.isLoggedIn && !!incognito); - this.#biohazardEnabled = $state(biohazard); + this.#biohazardEnabled = $state(biohazardEnabled); this.#loggedIn = $state(accountAPI.isLoggedIn); - this.#avatarURL = $state(accountAPI.isLoggedIn && accountAPI.user.avatar); + this.#avatarURL = $state(accountAPI.isLoggedIn ? accountAPI.user.avatar : undefined); this.#avatarIsLoading = $state(false); } - /** @returns {boolean} */ - - get isIncognito() { + get isIncognito(): boolean { return this.#isIncognito; } @@ -37,40 +35,28 @@ class Account { location.reload(); } - /** @returns {boolean?} */ - - get biohazardEnabled() { + get biohazardEnabled(): boolean | undefined { return this.#biohazardEnabled; } - /** @param {boolean} value */ - - set biohazardEnabled(value) { + set biohazardEnabled(value: boolean) { this.#biohazardEnabled = value; localStorage.setItem('biohazard', JSON.stringify(value)); } - /** @returns {boolean} */ - - get loggedIn() { + get loggedIn(): boolean { return this.#loggedIn; } - /** @returns {string | undefined} */ - - get avatarURL() { + get avatarURL(): string | undefined { return this.#avatarURL; } - /** @returns {boolean} */ - - get avatarIsLoading() { + get avatarIsLoading(): boolean { return this.#avatarIsLoading; } - /** @param {string} identifier, @param {string} password, @returns {Promise} */ - - async logIn(identifier, password) { + async logIn(identifier: string, password: string): Promise { let pdsEndpoint = await pdsEndpointForIdentifier(identifier); let pdsAPI = new BlueskyAPI(pdsEndpoint, true); @@ -80,7 +66,7 @@ class Account { this.#avatarIsLoading = true; pdsAPI.loadCurrentUserAvatar().then(url => { - this.#avatarURL = url; + this.#avatarURL = url || undefined; }).catch(error => { console.log(error); }).finally(() => { diff --git a/src/utils/paginator.js b/src/utils/paginator.ts similarity index 63% rename from src/utils/paginator.js rename to src/utils/paginator.ts index 3400ff4..9dd0428 100644 --- a/src/utils/paginator.js +++ b/src/utils/paginator.ts @@ -1,21 +1,16 @@ -/** @type {() => void} */ -let scrollHandler; +let scrollHandler: (() => void) | undefined; +let resizeObserver: ResizeObserver | undefined; -/** @type {ResizeObserver} */ -let resizeObserver; - -export function loadInPages(callback) { +export function loadInPages(callback: (next: () => void) => void) { if (scrollHandler) { document.removeEventListener('scroll', scrollHandler); } - if (resizeObserver) { - resizeObserver.disconnect(); - } + resizeObserver?.disconnect(); scrollHandler = () => { if (window.pageYOffset + window.innerHeight > document.body.offsetHeight - 500) { - callback(scrollHandler); + callback(scrollHandler!); } };