import { CurrentUserMark } from '../../types/mark.ts' import styles from './style.module.scss' import { findNextIncompleteCurrentUserMark, getToolboxLabelByMarkType, isCurrentUserMarksComplete, isCurrentValueLast } from '../../utils' import React, { useState } from 'react' import { MARK_TYPE_CONFIG } from '../getMarkComponents.tsx' interface MarkFormFieldProps { currentUserMarks: CurrentUserMark[] handleCurrentUserMarkChange: (mark: CurrentUserMark) => void handleSelectedMarkValueChange: (value: string) => void handleSubmit: (event: React.FormEvent) => void selectedMark: CurrentUserMark selectedMarkValue: string } /** * Responsible for rendering a form field connected to a mark and keeping track of its value. */ const MarkFormField = ({ handleSubmit, handleSelectedMarkValueChange, selectedMark, selectedMarkValue, currentUserMarks, handleCurrentUserMarkChange }: MarkFormFieldProps) => { const [displayActions, setDisplayActions] = useState(true) const isReadyToSign = () => isCurrentUserMarksComplete(currentUserMarks) || isCurrentValueLast(currentUserMarks, selectedMark, selectedMarkValue) const isCurrent = (currentMark: CurrentUserMark) => currentMark.id === selectedMark.id const isDone = (currentMark: CurrentUserMark) => isCurrent(currentMark) ? !!selectedMarkValue : currentMark.isCompleted const findNext = () => { return ( currentUserMarks[selectedMark.id] || findNextIncompleteCurrentUserMark(currentUserMarks) ) } const handleFormSubmit = (event: React.FormEvent) => { event.preventDefault() console.log('handle form submit runs...') return isReadyToSign() ? handleSubmit(event) : handleCurrentUserMarkChange(findNext()!) } const toggleActions = () => setDisplayActions(!displayActions) const markLabel = getToolboxLabelByMarkType(selectedMark.mark.type) const { input: MarkInputComponent } = MARK_TYPE_CONFIG[selectedMark.mark.type] || {} return (

Add {markLabel}

handleFormSubmit(e)}> {typeof MarkInputComponent !== 'undefined' && ( )}
{currentUserMarks.map((mark, index) => { return (
{isCurrent(mark) && (
)}
) })}
) } export default MarkFormField