Fix save disabled when creating new object with name (#3409)

* Dirty when creating with name
* Fix prompt on tag save
This commit is contained in:
WithoutPants
2023-02-11 08:59:08 +11:00
committed by GitHub
parent 18b44e9381
commit 692c1e55ac
5 changed files with 25 additions and 15 deletions

View File

@@ -120,6 +120,11 @@ export const GalleryEditPanel: React.FC<
onSubmit: (values) => onSave(getGalleryInput(values)), 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) { function setRating(v: number) {
formik.setFieldValue("rating100", v); formik.setFieldValue("rating100", v);
} }

View File

@@ -173,6 +173,11 @@ export const PerformerEditPanel: React.FC<IPerformerDetails> = ({
onSubmit: (values) => onSave(values), 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) { function translateScrapedGender(scrapedGender?: string) {
if (!scrapedGender) { if (!scrapedGender) {
return; return;

View File

@@ -83,6 +83,11 @@ export const StudioEditPanel: React.FC<IStudioEditPanel> = ({
onSubmit: (values) => onSubmit(getStudioInput(values)), 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) { function setRating(v: number) {
formik.setFieldValue("rating100", v); formik.setFieldValue("rating100", v);
} }

View File

@@ -62,7 +62,7 @@ const TagCreate: React.FC = () => {
parents: created.parents, parents: created.parents,
children: created.children, children: created.children,
}); });
return created.id; history.push(`/tags/${result.data.tagCreate.id}`);
} }
} catch (e) { } catch (e) {
Toast.error(e); Toast.error(e);

View File

@@ -6,16 +6,14 @@ import { DetailsEditNavbar, TagSelect } from "src/components/Shared";
import { Form, Col, Row } from "react-bootstrap"; import { Form, Col, Row } from "react-bootstrap";
import { FormUtils, ImageUtils } from "src/utils"; import { FormUtils, ImageUtils } from "src/utils";
import { useFormik } from "formik"; import { useFormik } from "formik";
import { Prompt, useHistory, useParams } from "react-router-dom"; import { Prompt, useParams } from "react-router-dom";
import Mousetrap from "mousetrap"; import Mousetrap from "mousetrap";
import { StringListInput } from "src/components/Shared/StringListInput"; import { StringListInput } from "src/components/Shared/StringListInput";
interface ITagEditPanel { interface ITagEditPanel {
tag?: Partial<GQL.TagDataFragment>; tag?: Partial<GQL.TagDataFragment>;
// returns id // returns id
onSubmit: ( onSubmit: (tag: Partial<GQL.TagCreateInput | GQL.TagUpdateInput>) => void;
tag: Partial<GQL.TagCreateInput | GQL.TagUpdateInput>
) => Promise<string | undefined>;
onCancel: () => void; onCancel: () => void;
onDelete: () => void; onDelete: () => void;
setImage: (image?: string | null) => void; setImage: (image?: string | null) => void;
@@ -33,7 +31,6 @@ export const TagEditPanel: React.FC<ITagEditPanel> = ({
setImage, setImage,
}) => { }) => {
const intl = useIntl(); const intl = useIntl();
const history = useHistory();
const params = useParams<ITagEditPanelParams>(); const params = useParams<ITagEditPanelParams>();
const idParam = params.id; const idParam = params.id;
@@ -79,15 +76,12 @@ export const TagEditPanel: React.FC<ITagEditPanel> = ({
initialValues, initialValues,
validationSchema: schema, validationSchema: schema,
enableReinitialize: true, enableReinitialize: true,
onSubmit: doSubmit, onSubmit: (values) => onSubmit(getTagInput(values)),
}); });
async function doSubmit(values: InputValues) { // always dirty if creating a new tag with a name
const id = await onSubmit(getTagInput(values)); if (isNew && tag?.name) {
if (id) { formik.dirty = true;
formik.resetForm({ values });
history.push(`/tags/${id}`);
}
} }
// set up hotkeys // set up hotkeys
@@ -130,8 +124,8 @@ export const TagEditPanel: React.FC<ITagEditPanel> = ({
<Prompt <Prompt
when={formik.dirty} when={formik.dirty}
message={(location) => { message={(location, action) => {
if (!isNew && location.pathname.startsWith(`/tags/${tag?.id}`)) { if (action === "PUSH" && location.pathname.startsWith(`/tags/`)) {
return true; return true;
} }
return intl.formatMessage({ id: "dialogs.unsaved_changes" }); return intl.formatMessage({ id: "dialogs.unsaved_changes" });
@@ -260,6 +254,7 @@ export const TagEditPanel: React.FC<ITagEditPanel> = ({
isEditing={isEditing} isEditing={isEditing}
onToggleEdit={onCancel} onToggleEdit={onCancel}
onSave={() => formik.handleSubmit()} onSave={() => formik.handleSubmit()}
saveDisabled={!formik.dirty}
onImageChange={onImageChange} onImageChange={onImageChange}
onImageChangeURL={setImage} onImageChangeURL={setImage}
onClearImage={() => { onClearImage={() => {