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

@@ -15,7 +15,7 @@ import { useToast } from "src/hooks";
import { FormUtils } from "src/utils";
import { useFormik } from "formik";
import { Prompt } from "react-router-dom";
import { RatingStars } from "src/components/Scenes/SceneDetails/RatingStars";
import { RatingSystem } from "src/components/Shared/Rating/RatingSystem";
interface IProps {
image: GQL.ImageDataFragment;
@@ -38,7 +38,7 @@ export const ImageEditPanel: React.FC<IProps> = ({
const schema = yup.object({
title: yup.string().optional().nullable(),
rating: yup.number().optional().nullable(),
rating100: yup.number().optional().nullable(),
studio_id: yup.string().optional().nullable(),
performer_ids: yup.array(yup.string().required()).optional().nullable(),
tag_ids: yup.array(yup.string().required()).optional().nullable(),
@@ -46,7 +46,7 @@ export const ImageEditPanel: React.FC<IProps> = ({
const initialValues = {
title: image.title ?? "",
rating: image.rating ?? null,
rating100: image.rating100 ?? null,
studio_id: image.studio?.id,
performer_ids: (image.performers ?? []).map((p) => p.id),
tag_ids: (image.tags ?? []).map((t) => t.id),
@@ -61,7 +61,7 @@ export const ImageEditPanel: React.FC<IProps> = ({
});
function setRating(v: number) {
formik.setFieldValue("rating", v);
formik.setFieldValue("rating100", v);
}
useEffect(() => {
@@ -81,11 +81,11 @@ export const ImageEditPanel: 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");
@@ -194,15 +194,14 @@ export const ImageEditPanel: 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>
</Form.Group>
<Form.Group controlId="studio" as={Row}>
{FormUtils.renderLabel({
title: intl.formatMessage({ id: "studio" }),