mirror of
https://github.com/stashapp/stash.git
synced 2025-12-18 21:04:37 +03:00
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:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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={() => {
|
||||||
|
|||||||
Reference in New Issue
Block a user