aboutsummaryrefslogtreecommitdiff
path: root/src/lib/List/Manga/CleanMangaList.svelte
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/List/Manga/CleanMangaList.svelte')
-rw-r--r--src/lib/List/Manga/CleanMangaList.svelte154
1 files changed, 75 insertions, 79 deletions
diff --git a/src/lib/List/Manga/CleanMangaList.svelte b/src/lib/List/Manga/CleanMangaList.svelte
index bba0fb08..8964c15e 100644
--- a/src/lib/List/Manga/CleanMangaList.svelte
+++ b/src/lib/List/Manga/CleanMangaList.svelte
@@ -1,83 +1,79 @@
<script lang="ts">
- import Spacer from '$lib/Layout/Spacer.svelte';
- import type { Media } from '$lib/Data/AniList/media';
- import Error from '$lib/Error/RateLimited.svelte';
- import { volumeCount } from '$lib/Media/Manga/volumes';
- import settings from '$stores/settings';
- import ListTitle from '../ListTitle.svelte';
- import { onMount } from 'svelte';
- import root from '$lib/Utility/root';
- import locale from '$stores/locale';
- import Skeleton from '$lib/Loading/Skeleton.svelte';
- import { browser } from '$app/environment';
- import proxy from '$lib/Utility/proxy';
- import '../covers.css';
- import CleanGrid from '../CleanGrid.svelte';
- import CleanList from '../CleanList.svelte';
- import stateBin from '$stores/stateBin';
- import localforage from 'localforage';
- import MediaRoulette from '../MediaRoulette.svelte';
-
- export let media: Media[];
- export let cleanCache: () => void;
- export let endTime: number;
- export let lastUpdatedMedia: number;
- export let updateMedia: (
- id: number,
- progress: number | undefined,
- media: Media[]
- ) => Promise<void>;
- export let pendingUpdate: number | null;
- export let due: boolean;
- export let rateLimited: boolean;
- export let authorised: boolean;
- export let dummy = false;
- export let disableFilter = false;
- export let limit: number | undefined = undefined;
-
- let showRoulette = false;
- let serviceStatusResponse: Promise<Response>;
- let totalEpisodeDueCount = media
- .map((manga) => {
- if ($settings.displayTotalEpisodes && !$settings.displayTotalDueEpisodes) return 1;
-
- if (!due && !$settings.displayTotalEpisodes) return 1;
-
- return (manga.episodes || 1) - (manga.mediaListEntry?.progress || 0);
- })
- .reduce((a, b) => a + b, 0);
- const lists = Array.from(
- new Set(
- media
- .flatMap((m) => Object.entries(m.mediaListEntry?.customLists ?? {}))
- .filter(([_key, value]) => value)
- .map(([key]) => key)
- )
- );
- const filterKind = due ? 'due' : 'completed';
- const filterKey = `${filterKind}MangaListFilter`;
-
- $: selectedList = disableFilter ? 'All' : ($stateBin[filterKey] as string) || 'All';
-
- $: filteredMedia =
- selectedList === 'All' || !$settings.displayMediaListFilter
- ? media
- : media.filter((m) => m.mediaListEntry?.customLists?.[selectedList]);
-
- onMount(async () => {
- serviceStatusResponse = fetch(proxy('https://api.mangadex.org/ping'));
-
- if (browser)
- await localforage.setItem(
- `last${due ? '' : 'Completed'}MangaListLength`,
- media.length.toString()
- );
- });
-
- const increment = (manga: Media) => {
- if (!(pendingUpdate === manga.id || dummy))
- updateMedia(manga.id, manga.mediaListEntry?.progress, media);
- };
+import Spacer from '$lib/Layout/Spacer.svelte';
+import type { Media } from '$lib/Data/AniList/media';
+import Error from '$lib/Error/RateLimited.svelte';
+import { volumeCount } from '$lib/Media/Manga/volumes';
+import settings from '$stores/settings';
+import ListTitle from '../ListTitle.svelte';
+import { onMount } from 'svelte';
+import root from '$lib/Utility/root';
+import locale from '$stores/locale';
+import Skeleton from '$lib/Loading/Skeleton.svelte';
+import { browser } from '$app/environment';
+import proxy from '$lib/Utility/proxy';
+import '../covers.css';
+import CleanGrid from '../CleanGrid.svelte';
+import CleanList from '../CleanList.svelte';
+import stateBin from '$stores/stateBin';
+import localforage from 'localforage';
+import MediaRoulette from '../MediaRoulette.svelte';
+
+export let media: Media[];
+export let cleanCache: () => void;
+export let endTime: number;
+export let lastUpdatedMedia: number;
+export let updateMedia: (id: number, progress: number | undefined, media: Media[]) => Promise<void>;
+export let pendingUpdate: number | null;
+export let due: boolean;
+export let rateLimited: boolean;
+export let authorised: boolean;
+export let dummy = false;
+export let disableFilter = false;
+export let limit: number | undefined = undefined;
+
+let showRoulette = false;
+let serviceStatusResponse: Promise<Response>;
+let totalEpisodeDueCount = media
+ .map((manga) => {
+ if ($settings.displayTotalEpisodes && !$settings.displayTotalDueEpisodes) return 1;
+
+ if (!due && !$settings.displayTotalEpisodes) return 1;
+
+ return (manga.episodes || 1) - (manga.mediaListEntry?.progress || 0);
+ })
+ .reduce((a, b) => a + b, 0);
+const lists = Array.from(
+ new Set(
+ media
+ .flatMap((m) => Object.entries(m.mediaListEntry?.customLists ?? {}))
+ .filter(([_key, value]) => value)
+ .map(([key]) => key)
+ )
+);
+const filterKind = due ? 'due' : 'completed';
+const filterKey = `${filterKind}MangaListFilter`;
+
+$: selectedList = disableFilter ? 'All' : ($stateBin[filterKey] as string) || 'All';
+
+$: filteredMedia =
+ selectedList === 'All' || !$settings.displayMediaListFilter
+ ? media
+ : media.filter((m) => m.mediaListEntry?.customLists?.[selectedList]);
+
+onMount(async () => {
+ serviceStatusResponse = fetch(proxy('https://api.mangadex.org/ping'));
+
+ if (browser)
+ await localforage.setItem(
+ `last${due ? '' : 'Completed'}MangaListLength`,
+ media.length.toString()
+ );
+});
+
+const increment = (manga: Media) => {
+ if (!(pendingUpdate === manga.id || dummy))
+ updateMedia(manga.id, manga.mediaListEntry?.progress, media);
+};
</script>
{#if authorised}