@@ -489,33 +489,63 @@ export function createHeadlessFeedbackController(
489489 )
490490 if ( state . disposed ) return state . submitState
491491
492- const adapterFailures = adapterResults . flatMap ( ( entry ) => {
493- if ( entry . status === 'rejected' ) return [ 'adapter' ]
494- return entry . value . result . ok ? [ ] : [ entry . value . name ]
495- } )
492+ const adapterSuccesses : string [ ] = [ ]
493+ const adapterFailures : string [ ] = [ ]
494+ let hasDeliveryUrl = false
495+ for ( const entry of adapterResults ) {
496+ if ( entry . status === 'rejected' ) {
497+ adapterFailures . push ( 'adapter' )
498+ } else if ( entry . value . result . ok ) {
499+ const { deliveryId : id , deliveryUrl : url } = entry . value . result
500+ if ( url ) {
501+ adapterSuccesses . push ( `<a href="${ url } " target="_blank" rel="noopener" style="color:inherit;text-decoration:underline">${ entry . value . name } #${ id ?? '' } </a>` )
502+ hasDeliveryUrl = true
503+ } else {
504+ adapterSuccesses . push ( id ? `${ entry . value . name } #${ id } ` : entry . value . name )
505+ }
506+ } else {
507+ adapterFailures . push ( entry . value . name )
508+ }
509+ }
510+
511+ const hasAdapterSuccess = adapterSuccesses . length > 0
512+ const hasAdapterFailure = adapterFailures . length > 0
496513
497- if ( ! flushOk || adapterFailures . length > 0 ) {
514+ if ( hasAdapterSuccess && ! hasAdapterFailure ) {
515+ state . submitState = {
516+ kind : 'complete' ,
517+ tone : 'success' ,
518+ message : `Feedback delivered via ${ adapterSuccesses . join ( ', ' ) } .` ,
519+ html : hasDeliveryUrl ,
520+ }
521+ } else if ( hasAdapterSuccess && hasAdapterFailure ) {
498522 state . submitState = {
499523 kind : 'complete' ,
500524 tone : 'warning' ,
501- message : [
502- flushOk
503- ? 'Feedback saved and sent from this page.'
504- : 'Feedback saved locally. Server delivery will retry automatically.' ,
505- adapterFailures . length > 0
506- ? `Adapter delivery failed: ${ adapterFailures . join ( ', ' ) } .`
507- : '' ,
508- ]
509- . filter ( Boolean )
510- . join ( ' ' ) ,
525+ message : `Delivered via ${ adapterSuccesses . join ( ', ' ) } . Failed: ${ adapterFailures . join ( ', ' ) } .` ,
526+ html : hasDeliveryUrl ,
511527 }
512- } else {
528+ } else if ( ! hasAdapterSuccess && config . adapters . length > 0 ) {
529+ state . submitState = {
530+ kind : 'complete' ,
531+ tone : 'warning' ,
532+ message : flushOk
533+ ? 'Feedback saved to server. Adapter delivery failed.'
534+ : 'Feedback saved locally. Delivery will retry automatically.' ,
535+ }
536+ } else if ( flushOk ) {
513537 state . submitState = {
514538 kind : 'complete' ,
515539 tone : 'success' ,
516540 message : state . includeScreenshot
517- ? 'Feedback sent with the current screenshot attached.'
518- : 'Feedback sent without a screenshot.' ,
541+ ? 'Feedback sent with screenshot attached.'
542+ : 'Feedback sent.' ,
543+ }
544+ } else {
545+ state . submitState = {
546+ kind : 'complete' ,
547+ tone : 'warning' ,
548+ message : 'Feedback saved locally. Server delivery will retry automatically.' ,
519549 }
520550 }
521551
0 commit comments