@@ -87,17 +87,16 @@ export const CustomRuleFilesUpload: React.FC<CustomRuleFilesUploadProps> = ({
8787 onAddRuleFiles ( newRuleFiles ) ;
8888 } )
8989 . then ( ( ) => {
90- // Trigger the upload process for each file automatically
91- incomingFiles . forEach ( ( file ) => {
92- const ruleFile = {
93- fileName : file . name ,
94- fullFile : file ,
95- uploadProgress : 0 ,
96- status : "starting" as const ,
97- } ;
98- // Use setTimeout to ensure the state has been updated before processing
99- setTimeout ( ( ) => readVerifyAndUploadFile ( ruleFile , file ) , 0 ) ;
100- } ) ;
90+ // Automatically trigger customFileHandler for each file since PatternFly doesn't do this automatically
91+ // Use setTimeout to ensure state has been updated
92+ setTimeout ( ( ) => {
93+ incomingFiles . forEach ( ( file ) => {
94+ const ruleFile = ruleFileByName ( file . name ) ;
95+ if ( ruleFile ) {
96+ readVerifyAndUploadFile ( ruleFile , file ) ;
97+ }
98+ } ) ;
99+ } , 0 ) ;
101100 } ) ;
102101 } ;
103102
@@ -151,7 +150,13 @@ export const CustomRuleFilesUpload: React.FC<CustomRuleFilesUploadProps> = ({
151150
152151 // Upload the file to hub!
153152 // TODO: Provide an onUploadProgress handler so the actual upload can be tracked from 20% to 100%
154- uploadFile ( file , taskgroupId ) ;
153+ const updatedRuleFile = {
154+ ...ruleFile ,
155+ uploadProgress : 20 ,
156+ status : "validated" as const ,
157+ contents : fileContents ,
158+ } ;
159+ uploadFile ( file , taskgroupId , updatedRuleFile ) ;
155160 } catch ( error ) {
156161 onChangeRuleFile ( {
157162 ...ruleFile ,
@@ -162,34 +167,26 @@ export const CustomRuleFilesUpload: React.FC<CustomRuleFilesUploadProps> = ({
162167 } ;
163168
164169 const { uploadFile } = useFileUploader (
165- ( file , hubFile ) => {
166- // Use a timeout to ensure we get the latest state with contents
167- setTimeout ( ( ) => {
168- const ruleFile = ruleFileByName ( file . name ) ;
169- if ( ruleFile ) {
170- onChangeRuleFile ( {
171- ...ruleFile ,
172- fileId : hubFile ?. id ,
173- uploadProgress : 100 ,
174- status : "uploaded" ,
175- } ) ;
176- }
177- } , 0 ) ;
170+ ( file , hubFile , ruleFileContext ) => {
171+ if ( ruleFileContext ) {
172+ onChangeRuleFile ( {
173+ ...ruleFileContext ,
174+ fileId : hubFile ?. id ,
175+ uploadProgress : 100 ,
176+ status : "uploaded" ,
177+ } ) ;
178+ }
178179 } ,
179- ( error , file ) => {
180+ ( error , file , ruleFileContext ) => {
180181 const msg = getAxiosErrorMessage ( error ) ;
181182
182- // Use a timeout to ensure we get the latest state with contents
183- setTimeout ( ( ) => {
184- const ruleFile = ruleFileByName ( file . name ) ;
185- if ( ruleFile ) {
186- onChangeRuleFile ( {
187- ...ruleFile ,
188- loadError : msg ,
189- status : "failed" ,
190- } ) ;
191- }
192- } , 0 ) ;
183+ if ( ruleFileContext ) {
184+ onChangeRuleFile ( {
185+ ...ruleFileContext ,
186+ loadError : msg ,
187+ status : "failed" ,
188+ } ) ;
189+ }
193190
194191 pushNotification ( { title : msg , variant : "danger" } ) ;
195192 }
@@ -269,20 +266,52 @@ export const CustomRuleFilesUpload: React.FC<CustomRuleFilesUploadProps> = ({
269266} ;
270267
271268function useFileUploader (
272- onSuccess : ( file : File , hubFile ?: HubFile ) => void ,
273- onError : ( e : AxiosError , file : File ) => void
269+ onSuccess : (
270+ file : File ,
271+ hubFile ?: HubFile ,
272+ ruleFileContext ?: UploadFile
273+ ) => void ,
274+ onError : ( e : AxiosError , file : File , ruleFileContext ?: UploadFile ) => void
274275) {
276+ // Store file context to pass to callbacks
277+ const fileContextRef = React . useRef ( new Map < string , UploadFile > ( ) ) ;
278+
275279 const { mutate : createRuleFile } = useCreateFileMutation (
276- ( hubFile , file ) => onSuccess ( file , hubFile ) ,
277- ( e , file ) => onError ( e , file )
280+ ( hubFile , file ) => {
281+ const ruleFileContext = fileContextRef . current . get ( file . name ) ;
282+ onSuccess ( file , hubFile , ruleFileContext ) ;
283+ fileContextRef . current . delete ( file . name ) ;
284+ } ,
285+ ( e , file ) => {
286+ const ruleFileContext = fileContextRef . current . get ( file . name ) ;
287+ onError ( e , file , ruleFileContext ) ;
288+ fileContextRef . current . delete ( file . name ) ;
289+ }
278290 ) ;
279291
280292 const { mutate : uploadTaskgroupFile } = useUploadTaskgroupFileMutation (
281- ( _ , { file } ) => onSuccess ( file ) ,
282- ( e , { file } ) => onError ( e , file )
293+ ( _ , { file } ) => {
294+ const ruleFileContext = fileContextRef . current . get ( file . name ) ;
295+ onSuccess ( file , undefined , ruleFileContext ) ;
296+ fileContextRef . current . delete ( file . name ) ;
297+ } ,
298+ ( e , { file } ) => {
299+ const ruleFileContext = fileContextRef . current . get ( file . name ) ;
300+ onError ( e , file , ruleFileContext ) ;
301+ fileContextRef . current . delete ( file . name ) ;
302+ }
283303 ) ;
284304
285- const uploadFile = ( file : File , taskgroupId ?: number ) => {
305+ const uploadFile = (
306+ file : File ,
307+ taskgroupId ?: number ,
308+ ruleFileContext ?: UploadFile
309+ ) => {
310+ // Store the ruleFile context for retrieval in callbacks
311+ if ( ruleFileContext ) {
312+ fileContextRef . current . set ( file . name , ruleFileContext ) ;
313+ }
314+
286315 if ( taskgroupId === undefined ) {
287316 createRuleFile ( { file } ) ;
288317 } else {
0 commit comments