@@ -463,7 +463,10 @@ export default function FixIssuesPage({
463463
464464 setFilteredIssues ( tempFilteredContent )
465465 setGroupedList ( groupList ( tempFilteredContent ) )
466- setActiveIssue ( holdoverActiveIssue )
466+ if ( holdoverActiveIssue ) {
467+ setActiveIssue ( holdoverActiveIssue )
468+ }
469+
467470 } , [ report ] )
468471
469472
@@ -702,7 +705,7 @@ export default function FixIssuesPage({
702705 return tempDoc . body . innerHTML
703706 }
704707
705- const handleIssueSave = ( issue , markAsReviewed = false ) => {
708+ const handleIssueSave = async ( issue , markAsReviewed = false ) => {
706709
707710 if ( ! activeContentItem || ! activeContentItem ?. body || ! issue ) {
708711 return
@@ -734,83 +737,73 @@ export default function FixIssuesPage({
734737 let fullPageDoc = new DOMParser ( ) . parseFromString ( fullPageHtml , 'text/html' )
735738 let newElement = Html . findElementWithError ( fullPageDoc , issue ?. newHtml )
736739 let newXpath = Html . findXpathFromElement ( newElement )
737- if ( newXpath ) {
738- issue . xpath = newXpath
739- }
740- else {
741- issue . xpath = ""
742- }
743- activeContentItem . body = fullPageHtml
744-
740+ issue . xpath = newXpath || ''
741+
745742 // Save the updated issue using the LMS API
746743 let api = new Api ( settings )
747744 try {
748- api . saveIssue ( issue , fullPageHtml , markAsReviewed )
749- . then ( ( responseStr ) => {
750- // Check for HTTP errors before parsing JSON
751- if ( ! responseStr . ok ) {
752- processServerError ( responseStr )
753- updateActiveSessionIssue ( issue . id , settings . ISSUE_STATE . ERROR )
754- removeItemFromBeingScanned ( issue . contentItemId )
755- return null
756- }
757- return responseStr . json ( )
758- } )
759- . then ( ( response ) => {
745+ const saveResponse = await api . saveIssue ( issue , fullPageHtml , markAsReviewed )
746+ if ( ! saveResponse . ok ) {
747+ processServerError ( saveResponse )
748+ updateActiveSessionIssue ( issue . id , settings . ISSUE_STATE . ERROR )
749+ removeItemFromBeingScanned ( issue . contentItemId )
750+ throw Error ( 'Save returned invalid server response.' )
751+ }
760752
761- // If the save falied, show the relevant error message
762- if ( response . data . failed ) {
763- updateActiveSessionIssue ( issue . id , settings . ISSUE_STATE . ERROR )
764- removeItemFromBeingScanned ( issue . contentItemId )
765- response . messages . forEach ( ( msg ) => addMessage ( msg ) )
766-
767- if ( Array . isArray ( response . data . issues ) ) {
768- response . data . issues . forEach ( ( issue ) => {
769- addMessage ( {
770- severity : 'error' ,
771- message : t ( `form.error.${ issue . ruleId } ` )
772- } )
773- } )
774- }
753+ const saveResponseJson = await saveResponse . json ( )
775754
776- if ( Array . isArray ( response . data . errors ) ) {
777- response . data . errors . forEach ( ( error ) => {
778- addMessage ( {
779- severity : 'error' ,
780- message : error
781- } )
755+ if ( saveResponseJson ?. errors && saveResponseJson . errors . length > 0 ) {
756+ updateActiveSessionIssue ( issue . id , settings . ISSUE_STATE . ERROR )
757+ removeItemFromBeingScanned ( issue . contentItemId )
758+ saveResponseJson . messages . forEach ( ( msg ) => addMessage ( msg ) )
759+
760+ if ( Array . isArray ( saveResponseJson . errors ) ) {
761+ saveResponseJson . errors . forEach ( ( error ) => {
762+ addMessage ( {
763+ severity : 'error' ,
764+ message : t ( error )
782765 } )
783- }
766+ } )
784767 }
785- else {
786-
787- // If the save was successful, show the success message
788- response . messages . forEach ( ( msg ) => addMessage ( msg ) )
789-
790- if ( response . data . issue ) {
791- // Update the report object by rescanning the content
792- const newIssue = Object . assign ( { } , issue , response . data . issue )
793- // const formattedData = formatIssueData(newIssue)
794- // setActiveIssue(formattedData)
795- updateActiveSessionIssue ( newIssue . id , settings . ISSUE_STATE . SAVED )
796-
797- api . scanContent ( newIssue . contentItemId )
798- . then ( ( responseStr ) => responseStr . json ( ) )
799- . then ( ( res ) => {
800- const tempReport = Object . assign ( { } , res ?. data )
801- processNewReport ( tempReport )
802- removeItemFromBeingScanned ( newIssue . contentItemId )
803- } )
804- }
805- else {
806- // setActiveIssue(formatIssueData(issue))
807- updateActiveSessionIssue ( issue . id , settings . ISSUE_STATE . SAVED )
808- removeItemFromBeingScanned ( issue . contentItemId )
768+ throw Error ( 'Save failed.' )
769+ }
770+
771+ // Successful save!
772+ saveResponseJson . messages . forEach ( ( msg ) => addMessage ( msg ) )
773+ if ( issue . contentItemId === activeContentItem . id ) {
774+ activeContentItem . body = fullPageHtml
775+ }
776+
777+ // If there isn't a new issue created, we're done.
778+ if ( ! saveResponseJson ?. data ?. issue ) {
779+ updateActiveSessionIssue ( issue . id , settings . ISSUE_STATE . SAVED )
780+ removeItemFromBeingScanned ( issue . contentItemId )
781+ return
782+ }
783+
784+ if ( saveResponseJson ?. data ?. issue ) {
785+ // Update the report object by rescanning the content
786+ const newIssue = Object . assign ( { } , issue , saveResponseJson . data . issue )
787+ updateActiveSessionIssue ( newIssue . id , settings . ISSUE_STATE . SAVED )
788+
789+ const scanResponse = await api . scanContent ( newIssue . contentItemId )
790+
791+ if ( scanResponse . ok ) {
792+ const scanResponseJson = await scanResponse . json ( )
793+ if ( scanResponseJson . data ) {
794+ const tempReport = Object . assign ( { } , scanResponseJson . data )
795+ processNewReport ( tempReport )
796+ removeItemFromBeingScanned ( newIssue . contentItemId )
797+ return
809798 }
810799 }
811- } )
800+ }
801+
802+ updateActiveSessionIssue ( issue . id , settings . ISSUE_STATE . SAVED )
803+ removeItemFromBeingScanned ( issue . contentItemId )
804+
812805 } catch ( error ) {
813- console . error ( error )
806+ console . warn ( error )
814807 updateActiveSessionIssue ( issue . id , settings . ISSUE_STATE . ERROR )
815808 }
816809 }
0 commit comments