import { Grid, Slider, SliderFilledTrack, SliderThumb, SliderTrack } from "@chakra-ui/react"; import { useColorMode } from "@chakra-ui/react"; import { ReactNode, useEffect, useId, useMemo, useState } from "react"; import { TwoColumnsWithCards } from "src/components/Survey/TwoColumnsWithCards"; import { colors } from "styles/Theme/colors"; export const LabelTask = ({ title, desc, messages, inputs, controls, }: { title: string; desc: string; messages: ReactNode; inputs: ReactNode; controls: ReactNode; }) => { const { colorMode } = useColorMode(); const mainBgClasses = colorMode === "light" ? "bg-slate-300 text-gray-800" : "bg-slate-900 text-white"; const card = useMemo( () => ( <>
{title}

{desc}

{messages} ), [title, desc, messages] ); return (
{card} {inputs} {controls}
); }; // TODO: consolidate with FlaggableElement interface LabelSliderGroupProps { labelIDs: Array; onChange: (sliderValues: number[]) => unknown; } export const LabelSliderGroup = ({ labelIDs, onChange }: LabelSliderGroupProps) => { const [sliderValues, setSliderValues] = useState(Array.from({ length: labelIDs.length }).map(() => 0)); useEffect(() => { onChange(sliderValues); }, [sliderValues, onChange]); return ( {labelIDs.map((labelId, idx) => ( { const newState = sliderValues.slice(); newState[idx] = sliderValue; setSliderValues(newState); }} /> ))} ); }; function CheckboxSliderItem(props: { labelId: string; sliderValue: number; sliderHandler: (newVal: number) => unknown; }) { const id = useId(); const { colorMode } = useColorMode(); const labelTextClass = colorMode === "light" ? `text-${colors.light.text}` : `text-${colors.dark.text}`; return ( <> props.sliderHandler(val / 100)}> ); }