Skip to content

Commit c3a6728

Browse files
dogwithakeyboardWithoutPants
authored andcommitted
Performer select calculated ages (stashapp#5110)
* Change wording of performer age at production The Performer card had "x years old in this scene", regardless of what sort of media it was attached to. I have made both strings "x [years old] at production instead. --------- Co-authored-by: WithoutPants <[email protected]>
1 parent 5e75abc commit c3a6728

File tree

12 files changed

+85
-14
lines changed

12 files changed

+85
-14
lines changed

ui/v2.5/src/components/Galleries/GalleryDetails/GalleryEditPanel.tsx

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -364,9 +364,22 @@ export const GalleryEditPanel: React.FC<IProps> = ({
364364
}
365365

366366
function renderPerformersField() {
367+
const date = (() => {
368+
try {
369+
return schema.validateSyncAt("date", formik.values);
370+
} catch (e) {
371+
return undefined;
372+
}
373+
})();
374+
367375
const title = intl.formatMessage({ id: "performers" });
368376
const control = (
369-
<PerformerSelect isMulti onSelect={onSetPerformers} values={performers} />
377+
<PerformerSelect
378+
isMulti
379+
onSelect={onSetPerformers}
380+
values={performers}
381+
ageFromDate={date}
382+
/>
370383
);
371384

372385
return renderField("performer_ids", title, control, fullWidthProps);

ui/v2.5/src/components/Galleries/GalleryDetails/GalleryScrapeDialog.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,7 @@ export const GalleryScrapeDialog: React.FC<IGalleryScrapeDialogProps> = ({
199199
onChange={(value) => setPerformers(value)}
200200
newObjects={newPerformers}
201201
onCreateNew={createNewPerformer}
202+
ageFromDate={date.useNewValue ? date.newValue : date.originalValue}
202203
/>
203204
{scrapedTagsRow}
204205
<ScrapedTextAreaRow

ui/v2.5/src/components/Images/ImageDetails/ImageEditPanel.tsx

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -350,9 +350,22 @@ export const ImageEditPanel: React.FC<IProps> = ({
350350
}
351351

352352
function renderPerformersField() {
353+
const date = (() => {
354+
try {
355+
return schema.validateSyncAt("date", formik.values);
356+
} catch (e) {
357+
return undefined;
358+
}
359+
})();
360+
353361
const title = intl.formatMessage({ id: "performers" });
354362
const control = (
355-
<PerformerSelect isMulti onSelect={onSetPerformers} values={performers} />
363+
<PerformerSelect
364+
isMulti
365+
onSelect={onSetPerformers}
366+
values={performers}
367+
ageFromDate={date}
368+
/>
356369
);
357370

358371
return renderField("performer_ids", title, control, fullWidthProps);

ui/v2.5/src/components/Performers/PerformerSelect.tsx

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ const performerSelectSort = PatchFunction(
7171
);
7272

7373
const _PerformerSelect: React.FC<
74-
IFilterProps & IFilterValueProps<Performer>
74+
IFilterProps & IFilterValueProps<Performer> & { ageFromDate?: string | null }
7575
> = (props) => {
7676
const [createPerformer] = usePerformerCreate();
7777

@@ -117,6 +117,27 @@ const _PerformerSelect: React.FC<
117117
);
118118
}
119119

120+
const sceneAge = TextUtils.age(object.birthdate, props.ageFromDate);
121+
122+
const age =
123+
sceneAge < 18
124+
? TextUtils.age(object.birthdate, object.death_date)
125+
: sceneAge;
126+
127+
const ageL10nId =
128+
!props.ageFromDate || sceneAge < 18
129+
? "media_info.performer_card.age"
130+
: "age_on_date";
131+
132+
const ageL10String = intl.formatMessage({
133+
id: "years_old",
134+
defaultMessage: "years old",
135+
});
136+
const ageString = intl.formatMessage(
137+
{ id: ageL10nId },
138+
{ age, years_old: ageL10String }
139+
);
140+
120141
thisOptionProps = {
121142
...optionProps,
122143
children: (
@@ -156,12 +177,10 @@ const _PerformerSelect: React.FC<
156177
)}
157178

158179
{object.birthdate && (
159-
<span className="performer-select-birthdate">{`${
160-
object.birthdate
161-
} (${TextUtils.age(
162-
object.birthdate,
163-
object.death_date
164-
)})`}</span>
180+
<span className="performer-select-birthdate">
181+
{object.birthdate}
182+
<span className="performer-select-age">{` (${ageString})`}</span>
183+
</span>
165184
)}
166185
</span>
167186
</span>

ui/v2.5/src/components/Scenes/SceneDetails/SceneEditPanel.tsx

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -625,9 +625,22 @@ export const SceneEditPanel: React.FC<IProps> = ({
625625
}
626626

627627
function renderPerformersField() {
628+
const date = (() => {
629+
try {
630+
return schema.validateSyncAt("date", formik.values);
631+
} catch (e) {
632+
return undefined;
633+
}
634+
})();
635+
628636
const title = intl.formatMessage({ id: "performers" });
629637
const control = (
630-
<PerformerSelect isMulti onSelect={onSetPerformers} values={performers} />
638+
<PerformerSelect
639+
isMulti
640+
onSelect={onSetPerformers}
641+
values={performers}
642+
ageFromDate={date}
643+
/>
631644
);
632645

633646
return renderField("performer_ids", title, control, fullWidthProps);

ui/v2.5/src/components/Scenes/SceneDetails/SceneScrapeDialog.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,7 @@ export const SceneScrapeDialog: React.FC<ISceneScrapeDialogProps> = ({
252252
onChange={(value) => setPerformers(value)}
253253
newObjects={newPerformers}
254254
onCreateNew={createNewPerformer}
255+
ageFromDate={date.useNewValue ? date.newValue : date.originalValue}
255256
/>
256257
<ScrapedGroupsRow
257258
title={intl.formatMessage({ id: "groups" })}

ui/v2.5/src/components/Scenes/SceneMergeDialog.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -507,6 +507,7 @@ const SceneMergeDetails: React.FC<ISceneMergeDetailsProps> = ({
507507
title={intl.formatMessage({ id: "performers" })}
508508
result={performers}
509509
onChange={(value) => setPerformers(value)}
510+
ageFromDate={date.useNewValue ? date.newValue : date.originalValue}
510511
/>
511512
<ScrapedGroupsRow
512513
title={intl.formatMessage({ id: "groups" })}

ui/v2.5/src/components/Shared/ScrapeDialog/ScrapedObjectsRow.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,8 +137,8 @@ type IScrapedObjectRowImpl<T> = Omit<
137137
>;
138138

139139
export const ScrapedPerformersRow: React.FC<
140-
IScrapedObjectRowImpl<GQL.ScrapedPerformer>
141-
> = ({ title, result, onChange, newObjects, onCreateNew }) => {
140+
IScrapedObjectRowImpl<GQL.ScrapedPerformer> & { ageFromDate?: string | null }
141+
> = ({ title, result, onChange, newObjects, onCreateNew, ageFromDate }) => {
142142
const performersCopy = useMemo(() => {
143143
return (
144144
newObjects?.map((p) => {
@@ -179,6 +179,7 @@ export const ScrapedPerformersRow: React.FC<
179179
}
180180
}}
181181
values={selectValue}
182+
ageFromDate={ageFromDate}
182183
/>
183184
);
184185
}

ui/v2.5/src/components/Tagger/scenes/PerformerResult.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ interface IPerformerResultProps {
5151
onCreate: () => void;
5252
onLink?: () => Promise<void>;
5353
endpoint?: string;
54+
ageFromDate?: string | null;
5455
}
5556

5657
const PerformerResult: React.FC<IPerformerResultProps> = ({
@@ -60,6 +61,7 @@ const PerformerResult: React.FC<IPerformerResultProps> = ({
6061
onCreate,
6162
onLink,
6263
endpoint,
64+
ageFromDate,
6365
}) => {
6466
const { data: performerData, loading: stashLoading } =
6567
GQL.useFindPerformerQuery({
@@ -189,6 +191,7 @@ const PerformerResult: React.FC<IPerformerResultProps> = ({
189191
onSelect={handleSelect}
190192
active={selectedSource === "existing"}
191193
isClearable={false}
194+
ageFromDate={ageFromDate}
192195
/>
193196
{maybeRenderLinkButton()}
194197
</ButtonGroup>

ui/v2.5/src/components/Tagger/scenes/StashSearchResult.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -701,6 +701,11 @@ const StashSearchResult: React.FC<IStashSearchResultProps> = ({
701701
currentSource?.sourceInput.stash_box_endpoint ?? undefined
702702
}
703703
key={`${performer.name ?? performer.remote_site_id ?? ""}`}
704+
ageFromDate={
705+
!scene.date || excludedFields.date
706+
? stashScene.date
707+
: scene.date
708+
}
704709
/>
705710
))}
706711
</Form.Group>

0 commit comments

Comments
 (0)