Preview:
 getSurveys = async (
    surveyId,
    filterByStakeholderTypeValue,
    filterByCountryValue,
    filterByContinentValue,
    consultantId,
  ) => {
    try {
      const { assessmentType } = this.state;

      // Fetch survey details
      const surveyDetails = await getbysurveyid(surveyId, consultantId);
      const survey = surveyDetails.data();
      console.log("survey", survey);
      const submittedSurveyResults = await getsubmittedSurveyResult(surveyId, consultantId);
      const tabComments = survey["tab-comments"] || []; 
      const surveyConditions = () => (Object.keys(survey).length > 0 && survey?.approvedTopics) ? survey?.approvedTopics : false;

      const workshops = await getSurveyResultForSubcollection(surveyId, consultantId, 'workshops')
      const financialWorkshops = await getSurveyResultForSubcollection(surveyId, consultantId, 'financial-workshops')

      // this.setState({
      //   survey: { ...survey, id: survey.id },
      //   // loading: false,
      // });

      // Object to hold all state changes to schedule the state updations
      const newState = {}
      console.log("newState 1", newState)

      newState.survey = { ...survey, id: survey.id }

      if (survey.answeredTopics) {
        let allTopics = survey?.surveyTopicsShort
          ? [
            ...survey.surveyTopicsShort.business,
            ...survey.surveyTopicsShort.social,
            ...survey.surveyTopicsShort.human,
            ...survey.surveyTopicsShort.environment,
            ...survey.surveyTopicsShort.leadership,
          ]
          : [];
        newState.materialityAssessmentTopics = survey.answeredTopics;
        newState.financialConsolidatedReports = [...survey.answeredTopics, ...allTopics]
          .filter((v, i, a) => a.findIndex(t => t.topic === v.topic && t.id === v.id) === i)
          .filter(item => item.entryType !== 'comment' && item.entryType !== 'added-entry')
          .sort((a, b) => {
            if (a.framework == 'CSRD') {
              let _a =
                CSRDAllTopics?.find(
                  item2 => item2['mainId'] == a['mainId'] && item2['topic'] == a['topic'],
                )?.sortIndex || 0;
              let _b =
                CSRDAllTopics?.find(
                  item2 => item2['mainId'] == b['mainId'] && item2['topic'] == b['topic'],
                )?.sortIndex || 0;

              return _a < _b ? -1 : _a > _b ? 1 : 0;
            }

            if (a.framework == 'GRI') {
              let _a = a.id;
              let _b = b.id;

              return _a < _b ? -1 : _a > _b ? 1 : 0;
            }

            if (a.topic < b.topic) return -1;
            if (a.topic > b.topic) return 1;
          })
          ?.sort((a, b) => {
            if (a.isCustom || b.isCustom) {
              // Move objects with 'isCustom' property to the end
              if (a.isCustom && !b.isCustom) {
                return 1;
              } else if (!a.isCustom && b.isCustom) {
                return -1;
              } else {
                // If both have 'isCustom' or neither have 'isCustom', sort by customSortId
                if (a.customSortId && b.customSortId) {
                  return a.customSortId > b.customSortId ? 1 : -1;
                } else {
                  return a.topic > b.topic ? 1 : -1;
                }
              }
            }
          })
          .sort((a, b) => {
            if (this.renderESG(a.dimension) == 'Environmental') return -1;
            if (this.renderESG(b.dimension) == 'Environmental') return 1;
            if (this.renderESG(a.dimension) == 'Social') return -1;
            if (this.renderESG(b.dimension) == 'Social') return 1;
            if (this.renderESG(a.dimension) == 'Governance') return -1;
            if (this.renderESG(b.dimension) == 'Governance') return 1;

            if (this.renderESG(a.dimension) < this.renderESG(b.dimension)) return -1;
            if (this.renderESG(a.dimension) > this.renderESG(b.dimension)) return 1;
          })
          .sort((a, b) => {
            if (this.renderESG(a.dimension) == 'Environmental') return -1;
            if (this.renderESG(b.dimension) == 'Environmental') return 1;
            if (this.renderESG(a.dimension) == 'Social') return -1;
            if (this.renderESG(b.dimension) == 'Social') return 1;
            if (this.renderESG(a.dimension) == 'Governance') return -1;
            if (this.renderESG(b.dimension) == 'Governance') return 1;

            if (this.renderESG(a.dimension) < this.renderESG(b.dimension)) return -1;
            if (this.renderESG(a.dimension) > this.renderESG(b.dimension)) return 1;
          });

        newState.allTopics = allTopics;
        newState.answeredTopics = survey.answeredTopics
          ? [...survey.answeredTopics, ...allTopics].filter(
            (v, i, a) => a.findIndex(t => t.topic === v.topic && t.id === v.id) === i,
          )
          : [];
        newState.addedCommentTopics = Array.from(survey.addedCommentTopics || []);

   
      } else {
        // this.setState({ loading: false });
      }





      const properties = {
        impactMaterialityMethodology: true,
        impactMaterialityScoringMethodology: true,
        financialMaterialityMethodology: true,
        financialMaterialityScoringMethodology: true,
        financialMappingMethodology: true,
        materialityAssessmentTopics: true,
        verifiedTopics: true,
        scoringSetting: true,
        reasonForMaxOrAverage: true,
        isNotFirstTimeOpeningImpactWorksheet: true,
        isNotFirstTimeOpeningFinancialWorksheet: true
      };

      for (const key in properties) {
        if (survey[key] !== undefined) {
          newState[key] = survey[key];
        }
      }

      // Default value for stakeholderTypes
      newState.stakeholderTypes = survey.stakeholderTypes || _stakeholderTypes;

      const getProperDate = date => {
        if (date.toDate) {
          return date.toDate();
        } else {
          return date;
        }
      };

      // Survey List operations
      this.handleSubmittedSurveyListOperation(submittedSurveyResults, surveyConditions)

      const workshopList = workshops.map(workshop => {
        return {
          ...workshop,
          id: workshop.id,
          answeredEntries: workshop?.['answeredEntries']?.map(itm => ({
            ...itm,
            Scale: itm['Scale'] == '0 - None' ? '1 - Minimal' : itm['Scale'] || '',
            Scope: itm['Scope'] == '0 - No impact' ? '1 - Limited' : itm['Scope'] || '',
            Likelihood:
              itm['Likelihood'] ==
                '0 - Very Unlikely (Has not occurred, and the possible chance of occuring is low)'
                ? '1 - Rare'
                : itm['Likelihood'] || '',
            Remediability:
              itm['Remediability'] == '0 - Very Easy to remedy'
                ? '1 - Relatively easy to remedy'
                : itm['Remediability'] || '',
          })),
        };
      });

      const financialWorkshopList = financialWorkshops.map(workshop => ({
        ...workshop,
        id: workshop.id,
        answeredEntries: workshop?.['answeredEntries']?.map(itm => ({
          ...itm,
          Likelihood:
            itm['Likelihood'] ==
              '0 - Very Unlikely (Has not occurred, and the possible chance of occuring is low)'
              ? '1 - Rare'
              : itm['Likelihood'] || '',
          Magnitude:
            itm['Magnitude'] == '0 - Not material (0%)'
              ? '1 - Minimal Impact'
              : itm['Magnitude'] || '',
        })),
      }));

      const tabCommentsList = tabComments.map(comment => {
        if (!comment.comment) return; // Workaround for damaged data --> remove once data is changed from DB

        return {
          ...comment,
          id: comment.id,
          // date: getProperDate(comment.date)
          date: comment.date.toDate ? comment.date.toDate() : comment.date,
        };
      });

      newState.workshops = workshopList
      newState.financialworkshops = financialWorkshopList
      newState.tabComments = tabCommentsList
      newState.loading = false

      console.log("newState", newState);

      this.setState(newState);

    
    } catch (ex) {
      this.setState({ loading: false });
    }
  };
downloadDownload PNG downloadDownload JPEG downloadDownload SVG

Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!

Click to optimize width for Twitter