import PdfView from './index.tsx' import MarkFormField from '../MarkFormField' import { CurrentUserMark, Mark } from '../../types/mark.ts' import React, { useState, useEffect } from 'react' import { findNextIncompleteCurrentUserMark, getUpdatedMark, updateCurrentUserMarks } from '../../utils' import { EMPTY } from '../../utils/const.ts' import { Container } from '../Container' import signPageStyles from '../../pages/sign/style.module.scss' import styles from './style.module.scss' import { CurrentUserFile } from '../../types/file.ts' import FileList from '../FileList' import { StickySideColumns } from '../../layouts/StickySideColumns.tsx' interface PdfMarkingProps { files: CurrentUserFile[] currentUserMarks: CurrentUserMark[] setIsReadyToSign: (isReadyToSign: boolean) => void setCurrentUserMarks: (currentUserMarks: CurrentUserMark[]) => void setUpdatedMarks: (markToUpdate: Mark) => void handleDownload: () => 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, handleDownload } = props const [selectedMark, setSelectedMark] = useState(null) const [selectedMarkValue, setSelectedMarkValue] = useState('') const [currentFile, setCurrentFile] = useState(null) useEffect(() => { if (selectedMark === null && currentUserMarks.length > 0) { setSelectedMark( findNextIncompleteCurrentUserMark(currentUserMarks) || currentUserMarks[0] ) } }, [currentUserMarks, selectedMark]) useEffect(() => { if (currentFile === null && files.length > 0) { setCurrentFile(files[0]) } }, [files, currentFile]) 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 ( <> {currentFile !== null && ( )} } >
{currentUserMarks?.length > 0 && (
)}
{selectedMark !== null && ( )}
) } export default PdfMarking