new release #190
@ -23,7 +23,7 @@ interface PdfMarkingProps {
|
|||||||
meta: Meta | null
|
meta: Meta | null
|
||||||
otherUserMarks: Mark[]
|
otherUserMarks: Mark[]
|
||||||
setCurrentUserMarks: (currentUserMarks: CurrentUserMark[]) => void
|
setCurrentUserMarks: (currentUserMarks: CurrentUserMark[]) => void
|
||||||
setIsReadyToSign: (isReadyToSign: boolean) => void
|
setIsMarksCompleted: (isMarksCompleted: boolean) => void
|
||||||
setUpdatedMarks: (markToUpdate: Mark) => void
|
setUpdatedMarks: (markToUpdate: Mark) => void
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -37,7 +37,7 @@ const PdfMarking = (props: PdfMarkingProps) => {
|
|||||||
const {
|
const {
|
||||||
files,
|
files,
|
||||||
currentUserMarks,
|
currentUserMarks,
|
||||||
setIsReadyToSign,
|
setIsMarksCompleted,
|
||||||
setCurrentUserMarks,
|
setCurrentUserMarks,
|
||||||
setUpdatedMarks,
|
setUpdatedMarks,
|
||||||
handleDownload,
|
handleDownload,
|
||||||
@ -101,7 +101,7 @@ const PdfMarking = (props: PdfMarkingProps) => {
|
|||||||
)
|
)
|
||||||
setCurrentUserMarks(updatedCurrentUserMarks)
|
setCurrentUserMarks(updatedCurrentUserMarks)
|
||||||
setSelectedMark(null)
|
setSelectedMark(null)
|
||||||
setIsReadyToSign(true)
|
setIsMarksCompleted(true)
|
||||||
setUpdatedMarks(updatedMark.mark)
|
setUpdatedMarks(updatedMark.mark)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@ import { Container } from '../../components/Container'
|
|||||||
import { DisplayMeta } from './internal/displayMeta'
|
import { DisplayMeta } from './internal/displayMeta'
|
||||||
import styles from './style.module.scss'
|
import styles from './style.module.scss'
|
||||||
import { CurrentUserMark, Mark } from '../../types/mark.ts'
|
import { CurrentUserMark, Mark } from '../../types/mark.ts'
|
||||||
import { getLastSignersSig } from '../../utils/sign.ts'
|
import { getLastSignersSig, isFullySigned } from '../../utils/sign.ts'
|
||||||
import {
|
import {
|
||||||
filterMarksByPubkey,
|
filterMarksByPubkey,
|
||||||
getCurrentUserMarks,
|
getCurrentUserMarks,
|
||||||
@ -112,13 +112,13 @@ export const SignPage = () => {
|
|||||||
const [currentUserMarks, setCurrentUserMarks] = useState<CurrentUserMark[]>(
|
const [currentUserMarks, setCurrentUserMarks] = useState<CurrentUserMark[]>(
|
||||||
[]
|
[]
|
||||||
)
|
)
|
||||||
const [isReadyToSign, setIsReadyToSign] = useState(false)
|
const [isMarksCompleted, setIsMarksCompleted] = useState(false)
|
||||||
const [otherUserMarks, setOtherUserMarks] = useState<Mark[]>([])
|
const [otherUserMarks, setOtherUserMarks] = useState<Mark[]>([])
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (signers.length > 0) {
|
if (signers.length > 0) {
|
||||||
// check if all signers have signed then its fully signed
|
// check if all signers have signed then its fully signed
|
||||||
if (signers.every((signer) => signedBy.includes(signer))) {
|
if (isFullySigned(signers, signedBy)) {
|
||||||
setSignedStatus(SignedStatus.Fully_Signed)
|
setSignedStatus(SignedStatus.Fully_Signed)
|
||||||
} else {
|
} else {
|
||||||
for (const signer of signers) {
|
for (const signer of signers) {
|
||||||
@ -216,7 +216,7 @@ export const SignPage = () => {
|
|||||||
const otherUserMarks = findOtherUserMarks(signedMarks, usersPubkey!)
|
const otherUserMarks = findOtherUserMarks(signedMarks, usersPubkey!)
|
||||||
setOtherUserMarks(otherUserMarks)
|
setOtherUserMarks(otherUserMarks)
|
||||||
setCurrentUserMarks(currentUserMarks)
|
setCurrentUserMarks(currentUserMarks)
|
||||||
setIsReadyToSign(isCurrentUserMarksComplete(currentUserMarks))
|
setIsMarksCompleted(isCurrentUserMarksComplete(currentUserMarks))
|
||||||
}
|
}
|
||||||
|
|
||||||
setSignedBy(Object.keys(meta.docSignatures) as `npub1${string}`[])
|
setSignedBy(Object.keys(meta.docSignatures) as `npub1${string}`[])
|
||||||
@ -883,90 +883,90 @@ export const SignPage = () => {
|
|||||||
return <LoadingSpinner desc={loadingSpinnerDesc} />
|
return <LoadingSpinner desc={loadingSpinnerDesc} />
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isReadyToSign) {
|
if (!isMarksCompleted && signedStatus === SignedStatus.User_Is_Next_Signer) {
|
||||||
return (
|
return (
|
||||||
<>
|
<PdfMarking
|
||||||
<Container className={styles.container}>
|
files={getCurrentUserFiles(files, currentFileHashes, creatorFileHashes)}
|
||||||
{displayInput && (
|
currentUserMarks={currentUserMarks}
|
||||||
<>
|
setIsMarksCompleted={setIsMarksCompleted}
|
||||||
<Typography component="label" variant="h6">
|
setCurrentUserMarks={setCurrentUserMarks}
|
||||||
Select sigit file
|
setUpdatedMarks={setUpdatedMarks}
|
||||||
</Typography>
|
handleDownload={handleDownload}
|
||||||
|
otherUserMarks={otherUserMarks}
|
||||||
<Box className={styles.inputBlock}>
|
meta={meta}
|
||||||
<MuiFileInput
|
/>
|
||||||
placeholder="Select file"
|
|
||||||
inputProps={{ accept: '.sigit.zip' }}
|
|
||||||
value={selectedFile}
|
|
||||||
onChange={(value) => setSelectedFile(value)}
|
|
||||||
/>
|
|
||||||
</Box>
|
|
||||||
|
|
||||||
{selectedFile && (
|
|
||||||
<Box sx={{ mt: 2, display: 'flex', justifyContent: 'center' }}>
|
|
||||||
<Button onClick={handleDecrypt} variant="contained">
|
|
||||||
Decrypt
|
|
||||||
</Button>
|
|
||||||
</Box>
|
|
||||||
)}
|
|
||||||
</>
|
|
||||||
)}
|
|
||||||
|
|
||||||
{submittedBy && Object.entries(files).length > 0 && meta && (
|
|
||||||
<>
|
|
||||||
<DisplayMeta
|
|
||||||
meta={meta}
|
|
||||||
files={files}
|
|
||||||
submittedBy={submittedBy}
|
|
||||||
signers={signers}
|
|
||||||
viewers={viewers}
|
|
||||||
creatorFileHashes={creatorFileHashes}
|
|
||||||
currentFileHashes={currentFileHashes}
|
|
||||||
signedBy={signedBy}
|
|
||||||
nextSigner={nextSinger}
|
|
||||||
getPrevSignersSig={getPrevSignersSig}
|
|
||||||
/>
|
|
||||||
|
|
||||||
{signedStatus === SignedStatus.Fully_Signed && (
|
|
||||||
<Box sx={{ mt: 1, display: 'flex', justifyContent: 'center' }}>
|
|
||||||
<Button onClick={handleExport} variant="contained">
|
|
||||||
Export
|
|
||||||
</Button>
|
|
||||||
</Box>
|
|
||||||
)}
|
|
||||||
|
|
||||||
{signedStatus === SignedStatus.User_Is_Next_Signer && (
|
|
||||||
<Box sx={{ mt: 1, display: 'flex', justifyContent: 'center' }}>
|
|
||||||
<Button onClick={handleSign} variant="contained">
|
|
||||||
Sign
|
|
||||||
</Button>
|
|
||||||
</Box>
|
|
||||||
)}
|
|
||||||
|
|
||||||
{isSignerOrCreator && (
|
|
||||||
<Box sx={{ mt: 1, display: 'flex', justifyContent: 'center' }}>
|
|
||||||
<Button onClick={handleExportSigit} variant="contained">
|
|
||||||
Export Sigit
|
|
||||||
</Button>
|
|
||||||
</Box>
|
|
||||||
)}
|
|
||||||
</>
|
|
||||||
)}
|
|
||||||
</Container>
|
|
||||||
</>
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<PdfMarking
|
<>
|
||||||
files={getCurrentUserFiles(files, currentFileHashes, creatorFileHashes)}
|
<Container className={styles.container}>
|
||||||
currentUserMarks={currentUserMarks}
|
{displayInput && (
|
||||||
setIsReadyToSign={setIsReadyToSign}
|
<>
|
||||||
setCurrentUserMarks={setCurrentUserMarks}
|
<Typography component="label" variant="h6">
|
||||||
setUpdatedMarks={setUpdatedMarks}
|
Select sigit file
|
||||||
handleDownload={handleDownload}
|
</Typography>
|
||||||
otherUserMarks={otherUserMarks}
|
|
||||||
meta={meta}
|
<Box className={styles.inputBlock}>
|
||||||
/>
|
<MuiFileInput
|
||||||
|
placeholder="Select file"
|
||||||
|
inputProps={{ accept: '.sigit.zip' }}
|
||||||
|
value={selectedFile}
|
||||||
|
onChange={(value) => setSelectedFile(value)}
|
||||||
|
/>
|
||||||
|
</Box>
|
||||||
|
|
||||||
|
{selectedFile && (
|
||||||
|
<Box sx={{ mt: 2, display: 'flex', justifyContent: 'center' }}>
|
||||||
|
<Button onClick={handleDecrypt} variant="contained">
|
||||||
|
Decrypt
|
||||||
|
</Button>
|
||||||
|
</Box>
|
||||||
|
)}
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
|
||||||
|
{submittedBy && Object.entries(files).length > 0 && meta && (
|
||||||
|
<>
|
||||||
|
<DisplayMeta
|
||||||
|
meta={meta}
|
||||||
|
files={files}
|
||||||
|
submittedBy={submittedBy}
|
||||||
|
signers={signers}
|
||||||
|
viewers={viewers}
|
||||||
|
creatorFileHashes={creatorFileHashes}
|
||||||
|
currentFileHashes={currentFileHashes}
|
||||||
|
signedBy={signedBy}
|
||||||
|
nextSigner={nextSinger}
|
||||||
|
getPrevSignersSig={getPrevSignersSig}
|
||||||
|
/>
|
||||||
|
|
||||||
|
{signedStatus === SignedStatus.Fully_Signed && (
|
||||||
|
<Box sx={{ mt: 1, display: 'flex', justifyContent: 'center' }}>
|
||||||
|
<Button onClick={handleExport} variant="contained">
|
||||||
|
Export
|
||||||
|
</Button>
|
||||||
|
</Box>
|
||||||
|
)}
|
||||||
|
|
||||||
|
{signedStatus === SignedStatus.User_Is_Next_Signer && (
|
||||||
|
<Box sx={{ mt: 1, display: 'flex', justifyContent: 'center' }}>
|
||||||
|
<Button onClick={handleSign} variant="contained">
|
||||||
|
Sign
|
||||||
|
</Button>
|
||||||
|
</Box>
|
||||||
|
)}
|
||||||
|
|
||||||
|
{isSignerOrCreator && (
|
||||||
|
<Box sx={{ mt: 1, display: 'flex', justifyContent: 'center' }}>
|
||||||
|
<Button onClick={handleExportSigit} variant="contained">
|
||||||
|
Export Sigit
|
||||||
|
</Button>
|
||||||
|
</Box>
|
||||||
|
)}
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
</Container>
|
||||||
|
</>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -31,4 +31,16 @@ const getLastSignersSig = (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export { getLastSignersSig }
|
/**
|
||||||
|
* Checks if all signers have signed the sigit
|
||||||
|
* @param signers - an array of npubs of all signers from the Sigit
|
||||||
|
* @param signedBy - an array of npubs that have signed it already
|
||||||
|
*/
|
||||||
|
const isFullySigned = (
|
||||||
|
signers: `npub1${string}`[],
|
||||||
|
signedBy: `npub1${string}`[]
|
||||||
|
): boolean => {
|
||||||
|
return signers.every((signer) => signedBy.includes(signer))
|
||||||
|
}
|
||||||
|
|
||||||
|
export { getLastSignersSig, isFullySigned }
|
||||||
|
Loading…
Reference in New Issue
Block a user