diff --git a/src/components/DrawPDFFields/style.module.scss b/src/components/DrawPDFFields/style.module.scss index 8f14fd1..b57aa65 100644 --- a/src/components/DrawPDFFields/style.module.scss +++ b/src/components/DrawPDFFields/style.module.scss @@ -66,9 +66,11 @@ cursor: pointer; display: flex; justify-content: center; + align-items: center; &.nonEditable { cursor: default; + visibility: hidden; } .resizeHandle { diff --git a/src/components/PDFView/PdfItem.tsx b/src/components/PDFView/PdfItem.tsx index d463ea5..76c1b8b 100644 --- a/src/components/PDFView/PdfItem.tsx +++ b/src/components/PDFView/PdfItem.tsx @@ -1,14 +1,16 @@ import { PdfFile } from '../../types/drawing.ts' -import { Mark, MarkConfigDetails } from '../../types/mark.ts' +import { CurrentUserMark, Mark, MarkConfigDetails } from '../../types/mark.ts' import PdfPageItem from './PdfPageItem.tsx'; interface PdfItemProps { pdfFile: PdfFile marks: Mark[] handleMarkClick: (id: number) => void + currentMarkValue: string + currentUserMark: CurrentUserMark | null } -const PdfItem = ({ pdfFile, marks, handleMarkClick }: PdfItemProps) => { +const PdfItem = ({ pdfFile, marks, handleMarkClick, currentMarkValue, currentUserMark }: PdfItemProps) => { const filterByPage = (marks: Mark[], page: number): Mark[] => { return marks.filter((mark) => mark.location.page === page); } @@ -20,6 +22,8 @@ const PdfItem = ({ pdfFile, marks, handleMarkClick }: PdfItemProps) => { key={i} marks={filterByPage(marks, i)} handleMarkClick={handleMarkClick} + currentMarkValue={currentMarkValue} + currentUserMark={currentUserMark} /> ) })) diff --git a/src/components/PDFView/PdfMarkItem.tsx b/src/components/PDFView/PdfMarkItem.tsx index 60774e0..bc265bf 100644 --- a/src/components/PDFView/PdfMarkItem.tsx +++ b/src/components/PDFView/PdfMarkItem.tsx @@ -1,4 +1,4 @@ -import { Mark, MarkLocation } from '../../types/mark.ts' +import { CurrentUserMark, Mark, MarkLocation } from '../../types/mark.ts' import styles from '../DrawPDFFields/style.module.scss' import { inPx } from '../../utils/pdf.ts' @@ -6,10 +6,17 @@ interface PdfMarkItemProps { mark: Mark handleMarkClick: (id: number) => void isEditable: boolean + currentMarkValue: string + currentUserMark: CurrentUserMark | null } -const PdfMarkItem = ({ mark, handleMarkClick, isEditable }: PdfMarkItemProps) => { +const PdfMarkItem = ({ mark, handleMarkClick, isEditable, currentMarkValue, currentUserMark }: PdfMarkItemProps) => { const handleClick = () => isEditable && handleMarkClick(mark.id); + const getMarkValue = () => ( + currentUserMark?.mark.id === mark.id + ? currentMarkValue + : mark.value + ) return (
width: inPx(mark.location.width), height: inPx(mark.location.height) }} - /> + >{getMarkValue()}
) } diff --git a/src/components/PDFView/PdfPageItem.tsx b/src/components/PDFView/PdfPageItem.tsx index 051ac44..78a4ad1 100644 --- a/src/components/PDFView/PdfPageItem.tsx +++ b/src/components/PDFView/PdfPageItem.tsx @@ -1,6 +1,6 @@ import styles from '../DrawPDFFields/style.module.scss' import { PdfPage } from '../../types/drawing.ts' -import { Mark, MarkConfigDetails } from '../../types/mark.ts' +import { CurrentUserMark, Mark, MarkConfigDetails } from '../../types/mark.ts' import PdfMarkItem from './PdfMarkItem.tsx' import { useSelector } from 'react-redux' import { State } from '../../store/rootReducer.ts' @@ -9,9 +9,11 @@ interface PdfPageProps { page: PdfPage marks: Mark[] handleMarkClick: (id: number) => void + currentMarkValue: string + currentUserMark: CurrentUserMark | null } -const PdfPageItem = ({ page, marks, handleMarkClick }: PdfPageProps) => { +const PdfPageItem = ({ page, marks, handleMarkClick, currentMarkValue, currentUserMark }: PdfPageProps) => { const usersPubkey = useSelector((state: State) => state.auth.usersPubkey) const isEditable = (mark: Mark): boolean => { if (!usersPubkey) return false; @@ -39,6 +41,8 @@ const PdfPageItem = ({ page, marks, handleMarkClick }: PdfPageProps) => { mark={mark} isEditable={isEditable(mark)} handleMarkClick={handleMarkClick} + currentMarkValue={currentMarkValue} + currentUserMark={currentUserMark} /> ))} diff --git a/src/components/PDFView/index.tsx b/src/components/PDFView/index.tsx index 1f72275..6942b48 100644 --- a/src/components/PDFView/index.tsx +++ b/src/components/PDFView/index.tsx @@ -1,16 +1,18 @@ import { PdfFile } from '../../types/drawing.ts' import { Box } from '@mui/material' import PdfItem from './PdfItem.tsx' -import { Mark, MarkConfigDetails } from '../../types/mark.ts' +import { CurrentUserMark, Mark, MarkConfigDetails } from '../../types/mark.ts' interface PdfViewProps { files: { [filename: string]: PdfFile }, fileHashes: { [key: string]: string | null }, marks: Mark[], handleMarkClick: (id: number) => void + currentMarkValue: string + currentUserMark: CurrentUserMark | null } -const PdfView = ({ files, fileHashes, marks, handleMarkClick }: PdfViewProps) => { +const PdfView = ({ files, fileHashes, marks, handleMarkClick, currentMarkValue, currentUserMark }: PdfViewProps) => { const filterByFile = (marks: Mark[], fileHash: string): Mark[] => { return marks.filter((mark) => mark.pdfFileHash === fileHash); } @@ -23,6 +25,8 @@ const PdfView = ({ files, fileHashes, marks, handleMarkClick }: PdfViewProps) => key={i} marks={filterByFile(marks, fileHashes[name] ?? "")} handleMarkClick={handleMarkClick} + currentMarkValue={currentMarkValue} + currentUserMark={currentUserMark} /> ))} diff --git a/src/pages/sign/MarkFormField.tsx b/src/pages/sign/MarkFormField.tsx index 2e63f38..b45cbe8 100644 --- a/src/pages/sign/MarkFormField.tsx +++ b/src/pages/sign/MarkFormField.tsx @@ -1,6 +1,7 @@ import { CurrentUserMark, Mark } from '../../types/mark.ts' import styles from './style.module.scss' import { Box, Button, TextField } from '@mui/material' +import { MarkTypeTranslation } from './const.ts' interface MarkFormFieldProps { handleSubmit: (event: any) => void @@ -17,7 +18,7 @@ const MarkFormField = (props: MarkFormFieldProps) => { diff --git a/src/pages/sign/const.ts b/src/pages/sign/const.ts new file mode 100644 index 0000000..4a25c2b --- /dev/null +++ b/src/pages/sign/const.ts @@ -0,0 +1,5 @@ +import { MarkType } from '../../types/drawing.ts' + +export const MarkTypeTranslation: { [key: string]: string } = { + [MarkType.FULLNAME.valueOf()]: "Full Name" +} \ No newline at end of file diff --git a/src/pages/sign/index.tsx b/src/pages/sign/index.tsx index e8caa7c..1215862 100644 --- a/src/pages/sign/index.tsx +++ b/src/pages/sign/index.tsx @@ -13,7 +13,7 @@ import { LoadingSpinner } from '../../components/LoadingSpinner' import { NostrController } from '../../controllers' import { appPublicRoutes } from '../../routes' import { State } from '../../store/rootReducer' -import { CreateSignatureEventContent, Meta, SignedEvent } from '../../types' +import { CreateSignatureEventContent, Meta, SignedEvent, UserRole } from '../../types' import { decryptArrayBuffer, encryptArrayBuffer, @@ -239,6 +239,7 @@ export const SignPage = () => { .then((res) => { handleArrayBufferFromBlossom(res.data, encryptionKey) setMeta(metaInNavState) + console.log('meta in nav state: ', metaInNavState) }) .catch((err) => { console.error(`error occurred in getting file from ${zipUrl}`, err) @@ -490,6 +491,8 @@ export const SignPage = () => { } ) + console.log('parsed meta: ', parsedMetaJson) + setMeta(parsedMetaJson) } @@ -514,7 +517,10 @@ export const SignPage = () => { const prevSig = getPrevSignersSig(hexToNpub(usersPubkey!)) if (!prevSig) return - const signedEvent = await signEventForMeta(prevSig) + const marks = getSignerMarksForMeta() + if (!marks) return + + const signedEvent = await signEventForMeta({ prevSig, marks }) if (!signedEvent) return const updatedMeta = updateMetaSignatures(meta, signedEvent) @@ -528,14 +534,19 @@ export const SignPage = () => { } // Sign the event for the meta file - const signEventForMeta = async (prevSig: string) => { + const signEventForMeta = async (signerContent: { prevSig: string, marks: Mark[] }) => { return await signEventForMetaFile( - JSON.stringify({ prevSig }), + JSON.stringify(signerContent), nostrController, setIsLoading ) } + const getSignerMarksForMeta = (): Mark[] | undefined => { + if (currentUserMarks.length === 0) return; + return currentUserMarks.map(( { mark }: CurrentUserMark) => mark); + } + const handleMarkClick = (id: number) => { const nextMark = currentUserMarks.find(mark => mark.mark.id === id) setCurrentUserMark(nextMark!) @@ -595,6 +606,7 @@ export const SignPage = () => { [hexToNpub(signedEvent.pubkey)]: JSON.stringify(signedEvent, null, 2) } metaCopy.modifiedAt = now() + console.log('meta copy: ', metaCopy); return metaCopy } @@ -719,6 +731,7 @@ export const SignPage = () => { await Promise.all(promises) .then(() => { toast.success('Notifications sent successfully') + console.log('meta: ', meta); setMeta(meta) }) .catch(() => { @@ -948,6 +961,34 @@ export const SignPage = () => { return } + if (!isMarksCompleted) { + return ( + <> + + { + marks.length > 0 && ( + )} + { + currentUserMark !== null && ( + + )} + + + + )} + return ( <> @@ -976,67 +1017,46 @@ export const SignPage = () => { )} - {/*{submittedBy && Object.entries(files).length > 0 && meta && (*/} - {/* <>*/} - {/* */} - - {/* {signedStatus === SignedStatus.Fully_Signed && (*/} - {/* */} - {/* */} - {/* */} - {/* )}*/} - - {/* {signedStatus === SignedStatus.User_Is_Next_Signer && (*/} - {/* */} - {/* */} - {/* */} - {/* )}*/} - - {/* {isSignerOrCreator && (*/} - {/* */} - {/* */} - {/* */} - {/* )}*/} - {/* */} - {/*)}*/} - { - !isMarksCompleted && marks.length > 0 && ( - 0 && meta && ( + <> + - ) - } - { - !isMarksCompleted && currentUserMark !== null && - } + {signedStatus === SignedStatus.Fully_Signed && ( + + + + )} - { isMarksCompleted &&

Ready to Sign!

} + {signedStatus === SignedStatus.User_Is_Next_Signer && ( + + + + )} + + {isSignerOrCreator && ( + + + + )} + + )}
diff --git a/src/pages/sign/style.module.scss b/src/pages/sign/style.module.scss index aa3377b..9f380f3 100644 --- a/src/pages/sign/style.module.scss +++ b/src/pages/sign/style.module.scss @@ -55,13 +55,14 @@ transform: translateX(-50%); width: 100%; max-width: 500px; + height: 100px; border-top: 1px solid #ccc; box-shadow: 0 -2px 5px rgba(0, 0, 0, 0.1); padding: 10px 20px; display: flex; justify-content: center; align-items: center; - z-index: 1000; + //z-index: 200; } .fixedBottomForm input[type="text"] { diff --git a/src/types/core.ts b/src/types/core.ts index 99a8cfa..99c6925 100644 --- a/src/types/core.ts +++ b/src/types/core.ts @@ -30,6 +30,7 @@ export interface CreateSignatureEventContent { export interface SignedEventContent { prevSig: string + markConfig: Mark[] } export interface Sigit {