Add shortcuts for decimal rating (#3226)

* Add shortcuts for decimal rating
* Add shortcut to reset decimal rating
* Generalise rating keybind code

Use r x x for decimal ratings.
* Update manual page
---------

Co-authored-by: WithoutPants <53250216+WithoutPants@users.noreply.github.com>
This commit is contained in:
apache202119
2023-02-07 02:23:18 +01:00
committed by GitHub
parent 65d1353f2c
commit 53f9530524
9 changed files with 143 additions and 144 deletions

View File

@@ -17,6 +17,8 @@ import { FormUtils } from "src/utils";
import { useFormik } from "formik";
import { Prompt } from "react-router-dom";
import { RatingSystem } from "src/components/Shared/Rating/RatingSystem";
import { useRatingKeybinds } from "src/hooks/keybinds";
import { ConfigurationContext } from "src/hooks/Config";
interface IProps {
image: GQL.ImageDataFragment;
@@ -35,6 +37,8 @@ export const ImageEditPanel: React.FC<IProps> = ({
// Network state
const [isLoading, setIsLoading] = useState(false);
const { configuration } = React.useContext(ConfigurationContext);
const [updateImage] = useImageUpdate();
const schema = yup.object({
@@ -69,6 +73,12 @@ export const ImageEditPanel: React.FC<IProps> = ({
formik.setFieldValue("rating100", v);
}
useRatingKeybinds(
true,
configuration?.ui.ratingSystemOptions.type,
setRating
);
useEffect(() => {
if (isVisible) {
Mousetrap.bind("s s", () => {
@@ -78,35 +88,9 @@ export const ImageEditPanel: React.FC<IProps> = ({
onDelete();
});
// numeric keypresses get caught by jwplayer, so blur the element
// if the rating sequence is started
Mousetrap.bind("r", () => {
if (document.activeElement instanceof HTMLElement) {
document.activeElement.blur();
}
Mousetrap.bind("0", () => setRating(NaN));
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");
Mousetrap.unbind("1");
Mousetrap.unbind("2");
Mousetrap.unbind("3");
Mousetrap.unbind("4");
Mousetrap.unbind("5");
}, 1000);
});
return () => {
Mousetrap.unbind("s s");
Mousetrap.unbind("d d");
Mousetrap.unbind("r");
};
}
});