import { Box, Text, VStack } from "@chakra-ui/react"; import { useTranslation } from "next-i18next"; import { Explain } from "src/components/Explain"; import { LabelFlagGroup } from "src/components/Messages/LabelFlagGroup"; import { LabelYesNoGroup } from "src/components/Messages/LabelYesNoGroup"; import { LabelLikertGroup } from "src/components/Survey/LabelLikertGroup"; import { getTypeSafei18nKey } from "src/lib/i18n"; import { Label } from "src/types/Tasks"; export interface LabelInputInstructions { yesNoInstruction: string; flagInstruction: string; likertInstruction: string; } interface LabelInputGroupProps { values: number[]; labels: Label[]; requiredLabels?: string[]; isEditable?: boolean; instructions: LabelInputInstructions; onChange: (values: number[]) => void; } export const LabelInputGroup = ({ labels, values, requiredLabels, isEditable, instructions, onChange, }: LabelInputGroupProps) => { const { t } = useTranslation("labelling"); const yesNoIndexes = labels.map((label, idx) => (label.widget === "yes_no" ? idx : null)).filter((v) => v !== null); const flagIndexes = labels.map((label, idx) => (label.widget === "flag" ? idx : null)).filter((v) => v !== null); const likertIndexes = labels.map((label, idx) => (label.widget === "likert" ? idx : null)).filter((v) => v !== null); return ( {yesNoIndexes.length > 0 && ( {instructions.yesNoInstruction} values[idx])} labelNames={yesNoIndexes.map((idx) => labels[idx].name)} isEditable={isEditable} requiredLabels={requiredLabels} onChange={(yesNoValues) => { const newValues = values.slice(); yesNoIndexes.forEach((idx, yesNoIndex) => (newValues[idx] = yesNoValues[yesNoIndex])); onChange(newValues); }} /> )} {flagIndexes.length > 0 && ( {instructions.flagInstruction} `${t(getTypeSafei18nKey(labels[idx].name))}: ${t( getTypeSafei18nKey(`${labels[idx].name}.explanation`) )}` )} /> values[idx])} labelNames={flagIndexes.map((idx) => labels[idx].name)} isEditable={isEditable} onChange={(flagValues) => { const newValues = values.slice(); flagIndexes.forEach((idx, flagIndex) => (newValues[idx] = flagValues[flagIndex])); onChange(newValues); }} /> )} {likertIndexes.length > 0 && ( {instructions.likertInstruction} labels[idx].name)} isEditable={isEditable} onChange={(likertValues) => { const newValues = values.slice(); likertIndexes.forEach((idx, likertIndex) => (newValues[idx] = likertValues[likertIndex])); onChange(newValues); }} /> )} ); };