mirror of
https://github.com/stashapp/stash.git
synced 2025-12-10 02:15:30 +01:00
Add additional fields to bulk performer dialog (#2282)
* Add country to EditPerformersDialog * Add most text fields to EditPerformersDialog * Refactor to pass validate * Remove height and measurements fields * Add gender field * Run fmt-ui
This commit is contained in:
parent
ddf38726a4
commit
516f223329
1 changed files with 96 additions and 13 deletions
|
|
@ -9,6 +9,7 @@ import { useToast } from "src/hooks";
|
|||
import { FormUtils } from "src/utils";
|
||||
import MultiSet from "../Shared/MultiSet";
|
||||
import { RatingStars } from "../Scenes/SceneDetails/RatingStars";
|
||||
import { genderStrings, stringToGender } from "src/utils/gender";
|
||||
|
||||
interface IListOperationProps {
|
||||
selected: GQL.SlimPerformerDataFragment[];
|
||||
|
|
@ -27,6 +28,16 @@ export const EditPerformersDialog: React.FC<IListOperationProps> = (
|
|||
const [tagIds, setTagIds] = useState<string[]>();
|
||||
const [existingTagIds, setExistingTagIds] = useState<string[]>();
|
||||
const [favorite, setFavorite] = useState<boolean | undefined>();
|
||||
const [ethnicity, setEthnicity] = useState<string | undefined>();
|
||||
const [country, setCountry] = useState<string | undefined>();
|
||||
const [eyeColor, setEyeColor] = useState<string | undefined>();
|
||||
const [fakeTits, setFakeTits] = useState<string | undefined>();
|
||||
const [careerLength, setCareerLength] = useState<string | undefined>();
|
||||
const [tattoos, setTattoos] = useState<string | undefined>();
|
||||
const [piercings, setPiercings] = useState<string | undefined>();
|
||||
const [hairColor, setHairColor] = useState<string | undefined>();
|
||||
const [gender, setGender] = useState<GQL.GenderEnum | undefined>();
|
||||
const genderOptions = [""].concat(genderStrings);
|
||||
|
||||
const [updatePerformers] = useBulkPerformerUpdate(getPerformerInput());
|
||||
|
||||
|
|
@ -84,9 +95,16 @@ export const EditPerformersDialog: React.FC<IListOperationProps> = (
|
|||
performerInput.tag_ids = makeBulkUpdateIds(tagIds || [], tagMode);
|
||||
}
|
||||
|
||||
if (favorite !== undefined) {
|
||||
performerInput.favorite = favorite;
|
||||
}
|
||||
performerInput.favorite = favorite;
|
||||
performerInput.ethnicity = ethnicity;
|
||||
performerInput.country = country;
|
||||
performerInput.eye_color = eyeColor;
|
||||
performerInput.fake_tits = fakeTits;
|
||||
performerInput.career_length = careerLength;
|
||||
performerInput.tattoos = tattoos;
|
||||
performerInput.piercings = piercings;
|
||||
performerInput.hair_color = hairColor;
|
||||
performerInput.gender = gender;
|
||||
|
||||
return performerInput;
|
||||
}
|
||||
|
|
@ -155,6 +173,7 @@ export const EditPerformersDialog: React.FC<IListOperationProps> = (
|
|||
let updateTagIds: string[] = [];
|
||||
let updateFavorite: boolean | undefined;
|
||||
let updateRating: number | undefined;
|
||||
let updateGender: GQL.GenderEnum | undefined;
|
||||
let first = true;
|
||||
|
||||
state.forEach((performer: GQL.SlimPerformerDataFragment) => {
|
||||
|
|
@ -166,6 +185,7 @@ export const EditPerformersDialog: React.FC<IListOperationProps> = (
|
|||
first = false;
|
||||
updateFavorite = performer.favorite;
|
||||
updateRating = performerRating ?? undefined;
|
||||
updateGender = performer.gender ?? undefined;
|
||||
} else {
|
||||
if (!_.isEqual(performerTagIDs, updateTagIds)) {
|
||||
updateTagIds = [];
|
||||
|
|
@ -176,12 +196,26 @@ export const EditPerformersDialog: React.FC<IListOperationProps> = (
|
|||
if (performerRating !== updateRating) {
|
||||
updateRating = undefined;
|
||||
}
|
||||
if (performer.gender !== updateGender) {
|
||||
updateGender = undefined;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
setExistingTagIds(updateTagIds);
|
||||
setFavorite(updateFavorite);
|
||||
setRating(updateRating);
|
||||
setGender(updateGender);
|
||||
|
||||
// these fields are not part of SlimPerformerDataFragment
|
||||
setEthnicity(undefined);
|
||||
setCountry(undefined);
|
||||
setEyeColor(undefined);
|
||||
setFakeTits(undefined);
|
||||
setCareerLength(undefined);
|
||||
setTattoos(undefined);
|
||||
setPiercings(undefined);
|
||||
setHairColor(undefined);
|
||||
}, [props.selected, tagMode]);
|
||||
|
||||
useEffect(() => {
|
||||
|
|
@ -200,6 +234,27 @@ export const EditPerformersDialog: React.FC<IListOperationProps> = (
|
|||
}
|
||||
}
|
||||
|
||||
function renderTextField(
|
||||
name: string,
|
||||
value: string | undefined,
|
||||
setter: (newValue: string | undefined) => void
|
||||
) {
|
||||
return (
|
||||
<Form.Group controlId={name}>
|
||||
<Form.Label>
|
||||
<FormattedMessage id={name} />
|
||||
</Form.Label>
|
||||
<Form.Control
|
||||
className="input-control"
|
||||
type="text"
|
||||
value={value}
|
||||
onChange={(event) => setter(event.currentTarget.value)}
|
||||
placeholder={intl.formatMessage({ id: name })}
|
||||
/>
|
||||
</Form.Group>
|
||||
);
|
||||
}
|
||||
|
||||
function render() {
|
||||
return (
|
||||
<Modal
|
||||
|
|
@ -230,6 +285,44 @@ export const EditPerformersDialog: React.FC<IListOperationProps> = (
|
|||
</Col>
|
||||
</Form.Group>
|
||||
<Form>
|
||||
<Form.Group controlId="favorite">
|
||||
<Form.Check
|
||||
type="checkbox"
|
||||
label="Favorite"
|
||||
checked={favorite}
|
||||
ref={checkboxRef}
|
||||
onChange={() => cycleFavorite()}
|
||||
/>
|
||||
</Form.Group>
|
||||
|
||||
<Form.Group>
|
||||
<Form.Label>
|
||||
<FormattedMessage id="gender" />
|
||||
</Form.Label>
|
||||
<Form.Control
|
||||
as="select"
|
||||
className="input-control"
|
||||
onChange={(event) =>
|
||||
setGender(stringToGender(event.currentTarget.value))
|
||||
}
|
||||
>
|
||||
{genderOptions.map((opt) => (
|
||||
<option value={opt} key={opt}>
|
||||
{opt}
|
||||
</option>
|
||||
))}
|
||||
</Form.Control>
|
||||
</Form.Group>
|
||||
|
||||
{renderTextField("country", country, setCountry)}
|
||||
{renderTextField("ethnicity", ethnicity, setEthnicity)}
|
||||
{renderTextField("hair_color", hairColor, setHairColor)}
|
||||
{renderTextField("eye_color", eyeColor, setEyeColor)}
|
||||
{renderTextField("fake_tits", fakeTits, setFakeTits)}
|
||||
{renderTextField("tattoos", tattoos, setTattoos)}
|
||||
{renderTextField("piercings", piercings, setPiercings)}
|
||||
{renderTextField("career_length", careerLength, setCareerLength)}
|
||||
|
||||
<Form.Group controlId="tags">
|
||||
<Form.Label>
|
||||
<FormattedMessage id="tags" />
|
||||
|
|
@ -244,16 +337,6 @@ export const EditPerformersDialog: React.FC<IListOperationProps> = (
|
|||
mode={tagMode}
|
||||
/>
|
||||
</Form.Group>
|
||||
|
||||
<Form.Group controlId="favorite">
|
||||
<Form.Check
|
||||
type="checkbox"
|
||||
label="Favorite"
|
||||
checked={favorite}
|
||||
ref={checkboxRef}
|
||||
onChange={() => cycleFavorite()}
|
||||
/>
|
||||
</Form.Group>
|
||||
</Form>
|
||||
</Modal>
|
||||
);
|
||||
|
|
|
|||
Loading…
Reference in a new issue