1- import { Dropzone , Box , Label , Typography } from '@neo4j-ndl/react' ;
2- import { useState , useEffect } from 'react' ;
3- import FileTable from './FileTable' ;
1+ import { Dropzone } from '@neo4j-ndl/react' ;
2+ import { useState , useEffect , FunctionComponent } from 'react' ;
43import Loader from '../utils/Loader' ;
54import { uploadAPI } from '../services/Upload' ;
6- import { healthStatus } from '../services/HealthStatus' ;
75import { v4 as uuidv4 } from 'uuid' ;
86import { useCredentials } from '../context/UserCredentials' ;
7+ import { useFileContext } from '../context/UsersFiles' ;
98
109interface CustomFile extends Partial < globalThis . File > {
1110 processing : string ;
@@ -15,19 +14,17 @@ interface CustomFile extends Partial<globalThis.File> {
1514 relationshipCount : number ;
1615}
1716
18- export default function DropZone ( ) {
19- const [ filesdata , setFilesdata ] = useState < CustomFile [ ] | [ ] > ( [ ] ) ;
20- const [ files , setFiles ] = useState < File [ ] | [ ] > ( [ ] ) ;
17+ const DropZone : FunctionComponent < { isBackendConnected : Boolean } > = ( props ) => {
18+ const { files, filesData, setFiles, setFilesData } = useFileContext ( ) ;
2119 const [ isLoading , setIsLoading ] = useState < boolean > ( false ) ;
22- const [ isBackendConnected , setIsBackendConnected ] = useState < boolean > ( false ) ;
2320 const { userCredentials } = useCredentials ( ) ;
2421
2522 const fileUpload = async ( file : File , uid : number ) => {
26- if ( filesdata [ uid ] . status == 'None' ) {
23+ if ( filesData [ uid ] . status == 'None' ) {
2724 const apirequests = [ ] ;
2825 try {
2926 setIsLoading ( true ) ;
30- setFilesdata ( ( prevfiles ) =>
27+ setFilesData ( ( prevfiles ) =>
3128 prevfiles . map ( ( curfile , idx ) => {
3229 if ( idx == uid ) {
3330 return {
@@ -46,7 +43,7 @@ export default function DropZone() {
4643 r . forEach ( ( apiRes ) => {
4744 if ( apiRes . status === 'fulfilled' && apiRes . value ) {
4845 if ( apiRes ?. value ?. data != 'Unexpected Error' ) {
49- setFilesdata ( ( prevfiles ) =>
46+ setFilesData ( ( prevfiles ) =>
5047 prevfiles . map ( ( curfile , idx ) => {
5148 if ( idx == uid ) {
5249 return {
@@ -72,7 +69,7 @@ export default function DropZone() {
7269 } catch ( err ) {
7370 console . log ( err ) ;
7471 setIsLoading ( false ) ;
75- setFilesdata ( ( prevfiles ) =>
72+ setFilesData ( ( prevfiles ) =>
7673 prevfiles . map ( ( curfile , idx ) => {
7774 if ( idx == uid ) {
7875 return {
@@ -88,18 +85,6 @@ export default function DropZone() {
8885 }
8986 } ;
9087
91- useEffect ( ( ) => {
92- async function getHealthStatus ( ) {
93- try {
94- const response = await healthStatus ( ) ;
95- setIsBackendConnected ( response . data . healthy ) ;
96- } catch ( error ) {
97- setIsBackendConnected ( false ) ;
98- }
99- }
100- getHealthStatus ( ) ;
101- } , [ ] ) ;
102-
10388 useEffect ( ( ) => {
10489 if ( files . length > 0 ) {
10590 for ( let i = 0 ; i < files . length ; i ++ ) {
@@ -110,55 +95,38 @@ export default function DropZone() {
11095
11196 return (
11297 < >
113- < Box
114- style = { {
115- width : '100%' ,
116- padding : '0.8em' ,
117- } }
118- >
119- < Typography variant = 'body-medium' style = { { display : 'flex' , marginBlock : '10px' , marginLeft : '5px' } } >
120- Backend connection Status:
121- < Typography variant = 'body-medium' style = { { marginLeft : '10px' } } >
122- { ! isBackendConnected ? (
123- < Label color = 'danger' > Not connected</ Label >
124- ) : (
125- < Label color = 'success' > Connected</ Label >
126- ) }
127- </ Typography >
128- </ Typography >
129- { isBackendConnected && (
130- < Dropzone
131- loadingComponent = { isLoading && < Loader /> }
132- isTesting = { true }
133- dropZoneOptions = { {
134- accept : { 'application/pdf' : [ '.pdf' ] } ,
135- onDrop : ( f : Partial < globalThis . File > [ ] ) => {
136- setIsLoading ( false ) ;
137- if ( f . length ) {
138- const defaultValues : CustomFile = {
139- processing : 'None' ,
140- status : 'None' ,
141- NodesCount : 0 ,
142- id : uuidv4 ( ) ,
143- relationshipCount : 0 ,
144- } ;
145- const updatedFiles : CustomFile [ ] = f . map ( ( file ) => ( {
146- name : file . name ,
147- type : file . type ,
148- size : file . size ,
149- ...defaultValues ,
150- } ) ) ;
151- setFiles ( ( prevfiles ) => [ ...prevfiles , ...( f as File [ ] ) ] ) ;
152- setFilesdata ( ( prevfilesdata ) => [ ...prevfilesdata , ...updatedFiles ] ) ;
153- }
154- } ,
155- } }
156- />
157- ) }
158- </ Box >
159- < div style = { { marginTop : '15px' , width : '100%' } } >
160- < div > { filesdata . length > 0 && < FileTable files = { filesdata } /> } </ div >
161- </ div >
98+ { props . isBackendConnected && (
99+ < Dropzone
100+ loadingComponent = { isLoading && < Loader /> }
101+ isTesting = { true }
102+ className = 'w-full h-full'
103+ dropZoneOptions = { {
104+ accept : { 'application/pdf' : [ '.pdf' ] } ,
105+ onDrop : ( f : Partial < globalThis . File > [ ] ) => {
106+ setIsLoading ( false ) ;
107+ if ( f . length ) {
108+ const defaultValues : CustomFile = {
109+ processing : 'None' ,
110+ status : 'None' ,
111+ NodesCount : 0 ,
112+ id : uuidv4 ( ) ,
113+ relationshipCount : 0 ,
114+ } ;
115+ const updatedFiles : CustomFile [ ] = f . map ( ( file ) => ( {
116+ name : file . name ,
117+ type : file . type ,
118+ size : file . size ,
119+ ...defaultValues ,
120+ } ) ) ;
121+ setFiles ( ( prevfiles ) => [ ...prevfiles , ...( f as File [ ] ) ] ) ;
122+ setFilesData ( ( prevfilesdata ) => [ ...prevfilesdata , ...updatedFiles ] ) ;
123+ }
124+ } ,
125+ } }
126+ />
127+ ) }
162128 </ >
163129 ) ;
164- }
130+ } ;
131+
132+ export default DropZone ;
0 commit comments