@@ -3,7 +3,7 @@ import { Avatar, Box, Button, CircularProgress, Stack, Typography, alpha, useThe
33import { motion } from 'motion/react' ;
44import { useSnackbar } from 'notistack' ;
55import type { PropsWithChildren } from 'react' ;
6- import { useRef , useState } from 'react' ;
6+ import { useCallback , useRef , useState } from 'react' ;
77import React , { useMemo } from 'react' ;
88import { tss } from 'tss-react/mui' ;
99
@@ -30,44 +30,47 @@ export default function ReportPickerArea({ children }: ReportPickerAreaProps) {
3030 const [ loading , setLoading ] = useState ( false ) ;
3131 const [ reportLoadError , setReportLoadError ] = useState < Error | string | null > ( null ) ;
3232
33- const handleFile = ( file : File ) => {
34- if ( ! file || file . type !== 'application/json' ) {
35- enqueueSnackbar ( {
36- message : 'Please select a valid JSON file.' ,
37- variant : 'error' ,
38- } ) ;
39- return ;
40- }
33+ const handleFile = useCallback (
34+ ( file : File ) => {
35+ if ( ! file || file . type !== 'application/json' ) {
36+ enqueueSnackbar ( {
37+ message : 'Please select a valid JSON file.' ,
38+ variant : 'error' ,
39+ } ) ;
40+ return ;
41+ }
4142
42- const reader = new FileReader ( ) ;
43+ const reader = new FileReader ( ) ;
4344
44- reader . onload = ( ) => {
45- try {
46- if ( ! reader . result ) {
47- throw new Error ( 'File reading error' ) ;
48- }
45+ reader . onload = ( ) => {
46+ try {
47+ if ( ! reader . result ) {
48+ throw new Error ( 'File reading error' ) ;
49+ }
4950
50- const json = JSON . parse ( reader . result as string ) ;
51+ const json = JSON . parse ( reader . result as string ) ;
5152
52- setAutoLoadFromServer ( false ) ;
53- setReport ( json , file . name ) ;
54- } catch ( error ) {
55- console . error ( 'Error parsing JSON file:' , error ) ;
53+ setAutoLoadFromServer ( false ) ;
54+ setReport ( json , file . name ) ;
55+ } catch ( error ) {
56+ console . error ( 'Error parsing JSON file:' , error ) ;
5657
57- enqueueSnackbar ( {
58- message : 'Failed to parse JSON file. Please ensure it is a valid JSON.' ,
59- variant : 'error' ,
60- } ) ;
58+ enqueueSnackbar ( {
59+ message : 'Failed to parse JSON file. Please ensure it is a valid JSON.' ,
60+ variant : 'error' ,
61+ } ) ;
6162
62- setReportLoadError ( error as Error | string ) ;
63- } finally {
64- setLoading ( false ) ;
65- }
66- } ;
63+ setReportLoadError ( error as Error | string ) ;
64+ } finally {
65+ setLoading ( false ) ;
66+ }
67+ } ;
6768
68- setLoading ( true ) ;
69- reader . readAsText ( file ) ;
70- } ;
69+ setLoading ( true ) ;
70+ reader . readAsText ( file ) ;
71+ } ,
72+ [ enqueueSnackbar , setAutoLoadFromServer , setReport ] ,
73+ ) ;
7174
7275 const handleDrop : React . DragEventHandler < HTMLDivElement > = ( e ) => {
7376 e . preventDefault ( ) ;
0 commit comments