Added favorite button in Performer grid view (#3369)

Co-authored-by: WithoutPants <53250216+WithoutPants@users.noreply.github.com>
This commit is contained in:
CrookedDuck
2023-02-17 04:47:58 +01:00
committed by GitHub
parent 390f72207c
commit bb6fa04654
2 changed files with 65 additions and 11 deletions

View File

@@ -18,6 +18,8 @@ import { PopoverCountButton } from "../Shared/PopoverCountButton";
import GenderIcon from "./GenderIcon"; import GenderIcon from "./GenderIcon";
import { faHeart, faTag } from "@fortawesome/free-solid-svg-icons"; import { faHeart, faTag } from "@fortawesome/free-solid-svg-icons";
import { RatingBanner } from "../Shared/RatingBanner"; import { RatingBanner } from "../Shared/RatingBanner";
import cx from "classnames";
import { usePerformerUpdate } from "src/core/StashService";
export interface IPerformerCardExtraCriteria { export interface IPerformerCardExtraCriteria {
scenes: Criterion<CriterionValue>[]; scenes: Criterion<CriterionValue>[];
@@ -60,17 +62,39 @@ export const PerformerCard: React.FC<IPerformerCardProps> = ({
{ age, years_old: ageL10String } { age, years_old: ageL10String }
); );
function maybeRenderFavoriteIcon() { const [updatePerformer] = usePerformerUpdate();
if (performer.favorite === false) {
return; function renderFavoriteIcon() {
}
return ( return (
<div className="favorite"> <Link to="" onClick={(e) => e.preventDefault()}>
<Icon icon={faHeart} size="2x" /> <Button
</div> className={cx(
"minimal",
"mousetrap",
"favorite-button",
performer.favorite ? "favorite" : "not-favorite"
)}
onClick={() => onToggleFavorite!(!performer.favorite)}
>
<Icon icon={faHeart} size="2x" />
</Button>
</Link>
); );
} }
function onToggleFavorite(v: boolean) {
if (performer.id) {
updatePerformer({
variables: {
input: {
id: performer.id,
favorite: v,
},
},
});
}
}
function maybeRenderScenesPopoverButton() { function maybeRenderScenesPopoverButton() {
if (!performer.scene_count) return; if (!performer.scene_count) return;
@@ -213,7 +237,8 @@ export const PerformerCard: React.FC<IPerformerCardProps> = ({
alt={performer.name ?? ""} alt={performer.name ?? ""}
src={performer.image_path ?? ""} src={performer.image_path ?? ""}
/> />
{maybeRenderFavoriteIcon()}
{renderFavoriteIcon()}
{maybeRenderRatingBanner()} {maybeRenderRatingBanner()}
{maybeRenderFlag()} {maybeRenderFlag()}
</> </>

View File

@@ -85,12 +85,41 @@
width: 3rem; width: 3rem;
} }
.favorite { button.btn.favorite-button {
color: #ff7373; opacity: 1;
filter: drop-shadow(0 0 2px rgba(0, 0, 0, 0.9)); padding: 0;
position: absolute; position: absolute;
right: 5px; right: 5px;
top: 10px; top: 10px;
transition: opacity 0.5s;
svg.fa-icon {
margin-left: 0.4rem;
margin-right: 0.4rem;
}
&.not-favorite {
color: rgba(191, 204, 214, 0.5);
filter: drop-shadow(0 0 2px rgba(0, 0, 0, 0.9));
opacity: 0;
}
&.favorite {
color: #ff7373;
filter: drop-shadow(0 0 2px rgba(0, 0, 0, 0.9));
}
&:hover,
&:active,
&:focus,
&:active:focus {
background: none;
box-shadow: none;
}
}
&:hover button.btn.favorite-button.not-favorite {
opacity: 1;
} }
&__age { &__age {