diff --git a/ui/v2.5/src/components/Movies/MovieDetails/MovieEditPanel.tsx b/ui/v2.5/src/components/Movies/MovieDetails/MovieEditPanel.tsx index ed8102d85..80217eff5 100644 --- a/ui/v2.5/src/components/Movies/MovieDetails/MovieEditPanel.tsx +++ b/ui/v2.5/src/components/Movies/MovieDetails/MovieEditPanel.tsx @@ -228,6 +228,7 @@ export const MovieEditPanel: React.FC = ({ return ( { onScrapeDialogClosed(m); diff --git a/ui/v2.5/src/components/Movies/MovieDetails/MovieScrapeDialog.tsx b/ui/v2.5/src/components/Movies/MovieDetails/MovieScrapeDialog.tsx index d0fcf03fc..3ae243ab5 100644 --- a/ui/v2.5/src/components/Movies/MovieDetails/MovieScrapeDialog.tsx +++ b/ui/v2.5/src/components/Movies/MovieDetails/MovieScrapeDialog.tsx @@ -5,66 +5,20 @@ import { ScrapeDialog, ScrapedInputGroupRow, ScrapedImageRow, - ScrapeDialogRow, ScrapedTextAreaRow, } from "src/components/Shared/ScrapeDialog/ScrapeDialog"; -import { StudioSelect } from "src/components/Shared/Select"; import TextUtils from "src/utils/text"; -import { useStudioCreate } from "src/core/StashService"; -import { useToast } from "src/hooks/Toast"; -import { ScrapeResult } from "src/components/Shared/ScrapeDialog/scrapeResult"; - -function renderScrapedStudio( - result: ScrapeResult, - isNew?: boolean, - onChange?: (value: string) => void -) { - const resultValue = isNew ? result.newValue : result.originalValue; - const value = resultValue ? [resultValue] : []; - - return ( - { - if (onChange) { - onChange(items[0]?.id); - } - }} - ids={value} - /> - ); -} - -function renderScrapedStudioRow( - result: ScrapeResult, - onChange: (value: ScrapeResult) => void, - newStudio?: GQL.ScrapedStudio, - onCreateNew?: (value: GQL.ScrapedStudio) => void -) { - return ( - renderScrapedStudio(result)} - renderNewField={() => - renderScrapedStudio(result, true, (value) => - onChange(result.cloneWithValue(value)) - ) - } - onChange={onChange} - newValues={newStudio ? [newStudio] : undefined} - onCreateNew={() => { - if (onCreateNew && newStudio) { - onCreateNew(newStudio); - } - }} - /> - ); -} +import { + ObjectScrapeResult, + ScrapeResult, +} from "src/components/Shared/ScrapeDialog/scrapeResult"; +import { Studio } from "src/components/Studios/StudioSelect"; +import { useCreateScrapedStudio } from "src/components/Shared/ScrapeDialog/createObjects"; +import { ScrapedStudioRow } from "src/components/Shared/ScrapeDialog/ScrapedObjectsRow"; interface IMovieScrapeDialogProps { movie: Partial; + movieStudio: Studio | null; scraped: GQL.ScrapedMovie; onClose: (scrapedMovie?: GQL.ScrapedMovie) => void; @@ -99,10 +53,15 @@ export const MovieScrapeDialog: React.FC = ( const [synopsis, setSynopsis] = useState>( new ScrapeResult(props.movie.synopsis, props.scraped.synopsis) ); - const [studio, setStudio] = useState>( - new ScrapeResult( - props.movie.studio_id, - props.scraped.studio?.stored_id + const [studio, setStudio] = useState>( + new ObjectScrapeResult( + props.movieStudio + ? { + stored_id: props.movieStudio.id, + name: props.movieStudio.name, + } + : undefined, + props.scraped.studio?.stored_id ? props.scraped.studio : undefined ) ); const [url, setURL] = useState>( @@ -121,34 +80,11 @@ export const MovieScrapeDialog: React.FC = ( : undefined ); - const [createStudio] = useStudioCreate(); - - const Toast = useToast(); - - async function createNewStudio(toCreate: GQL.ScrapedStudio) { - try { - const result = await createStudio({ - variables: { - input: { - name: toCreate.name, - url: toCreate.url, - }, - }, - }); - - // set the new studio as the value - setStudio(studio.cloneWithValue(result.data!.studioCreate!.id)); - setNewStudio(undefined); - - Toast.success( - - Created studio: {toCreate.name} - - ); - } catch (e) { - Toast.error(e); - } - } + const createNewStudio = useCreateScrapedStudio({ + scrapeResult: studio, + setScrapeResult: setStudio, + setNewObject: setNewStudio, + }); const allFields = [ name, @@ -170,7 +106,7 @@ export const MovieScrapeDialog: React.FC = ( // todo: reenable function makeNewScrapedItem(): GQL.ScrapedMovie { - const newVal = studio.getNewValue(); + const newStudioValue = studio.getNewValue(); const durationString = duration.getNewValue(); return { @@ -180,12 +116,7 @@ export const MovieScrapeDialog: React.FC = ( date: date.getNewValue(), director: director.getNewValue(), synopsis: synopsis.getNewValue(), - studio: newVal - ? { - stored_id: newVal, - name: "", - } - : undefined, + studio: newStudioValue, url: url.getNewValue(), front_image: frontImage.getNewValue(), back_image: backImage.getNewValue(), @@ -226,12 +157,13 @@ export const MovieScrapeDialog: React.FC = ( result={synopsis} onChange={(value) => setSynopsis(value)} /> - {renderScrapedStudioRow( - studio, - (value) => setStudio(value), - newStudio, - createNewStudio - )} + setStudio(value)} + newStudio={newStudio} + onCreateNew={createNewStudio} + />