Repository: oppia/oppia
File: core/templates/pages/learner-dashboard-page/learner-dashboard-page.component.ts (TypeScript)

Code before:
          );
        }
      }
    );

    let dashboardExplorationsDataPromise =
      this.learnerDashboardBackendApiService.fetchLearnerDashboardExplorationsDataAsync();
    dashboardExplorationsDataPromise.then(
      responseData => {
        this.completedExplorationsList = responseData.completedExplorationsList;
        (this.allTopics || []).forEach(topic => {
          (topic.getCanonicalStorySummaryDicts() || []).forEach(
            storySummary => {
              (storySummary.getAllNodes() || []).forEach(nodeSummary => {
                const expId = nodeSummary.getExplorationId();
                if (expId !== null) {
                  this.curatedExplorationIds.add(expId);
                }
              });
            }
          );
        });

        this.incompleteExplorationsList = (
          responseData.incompleteExplorationsList || []
        ).filter(exp => !this.curatedExplorationIds.has(exp.id));
        this.subscriptionsList = responseData.subscriptionList;
        this.explorationPlaylist = responseData.explorationPlaylist;
      },
      errorResponseStatus => {
        if (
          AppConstants.FATAL_ERROR_CODES.indexOf(errorResponseStatus) !== -1
        ) {
          this.alertsService.addWarning(
            'Failed to get learner dashboard explorations data'
          );
        }
      }
    );

    Promise.all([
      userInfoPromise,
      dashboardCollectionsDataPromise,
      dashboardExplorationsDataPromise,
      dashboardTopicAndStoriesDataPromise,
      learnerGroupFeatureIsEnabledPromise,
    ])
      .then(() => {
        setTimeout(() => {
          this.loaderService.hideLoadingScreen();
          this.communityLessonsDataLoaded = true;

Review comment (bug):
Could you verify that this issue doesn't occur with completed explorations and topics? They are handled in exactly the same way as incomplete lessons, so I assume the bug is very likely. The completed lessons are displayed in the progress tab. 

Code after:
        this.activeSubsection =
          LearnerDashboardPageConstants.LEARNER_DASHBOARD_SUBSECTION_I18N_IDS.SKILL_PROFICIENCY;
        if (this.urlService.getUrlParams().active_tab === 'learner-groups') {
          this.activeSection =
            LearnerDashboardPageConstants.LEARNER_DASHBOARD_SECTION_I18N_IDS.LEARNER_GROUPS;
        }

        return this.getSubtopicMasteryData();
      },
      errorResponseStatus => {
        if (
          AppConstants.FATAL_ERROR_CODES.indexOf(errorResponseStatus) !== -1
        ) {
          this.alertsService.addWarning(
            'Failed to get learner dashboard topics and stories data'
          );
        }
      }
    );

    let learnerGroupFeatureIsEnabledPromise =
      this.learnerGroupBackendApiService.isLearnerGroupFeatureEnabledAsync();
    learnerGroupFeatureIsEnabledPromise.then(featureIsEnabled => {
      this.LEARNER_GROUP_FEATURE_IS_ENABLED = featureIsEnabled;
    });

    let dashboardCollectionsDataPromise =
      this.learnerDashboardBackendApiService.fetchLearnerDashboardCollectionsDataAsync();
    dashboardCollectionsDataPromise.then(
      responseData => {
        this.completedCollectionsList = responseData.completedCollectionsList;
        this.incompleteCollectionsList = responseData.incompleteCollectionsList;
        this.completedToIncompleteCollections =
          responseData.completedToIncompleteCollections;
        this.collectionPlaylist = responseData.collectionPlaylist;
      },
      errorResponseStatus => {
        if (
          AppConstants.FATAL_ERROR_CODES.indexOf(errorResponseStatus) !== -1
        ) {
          this.alertsService.addWarning(
            'Failed to get learner dashboard collections data'
          );
        }
      }
    );

    let dashboardExplorationsDataPromise =
      this.learnerDashboardBackendApiService.fetchLearnerDashboardExplorationsDataAsync();
    dashboardTopicAndStoriesDataPromise.finally(() => {
      dashboardExplorationsDataPromise.then(