import GameDto from "Frontend/generated/org/gameyfin/app/games/dto/GameDto"; import { Accordion, AccordionItem, Button, Modal, ModalBody, ModalContent, ModalFooter, ModalHeader } from "@heroui/react"; import {Form, Formik} from "formik"; import Input from "Frontend/components/general/input/Input"; import React, {useEffect, useState} from "react"; import GameUpdateDto from "Frontend/generated/org/gameyfin/app/games/dto/GameUpdateDto"; import GameEnumPropertyValuesDto from "Frontend/generated/org/gameyfin/app/games/dto/GameEnumPropertyValuesDto"; import {deepDiff} from "Frontend/util/utils"; import {GameEndpoint} from "Frontend/generated/endpoints"; import TextAreaInput from "Frontend/components/general/input/TextAreaInput"; import * as Yup from "yup"; import GameCoverPicker from "Frontend/components/general/input/GameCoverPicker"; import DatePickerInput from "Frontend/components/general/input/DatePickerInput"; import ArrayInput from "Frontend/components/general/input/ArrayInput"; import GameHeaderPicker from "Frontend/components/general/input/GameHeaderPicker"; import ArrayInputAutocomplete from "Frontend/components/general/input/ArrayInputAutocomplete"; import {useSnapshot} from "valtio/react"; import {platformState} from "Frontend/state/PlatformState"; interface EditGameMetadataModalProps { game: GameDto; isOpen: boolean; onOpenChange: () => void; } export default function EditGameMetadataModal({game, isOpen, onOpenChange}: EditGameMetadataModalProps) { const availablePlatforms = useSnapshot(platformState).available; const [propertyEnumValues, setPropertyEnumValues] = useState(); useEffect(() => { GameEndpoint.getEnumPropertyValues().then(setPropertyEnumValues); }, []); return propertyEnumValues && ( {(onClose) => { async function updateGame(values: GameUpdateDto) { //@ts-ignore const changed = deepDiff(game, values) as GameUpdateDto; if (Object.keys(changed).length === 0) return; changed.id = game.id; await GameEndpoint.updateGame(changed); onClose(); } return ( {(formik: any) => (
Update game metadata
)}
) }}
); }