diff --git a/frontend/src/components/manga/MangaListTable.vue b/frontend/src/components/manga/MangaListTable.vue index 0870b45..2b26a8c 100644 --- a/frontend/src/components/manga/MangaListTable.vue +++ b/frontend/src/components/manga/MangaListTable.vue @@ -2,6 +2,7 @@ import {Options, Vue} from 'vue-class-component'; import {Prop, Watch} from 'vue-property-decorator'; import {BTable, type TableItem} from 'bootstrap-vue-next'; +//@ts-ignore TS2307 import type {TableFieldObject} from 'bootstrap-vue-next/dist/src/types'; import type {ViewEntry, ViewList} from '@/components/manga/MangaList.vue'; import MangaEntryDetailsModal from '@/components/manga/MangaEntryDetailsModal.vue'; @@ -110,7 +111,7 @@ export default class MangaListTable extends Vue {
+ @row-clicked="onRowClicked as any /* TODO dumb typing issue */"> diff --git a/frontend/src/components/manga/MangaLists.vue b/frontend/src/components/manga/MangaLists.vue index 25ea64b..4a9ac70 100644 --- a/frontend/src/components/manga/MangaLists.vue +++ b/frontend/src/components/manga/MangaLists.vue @@ -7,6 +7,7 @@ import type {AniListMedia} from '@/data/models/anilist/AniListMedia'; import type {MangaUpdatesRelation} from '@/data/models/mangaupdates/MangaUpdatesRelation'; import type {MangaUpdatesSeries} from '@/data/models/mangaupdates/MangaUpdatesSeries'; import type {MangaUpdatesChapter} from '@/data/models/mangaupdates/MangaUpdatesChapter'; +import groupBy from '@/util'; @Options({ name: 'MangaLists', @@ -34,7 +35,7 @@ export default class MangaLists extends Vue { get chaptersBySeriesId(): Map { const chapters = this.mangaStore.mangaUpdatesChapters; - return Map.groupBy(chapters, e => e.series_id); + return groupBy(chapters, e => e.series_id); } get viewLists(): ViewList[] { diff --git a/frontend/src/data/api/AniListApi.ts b/frontend/src/data/api/AniListApi.ts index 8f36fc4..8d5f07d 100644 --- a/frontend/src/data/api/AniListApi.ts +++ b/frontend/src/data/api/AniListApi.ts @@ -14,7 +14,7 @@ export default class AniListApi { 'variables': {'name': userName}, }), }); - return (await handleJsonResponse(res)).data.User; + return ((await handleJsonResponse(res)) as any).data.User; } async fetchManga(userId: number): Promise { @@ -28,6 +28,6 @@ export default class AniListApi { 'variables': {'userId': userId, 'type': 'MANGA'}, }), }); - return (await handleJsonResponse(res)).data.MediaListCollection; + return ((await handleJsonResponse(res)) as any).data.MediaListCollection; } } \ No newline at end of file diff --git a/frontend/src/data/db/MangaUpdatesDb.ts b/frontend/src/data/db/MangaUpdatesDb.ts index d697af9..eb6044e 100644 --- a/frontend/src/data/db/MangaUpdatesDb.ts +++ b/frontend/src/data/db/MangaUpdatesDb.ts @@ -1,6 +1,7 @@ import {type IDBPDatabase, openDB} from 'idb'; import type {MangaUpdatesSeries} from '@/data/models/mangaupdates/MangaUpdatesSeries'; import type {MangaUpdatesChapter} from '@/data/models/mangaupdates/MangaUpdatesChapter'; +import type {MangaUpdatesRelation} from '@/data/models/mangaupdates/MangaUpdatesRelation'; export type MuDb = IDBPDatabase; diff --git a/frontend/src/data/repository/mangaUpdates/MangaUpdatesRepository.ts b/frontend/src/data/repository/mangaUpdates/MangaUpdatesRepository.ts index 0579021..b62e2df 100644 --- a/frontend/src/data/repository/mangaUpdates/MangaUpdatesRepository.ts +++ b/frontend/src/data/repository/mangaUpdates/MangaUpdatesRepository.ts @@ -1,6 +1,5 @@ import MangaUpdatesDb from '@/data/db/MangaUpdatesDb'; import type {MangaUpdatesRelation} from '@/data/models/mangaupdates/MangaUpdatesRelation'; -import type {MangaUpdatesMedia} from '@/data/models/mangaupdates/MangaUpdatesMedia'; import type {MangaUpdatesChapter} from '@/data/models/mangaupdates/MangaUpdatesChapter'; import type {MangaUpdatesSeries} from '@/data/models/mangaupdates/MangaUpdatesSeries'; @@ -25,7 +24,7 @@ export default class MangaUpdatesRepository { async getSeriesById(id: number) { return await MangaUpdatesDb.withDb(async db => { - return await db.get('series', id); + return await db.get('series', IDBKeyRange.only(id)); }); } @@ -53,7 +52,7 @@ export default class MangaUpdatesRepository { }); } - async updateSeries(newSeries: MangaUpdatesMedia[]) { + async updateSeries(newSeries: MangaUpdatesSeries[]) { return await MangaUpdatesDb.withDb(async db => { let txList = db.transaction('series', 'readwrite'); await Promise.allSettled([ diff --git a/frontend/src/data/service/MangaUpdatesDataService.ts b/frontend/src/data/service/MangaUpdatesDataService.ts index 841c546..fd38da4 100644 --- a/frontend/src/data/service/MangaUpdatesDataService.ts +++ b/frontend/src/data/service/MangaUpdatesDataService.ts @@ -5,6 +5,7 @@ import type {MangaUpdatesChapter} from '@/data/models/mangaupdates/MangaUpdatesC import type {MangaUpdatesSearchResultRecord} from '@/data/models/mangaupdates/MangaUpdatesSearchResultRecord'; import stringSimilarity from 'string-similarity-js'; import {ApiError} from '@/data/api/ApiUtils'; +import groupBy from '@/util'; export default class MangaUpdatesDataService { private readonly mangaUpdatesApi = new MangaUpdatesApi(); @@ -63,7 +64,8 @@ export default class MangaUpdatesDataService { matching = results.results .filter(e => stringSimilarity(title, e.record.title, 2, false) >= 0.95) .filter(e => allowTypes.has(e.record.type.toLowerCase())) //check if a manga or similar but not novel - .filter(e => m.startDate.year - 1 <= e.record.year && e.record.year <= m.startDate.year + 1); //check year +-1 + .filter(e => m.startDate.year - 1 <= parseInt('' + e.record.year) + && parseInt('' + e.record.year) <= m.startDate.year + 1); //check year +-1 if (matching.length === 0) { continue; } @@ -148,7 +150,7 @@ export default class MangaUpdatesDataService { .flat(); //only keep chapter with the highest chapter number per group - const filtered = Array.from(Map.groupBy(updates, c => c.group).values()) + const filtered = Array.from(groupBy(updates, c => c.group).values()) .map(chaptersOfGroup => chaptersOfGroup.reduce((l, r) => l.chapter > r.chapter ? l : r, chaptersOfGroup[0])); await mangaStore.updateMangaUpdatesChapters(filtered); } finally { diff --git a/frontend/src/locale/locale.ts b/frontend/src/locale/locale.ts index d9ebd81..ea293c7 100644 --- a/frontend/src/locale/locale.ts +++ b/frontend/src/locale/locale.ts @@ -25,6 +25,7 @@ export function createI18n(): I18n { locale: browserLocale, fallbackLocale: 'en', messages: messages, + //@ts-ignore TS2769 TODO weird typing issue datetimeFormats: datetimeFormats, legacy: true, }); diff --git a/frontend/src/polyfill.ts b/frontend/src/polyfill.ts deleted file mode 100644 index 0b9a076..0000000 --- a/frontend/src/polyfill.ts +++ /dev/null @@ -1,5 +0,0 @@ -/// reference <../types/polyfill.d.ts> - -import groupBy from '@/util'; - -Map.groupBy = groupBy; diff --git a/frontend/src/stores/MangaStore.ts b/frontend/src/stores/MangaStore.ts index d9f0a21..6e2b213 100644 --- a/frontend/src/stores/MangaStore.ts +++ b/frontend/src/stores/MangaStore.ts @@ -7,6 +7,7 @@ import type {AniListMangaList} from '@/data/models/anilist/AniListMangaList'; import type {MangaUpdatesRelation} from '@/data/models/mangaupdates/MangaUpdatesRelation'; import type {MangaUpdatesChapter} from '@/data/models/mangaupdates/MangaUpdatesChapter'; import type {MangaUpdatesSeries} from '@/data/models/mangaupdates/MangaUpdatesSeries'; +import groupBy from '@/util'; @Store({ id: 'MangaStore', @@ -100,8 +101,8 @@ export class MangaStore extends Pinia { await this.dbStore.mangaUpdatesRepository.updateChapters(chapters); // update cache - const cachedById = Map.groupBy(this.cachedMangaUpdatesChapters, c => c.series_id); - const chaptersById = Map.groupBy(chapters, c => c.series_id); + const cachedById = groupBy(this.cachedMangaUpdatesChapters, c => c.series_id); + const chaptersById = groupBy(chapters, c => c.series_id); chaptersById.forEach((v, k) => cachedById.set(k, v)); this.cachedMangaUpdatesChapters.splice(0); this.cachedMangaUpdatesChapters.push(...Array.from(cachedById.values()).flat()); diff --git a/frontend/types/polyfill.d.ts b/frontend/types/polyfill.d.ts deleted file mode 100644 index 7a5eb7b..0000000 --- a/frontend/types/polyfill.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -declare interface MapConstructor { - groupBy(arr: V[], fn: (v: V) => K): Map; -} \ No newline at end of file