diff --git a/.trunk/trunk.yaml b/.trunk/trunk.yaml index a6d98403e..3fbf6ad2c 100644 --- a/.trunk/trunk.yaml +++ b/.trunk/trunk.yaml @@ -41,7 +41,7 @@ lint: ignore: - linters: [ALL] paths: - - src/__generated__/** + - frontend/src/__generated__/** - docker/Dockerfile definitions: - name: eslint diff --git a/backend/endpoints/responses/rom.py b/backend/endpoints/responses/rom.py index ec8587729..202d23707 100644 --- a/backend/endpoints/responses/rom.py +++ b/backend/endpoints/responses/rom.py @@ -114,6 +114,7 @@ class RomSchema(BaseModel): updated_at: datetime rom_user: RomUserSchema | None = Field(default=None) + sibling_roms: list[RomSchema] = Field(default_factory=list) class Config: from_attributes = True @@ -124,6 +125,9 @@ def from_orm_with_request(cls, db_rom: Rom, request: Request) -> RomSchema: user_id = request.user.id rom.rom_user = RomUserSchema.for_user(user_id, db_rom) + rom.sibling_roms = [ + RomSchema.model_validate(r) for r in db_rom.get_sibling_roms() + ] return rom diff --git a/frontend/src/__generated__/index.ts b/frontend/src/__generated__/index.ts index 897407819..66aefac00 100644 --- a/frontend/src/__generated__/index.ts +++ b/frontend/src/__generated__/index.ts @@ -1,6 +1,7 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ +/* eslint-disable */ export type { AddFirmwareResponse } from "./models/AddFirmwareResponse"; export type { AddRomsResponse } from "./models/AddRomsResponse"; diff --git a/frontend/src/__generated__/models/AddFirmwareResponse.ts b/frontend/src/__generated__/models/AddFirmwareResponse.ts index 0198ad137..d57008aeb 100644 --- a/frontend/src/__generated__/models/AddFirmwareResponse.ts +++ b/frontend/src/__generated__/models/AddFirmwareResponse.ts @@ -1,6 +1,7 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ +/* eslint-disable */ import type { FirmwareSchema } from "./FirmwareSchema"; diff --git a/frontend/src/__generated__/models/AddRomsResponse.ts b/frontend/src/__generated__/models/AddRomsResponse.ts index 72a6d576c..9f19f1c36 100644 --- a/frontend/src/__generated__/models/AddRomsResponse.ts +++ b/frontend/src/__generated__/models/AddRomsResponse.ts @@ -1,6 +1,7 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ +/* eslint-disable */ export type AddRomsResponse = { uploaded_roms: Array; diff --git a/frontend/src/__generated__/models/Body_add_collection_collections_post.ts b/frontend/src/__generated__/models/Body_add_collection_collections_post.ts index da98bafa9..decb18554 100644 --- a/frontend/src/__generated__/models/Body_add_collection_collections_post.ts +++ b/frontend/src/__generated__/models/Body_add_collection_collections_post.ts @@ -1,6 +1,7 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ +/* eslint-disable */ export type Body_add_collection_collections_post = { artwork?: Blob | null; diff --git a/frontend/src/__generated__/models/Body_add_firmware_firmware_post.ts b/frontend/src/__generated__/models/Body_add_firmware_firmware_post.ts index f48d1ada2..45bb33207 100644 --- a/frontend/src/__generated__/models/Body_add_firmware_firmware_post.ts +++ b/frontend/src/__generated__/models/Body_add_firmware_firmware_post.ts @@ -1,6 +1,7 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ +/* eslint-disable */ export type Body_add_firmware_firmware_post = { files: Array; diff --git a/frontend/src/__generated__/models/Body_add_roms_roms_post.ts b/frontend/src/__generated__/models/Body_add_roms_roms_post.ts index 6b68d8a8f..0df627c3a 100644 --- a/frontend/src/__generated__/models/Body_add_roms_roms_post.ts +++ b/frontend/src/__generated__/models/Body_add_roms_roms_post.ts @@ -1,6 +1,7 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ +/* eslint-disable */ export type Body_add_roms_roms_post = { roms: Array; diff --git a/frontend/src/__generated__/models/Body_add_saves_saves_post.ts b/frontend/src/__generated__/models/Body_add_saves_saves_post.ts index be02e90da..58627651a 100644 --- a/frontend/src/__generated__/models/Body_add_saves_saves_post.ts +++ b/frontend/src/__generated__/models/Body_add_saves_saves_post.ts @@ -1,6 +1,7 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ +/* eslint-disable */ export type Body_add_saves_saves_post = { saves: Array; diff --git a/frontend/src/__generated__/models/Body_add_screenshots_screenshots_post.ts b/frontend/src/__generated__/models/Body_add_screenshots_screenshots_post.ts index 5e764040f..ad25ed065 100644 --- a/frontend/src/__generated__/models/Body_add_screenshots_screenshots_post.ts +++ b/frontend/src/__generated__/models/Body_add_screenshots_screenshots_post.ts @@ -1,6 +1,7 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ +/* eslint-disable */ export type Body_add_screenshots_screenshots_post = { screenshots: Array; diff --git a/frontend/src/__generated__/models/Body_add_states_states_post.ts b/frontend/src/__generated__/models/Body_add_states_states_post.ts index eb129366a..2189cc71d 100644 --- a/frontend/src/__generated__/models/Body_add_states_states_post.ts +++ b/frontend/src/__generated__/models/Body_add_states_states_post.ts @@ -1,6 +1,7 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ +/* eslint-disable */ export type Body_add_states_states_post = { states: Array; diff --git a/frontend/src/__generated__/models/Body_token_token_post.ts b/frontend/src/__generated__/models/Body_token_token_post.ts index 75bb0dfe5..b4cf29218 100644 --- a/frontend/src/__generated__/models/Body_token_token_post.ts +++ b/frontend/src/__generated__/models/Body_token_token_post.ts @@ -1,6 +1,7 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ +/* eslint-disable */ export type Body_token_token_post = { grant_type?: string; diff --git a/frontend/src/__generated__/models/Body_update_collection_collections__id__put.ts b/frontend/src/__generated__/models/Body_update_collection_collections__id__put.ts index 8d0618fc3..f04969c88 100644 --- a/frontend/src/__generated__/models/Body_update_collection_collections__id__put.ts +++ b/frontend/src/__generated__/models/Body_update_collection_collections__id__put.ts @@ -1,6 +1,7 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ +/* eslint-disable */ export type Body_update_collection_collections__id__put = { artwork?: Blob | null; diff --git a/frontend/src/__generated__/models/Body_update_rom_roms__id__put.ts b/frontend/src/__generated__/models/Body_update_rom_roms__id__put.ts index bde8c96bc..926d02d99 100644 --- a/frontend/src/__generated__/models/Body_update_rom_roms__id__put.ts +++ b/frontend/src/__generated__/models/Body_update_rom_roms__id__put.ts @@ -1,6 +1,7 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ +/* eslint-disable */ export type Body_update_rom_roms__id__put = { artwork?: Blob | null; diff --git a/frontend/src/__generated__/models/Body_update_user_users__id__put.ts b/frontend/src/__generated__/models/Body_update_user_users__id__put.ts index c10bdaaad..3ea8dff01 100644 --- a/frontend/src/__generated__/models/Body_update_user_users__id__put.ts +++ b/frontend/src/__generated__/models/Body_update_user_users__id__put.ts @@ -1,6 +1,7 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ +/* eslint-disable */ export type Body_update_user_users__id__put = { avatar?: Blob | null; diff --git a/frontend/src/__generated__/models/CollectionSchema.ts b/frontend/src/__generated__/models/CollectionSchema.ts index 66fd12cbd..762969e9b 100644 --- a/frontend/src/__generated__/models/CollectionSchema.ts +++ b/frontend/src/__generated__/models/CollectionSchema.ts @@ -1,6 +1,7 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ +/* eslint-disable */ export type CollectionSchema = { id: number; diff --git a/frontend/src/__generated__/models/ConfigResponse.ts b/frontend/src/__generated__/models/ConfigResponse.ts index eb0a91860..2768ac72e 100644 --- a/frontend/src/__generated__/models/ConfigResponse.ts +++ b/frontend/src/__generated__/models/ConfigResponse.ts @@ -1,6 +1,7 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ +/* eslint-disable */ export type ConfigResponse = { EXCLUDED_PLATFORMS: Array; diff --git a/frontend/src/__generated__/models/DetailedRomSchema.ts b/frontend/src/__generated__/models/DetailedRomSchema.ts index 47d7b0623..b9785524f 100644 --- a/frontend/src/__generated__/models/DetailedRomSchema.ts +++ b/frontend/src/__generated__/models/DetailedRomSchema.ts @@ -1,6 +1,7 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ +/* eslint-disable */ import type { CollectionSchema } from "./CollectionSchema"; import type { RomIGDBMetadata } from "./RomIGDBMetadata"; @@ -52,8 +53,8 @@ export type DetailedRomSchema = { created_at: string; updated_at: string; rom_user?: RomUserSchema | null; - merged_screenshots: Array; sibling_roms?: Array; + merged_screenshots: Array; user_saves?: Array; user_states?: Array; user_screenshots?: Array; diff --git a/frontend/src/__generated__/models/FirmwareSchema.ts b/frontend/src/__generated__/models/FirmwareSchema.ts index 12f80198f..6f3b91ea5 100644 --- a/frontend/src/__generated__/models/FirmwareSchema.ts +++ b/frontend/src/__generated__/models/FirmwareSchema.ts @@ -1,6 +1,7 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ +/* eslint-disable */ export type FirmwareSchema = { id: number; diff --git a/frontend/src/__generated__/models/HTTPValidationError.ts b/frontend/src/__generated__/models/HTTPValidationError.ts index 0b7bfa010..0f7e0013f 100644 --- a/frontend/src/__generated__/models/HTTPValidationError.ts +++ b/frontend/src/__generated__/models/HTTPValidationError.ts @@ -1,6 +1,7 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ +/* eslint-disable */ import type { ValidationError } from "./ValidationError"; diff --git a/frontend/src/__generated__/models/IGDBMetadataPlatform.ts b/frontend/src/__generated__/models/IGDBMetadataPlatform.ts index 594d41d5f..56c1a8333 100644 --- a/frontend/src/__generated__/models/IGDBMetadataPlatform.ts +++ b/frontend/src/__generated__/models/IGDBMetadataPlatform.ts @@ -1,6 +1,7 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ +/* eslint-disable */ export type IGDBMetadataPlatform = { igdb_id: number; diff --git a/frontend/src/__generated__/models/IGDBRelatedGame.ts b/frontend/src/__generated__/models/IGDBRelatedGame.ts index 61c45481d..9591ae5b5 100644 --- a/frontend/src/__generated__/models/IGDBRelatedGame.ts +++ b/frontend/src/__generated__/models/IGDBRelatedGame.ts @@ -1,6 +1,7 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ +/* eslint-disable */ export type IGDBRelatedGame = { id: number; diff --git a/frontend/src/__generated__/models/MessageResponse.ts b/frontend/src/__generated__/models/MessageResponse.ts index 09c0f6e8a..a7e5cfc53 100644 --- a/frontend/src/__generated__/models/MessageResponse.ts +++ b/frontend/src/__generated__/models/MessageResponse.ts @@ -1,6 +1,7 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ +/* eslint-disable */ export type MessageResponse = { msg: string; diff --git a/frontend/src/__generated__/models/MetadataSourcesDict.ts b/frontend/src/__generated__/models/MetadataSourcesDict.ts index 32a3a741c..cc8052888 100644 --- a/frontend/src/__generated__/models/MetadataSourcesDict.ts +++ b/frontend/src/__generated__/models/MetadataSourcesDict.ts @@ -1,6 +1,7 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ +/* eslint-disable */ export type MetadataSourcesDict = { IGDB_API_ENABLED: boolean; diff --git a/frontend/src/__generated__/models/MobyMetadataPlatform.ts b/frontend/src/__generated__/models/MobyMetadataPlatform.ts index 43a6b1695..6eab88a26 100644 --- a/frontend/src/__generated__/models/MobyMetadataPlatform.ts +++ b/frontend/src/__generated__/models/MobyMetadataPlatform.ts @@ -1,6 +1,7 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ +/* eslint-disable */ export type MobyMetadataPlatform = { moby_id: number; diff --git a/frontend/src/__generated__/models/PlatformSchema.ts b/frontend/src/__generated__/models/PlatformSchema.ts index 92aa2b616..9edc5c46d 100644 --- a/frontend/src/__generated__/models/PlatformSchema.ts +++ b/frontend/src/__generated__/models/PlatformSchema.ts @@ -1,6 +1,7 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ +/* eslint-disable */ import type { FirmwareSchema } from "./FirmwareSchema"; diff --git a/frontend/src/__generated__/models/Role.ts b/frontend/src/__generated__/models/Role.ts index dc4ff9db8..0e570999f 100644 --- a/frontend/src/__generated__/models/Role.ts +++ b/frontend/src/__generated__/models/Role.ts @@ -1,5 +1,6 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ +/* eslint-disable */ export type Role = "viewer" | "editor" | "admin"; diff --git a/frontend/src/__generated__/models/RomIGDBMetadata.ts b/frontend/src/__generated__/models/RomIGDBMetadata.ts index 439ec3b51..02b48c693 100644 --- a/frontend/src/__generated__/models/RomIGDBMetadata.ts +++ b/frontend/src/__generated__/models/RomIGDBMetadata.ts @@ -1,6 +1,7 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ +/* eslint-disable */ import type { IGDBMetadataPlatform } from "./IGDBMetadataPlatform"; import type { IGDBRelatedGame } from "./IGDBRelatedGame"; diff --git a/frontend/src/__generated__/models/RomMobyMetadata.ts b/frontend/src/__generated__/models/RomMobyMetadata.ts index 59e2973fe..31e5f4aa2 100644 --- a/frontend/src/__generated__/models/RomMobyMetadata.ts +++ b/frontend/src/__generated__/models/RomMobyMetadata.ts @@ -1,6 +1,7 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ +/* eslint-disable */ import type { MobyMetadataPlatform } from "./MobyMetadataPlatform"; diff --git a/frontend/src/__generated__/models/RomSchema.ts b/frontend/src/__generated__/models/RomSchema.ts index 6605e5d19..427c2e315 100644 --- a/frontend/src/__generated__/models/RomSchema.ts +++ b/frontend/src/__generated__/models/RomSchema.ts @@ -1,6 +1,7 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ +/* eslint-disable */ import type { RomIGDBMetadata } from "./RomIGDBMetadata"; import type { RomMobyMetadata } from "./RomMobyMetadata"; @@ -46,5 +47,6 @@ export type RomSchema = { created_at: string; updated_at: string; rom_user?: RomUserSchema | null; + sibling_roms?: Array; readonly sort_comparator: string; }; diff --git a/frontend/src/__generated__/models/RomUserSchema.ts b/frontend/src/__generated__/models/RomUserSchema.ts index c7eefe2f8..03948b7ad 100644 --- a/frontend/src/__generated__/models/RomUserSchema.ts +++ b/frontend/src/__generated__/models/RomUserSchema.ts @@ -1,6 +1,7 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ +/* eslint-disable */ export type RomUserSchema = { id: number; diff --git a/frontend/src/__generated__/models/SaveSchema.ts b/frontend/src/__generated__/models/SaveSchema.ts index 1e8a2fc15..ee487be8e 100644 --- a/frontend/src/__generated__/models/SaveSchema.ts +++ b/frontend/src/__generated__/models/SaveSchema.ts @@ -1,6 +1,7 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ +/* eslint-disable */ import type { ScreenshotSchema } from "./ScreenshotSchema"; diff --git a/frontend/src/__generated__/models/SchedulerDict.ts b/frontend/src/__generated__/models/SchedulerDict.ts index 0060ecbd1..f1236bcf4 100644 --- a/frontend/src/__generated__/models/SchedulerDict.ts +++ b/frontend/src/__generated__/models/SchedulerDict.ts @@ -1,6 +1,7 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ +/* eslint-disable */ import type { TaskDict } from "./TaskDict"; diff --git a/frontend/src/__generated__/models/ScreenshotSchema.ts b/frontend/src/__generated__/models/ScreenshotSchema.ts index 764328ff5..4677a3637 100644 --- a/frontend/src/__generated__/models/ScreenshotSchema.ts +++ b/frontend/src/__generated__/models/ScreenshotSchema.ts @@ -1,6 +1,7 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ +/* eslint-disable */ export type ScreenshotSchema = { id: number; diff --git a/frontend/src/__generated__/models/SearchRomSchema.ts b/frontend/src/__generated__/models/SearchRomSchema.ts index 421901cf6..2f303ff1c 100644 --- a/frontend/src/__generated__/models/SearchRomSchema.ts +++ b/frontend/src/__generated__/models/SearchRomSchema.ts @@ -1,6 +1,7 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ +/* eslint-disable */ export type SearchRomSchema = { igdb_id?: number | null; diff --git a/frontend/src/__generated__/models/StateSchema.ts b/frontend/src/__generated__/models/StateSchema.ts index 03c6d3bc2..94c09ad52 100644 --- a/frontend/src/__generated__/models/StateSchema.ts +++ b/frontend/src/__generated__/models/StateSchema.ts @@ -1,6 +1,7 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ +/* eslint-disable */ import type { ScreenshotSchema } from "./ScreenshotSchema"; diff --git a/frontend/src/__generated__/models/StatsReturn.ts b/frontend/src/__generated__/models/StatsReturn.ts index 1f77463ef..b2c4d0af1 100644 --- a/frontend/src/__generated__/models/StatsReturn.ts +++ b/frontend/src/__generated__/models/StatsReturn.ts @@ -1,6 +1,7 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ +/* eslint-disable */ export type StatsReturn = { PLATFORMS: number; diff --git a/frontend/src/__generated__/models/TaskDict.ts b/frontend/src/__generated__/models/TaskDict.ts index 9934d9c99..7a8279c67 100644 --- a/frontend/src/__generated__/models/TaskDict.ts +++ b/frontend/src/__generated__/models/TaskDict.ts @@ -1,6 +1,7 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ +/* eslint-disable */ export type TaskDict = { ENABLED: boolean; diff --git a/frontend/src/__generated__/models/TokenResponse.ts b/frontend/src/__generated__/models/TokenResponse.ts index fcbc95a96..90a7da6af 100644 --- a/frontend/src/__generated__/models/TokenResponse.ts +++ b/frontend/src/__generated__/models/TokenResponse.ts @@ -1,6 +1,7 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ +/* eslint-disable */ export type TokenResponse = { access_token: string; diff --git a/frontend/src/__generated__/models/UploadedSavesResponse.ts b/frontend/src/__generated__/models/UploadedSavesResponse.ts index 6830f6f80..ff8049233 100644 --- a/frontend/src/__generated__/models/UploadedSavesResponse.ts +++ b/frontend/src/__generated__/models/UploadedSavesResponse.ts @@ -1,6 +1,7 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ +/* eslint-disable */ import type { SaveSchema } from "./SaveSchema"; diff --git a/frontend/src/__generated__/models/UploadedScreenshotsResponse.ts b/frontend/src/__generated__/models/UploadedScreenshotsResponse.ts index 529cc0585..7642bdaa8 100644 --- a/frontend/src/__generated__/models/UploadedScreenshotsResponse.ts +++ b/frontend/src/__generated__/models/UploadedScreenshotsResponse.ts @@ -1,6 +1,7 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ +/* eslint-disable */ import type { ScreenshotSchema } from "./ScreenshotSchema"; diff --git a/frontend/src/__generated__/models/UploadedStatesResponse.ts b/frontend/src/__generated__/models/UploadedStatesResponse.ts index de1177cb3..81615a9f3 100644 --- a/frontend/src/__generated__/models/UploadedStatesResponse.ts +++ b/frontend/src/__generated__/models/UploadedStatesResponse.ts @@ -1,6 +1,7 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ +/* eslint-disable */ import type { StateSchema } from "./StateSchema"; diff --git a/frontend/src/__generated__/models/UserNotesSchema.ts b/frontend/src/__generated__/models/UserNotesSchema.ts index 03aaa02e2..b9a84681a 100644 --- a/frontend/src/__generated__/models/UserNotesSchema.ts +++ b/frontend/src/__generated__/models/UserNotesSchema.ts @@ -1,6 +1,7 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ +/* eslint-disable */ export type UserNotesSchema = { user_id: number; diff --git a/frontend/src/__generated__/models/UserSchema.ts b/frontend/src/__generated__/models/UserSchema.ts index d42f3ac7f..4117c59fa 100644 --- a/frontend/src/__generated__/models/UserSchema.ts +++ b/frontend/src/__generated__/models/UserSchema.ts @@ -1,6 +1,7 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ +/* eslint-disable */ import type { Role } from "./Role"; diff --git a/frontend/src/__generated__/models/ValidationError.ts b/frontend/src/__generated__/models/ValidationError.ts index 472c7f5fa..c725678ad 100644 --- a/frontend/src/__generated__/models/ValidationError.ts +++ b/frontend/src/__generated__/models/ValidationError.ts @@ -1,6 +1,7 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ +/* eslint-disable */ export type ValidationError = { loc: Array; diff --git a/frontend/src/__generated__/models/WatcherDict.ts b/frontend/src/__generated__/models/WatcherDict.ts index 78fce95ea..6c3e97a2b 100644 --- a/frontend/src/__generated__/models/WatcherDict.ts +++ b/frontend/src/__generated__/models/WatcherDict.ts @@ -1,6 +1,7 @@ /* generated using openapi-typescript-codegen -- do no edit */ /* istanbul ignore file */ /* tslint:disable */ +/* eslint-disable */ export type WatcherDict = { ENABLED: boolean; diff --git a/frontend/src/components/Gallery/AppBar/common/FilterDrawer/Base.vue b/frontend/src/components/Gallery/AppBar/common/FilterDrawer/Base.vue index 93d75fc7b..957576fa4 100644 --- a/frontend/src/components/Gallery/AppBar/common/FilterDrawer/Base.vue +++ b/frontend/src/components/Gallery/AppBar/common/FilterDrawer/Base.vue @@ -1,6 +1,7 @@ + + diff --git a/frontend/src/components/Gallery/AppBar/common/FilterDrawer/FilterFavouritesBtn.vue b/frontend/src/components/Gallery/AppBar/common/FilterDrawer/FilterFavouritesBtn.vue index f6a8773d4..5db1adc87 100644 --- a/frontend/src/components/Gallery/AppBar/common/FilterDrawer/FilterFavouritesBtn.vue +++ b/frontend/src/components/Gallery/AppBar/common/FilterDrawer/FilterFavouritesBtn.vue @@ -31,7 +31,7 @@ function setFavourites() { 'text-romm-white': !filterFavourites, 'text-romm-accent-1': filterFavourites, }" - >Filter favouritesShow favourites diff --git a/frontend/src/components/Gallery/AppBar/common/FilterDrawer/FilterUnmatchedBtn.vue b/frontend/src/components/Gallery/AppBar/common/FilterDrawer/FilterUnmatchedBtn.vue index 96c0c290b..f7155d893 100644 --- a/frontend/src/components/Gallery/AppBar/common/FilterDrawer/FilterUnmatchedBtn.vue +++ b/frontend/src/components/Gallery/AppBar/common/FilterDrawer/FilterUnmatchedBtn.vue @@ -31,7 +31,7 @@ function setUnmatched() { 'text-romm-white': !filterUnmatched, 'text-romm-accent-1': filterUnmatched, }" - >Filter unmatchedShow unmatched diff --git a/frontend/src/components/common/Game/Card/Flags.vue b/frontend/src/components/common/Game/Card/Flags.vue index 2e037f533..fad1f7847 100644 --- a/frontend/src/components/common/Game/Card/Flags.vue +++ b/frontend/src/components/common/Game/Card/Flags.vue @@ -39,10 +39,10 @@ const showSiblings = isNull(localStorage.getItem("settings.showSiblings")) - +{{ rom.siblings.length }} + +{{ rom.sibling_roms.length }} diff --git a/frontend/src/components/common/Game/Table.vue b/frontend/src/components/common/Game/Table.vue index 73518a37f..3f2fd0642 100644 --- a/frontend/src/components/common/Game/Table.vue +++ b/frontend/src/components/common/Game/Table.vue @@ -136,11 +136,11 @@ onMounted(() => { > diff --git a/frontend/src/stores/galleryFilter.ts b/frontend/src/stores/galleryFilter.ts index f79b361a1..d0b9ccca5 100644 --- a/frontend/src/stores/galleryFilter.ts +++ b/frontend/src/stores/galleryFilter.ts @@ -12,6 +12,7 @@ export default defineStore("galleryFilter", { filterCompanies: [] as string[], filterUnmatched: false, filterFavourites: false, + filterDuplicates: false, selectedGenre: null as string | null, selectedFranchise: null as string | null, selectedCollection: null as string | null, @@ -61,11 +62,18 @@ export default defineStore("galleryFilter", { disableFilterFavourites() { this.filterFavourites = false; }, + switchFilterDuplicates() { + this.filterDuplicates = !this.filterDuplicates; + }, + disableFilterDuplicates() { + this.filterDuplicates = false; + }, isFiltered() { return Boolean( normalizeString(this.filterSearch).trim() != "" || this.filterUnmatched || this.filterFavourites || + this.filterDuplicates || this.selectedGenre || this.selectedFranchise || this.selectedCollection || diff --git a/frontend/src/stores/roms.ts b/frontend/src/stores/roms.ts index 073a9e5a1..b9456821b 100644 --- a/frontend/src/stores/roms.ts +++ b/frontend/src/stores/roms.ts @@ -13,9 +13,7 @@ type GalleryFilterStore = ExtractPiniaStoreType; const collectionStore = storeCollection(); -export type SimpleRom = RomSchema & { - siblings?: RomSchema[]; // Added by the frontend -}; +export type SimpleRom = RomSchema; export type DetailedRom = DetailedRomSchema; @@ -45,10 +43,9 @@ export default defineStore("roms", { actions: { _reorder() { // Sort roms by comparator string - this.allRoms = this.allRoms.sort((a, b) => { + this.allRoms = uniqBy(this.allRoms, "id").sort((a, b) => { return a.sort_comparator.localeCompare(b.sort_comparator); }); - this.allRoms = uniqBy(this.allRoms, "id"); // Check if roms should be grouped const groupRoms = localStorage.getItem("settings.groupRoms") === "true"; @@ -68,25 +65,9 @@ export default defineStore("roms", { ) .map((games) => { // Find the index of the game where the 'rom_user' property has 'is_main_sibling' set to true. - // If such a game is found, 'mainSiblingIndex' will be its index, otherwise it will be -1. - const mainSiblingIndex = games.findIndex( - (game) => game.rom_user?.is_main_sibling, + return ( + games.find((game) => game.rom_user?.is_main_sibling) || games[0] ); - - // Determine the primary game: - // - If 'mainSiblingIndex' is not -1 (i.e., a main sibling game was found), - // remove that game from the 'games' array and set it as 'primaryGame'. - // - If no main sibling game was found ('mainSiblingIndex' is -1), - // remove the first game from the 'games' array and set it as 'primaryGame'. - const primaryGame = - mainSiblingIndex !== -1 - ? games.splice(mainSiblingIndex, 1)[0] - : games.shift(); - - return { - ...(primaryGame as SimpleRom), - siblings: games, - }; }) .sort((a, b) => { return a.sort_comparator.localeCompare(b.sort_comparator); @@ -160,6 +141,9 @@ export default defineStore("roms", { if (galleryFilter.filterFavourites) { this._filterFavourites(); } + if (galleryFilter.filterDuplicates) { + this._filterDuplicates(); + } if (galleryFilter.selectedGenre) { this._filterGenre(galleryFilter.selectedGenre); } @@ -192,6 +176,11 @@ export default defineStore("roms", { .filter((rom) => collectionStore.favCollection?.roms?.includes(rom.id)) .map((roms) => roms.id); }, + _filterDuplicates() { + this._filteredIDs = this.filteredRoms + .filter((rom) => rom.sibling_roms?.length) + .map((rom) => rom.id); + }, _filterGenre(genreToFilter: string) { this._filteredIDs = this.filteredRoms .filter((rom) => rom.genres.some((genre) => genre === genreToFilter))