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