import { memo } from "react";
import FormattedNumber, { type FormattedNumberProps } from "./FormattedNumber";
export type ScoreProps = PrecomputedScoreProps | ComputedScoreProps;
export interface PrecomputedScoreProps {
/** The score to display. */
score: number;
/** Forwarded to FormattedNumber. */
compact?: FormattedNumberProps["compact"];
/** Whether to show the unit "Benis" after the number. Defaults to `false`. */
showUnit?: boolean;
}
export interface ComputedScoreProps {
/** number of upvotes */
up: number;
/** number of downvotes */
down: number;
/** Forwarded to FormattedNumber. */
compact?: FormattedNumberProps["compact"];
/** Whether to show the unit "Benis" after the number. Defaults to `false`. */
showUnit?: boolean;
/** Used as a discriminator between `ComputedScoreProps` and `PrecomputedScoreProps` */
score?: undefined;
}
const style = {
wordBreak: "keep-all",
} as const;
const formatter = new Intl.NumberFormat("de");
/**
* Base-component that just displays a score. If you need to handle logic with hidden scores, use `MaybeHiddenScore`.
*
* Using , the score is never hidden. This is useful for displaying scores in the Profile etc.
*/
export default memo(function Score(props: ScoreProps) {
const score =
typeof props.score !== "undefined"
? props.score
: props.up - props.down;
return (
{props.showUnit && " Benis"}
);
});