mirror of
https://github.com/wassname/Open-Assistant.git
synced 2026-08-14 12:00:19 +08:00
* website: Support new widget types for labelling Adds proper support for yes/no spam style questions as well as a simple interface for flag style labels. Also cleaned up the Task component to fix some rerender issues. * website: Fix some UI text, adjust yes/no button alignment * website: Remove left over console.log Co-authored-by: notmd <33456881+notmd@users.noreply.github.com> --------- Co-authored-by: notmd <33456881+notmd@users.noreply.github.com>
90 lines
2.2 KiB
TypeScript
90 lines
2.2 KiB
TypeScript
import { Button, HStack, Text, Tooltip } from "@chakra-ui/react";
|
|
import { useTranslation } from "next-i18next";
|
|
import { getTypeSafei18nKey } from "src/lib/i18n";
|
|
|
|
interface LabelYesNoGroupProps {
|
|
values: number[];
|
|
labelNames: string[];
|
|
requiredLabels?: string[];
|
|
isEditable?: boolean;
|
|
onChange: (values: number[]) => void;
|
|
}
|
|
|
|
export const LabelYesNoGroup = ({
|
|
values,
|
|
labelNames,
|
|
requiredLabels = [],
|
|
isEditable = true,
|
|
onChange,
|
|
}: LabelYesNoGroupProps) => {
|
|
const { t } = useTranslation("labelling");
|
|
return (
|
|
<>
|
|
{labelNames.map((name, idx) => {
|
|
return (
|
|
<YesNoQuestion
|
|
key={name}
|
|
question={t(getTypeSafei18nKey(`${name}.question`))}
|
|
value={values[idx] === null ? null : values[idx] > 0.1 ? true : false}
|
|
onChange={(value) => {
|
|
const newValues = values.slice();
|
|
newValues[idx] = value;
|
|
onChange(newValues);
|
|
}}
|
|
isEditable={isEditable}
|
|
isRequired={requiredLabels.includes(name)}
|
|
/>
|
|
);
|
|
})}
|
|
</>
|
|
);
|
|
};
|
|
|
|
const YesNoQuestion = ({
|
|
isEditable,
|
|
question,
|
|
value,
|
|
isRequired,
|
|
onChange,
|
|
}: {
|
|
isEditable: boolean;
|
|
question: string;
|
|
value: boolean;
|
|
isRequired?: boolean;
|
|
onChange: (boolean) => void;
|
|
}) => {
|
|
const { t } = useTranslation();
|
|
return (
|
|
<div data-cy="label-question" style={{ maxWidth: "30em" }}>
|
|
<Text display="inline">
|
|
{question}
|
|
{isRequired ? <RequiredMark /> : undefined}
|
|
</Text>
|
|
<HStack style={{ float: "right" }}>
|
|
<Button
|
|
data-cy="yes"
|
|
isDisabled={!isEditable}
|
|
colorScheme={value === true ? "blue" : undefined}
|
|
onClick={() => onChange(isRequired ? true : value === null ? true : null)}
|
|
>
|
|
{t("yes")}
|
|
</Button>
|
|
<Button
|
|
data-cy="no"
|
|
isDisabled={!isEditable}
|
|
colorScheme={value === false ? "blue" : undefined}
|
|
onClick={() => onChange(isRequired ? false : value === null ? false : null)}
|
|
>
|
|
{t("no")}
|
|
</Button>
|
|
</HStack>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
const RequiredMark = () => (
|
|
<Tooltip label="Required">
|
|
<span style={{ color: "red" }}>*</span>
|
|
</Tooltip>
|
|
);
|