import PdfView from './index.tsx' import MarkFormField from '../MarkFormField' import { PdfFile } from '../../types/drawing.ts' import { CurrentUserMark, Mark } from '../../types/mark.ts' import React, { useState, useEffect } from 'react' import { findNextIncompleteCurrentUserMark, getUpdatedMark, isCurrentUserMarksComplete, updateCurrentUserMarks } from '../../utils' import { EMPTY } from '../../utils/const.ts' import { Container } from '../Container' import styles from '../../pages/sign/style.module.scss' interface PdfMarkingProps { files: { pdfFile: PdfFile; filename: string; hash: string | null }[] currentUserMarks: CurrentUserMark[] setIsReadyToSign: (isReadyToSign: boolean) => void setCurrentUserMarks: (currentUserMarks: CurrentUserMark[]) => void setUpdatedMarks: (markToUpdate: Mark) => void } /** * Top-level component responsible for displaying Pdfs, Pages, and Marks, * as well as tracking if the document is ready to be signed. * @param props * @constructor */ const PdfMarking = (props: PdfMarkingProps) => { const { files, currentUserMarks, setIsReadyToSign, setCurrentUserMarks, setUpdatedMarks } = props const [selectedMark, setSelectedMark] = useState(null) const [selectedMarkValue, setSelectedMarkValue] = useState('') useEffect(() => { if (selectedMark === null && currentUserMarks.length > 0) { setSelectedMark( findNextIncompleteCurrentUserMark(currentUserMarks) || currentUserMarks[0] ) } }, [currentUserMarks, selectedMark]) const handleMarkClick = (id: number) => { const nextMark = currentUserMarks.find((mark) => mark.mark.id === id) setSelectedMark(nextMark!) setSelectedMarkValue(nextMark?.mark.value ?? EMPTY) } const handleCurrentUserMarkChange = (mark: CurrentUserMark) => { if (!selectedMark) return const updatedSelectedMark: CurrentUserMark = getUpdatedMark( selectedMark, selectedMarkValue ) const updatedCurrentUserMarks = updateCurrentUserMarks( currentUserMarks, updatedSelectedMark ) setCurrentUserMarks(updatedCurrentUserMarks) setSelectedMarkValue(mark.currentValue ?? EMPTY) setSelectedMark(mark) } const handleSubmit = (event: React.FormEvent) => { event.preventDefault() if (!selectedMarkValue || !selectedMark) return const updatedMark: CurrentUserMark = getUpdatedMark( selectedMark, selectedMarkValue ) setSelectedMarkValue(EMPTY) const updatedCurrentUserMarks = updateCurrentUserMarks( currentUserMarks, updatedMark ) setCurrentUserMarks(updatedCurrentUserMarks) setSelectedMark(null) setIsReadyToSign(true) setUpdatedMarks(updatedMark.mark) } // const updateCurrentUserMarkValues = () => { // const updatedMark: CurrentUserMark = getUpdatedMark(selectedMark!, selectedMarkValue) // const updatedCurrentUserMarks = updateCurrentUserMarks(currentUserMarks, updatedMark) // setSelectedMarkValue(EMPTY) // setCurrentUserMarks(updatedCurrentUserMarks) // } const handleChange = (event: React.ChangeEvent) => setSelectedMarkValue(event.target.value) return ( <> {currentUserMarks?.length > 0 && ( )} {selectedMark !== null && ( )} ) } export default PdfMarking