frontend: fix typing issues

This commit is contained in:
wea_ondara
2023-11-20 18:13:48 +01:00
parent 52c9743624
commit cef177678e
10 changed files with 17 additions and 19 deletions

View File

@@ -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 {
<div>
<BTable ref="table" v-if="bTableRefreshHack" :fields="fields" :items="tableEntries" :primary-key="'id'"
class="manga-table" hover striped responsive no-sort-reset sort-by="newChapters" sort-desc
@row-clicked="onRowClicked">
@row-clicked="onRowClicked as any /* TODO dumb typing issue */">
<template #cell(media.coverImage.large)="data">
<img :src="data.value as string" alt="cover-img" class="list-cover"/>
</template>

View File

@@ -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<number, MangaUpdatesChapter[]> {
const chapters = this.mangaStore.mangaUpdatesChapters;
return Map.groupBy(chapters, e => e.series_id);
return groupBy(chapters, e => e.series_id);
}
get viewLists(): ViewList[] {

View File

@@ -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<AniListMangaListCollection> {
@@ -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;
}
}

View File

@@ -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<MangaUpdatesDBSchema>;

View File

@@ -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([

View File

@@ -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 {

View File

@@ -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,
});

View File

@@ -1,5 +0,0 @@
/// reference <../types/polyfill.d.ts>
import groupBy from '@/util';
Map.groupBy = groupBy;

View File

@@ -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());