import React, { useState } from "react"; import { Form } from "react-bootstrap"; import { mutateImportObjects } from "src/core/StashService"; import { Modal } from "src/components/Shared"; import * as GQL from "src/core/generated-graphql"; import { useToast } from "src/hooks"; import { useIntl } from "react-intl"; interface IImportDialogProps { onClose: () => void; } export const ImportDialog: React.FC = ( props: IImportDialogProps ) => { const [duplicateBehaviour, setDuplicateBehaviour] = useState( duplicateHandlingToString(GQL.ImportDuplicateEnum.Ignore) ); const [missingRefBehaviour, setMissingRefBehaviour] = useState( missingRefHandlingToString(GQL.ImportMissingRefEnum.Fail) ); const [file, setFile] = useState(); // Network state const [isRunning, setIsRunning] = useState(false); const intl = useIntl(); const Toast = useToast(); function duplicateHandlingToString( value: GQL.ImportDuplicateEnum | undefined ) { switch (value) { case GQL.ImportDuplicateEnum.Fail: return "Fail"; case GQL.ImportDuplicateEnum.Ignore: return "Ignore"; case GQL.ImportDuplicateEnum.Overwrite: return "Overwrite"; } return "Ignore"; } function translateDuplicateHandling(value: string) { switch (value) { case "Fail": return GQL.ImportDuplicateEnum.Fail; case "Ignore": return GQL.ImportDuplicateEnum.Ignore; case "Overwrite": return GQL.ImportDuplicateEnum.Overwrite; } return GQL.ImportDuplicateEnum.Ignore; } function missingRefHandlingToString( value: GQL.ImportMissingRefEnum | undefined ) { switch (value) { case GQL.ImportMissingRefEnum.Fail: return "Fail"; case GQL.ImportMissingRefEnum.Ignore: return "Ignore"; case GQL.ImportMissingRefEnum.Create: return "Create"; } return "Fail"; } function translateMissingRefHandling(value: string) { switch (value) { case "Fail": return GQL.ImportMissingRefEnum.Fail; case "Ignore": return GQL.ImportMissingRefEnum.Ignore; case "Create": return GQL.ImportMissingRefEnum.Create; } return GQL.ImportMissingRefEnum.Fail; } function onFileChange(event: React.ChangeEvent) { if ( event.target.validity.valid && event.target.files && event.target.files.length > 0 ) { setFile(event.target.files[0]); } } async function onImport() { try { setIsRunning(true); await mutateImportObjects({ duplicateBehaviour: translateDuplicateHandling(duplicateBehaviour), missingRefBehaviour: translateMissingRefHandling(missingRefBehaviour), file, }); setIsRunning(false); Toast.success({ content: intl.formatMessage({ id: "toast.started_importing" }), }); } catch (e) { Toast.error(e); } finally { props.onClose(); } } return ( { onImport(); }, text: intl.formatMessage({ id: "actions.import" }), }} cancel={{ onClick: () => props.onClose(), text: intl.formatMessage({ id: "actions.cancel" }), variant: "secondary", }} disabled={!file} isRunning={isRunning} >
Import zip file
Duplicate object handling
) => setDuplicateBehaviour(e.currentTarget.value) } > {Object.values(GQL.ImportDuplicateEnum).map((p) => ( ))}
Missing reference handling
) => setMissingRefBehaviour(e.currentTarget.value) } > {Object.values(GQL.ImportMissingRefEnum).map((p) => ( ))}
); };