PDF Markings #114
@ -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;
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
|
@ -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'
|
||||||
|
@ -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,
|
||||||
|
@ -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);
|
|
||||||
}
|
|
||||||
|
@ -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> => {
|
||||||
|
Loading…
Reference in New Issue
Block a user