From eb2274a8e85ea781e03163da0686b37479c47541 Mon Sep 17 00:00:00 2001
From: Lee Hansel Solevilla
+ {postFeedbackMessage}
+ {score <= lowScore.value && {lowScore.message}{title}
+
+ {Object.keys([...Array(max)]).map((key, i) => (
+
+ {submitted && ( +
{postFeedbackMessage} {score <= lowScore.value &&
{lowScore.message}
} {score <= lowScore.value && lowScore.cta} )} - + {score > 0 && !submitted && ( + + )} + {score === 0 && ( + + )}
{postFeedbackMessage}
diff --git a/packages/shared/src/components/utilities/RatingStars.tsx b/packages/shared/src/components/utilities/RatingStars.tsx
new file mode 100644
index 0000000000..b3c26fec61
--- /dev/null
+++ b/packages/shared/src/components/utilities/RatingStars.tsx
@@ -0,0 +1,72 @@
+import React, { ReactElement, useState } from 'react';
+import classNames from 'classnames';
+import ConditionalWrapper from '../ConditionalWrapper';
+import { StarIcon } from '../icons';
+import { IconSize } from '../Icon';
+
+interface RatingStarsProps {
+ max: number;
+ isDisabled?: boolean;
+ onStarClick?: (value: number) => void;
+}
+
+export function RatingStars({
+ max,
+ isDisabled,
+ onStarClick,
+}: RatingStarsProps): ReactElement {
+ const [score, setScore] = useState(0);
+ const [hovered, setHovered] = useState(0);
+ const [justClicked, setJustClicked] = useState(false);
+ const highlighted = hovered || score;
+
+ const onClick = (value) => {
+ setScore(value);
+ setJustClicked(true);
+
+ if (onStarClick) {
+ onStarClick(value);
+ }
+ };
+
+ const onOut = () => {
+ setHovered(0);
+ setJustClicked(false);
+ };
+
+ return (
+
+ {Object.keys([...Array(max)]).map((key, i) => (
+
+ {postFeedbackMessage}
+ {score <= lowScore.value ? lowScore.message : null}
+ {title}
+