mirror of
https://github.com/CompassConnections/Compass.git
synced 2026-03-26 10:31:10 -04:00
* Fixed Type errors * Added Database checks to the onboarding flow * Updated Onboarding flow Changed type ChildrenExpectation so that it can be used for database verification * Added compatibility page setup Added more compatibility questions * Finished up the onboarding flow suite Added compatibility question tests and verifications Updated tests to cover Keywords and Headline changes recently made Updated tests to cover all of the big5 personality traits * Apply suggestions from code review --------- Co-authored-by: Martin Braquet <martin.braquet@gmail.com>
71 lines
2.5 KiB
TypeScript
71 lines
2.5 KiB
TypeScript
import {RadioGroup} from '@headlessui/react'
|
|
import clsx from 'clsx'
|
|
import {orderBy} from 'lodash'
|
|
|
|
import {Row} from '../layout/row'
|
|
|
|
export function RadioToggleGroup(props: {
|
|
currentChoice: number
|
|
choicesMap: Record<string, number>
|
|
setChoice: (p: number) => void
|
|
className?: string
|
|
toggleClassName?: string
|
|
indexColors?: Record<number, string>
|
|
}) {
|
|
const {currentChoice, setChoice, choicesMap, className, toggleClassName, indexColors} = props
|
|
|
|
const orderedChoicesMap = orderBy(Object.entries(choicesMap), ([_, choice]) => choice)
|
|
|
|
const length = orderedChoicesMap.length
|
|
return (
|
|
<Row className="text-ink-600 mb-6 items-center gap-3 text-sm">
|
|
{orderedChoicesMap[0][0]}
|
|
<RadioGroup
|
|
className={clsx(
|
|
className,
|
|
`flex w-full flex-row justify-between gap-2 rounded-md p-1 text-xs`,
|
|
)}
|
|
value={currentChoice}
|
|
onChange={setChoice}
|
|
>
|
|
{orderedChoicesMap.map(([choiceKey, choice], index) => (
|
|
<RadioGroup.Option
|
|
onClick={() => {
|
|
if (currentChoice == choice) {
|
|
setChoice(-1)
|
|
}
|
|
}}
|
|
aria-label={choiceKey}
|
|
key={choiceKey}
|
|
value={choice}
|
|
data-testid={`compatibility-question-importance-${choice}`}
|
|
className={({disabled}) =>
|
|
clsx(
|
|
disabled ? 'cursor-not-allowed' : 'cursor-pointer ',
|
|
' mx-auto h-5 w-5 rounded-full bg-opacity-20 ring-1 ring-opacity-70 transition-all dark:bg-opacity-20 dark:aria-checked:bg-opacity-100',
|
|
' aria-checked:bg-opacity-100 aria-checked:ring-8 aria-checked:ring-opacity-40 dark:aria-checked:ring-opacity-40',
|
|
disabled
|
|
? 'bg-ink-400 ring-ink-400'
|
|
: indexColors
|
|
? indexColors[index]
|
|
: index == 0
|
|
? `bg-rose-600 ring-rose-600 dark:bg-rose-500 dark:ring-rose-500`
|
|
: index == 1
|
|
? `bg-rose-400 ring-rose-400`
|
|
: index == 2
|
|
? `bg-stone-400 ring-stone-400 dark:bg-stone-500 dark:ring-stone-500`
|
|
: index == 3
|
|
? `bg-teal-300 ring-teal-300 dark:bg-teal-200 dark:ring-teal-200 `
|
|
: `bg-teal-400 ring-teal-400`,
|
|
|
|
toggleClassName,
|
|
)
|
|
}
|
|
/>
|
|
))}
|
|
</RadioGroup>
|
|
{orderedChoicesMap[length - 1][0]}
|
|
</Row>
|
|
)
|
|
}
|