diff --git a/ui/v2.5/src/components/Galleries/GalleryDetails/GalleryEditPanel.tsx b/ui/v2.5/src/components/Galleries/GalleryDetails/GalleryEditPanel.tsx index 5372c30c0..6e472412d 100644 --- a/ui/v2.5/src/components/Galleries/GalleryDetails/GalleryEditPanel.tsx +++ b/ui/v2.5/src/components/Galleries/GalleryDetails/GalleryEditPanel.tsx @@ -120,6 +120,11 @@ export const GalleryEditPanel: React.FC< onSubmit: (values) => onSave(getGalleryInput(values)), }); + // always dirty if creating a new gallery with a title + if (isNew && gallery?.title) { + formik.dirty = true; + } + function setRating(v: number) { formik.setFieldValue("rating100", v); } diff --git a/ui/v2.5/src/components/Performers/PerformerDetails/PerformerEditPanel.tsx b/ui/v2.5/src/components/Performers/PerformerDetails/PerformerEditPanel.tsx index c3ab363fd..f542ee7de 100644 --- a/ui/v2.5/src/components/Performers/PerformerDetails/PerformerEditPanel.tsx +++ b/ui/v2.5/src/components/Performers/PerformerDetails/PerformerEditPanel.tsx @@ -173,6 +173,11 @@ export const PerformerEditPanel: React.FC = ({ onSubmit: (values) => onSave(values), }); + // always dirty if creating a new performer with a name + if (isNew && performer.name) { + formik.dirty = true; + } + function translateScrapedGender(scrapedGender?: string) { if (!scrapedGender) { return; diff --git a/ui/v2.5/src/components/Studios/StudioDetails/StudioEditPanel.tsx b/ui/v2.5/src/components/Studios/StudioDetails/StudioEditPanel.tsx index 0ee83e0c2..0eb0629fa 100644 --- a/ui/v2.5/src/components/Studios/StudioDetails/StudioEditPanel.tsx +++ b/ui/v2.5/src/components/Studios/StudioDetails/StudioEditPanel.tsx @@ -83,6 +83,11 @@ export const StudioEditPanel: React.FC = ({ onSubmit: (values) => onSubmit(getStudioInput(values)), }); + // always dirty if creating a new studio with a name + if (isNew && studio.name) { + formik.dirty = true; + } + function setRating(v: number) { formik.setFieldValue("rating100", v); } diff --git a/ui/v2.5/src/components/Tags/TagDetails/TagCreate.tsx b/ui/v2.5/src/components/Tags/TagDetails/TagCreate.tsx index b15ceedab..f599161b3 100644 --- a/ui/v2.5/src/components/Tags/TagDetails/TagCreate.tsx +++ b/ui/v2.5/src/components/Tags/TagDetails/TagCreate.tsx @@ -62,7 +62,7 @@ const TagCreate: React.FC = () => { parents: created.parents, children: created.children, }); - return created.id; + history.push(`/tags/${result.data.tagCreate.id}`); } } catch (e) { Toast.error(e); diff --git a/ui/v2.5/src/components/Tags/TagDetails/TagEditPanel.tsx b/ui/v2.5/src/components/Tags/TagDetails/TagEditPanel.tsx index 282340130..4e153359e 100644 --- a/ui/v2.5/src/components/Tags/TagDetails/TagEditPanel.tsx +++ b/ui/v2.5/src/components/Tags/TagDetails/TagEditPanel.tsx @@ -6,16 +6,14 @@ import { DetailsEditNavbar, TagSelect } from "src/components/Shared"; import { Form, Col, Row } from "react-bootstrap"; import { FormUtils, ImageUtils } from "src/utils"; import { useFormik } from "formik"; -import { Prompt, useHistory, useParams } from "react-router-dom"; +import { Prompt, useParams } from "react-router-dom"; import Mousetrap from "mousetrap"; import { StringListInput } from "src/components/Shared/StringListInput"; interface ITagEditPanel { tag?: Partial; // returns id - onSubmit: ( - tag: Partial - ) => Promise; + onSubmit: (tag: Partial) => void; onCancel: () => void; onDelete: () => void; setImage: (image?: string | null) => void; @@ -33,7 +31,6 @@ export const TagEditPanel: React.FC = ({ setImage, }) => { const intl = useIntl(); - const history = useHistory(); const params = useParams(); const idParam = params.id; @@ -79,15 +76,12 @@ export const TagEditPanel: React.FC = ({ initialValues, validationSchema: schema, enableReinitialize: true, - onSubmit: doSubmit, + onSubmit: (values) => onSubmit(getTagInput(values)), }); - async function doSubmit(values: InputValues) { - const id = await onSubmit(getTagInput(values)); - if (id) { - formik.resetForm({ values }); - history.push(`/tags/${id}`); - } + // always dirty if creating a new tag with a name + if (isNew && tag?.name) { + formik.dirty = true; } // set up hotkeys @@ -130,8 +124,8 @@ export const TagEditPanel: React.FC = ({ { - if (!isNew && location.pathname.startsWith(`/tags/${tag?.id}`)) { + message={(location, action) => { + if (action === "PUSH" && location.pathname.startsWith(`/tags/`)) { return true; } return intl.formatMessage({ id: "dialogs.unsaved_changes" }); @@ -260,6 +254,7 @@ export const TagEditPanel: React.FC = ({ isEditing={isEditing} onToggleEdit={onCancel} onSave={() => formik.handleSubmit()} + saveDisabled={!formik.dirty} onImageChange={onImageChange} onImageChangeURL={setImage} onClearImage={() => {