@@ -12,6 +12,7 @@ import Title from "../components/Title";
12
12
import PageNotFound from "./PageNotFound" ;
13
13
import { SaveFileSize } from "../constant/saveFileSize" ;
14
14
import { getFileName } from "../constant/Utils" ;
15
+ import { PDFDocument } from "pdf-lib" ;
15
16
16
17
// `Form` render all type of Form on this basis of their provided in path
17
18
function Form ( ) {
@@ -41,7 +42,7 @@ const Forms = (props) => {
41
42
TimeToCompleteDays : 15 ,
42
43
SendinOrder : "false"
43
44
} ) ;
44
- const [ fileupload , setFileUpload ] = useState ( [ ] ) ;
45
+ const [ fileupload , setFileUpload ] = useState ( "" ) ;
45
46
const [ fileload , setfileload ] = useState ( false ) ;
46
47
const [ percentage , setpercentage ] = useState ( 0 ) ;
47
48
const [ isReset , setIsReset ] = useState ( false ) ;
@@ -55,7 +56,23 @@ const Forms = (props) => {
55
56
handleReset ( ) ;
56
57
// eslint-disable-next-line react-hooks/exhaustive-deps
57
58
} , [ props . title ] ) ;
58
- const handleFileInput = ( e ) => {
59
+
60
+ function getFileAsArrayBuffer ( file ) {
61
+ return new Promise ( ( resolve , reject ) => {
62
+ const reader = new FileReader ( ) ;
63
+
64
+ reader . onload = ( e ) => {
65
+ resolve ( e . target . result ) ;
66
+ } ;
67
+
68
+ reader . onerror = ( e ) => {
69
+ reject ( e . target . error ) ;
70
+ } ;
71
+
72
+ reader . readAsArrayBuffer ( file ) ;
73
+ } ) ;
74
+ }
75
+ const handleFileInput = async ( e ) => {
59
76
setpercentage ( 0 ) ;
60
77
try {
61
78
let files = e . target . files ;
@@ -65,11 +82,21 @@ const Forms = (props) => {
65
82
alert (
66
83
`The selected file size is too large. Please select a file less than ${ maxFileSize } MB`
67
84
) ;
68
- setFileUpload ( [ ] ) ;
85
+ setFileUpload ( "" ) ;
69
86
e . target . value = "" ;
70
87
return ;
71
88
} else {
72
- handleFileUpload ( files [ 0 ] ) ;
89
+ try {
90
+ const res = await getFileAsArrayBuffer ( files [ 0 ] ) ;
91
+ const pdfBytes = await PDFDocument . load ( res ) ;
92
+ console . log ( "pdfbytes " , pdfBytes ) ;
93
+ handleFileUpload ( files [ 0 ] ) ;
94
+ } catch ( err ) {
95
+ alert ( `Currently encrypted pdf files are not supported.` ) ;
96
+ setFileUpload ( "" ) ;
97
+ e . target . value = "" ;
98
+ console . log ( "err " , err ) ;
99
+ }
73
100
}
74
101
} else {
75
102
alert ( "Please select file." ) ;
@@ -162,64 +189,68 @@ const Forms = (props) => {
162
189
const handleSubmit = async ( e ) => {
163
190
e . preventDefault ( ) ;
164
191
e . stopPropagation ( ) ;
165
- setIsSubmit ( true ) ;
166
- try {
167
- const currentUser = Parse . User . current ( ) ;
168
- const object = new Parse . Object ( props . Cls ) ;
169
- object . set ( "Name" , formData ?. Name ) ;
170
- object . set ( "Description" , formData ?. Description ) ;
171
- object . set ( "Note" , formData ?. Note ) ;
172
- if ( props . title === "Request Signatures" ) {
173
- object . set (
174
- "TimeToCompleteDays" ,
175
- parseInt ( formData ?. TimeToCompleteDays )
176
- ) ;
177
- }
178
- if ( props . title !== "Sign Yourself" ) {
179
- const isChecked = formData . SendinOrder === "false" ? false : true ;
180
- object . set ( "SendinOrder" , isChecked ) ;
181
- }
182
- object . set ( "URL" , fileupload ) ;
183
- object . set ( "CreatedBy" , Parse . User . createWithoutData ( currentUser . id ) ) ;
184
- if ( folder && folder . ObjectId ) {
185
- object . set ( "Folder" , {
192
+ if ( fileupload ) {
193
+ setIsSubmit ( true ) ;
194
+ try {
195
+ const currentUser = Parse . User . current ( ) ;
196
+ const object = new Parse . Object ( props . Cls ) ;
197
+ object . set ( "Name" , formData ?. Name ) ;
198
+ object . set ( "Description" , formData ?. Description ) ;
199
+ object . set ( "Note" , formData ?. Note ) ;
200
+ if ( props . title === "Request Signatures" ) {
201
+ object . set (
202
+ "TimeToCompleteDays" ,
203
+ parseInt ( formData ?. TimeToCompleteDays )
204
+ ) ;
205
+ }
206
+ if ( props . title !== "Sign Yourself" ) {
207
+ const isChecked = formData . SendinOrder === "false" ? false : true ;
208
+ object . set ( "SendinOrder" , isChecked ) ;
209
+ }
210
+ object . set ( "URL" , fileupload ) ;
211
+ object . set ( "CreatedBy" , Parse . User . createWithoutData ( currentUser . id ) ) ;
212
+ if ( folder && folder . ObjectId ) {
213
+ object . set ( "Folder" , {
214
+ __type : "Pointer" ,
215
+ className : props . Cls ,
216
+ objectId : folder . ObjectId
217
+ } ) ;
218
+ }
219
+ if ( signers && signers . length > 0 ) {
220
+ object . set ( "Signers" , signers ) ;
221
+ }
222
+ const ExtCls = JSON . parse ( localStorage . getItem ( "Extand_Class" ) ) ;
223
+ object . set ( "ExtUserPtr" , {
186
224
__type : "Pointer" ,
187
- className : props . Cls ,
188
- objectId : folder . ObjectId
225
+ className : "contracts_Users" ,
226
+ objectId : ExtCls [ 0 ] . objectId
189
227
} ) ;
190
- }
191
- if ( signers && signers . length > 0 ) {
192
- object . set ( "Signers" , signers ) ;
193
- }
194
- const ExtCls = JSON . parse ( localStorage . getItem ( "Extand_Class" ) ) ;
195
- object . set ( "ExtUserPtr" , {
196
- __type : "Pointer" ,
197
- className : "contracts_Users" ,
198
- objectId : ExtCls [ 0 ] . objectId
199
- } ) ;
200
228
201
- const res = await object . save ( ) ;
202
- if ( res ) {
203
- setSigners ( [ ] ) ;
204
- setFolder ( { ObjectId : "" , Name : "" } ) ;
205
- setFormData ( {
206
- Name : "" ,
207
- Description : "" ,
208
- Note : ""
209
- } ) ;
210
- setFileUpload ( [ ] ) ;
211
- setpercentage ( 0 ) ;
212
- navigate ( `/${ props ?. redirectRoute } /${ res . id } ` ) ;
229
+ const res = await object . save ( ) ;
230
+ if ( res ) {
231
+ setSigners ( [ ] ) ;
232
+ setFolder ( { ObjectId : "" , Name : "" } ) ;
233
+ setFormData ( {
234
+ Name : "" ,
235
+ Description : "" ,
236
+ Note : ""
237
+ } ) ;
238
+ setFileUpload ( "" ) ;
239
+ setpercentage ( 0 ) ;
240
+ navigate ( `/${ props ?. redirectRoute } /${ res . id } ` ) ;
241
+ }
242
+ } catch ( err ) {
243
+ console . log ( "err " , err ) ;
244
+ setIsErr ( true ) ;
245
+ } finally {
246
+ setIsAlert ( true ) ;
247
+ setTimeout ( ( ) => {
248
+ setIsAlert ( false ) ;
249
+ } , 1000 ) ;
250
+ setIsSubmit ( false ) ;
213
251
}
214
- } catch ( err ) {
215
- console . log ( "err " , err ) ;
216
- setIsErr ( true ) ;
217
- } finally {
218
- setIsAlert ( true ) ;
219
- setTimeout ( ( ) => {
220
- setIsAlert ( false ) ;
221
- } , 1000 ) ;
222
- setIsSubmit ( false ) ;
252
+ } else {
253
+ alert ( "Please wait until the PDF has been uploading." ) ;
223
254
}
224
255
} ;
225
256
@@ -251,11 +282,11 @@ const Forms = (props) => {
251
282
TimeToCompleteDays : 15 ,
252
283
SendinOrder : "true"
253
284
} ) ;
254
- setFileUpload ( [ ] ) ;
285
+ setFileUpload ( "" ) ;
255
286
setpercentage ( 0 ) ;
256
287
setTimeout ( ( ) => setIsReset ( false ) , 50 ) ;
257
288
} ;
258
-
289
+
259
290
return (
260
291
< div className = "shadow-md rounded my-2 p-3 bg-[#ffffff] md:border-[1px] md:border-gray-600/50" >
261
292
< Title title = { props ?. title } />
@@ -303,7 +334,7 @@ const Forms = (props) => {
303
334
file selected : { getFileName ( fileupload ) }
304
335
</ div >
305
336
< div
306
- onClick = { ( ) => setFileUpload ( [ ] ) }
337
+ onClick = { ( ) => setFileUpload ( "" ) }
307
338
className = "cursor-pointer px-[10px] text-[20px] font-bold bg-white text-red-500"
308
339
>
309
340
< i className = "fa-solid fa-xmark" > </ i >
0 commit comments