Fix crash on blank aliases/urls (#4344)

* Fix crash on blank alias/url
* Fix StringListInput clear issue
This commit is contained in:
DingDongSoLong4
2023-12-12 02:28:00 +02:00
committed by GitHub
parent eca5838ce0
commit d37de0e49b
11 changed files with 163 additions and 76 deletions

View File

@@ -87,7 +87,7 @@ export const GalleryEditPanel: React.FC<IProps> = ({
const schema = yup.object({
title: titleRequired ? yup.string().required() : yup.string().ensure(),
code: yup.string().ensure(),
urls: yupUniqueStringList("urls"),
urls: yupUniqueStringList(intl),
date: yupDateString(intl),
photographer: yup.string().ensure(),
rating100: yup.number().integer().nullable().defined(),
@@ -504,12 +504,7 @@ export const GalleryEditPanel: React.FC<IProps> = ({
{renderInputField("title")}
{renderInputField("code", "text", "scene_code")}
{renderURLListField(
"urls",
"validation.urls_must_be_unique",
onScrapeGalleryURL,
urlScrapable
)}
{renderURLListField("urls", onScrapeGalleryURL, urlScrapable)}
{renderDateField("date")}
{renderInputField("photographer")}

View File

@@ -49,7 +49,7 @@ export const ImageEditPanel: React.FC<IProps> = ({
const schema = yup.object({
title: yup.string().ensure(),
code: yup.string().ensure(),
urls: yupUniqueStringList("urls"),
urls: yupUniqueStringList(intl),
date: yupDateString(intl),
details: yup.string().ensure(),
photographer: yup.string().ensure(),
@@ -258,7 +258,7 @@ export const ImageEditPanel: React.FC<IProps> = ({
{renderInputField("title")}
{renderInputField("code", "text", "scene_code")}
{renderURLListField("urls", "validation.urls_must_be_unique")}
{renderURLListField("urls")}
{renderDateField("date")}
{renderInputField("photographer")}

View File

@@ -96,7 +96,7 @@ export const PerformerEditPanel: React.FC<IPerformerDetails> = ({
const schema = yup.object({
name: yup.string().required(),
disambiguation: yup.string().ensure(),
alias_list: yupUniqueAliases("alias_list", "name"),
alias_list: yupUniqueAliases(intl, "name"),
gender: yupInputEnum(GQL.GenderEnum).nullable().defined(),
birthdate: yupDateString(intl),
death_date: yupDateString(intl),
@@ -755,11 +755,7 @@ export const PerformerEditPanel: React.FC<IPerformerDetails> = ({
{renderInputField("name")}
{renderInputField("disambiguation")}
{renderStringListField(
"alias_list",
"validation.aliases_must_be_unique",
"aliases"
)}
{renderStringListField("alias_list", "aliases")}
{renderSelectField("gender", stringGenderMap)}

View File

@@ -112,7 +112,7 @@ export const SceneEditPanel: React.FC<IProps> = ({
const schema = yup.object({
title: yup.string().ensure(),
code: yup.string().ensure(),
urls: yupUniqueStringList("urls"),
urls: yupUniqueStringList(intl),
date: yupDateString(intl),
director: yup.string().ensure(),
rating100: yup.number().integer().nullable().defined(),
@@ -824,12 +824,7 @@ export const SceneEditPanel: React.FC<IProps> = ({
{renderInputField("title")}
{renderInputField("code", "text", "scene_code")}
{renderURLListField(
"urls",
"validation.urls_must_be_unique",
onScrapeSceneURL,
urlScrapable
)}
{renderURLListField("urls", onScrapeSceneURL, urlScrapable)}
{renderDateField("date")}
{renderInputField("director")}

View File

@@ -53,12 +53,14 @@ export const StringListInput: React.FC<IStringListInputProps> = (props) => {
const values = props.value.concat("");
function valueChanged(idx: number, value: string) {
const newValues = values
.map((v, i) => {
const ret = idx !== i ? v : value;
return ret;
})
.filter((v, i) => i < values.length - 2 || v);
const newValues = props.value.slice();
newValues[idx] = value;
// if we cleared the last string, delete it from the array entirely
if (!value && idx === newValues.length - 1) {
newValues.splice(newValues.length - 1);
}
props.setValue(newValues);
}

View File

@@ -47,7 +47,7 @@ export const StudioEditPanel: React.FC<IStudioEditPanel> = ({
url: yup.string().ensure(),
details: yup.string().ensure(),
parent_id: yup.string().required().nullable(),
aliases: yupUniqueAliases("aliases", "name"),
aliases: yupUniqueAliases(intl, "name"),
ignore_auto_tag: yup.boolean().defined(),
stash_ids: yup.mixed<GQL.StashIdInput[]>().defined(),
image: yup.string().nullable().optional(),
@@ -158,7 +158,7 @@ export const StudioEditPanel: React.FC<IStudioEditPanel> = ({
<Form noValidate onSubmit={formik.handleSubmit} id="studio-edit">
{renderInputField("name")}
{renderStringListField("aliases", "validation.aliases_must_be_unique")}
{renderStringListField("aliases")}
{renderInputField("url")}
{renderInputField("details", "textarea")}
{renderParentStudioField()}

View File

@@ -43,7 +43,7 @@ export const TagEditPanel: React.FC<ITagEditPanel> = ({
const schema = yup.object({
name: yup.string().required(),
aliases: yupUniqueAliases("aliases", "name"),
aliases: yupUniqueAliases(intl, "name"),
description: yup.string().ensure(),
parent_ids: yup.array(yup.string().required()).defined(),
child_ids: yup.array(yup.string().required()).defined(),
@@ -186,7 +186,7 @@ export const TagEditPanel: React.FC<ITagEditPanel> = ({
<Form noValidate onSubmit={formik.handleSubmit} id="tag-edit">
{renderInputField("name")}
{renderStringListField("aliases", "validation.aliases_must_be_unique")}
{renderStringListField("aliases")}
{renderInputField("description", "textarea")}
{renderParentTagsField()}
{renderSubTagsField()}