Stash rating system (#2830)

* add rating100 fields to represent rating range 1-100
* deprecate existing (1-5) rating fields
* add half- and quarter-star options for rating system
* add decimal rating system option

Co-authored-by: WithoutPants <53250216+WithoutPants@users.noreply.github.com>
This commit is contained in:
skier233
2022-11-15 17:31:44 -05:00
committed by GitHub
parent f66333bac9
commit 7eae751d1c
133 changed files with 2192 additions and 761 deletions

View File

@@ -40,7 +40,7 @@ import queryString from "query-string";
import { ConfigurationContext } from "src/hooks/Config";
import { stashboxDisplayName } from "src/utils/stashbox";
import { SceneMovieTable } from "./SceneMovieTable";
import { RatingStars } from "./RatingStars";
import { RatingSystem } from "src/components/Shared/Rating/RatingSystem";
import {
faSearch,
faSyncAlt,
@@ -123,7 +123,7 @@ export const SceneEditPanel: React.FC<IProps> = ({
director: yup.string().optional().nullable(),
url: yup.string().optional().nullable(),
date: yup.string().optional().nullable(),
rating: yup.number().optional().nullable(),
rating100: yup.number().optional().nullable(),
gallery_ids: yup.array(yup.string().required()).optional().nullable(),
studio_id: yup.string().optional().nullable(),
performer_ids: yup.array(yup.string().required()).optional().nullable(),
@@ -147,7 +147,7 @@ export const SceneEditPanel: React.FC<IProps> = ({
director: scene.director ?? "",
url: scene.url ?? "",
date: scene.date ?? "",
rating: scene.rating ?? null,
rating100: scene.rating100 ?? null,
gallery_ids: (scene.galleries ?? []).map((g) => g.id),
studio_id: scene.studio?.id,
performer_ids: (scene.performers ?? []).map((p) => p.id),
@@ -171,7 +171,7 @@ export const SceneEditPanel: React.FC<IProps> = ({
});
function setRating(v: number) {
formik.setFieldValue("rating", v);
formik.setFieldValue("rating100", v);
}
interface IGallerySelectValue {
@@ -206,11 +206,11 @@ export const SceneEditPanel: React.FC<IProps> = ({
}
Mousetrap.bind("0", () => setRating(NaN));
Mousetrap.bind("1", () => setRating(1));
Mousetrap.bind("2", () => setRating(2));
Mousetrap.bind("3", () => setRating(3));
Mousetrap.bind("4", () => setRating(4));
Mousetrap.bind("5", () => setRating(5));
Mousetrap.bind("1", () => setRating(20));
Mousetrap.bind("2", () => setRating(40));
Mousetrap.bind("3", () => setRating(60));
Mousetrap.bind("4", () => setRating(80));
Mousetrap.bind("5", () => setRating(100));
setTimeout(() => {
Mousetrap.unbind("0");
@@ -287,7 +287,7 @@ export const SceneEditPanel: React.FC<IProps> = ({
input: {
...updateValues,
id: scene.id!,
rating: input.rating ?? null,
rating100: input.rating100 ?? null,
},
},
});
@@ -799,10 +799,10 @@ export const SceneEditPanel: React.FC<IProps> = ({
title: intl.formatMessage({ id: "rating" }),
})}
<Col xs={9}>
<RatingStars
value={formik.values.rating ?? undefined}
<RatingSystem
value={formik.values.rating100 ?? undefined}
onSetRating={(value) =>
formik.setFieldValue("rating", value ?? null)
formik.setFieldValue("rating100", value ?? null)
}
/>
</Col>