@@ -3,18 +3,33 @@ import { isNodeComplete } from 'shared/utils/validation';
33import db from 'shared/data/db' ;
44import { TABLE_NAMES } from 'shared/data/constants' ;
55
6- function updateNodeComplete ( nodeId , context ) {
7- const node = context . rootGetters [ 'contentNode/getContentNode' ] ( nodeId ) ;
8- const complete = isNodeComplete ( {
9- nodeDetails : node ,
10- assessmentItems : context . getters . getAssessmentItems ( nodeId ) ,
11- files : context . rootGetters [ 'file/getContentNodeFiles' ] ( nodeId ) ,
12- } ) ;
13- return context . dispatch (
14- 'contentNode/updateContentNode' ,
15- { id : nodeId , complete } ,
16- { root : true }
17- ) ;
6+ // We implement a retry mechanism to ensure that we wait for retrival of contentnode
7+ // when all the nodes for the
8+ // currently displayed topic in the tree view are reloaded
9+ function updateNodeComplete ( nodeId , context , maxTries = 10 , delayMs = 100 ) {
10+ let tries = 0 ;
11+
12+ function tryUpdate ( ) {
13+ const node = context . rootGetters [ 'contentNode/getContentNode' ] ( nodeId ) ;
14+ if ( node ) {
15+ const complete = isNodeComplete ( {
16+ nodeDetails : node ,
17+ assessmentItems : context . getters . getAssessmentItems ( nodeId ) ,
18+ files : context . rootGetters [ 'file/getContentNodeFiles' ] ( nodeId ) ,
19+ } ) ;
20+ return context . dispatch (
21+ 'contentNode/updateContentNode' ,
22+ { id : nodeId , complete } ,
23+ { root : true }
24+ ) ;
25+ } else if ( tries < maxTries ) {
26+ tries ++ ;
27+ setTimeout ( tryUpdate , delayMs ) ;
28+ } else {
29+ console . error ( `updateNodeComplete: Node ${ nodeId } not found in Vuex after ${ maxTries } tries` ) ;
30+ }
31+ }
32+ tryUpdate ( ) ;
1833}
1934
2035/**
0 commit comments