PerformerSelect Tagger bugfixes (#4148)

* Fix Tagger PerformerSelect active highlight
* Clear select on skip
* Add back react-select className
This commit is contained in:
DingDongSoLong4
2023-09-25 03:55:36 +02:00
committed by GitHub
parent 22350d38bc
commit ce55392461
6 changed files with 39 additions and 31 deletions

View File

@@ -5,6 +5,7 @@ import {
MultiValueGenericProps,
SingleValueProps,
} from "react-select";
import cx from "classnames";
import * as GQL from "src/core/generated-graphql";
import {
@@ -170,6 +171,13 @@ export const PerformerSelect: React.FC<
return (
<FilterSelectComponent<Performer, boolean>
{...props}
className={cx(
"performer-select",
{
"performer-select-active": props.active,
},
props.className
)}
loadOptions={loadPerformers}
getNamedObject={getNamedObject}
isValidNewOption={isValidNewOption}

View File

@@ -224,6 +224,6 @@
}
}
.react-select .alias {
.performer-select .alias {
font-weight: bold;
}

View File

@@ -10,6 +10,7 @@ import AsyncSelect from "react-select/async";
import AsyncCreatableSelect, {
AsyncCreatableProps,
} from "react-select/async-creatable";
import cx from "classnames";
import { useToast } from "src/hooks/Toast";
import { useDebounce } from "src/hooks/debounce";
@@ -88,8 +89,8 @@ const SelectComponent = <T, IsMulti extends boolean>(
...props,
styles,
defaultOptions: true,
value: selectedOptions,
className: "react-select",
value: selectedOptions ?? null,
className: cx("react-select", props.className),
classNamePrefix: "react-select",
noOptionsMessage: () => noOptionsMessage,
placeholder: isDisabled ? "" : placeholder,
@@ -119,6 +120,7 @@ export interface IFilterValueProps<T> {
export interface IFilterProps {
noSelectionString?: string;
className?: string;
active?: boolean;
isMulti?: boolean;
isClearable?: boolean;
isDisabled?: boolean;

View File

@@ -147,7 +147,7 @@ export const ScrapedPerformersRow: React.FC<
return (
<PerformerSelect
isMulti
className="form-control react-select"
className="form-control"
isDisabled={!isNew}
onSelect={(items) => {
if (onChangeFn) {

View File

@@ -1,7 +1,6 @@
import React, { useEffect, useState } from "react";
import { Button, ButtonGroup } from "react-bootstrap";
import { FormattedMessage } from "react-intl";
import cx from "classnames";
import * as GQL from "src/core/generated-graphql";
import { Icon } from "src/components/Shared/Icon";
@@ -43,9 +42,12 @@ const PerformerResult: React.FC<IPerformerResultProps> = ({
stashID.stash_id === performer.remote_site_id
);
const [selectedPerformer, setSelectedPerformer] = useState<
Performer | undefined
>();
const [selectedPerformer, setSelectedPerformer] = useState<Performer>();
function selectPerformer(selected: Performer | undefined) {
setSelectedPerformer(selected);
setSelectedID(selected?.id);
}
useEffect(() => {
if (
@@ -56,18 +58,16 @@ const PerformerResult: React.FC<IPerformerResultProps> = ({
}
}, [performerData?.findPerformer, selectedID]);
const handlePerformerSelect = (performers: Performer[]) => {
const handleSelect = (performers: Performer[]) => {
if (performers.length) {
setSelectedPerformer(performers[0]);
setSelectedID(performers[0].id);
selectPerformer(performers[0]);
} else {
setSelectedPerformer(undefined);
setSelectedID(undefined);
selectPerformer(undefined);
}
};
const handlePerformerSkip = () => {
setSelectedID(undefined);
const handleSkip = () => {
selectPerformer(undefined);
};
if (stashLoading) return <div>Loading performer</div>;
@@ -83,7 +83,7 @@ const PerformerResult: React.FC<IPerformerResultProps> = ({
<OptionalField
exclude={selectedID === undefined}
setExclude={(v) =>
v ? handlePerformerSkip() : setSelectedID(matchedPerformer.id)
v ? handleSkip() : setSelectedID(matchedPerformer.id)
}
>
<div>
@@ -127,16 +127,14 @@ const PerformerResult: React.FC<IPerformerResultProps> = ({
</Button>
<Button
variant={selectedSource === "skip" ? "primary" : "secondary"}
onClick={() => handlePerformerSkip()}
onClick={() => handleSkip()}
>
<FormattedMessage id="actions.skip" />
</Button>
<PerformerSelect
values={selectedPerformer ? [selectedPerformer] : []}
onSelect={handlePerformerSelect}
className={cx("performer-select", {
"performer-select-active": selectedSource === "existing",
})}
onSelect={handleSelect}
active={selectedSource === "existing"}
isClearable={false}
/>
{maybeRenderLinkButton()}

View File

@@ -66,6 +66,16 @@
background-color: hsl(204, 20%, 30%);
cursor: pointer;
}
.performer-select,
.studio-select {
width: 14rem;
// stylelint-disable-next-line selector-class-pattern
&-active .react-select__control {
background-color: #137cbd;
}
}
}
.selected-result {
@@ -98,16 +108,6 @@
width: 2rem;
}
.performer-select,
.studio-select {
width: 14rem;
// stylelint-disable-next-line selector-class-pattern
&-active .react-select__control {
background-color: #137cbd;
}
}
.entity-name {
flex: 1;
margin-right: auto;