@@ -322,6 +322,13 @@ class PrplOnboardTask {
322322 ) ;
323323 }
324324 } ) ;
325+
326+ // Remove button handler.
327+ const removeBtn = uploadContainer . querySelector ( '.prpl-file-remove-btn' ) ;
328+ const previewDiv = uploadContainer . querySelector ( '.prpl-file-preview' ) ;
329+ removeBtn ?. addEventListener ( 'click' , ( ) => {
330+ this . removeUploadedFile ( uploadContainer , previewDiv ) ;
331+ } ) ;
325332 }
326333
327334 async uploadFile ( file , statusDiv ) {
@@ -365,6 +372,22 @@ class PrplOnboardTask {
365372 if ( previewDiv ) {
366373 previewDiv . innerHTML = `<img src="${ response . source_url } " alt="${ file . name } " />` ;
367374 previewDiv . style . display = 'block' ;
375+
376+ // Add has-image class to drop zone to update styling.
377+ const dropZone = this . taskContent . querySelector (
378+ '.prpl-file-drop-zone'
379+ ) ;
380+ if ( dropZone ) {
381+ dropZone . classList . add ( 'has-image' ) ;
382+
383+ // Show the remove button.
384+ const removeBtn = dropZone . querySelector (
385+ '.prpl-file-remove-btn'
386+ ) ;
387+ if ( removeBtn ) {
388+ removeBtn . hidden = false ;
389+ }
390+ }
368391 }
369392 return response ;
370393 } )
@@ -402,4 +425,46 @@ class PrplOnboardTask {
402425 return false ;
403426 } ) ;
404427 }
428+
429+ /**
430+ * Remove uploaded file and reset the drop zone state.
431+ * @param {HTMLElement } dropZone The drop zone element.
432+ * @param {HTMLElement } previewDiv The preview container element.
433+ */
434+ removeUploadedFile ( dropZone , previewDiv ) {
435+ // Clear the preview.
436+ previewDiv . innerHTML = '' ;
437+ previewDiv . style . display = 'none' ;
438+
439+ // Remove has-image class.
440+ dropZone . classList . remove ( 'has-image' ) ;
441+
442+ // Hide the remove button.
443+ const removeBtn = dropZone . querySelector ( '.prpl-file-remove-btn' ) ;
444+ if ( removeBtn ) {
445+ removeBtn . hidden = true ;
446+ }
447+
448+ // Clear the file input.
449+ const fileInput = dropZone . querySelector ( 'input[type="file"]' ) ;
450+ if ( fileInput ) {
451+ fileInput . value = '' ;
452+ }
453+
454+ // Clear the hidden post_id input and trigger validation.
455+ const postIdInput = dropZone . querySelector ( 'input[name="post_id"]' ) ;
456+ if ( postIdInput ) {
457+ postIdInput . value = '' ;
458+ postIdInput . dispatchEvent (
459+ new CustomEvent ( 'change' , { bubbles : true } )
460+ ) ;
461+ }
462+
463+ // Show status div again.
464+ const statusDiv = dropZone . querySelector ( '.prpl-upload-status' ) ;
465+ if ( statusDiv ) {
466+ statusDiv . style . display = '' ;
467+ statusDiv . textContent = '' ;
468+ }
469+ }
405470}
0 commit comments