PDF Markings #114

Merged
eugene merged 33 commits from issue-99 into staging 2024-08-06 10:02:04 +00:00
7 changed files with 10 additions and 62 deletions
Showing only changes of commit b44f7fb5e3 - Show all commits

View File

@ -1,4 +1,4 @@
import { CurrentUserMark, Mark } from '../../types/mark.ts' import { CurrentUserMark } from '../../types/mark.ts'
import styles from './style.module.scss' import styles from './style.module.scss'
import { Box, Button, TextField } from '@mui/material' import { Box, Button, TextField } from '@mui/material'
@ -13,8 +13,6 @@ interface MarkFormFieldProps {
/** /**
* Responsible for rendering a form field connected to a mark and keeping track of its value. * Responsible for rendering a form field connected to a mark and keeping track of its value.
* @param props
* @constructor
*/ */
const MarkFormField = (props: MarkFormFieldProps) => { const MarkFormField = (props: MarkFormFieldProps) => {
const { handleSubmit, handleChange, selectedMark, selectedMarkValue } = props; const { handleSubmit, handleChange, selectedMark, selectedMarkValue } = props;

View File

@ -337,15 +337,13 @@ export const SignPage = () => {
if (!keysFileContent) return null if (!keysFileContent) return null
const parsedJSON = await parseJson<{ sender: string; keys: string[] }>( return await parseJson<{ sender: string; keys: string[] }>(
keysFileContent keysFileContent
).catch((err) => { ).catch((err) => {
console.log(`Error parsing content of keys.json:`, err) console.log(`Error parsing content of keys.json:`, err)
toast.error(err.message || `Error parsing content of keys.json`) toast.error(err.message || `Error parsing content of keys.json`)
return null return null
}) })
return parsedJSON
} }
const decrypt = async (file: File) => { const decrypt = async (file: File) => {
@ -603,15 +601,13 @@ export const SignPage = () => {
if (!arraybuffer) return null if (!arraybuffer) return null
const finalZipFile = new File( return new File(
[new Blob([arraybuffer])], [new Blob([arraybuffer])],
`${unixNow}.sigit.zip`, `${unixNow}.sigit.zip`,
{ {
type: 'application/zip' type: 'application/zip'
} }
) )
return finalZipFile
} }
// Handle errors during zip file generation // Handle errors during zip file generation

View File

@ -15,40 +15,6 @@ export interface Mark {
value?: string; value?: string;
} }
export interface MarkConfig {
/**
* @key user npub
*/
[key: string]: User
}
export interface User {
/**
* @key png (pdf page) file hash
*/
[key: string]: MarkConfigDetails[]
}
export interface MarkDetails {
/**
* @key coords in format X:10;Y:50
*/
[key: string]: MarkValue
}
export interface MarkValue {
value: string
}
export interface MarkConfigDetails {
type: MarkType;
/**
* Coordinates in format: X:10;Y:50
*/
location: MarkLocation;
value?: MarkValue
}
export interface MarkLocation { export interface MarkLocation {
top: number; top: number;
left: number; left: number;

View File

@ -6,4 +6,4 @@ export * from './nostr'
export * from './string' export * from './string'
export * from './zip' export * from './zip'
export * from './utils' export * from './utils'
export { extractMarksFromSignedMeta } from './mark.ts' export * from './mark'

View File

@ -85,7 +85,7 @@ const updateCurrentUserMarks = (currentUserMarks: CurrentUserMark[], markToUpdat
] ]
} }
const isLast = (index: number, arr: any[]) => (index === (arr.length -1)) const isLast = <T>(index: number, arr: T[]) => (index === (arr.length -1))
export { export {
getCurrentUserMarks, getCurrentUserMarks,

View File

@ -12,11 +12,10 @@ import { toast } from 'react-toastify'
import { NostrController } from '../controllers' import { NostrController } from '../controllers'
import { AuthState } from '../store/auth/types' import { AuthState } from '../store/auth/types'
import store from '../store/store' import store from '../store/store'
import { CreateSignatureEventContent, Meta, SignedEventContent } from '../types' import { CreateSignatureEventContent, Meta } from '../types'
import { hexToNpub, now } from './nostr' import { hexToNpub, now } from './nostr'
import { parseJson } from './string' import { parseJson } from './string'
import { hexToBytes } from '@noble/hashes/utils' import { hexToBytes } from '@noble/hashes/utils'
import { Mark } from '../types/mark.ts'
/** /**
* Uploads a file to a file storage service. * Uploads a file to a file storage service.
@ -84,14 +83,12 @@ export const signEventForMetaFile = async (
} }
// Sign the event // Sign the event
const signedEvent = await nostrController.signEvent(event).catch((err) => { return await nostrController.signEvent(event).catch((err) => {
console.error(err) console.error(err)
toast.error(err.message || 'Error occurred in signing nostr event') toast.error(err.message || 'Error occurred in signing nostr event')
setIsLoading(false) // Set loading state to false setIsLoading(false) // Set loading state to false
return null return null
}) })
return signedEvent // Return the signed event
} }
/** /**
@ -265,10 +262,3 @@ export const extractZipUrlAndEncryptionKey = async (meta: Meta) => {
return null return null
} }
export const extractMarksFromSignedMeta = (meta: Meta): Mark[] => {
return Object.values(meta.docSignatures)
.map((val: string) => JSON.parse(val as string))
.map((val: Event) => JSON.parse(val.content))
.flatMap((val: SignedEventContent) => val.marks);
}

View File

@ -22,8 +22,9 @@ const readContentOfZipEntry = async <T extends OutputType>(
return null return null
} }
// Read the content of the zip entry asynchronously // Read and return the content of the zip entry asynchronously
const fileContent = await zipEntry.async(outputType).catch((err) => { // or null if an error has occurred
return await zipEntry.async(outputType).catch((err) => {
// Handle any errors that occur during the read operation // Handle any errors that occur during the read operation
console.log(`Error reading content of ${filePath}:`, err) console.log(`Error reading content of ${filePath}:`, err)
toast.error( toast.error(
@ -31,9 +32,6 @@ const readContentOfZipEntry = async <T extends OutputType>(
) )
return null return null
}) })
// Return the file content or null if an error occurred
return fileContent
} }
const loadZip = async (data: InputFileFormat): Promise<JSZip | null> => { const loadZip = async (data: InputFileFormat): Promise<JSZip | null> => {