daba28423a
* Adjust create page styles * Keep answers when switching market type
63 lines
1.7 KiB
TypeScript
63 lines
1.7 KiB
TypeScript
import { MAX_ANSWER_LENGTH } from 'common/answer'
|
|
import Textarea from 'react-expanding-textarea'
|
|
import { XIcon } from '@heroicons/react/solid'
|
|
import { Col } from '../layout/col'
|
|
import { Row } from '../layout/row'
|
|
|
|
export function MultipleChoiceAnswers(props: {
|
|
answers: string[]
|
|
setAnswers: (answers: string[]) => void
|
|
}) {
|
|
const { answers, setAnswers } = props
|
|
|
|
const setAnswer = (i: number, answer: string) => {
|
|
const newAnswers = setElement(answers, i, answer)
|
|
setAnswers(newAnswers)
|
|
}
|
|
|
|
const removeAnswer = (i: number) => {
|
|
const newAnswers = answers.slice(0, i).concat(answers.slice(i + 1))
|
|
setAnswers(newAnswers)
|
|
}
|
|
|
|
const addAnswer = () => setAnswer(answers.length, '')
|
|
|
|
return (
|
|
<Col>
|
|
{answers.map((answer, i) => (
|
|
<Row className="mb-2 items-center align-middle">
|
|
{i + 1}.{' '}
|
|
<Textarea
|
|
value={answer}
|
|
onChange={(e) => setAnswer(i, e.target.value)}
|
|
className="textarea textarea-bordered ml-2 w-full resize-none"
|
|
placeholder="Type your answer..."
|
|
rows={1}
|
|
maxLength={MAX_ANSWER_LENGTH}
|
|
/>
|
|
{answers.length > 2 && (
|
|
<button
|
|
className="-mr-2 rounded p-2"
|
|
onClick={() => removeAnswer(i)}
|
|
>
|
|
<XIcon className="h-5 w-5 flex-shrink-0" />
|
|
</button>
|
|
)}
|
|
</Row>
|
|
))}
|
|
|
|
<Row className="justify-end">
|
|
<button className="btn btn-outline btn-xs" onClick={addAnswer}>
|
|
Add answer
|
|
</button>
|
|
</Row>
|
|
</Col>
|
|
)
|
|
}
|
|
|
|
const setElement = <T,>(array: T[], i: number, elem: T) => {
|
|
const newArray = array.concat()
|
|
newArray[i] = elem
|
|
return newArray
|
|
}
|