From 9b574489ebf33ef1ffc204c8b4e13e1b7131a7e5 Mon Sep 17 00:00:00 2001 From: MailineN Date: Mon, 8 Jul 2024 15:04:08 +0200 Subject: [PATCH] fix: remove put request at each step of activity --- .../SurveyPageStep/SurveyPageStep.tsx | 12 +-- .../ActivityOrRoutePlanner.tsx | 8 +- .../activity-duration/ActivityDuration.tsx | 6 +- .../activity/main-activity/MainActivity.tsx | 8 +- .../with-screen/WithScreen.tsx | 10 +-- .../help/HelpWorkTime/HelpWorkTime.tsx | 4 +- src/pages/activity/phone-time/PhoneTime.tsx | 6 +- src/service/api-service.ts | 2 +- src/service/loop-service.ts | 16 ++-- src/service/navigation-service.ts | 74 +++++++++++++++- src/service/survey-service.ts | 84 ++++++++++++++----- 11 files changed, 176 insertions(+), 54 deletions(-) diff --git a/src/components/commons/SurveyPage/SurveyPageStep/SurveyPageStep.tsx b/src/components/commons/SurveyPage/SurveyPageStep/SurveyPageStep.tsx index a1f1c159..a9cc1493 100644 --- a/src/components/commons/SurveyPage/SurveyPageStep/SurveyPageStep.tsx +++ b/src/components/commons/SurveyPage/SurveyPageStep/SurveyPageStep.tsx @@ -16,6 +16,7 @@ import { getOrchestratorPage, saveAndNav, saveAndNavFullPath, + saveAndNavLocally, saveAndNextStep, setEnviro, validateAndNextStep, @@ -106,7 +107,7 @@ const SurveyPageStep = (props: SurveyPageStepProps) => { () => specifiquesProps?.displayModal ? validateAndNav(false, setIsModalDisplayed) - : saveAndNav(idSurvey), + : saveAndNavLocally(idSurvey), [isModalDisplayed], ), onNext: useCallback( @@ -117,7 +118,7 @@ const SurveyPageStep = (props: SurveyPageStepProps) => { [isModalDisplayed], ), onPrevious: useCallback( - () => (backRoute ? saveAndNavFullPath(idSurvey, backRoute) : saveAndNav(idSurvey)), + () => (backRoute ? saveAndNavFullPath(idSurvey, backRoute) : saveAndNavLocally(idSurvey)), [], ), simpleHeader: true, @@ -143,9 +144,9 @@ const SurveyPageStep = (props: SurveyPageStepProps) => { [], ), icon: errorIcon ? : undefined, - onNavigateBack: useCallback(() => saveAndNav(idSurvey), []), + onNavigateBack: useCallback(() => saveAndNavLocally(idSurvey), []), onPrevious: useCallback( - () => (backRoute ? saveAndNavFullPath(idSurvey, backRoute) : saveAndNav(idSurvey)), + () => (backRoute ? saveAndNavFullPath(idSurvey, backRoute) : saveAndNavLocally(idSurvey)), [], ), firstName: getPrintedFirstName(idSurvey), @@ -168,13 +169,14 @@ const SurveyPageStep = (props: SurveyPageStepProps) => { forceQuit: boolean, setIsModalDisplayed: (value: SetStateAction) => void, ): void => { + console.log("validateAndNav"); if (forceQuit) { saveAndNav(idSurvey); } else { setIsModalDisplayed(true); } }; - + console.log("SurveyPageStep,", isStep); const surveyPageProps = isStep ? surveyPageStepProps : surveyPageNotStepProps; return ( diff --git a/src/pages/activity/activity-or-route-planner/ActivityOrRoutePlanner.tsx b/src/pages/activity/activity-or-route-planner/ActivityOrRoutePlanner.tsx index 9b6bd9a1..2b537e4d 100644 --- a/src/pages/activity/activity-or-route-planner/ActivityOrRoutePlanner.tsx +++ b/src/pages/activity/activity-or-route-planner/ActivityOrRoutePlanner.tsx @@ -71,6 +71,7 @@ import { lockSurvey, refreshSurvey, saveData, + saveDataLocally, setValue, surveyLocked, } from "service/survey-service"; @@ -165,6 +166,7 @@ const onFinish = ( ) => { if (closed) { const data = setValue(idSurvey, FieldNameEnum.ISCLOSED, true); + console.log("Save data on closed"); saveData(idSurvey, data ?? callbackHolder.getData(), false, true).then(() => { navigate( getCurrentNavigatePath( @@ -435,7 +437,8 @@ const ActivityOrRoutePlannerPage = () => { contextIteration = loopSize - 1; const routeData = setValue(idSurvey, FieldNameEnum.ISROUTE, isRouteBool, contextIteration); console.log(routeData, isRouteBool); - saveData(idSurvey, routeData).then(() => { + saveDataLocally(idSurvey, routeData).then(() => { + console.log("Save Data on Add Activity or Route"); navToActivityOrRoute(idSurvey, contextIteration, isRouteBool); }); }; @@ -455,7 +458,8 @@ const ActivityOrRoutePlannerPage = () => { setValueOrNull(idSurvey, FieldNameEnum.START_TIME, startTime, contextIteration); setValueOrNull(idSurvey, FieldNameEnum.END_TIME, endTime, contextIteration); const updatedData = setValue(idSurvey, FieldNameEnum.ISROUTE, isRouteBool, contextIteration); - saveData(idSurvey, updatedData).then(() => { + saveDataLocally(idSurvey, updatedData).then(() => { + console.log("Save Data on Add Activity or Route from Gap"); onCloseAddActivityOrRoute(); setIsRoute(isRouteBool); navigate( diff --git a/src/pages/activity/activity-or-route-planner/activity-duration/ActivityDuration.tsx b/src/pages/activity/activity-or-route-planner/activity-duration/ActivityDuration.tsx index cbbcae22..bbf7a6c7 100644 --- a/src/pages/activity/activity-or-route-planner/activity-duration/ActivityDuration.tsx +++ b/src/pages/activity/activity-or-route-planner/activity-duration/ActivityDuration.tsx @@ -27,7 +27,7 @@ import { } from "service/navigation-service"; import { isDesktop } from "service/responsive"; import { getActivitiesOrRoutes, surveyReadOnly } from "service/survey-activity-service"; -import { getData, getValue, getValueOfData, saveData } from "service/survey-service"; +import { getData, getValue, getValueOfData, saveDataLocally } from "service/survey-service"; import { getSurveyIdFromUrl } from "utils/utils"; const ActivityDurationPage = () => { @@ -150,7 +150,7 @@ const ActivityDurationPage = () => { } if ((skip && isAfter) || !isAfter) { - saveData(idSurvey, callbackHolder.getData()).then(() => { + saveDataLocally(idSurvey, callbackHolder.getData()).then(() => { navigate( getLoopParameterizedNavigatePath( idSurvey, @@ -177,7 +177,7 @@ const ActivityDurationPage = () => { if (!openSnackbar) { if (!isCompleted) { if (forceQuit) { - saveData(idSurvey, callbackHolder.getData()).then(() => { + saveDataLocally(idSurvey, callbackHolder.getData()).then(() => { navIsClompleted(isCloture); }); } else { diff --git a/src/pages/activity/activity-or-route-planner/activity/main-activity/MainActivity.tsx b/src/pages/activity/activity-or-route-planner/activity/main-activity/MainActivity.tsx index 3b47ee0f..56fe319e 100644 --- a/src/pages/activity/activity-or-route-planner/activity/main-activity/MainActivity.tsx +++ b/src/pages/activity/activity-or-route-planner/activity/main-activity/MainActivity.tsx @@ -15,7 +15,7 @@ import { onClose, onNext, onPrevious, - saveAndLoopNavigate, + saveAndLoopNavigateLocally, setEnviro, validate, } from "service/navigation-service"; @@ -119,7 +119,7 @@ const MainActivityPage = () => { backClickEvent: backClickEvent, nextClickEvent: nextClickEvent, backClickCallback: () => { - saveAndLoopNavigate( + saveAndLoopNavigateLocally( idSurvey, context.source, getPreviousLoopPage(currentPage), @@ -131,7 +131,7 @@ const MainActivityPage = () => { const codeActivity = getValueOfActivity(callbackHolder.getData(), currentIteration) ?? ""; const skip = filtrePage(EdtRoutesNameEnum.MAIN_ACTIVITY_GOAL, codeActivity); if (routeToGoal && !skip) { - saveAndLoopNavigate( + saveAndLoopNavigateLocally( idSurvey, context.source, EdtRoutesNameEnum.MAIN_ACTIVITY_GOAL, @@ -140,7 +140,7 @@ const MainActivityPage = () => { ); } else { const skip = filtrePage(EdtRoutesNameEnum.SECONDARY_ACTIVITY, codeActivity); - saveAndLoopNavigate( + saveAndLoopNavigateLocally( idSurvey, context.source, skip ? EdtRoutesNameEnum.ACTIVITY_LOCATION : getNextLoopPage(currentPage), diff --git a/src/pages/activity/activity-or-route-planner/with-screen/WithScreen.tsx b/src/pages/activity/activity-or-route-planner/with-screen/WithScreen.tsx index c2e59b8f..95d4fb2f 100644 --- a/src/pages/activity/activity-or-route-planner/with-screen/WithScreen.tsx +++ b/src/pages/activity/activity-or-route-planner/with-screen/WithScreen.tsx @@ -21,8 +21,8 @@ import { onClose, onNext, onPrevious, - saveAndLoopNavigate, - saveAndNav, + saveAndLoopNavigateLocally, + saveAndNavLocally, setEnviro, validate, } from "service/navigation-service"; @@ -54,7 +54,7 @@ const WithScreenPage = () => { backClickEvent: backClickEvent, nextClickEvent: nextClickEvent, backClickCallback: () => { - saveAndLoopNavigate( + saveAndLoopNavigateLocally( idSurvey, context.source, EdtRoutesNameEnum.WITH_SOMEONE_SELECTION, @@ -65,7 +65,7 @@ const WithScreenPage = () => { ); }, nextClickCallback: () => { - saveAndNav( + saveAndNavLocally( idSurvey, isCloture ? summaryRoutePath @@ -79,7 +79,7 @@ const WithScreenPage = () => { }, onSelectValue: () => { validate(idSurvey).then(() => { - saveAndNav( + saveAndNavLocally( idSurvey, isCloture ? summaryRoutePath diff --git a/src/pages/activity/help/HelpWorkTime/HelpWorkTime.tsx b/src/pages/activity/help/HelpWorkTime/HelpWorkTime.tsx index 6ce195e2..e5a68981 100644 --- a/src/pages/activity/help/HelpWorkTime/HelpWorkTime.tsx +++ b/src/pages/activity/help/HelpWorkTime/HelpWorkTime.tsx @@ -43,7 +43,7 @@ import { getPrintedFirstName, getSource, getSurveyDate, - saveData, + saveDataLocally, } from "service/survey-service"; const HelpWorkTime = () => { @@ -101,7 +101,7 @@ const HelpWorkTime = () => { dates: "DATES", datesStarted: "DATES_STARTED", }, - saveAll: () => saveData(idSurvey, data), + saveAll: () => saveDataLocally(idSurvey, data), language: getLanguage(), helpStep: helpStep, moreIcon: , diff --git a/src/pages/activity/phone-time/PhoneTime.tsx b/src/pages/activity/phone-time/PhoneTime.tsx index b0a10d24..1e341bbb 100644 --- a/src/pages/activity/phone-time/PhoneTime.tsx +++ b/src/pages/activity/phone-time/PhoneTime.tsx @@ -11,7 +11,7 @@ import { getNavigatePath, getOrchestratorPage, getParameterizedNavigatePath, - saveAndNav, + saveAndNavLocally, saveAndNavFullPath, setEnviro, validateAndNextStep, @@ -34,10 +34,10 @@ const PhoneTimePage = () => { const surveyPageStepProps = { idSurvey: idSurvey, - onNavigateBack: useCallback(() => saveAndNav(idSurvey), []), + onNavigateBack: useCallback(() => saveAndNavLocally(idSurvey), []), onNext: useCallback( () => - saveAndNav( + saveAndNavLocally( idSurvey, getParameterizedNavigatePath(EdtRoutesNameEnum.ACTIVITY, idSurvey) + getNavigatePath(EdtRoutesNameEnum.END_SURVEY), diff --git a/src/service/api-service.ts b/src/service/api-service.ts index 86f9250d..0c0ce918 100644 --- a/src/service/api-service.ts +++ b/src/service/api-service.ts @@ -211,7 +211,7 @@ const requestPutSurveyData = ( data: SurveyData, token?: string, ): Promise => { - console.log("data", data); + //console.log("data", data); const collectedData = token ? transformCollectedArray(data.data?.COLLECTED) : data.data?.COLLECTED; if (data.data) { data.data.COLLECTED = collectedData; diff --git a/src/service/loop-service.ts b/src/service/loop-service.ts index 49abd112..2bb84aa0 100644 --- a/src/service/loop-service.ts +++ b/src/service/loop-service.ts @@ -23,7 +23,7 @@ import { getValue, getValueOfData, getVariable, - saveData, + saveDataLocally, setValue, toIgnoreForActivity, toIgnoreForRoute, @@ -39,8 +39,8 @@ import { getCurrentNavigatePath, getLoopPage, getOrchestratorPage, - saveAndLoopNavigate, - saveAndNav, + saveAndLoopNavigateLocally, + saveAndNavLocally, } from "./navigation-service"; import { getNomenclatureRef } from "./referentiel-service"; @@ -353,7 +353,7 @@ const skipNextPage = ( nextPageRoute == EdtRoutesNameEnum.ACTIVITY_OR_ROUTE_PLANNER || (nextPageRoute == null && nextPageNextLoop == EdtRoutesNameEnum.ACTIVITY_OR_ROUTE_PLANNER) ) { - saveAndNav( + saveAndNavLocally( idSurvey, getCurrentNavigatePath( idSurvey, @@ -363,7 +363,7 @@ const skipNextPage = ( ), ); } else { - saveAndLoopNavigate( + saveAndLoopNavigateLocally( idSurvey, source, nextPageRoute ?? nextPageNextLoop, @@ -405,7 +405,7 @@ const skipBackPage = ( backPageRoute == EdtRoutesNameEnum.ACTIVITY_OR_ROUTE_PLANNER || backPageBackLoop == EdtRoutesNameEnum.ACTIVITY_OR_ROUTE_PLANNER ) { - saveAndNav( + saveAndNavLocally( idSurvey, getCurrentNavigatePath( idSurvey, @@ -415,7 +415,7 @@ const skipBackPage = ( ), ); } else { - saveAndLoopNavigate( + saveAndLoopNavigateLocally( idSurvey, source, backPageRoute ?? backPageBackLoop, @@ -633,7 +633,7 @@ const getCurrentLoopPage = ( const setLoopCompleted = (idSurvey: string, iteration: number | undefined, isCompleted: boolean) => { const completed = setValue(idSurvey, FieldNameEnum.ISCOMPLETED, isCompleted, iteration); if (completed) { - saveData(idSurvey, completed); + saveDataLocally(idSurvey, completed); } }; diff --git a/src/service/navigation-service.ts b/src/service/navigation-service.ts index ee68ceba..eb519b45 100644 --- a/src/service/navigation-service.ts +++ b/src/service/navigation-service.ts @@ -24,6 +24,7 @@ import { getSource, getValue, saveData, + saveDataLocally, setValue, surveysIds, } from "service/survey-service"; @@ -207,6 +208,20 @@ const saveAndNav = ( currentIteration?: number, ): void => { saveData(idSurvey, _callbackHolder.getData() ?? getData(idSurvey)).then(() => { + console.log("Save And Nav"); + navToRouteOrRouteNotSelection(idSurvey, route, value, routeNotSelection, currentIteration); + }); +}; + +const saveAndNavLocally = ( + idSurvey: string, + route?: string, + value?: FieldNameEnum, + routeNotSelection?: string, + currentIteration?: number, +): void => { + saveDataLocally(idSurvey, _callbackHolder.getData() ?? getData(idSurvey)).then(() => { + console.log("Save And Nav Locally"); navToRouteOrRouteNotSelection(idSurvey, route, value, routeNotSelection, currentIteration); }); }; @@ -564,6 +579,7 @@ const saveAndNextStep = ( rootPage: EdtRoutesNameEnum, currentPage: EdtRoutesNameEnum, ) => { + console.log("Save and Next Step"); saveAndNav( idSurvey ?? "", getCurrentNavigatePath( @@ -606,6 +622,7 @@ const saveAndLoopNavigate = ( value?: FieldNameEnum, routeNotSelection?: EdtRoutesNameEnum, ) => { + console.log("Save and Loop Navigate"); const pathRoute = getLoopPageOrActivityPlanner(idSurvey, source, page, loop, iteration); if (value && routeNotSelection) { const pathRouteNotSelection = getLoopPageOrActivityPlanner( @@ -619,16 +636,67 @@ const saveAndLoopNavigate = ( } else saveAndNav(idSurvey, pathRoute); }; +const saveAndLoopNavigateLocally = ( + idSurvey: string, + source: LunaticModel, + page: EdtRoutesNameEnum, + loop: LoopEnum, + iteration: number, + value?: FieldNameEnum, + routeNotSelection?: EdtRoutesNameEnum, +) => { + console.log("Save and Loop Navigate Locally"); + const pathRoute = getLoopPageOrActivityPlanner(idSurvey, source, page, loop, iteration); + if (value && routeNotSelection) { + const pathRouteNotSelection = getLoopPageOrActivityPlanner( + idSurvey, + source, + routeNotSelection, + loop, + iteration, + ); + saveAndNavLocally(idSurvey, pathRoute, value, pathRouteNotSelection, iteration); + } else saveAndNavLocally(idSurvey, pathRoute); +}; + const validateAndNextStep = (idSurvey: string, source: LunaticModel, page: EdtRoutesNameEnum) => { validate(idSurvey).then(() => { saveAndNextStep(idSurvey, source, EdtRoutesNameEnum.ACTIVITY, page); }); }; -const loopNavigate = (idSurvey: string, page: EdtRoutesNameEnum, loop: LoopEnum, iteration: number) => { +const loopNavigateTemp = ( + idSurvey: string, + page: EdtRoutesNameEnum, + loop: LoopEnum, + iteration: number, +) => { _navigate(getLoopParameterizedNavigatePath(idSurvey, page, loop, iteration)); }; +const loopNavigate = ( + idSurvey: string, + source: LunaticModel, + page: EdtRoutesNameEnum, + loop: LoopEnum, + iteration: number, + value?: FieldNameEnum, + routeNotSelection?: EdtRoutesNameEnum, +) => { + console.log("Save and Loop Navigate"); + const pathRoute = getLoopPageOrActivityPlanner(idSurvey, source, page, loop, iteration); + if (value && routeNotSelection) { + const pathRouteNotSelection = getLoopPageOrActivityPlanner( + idSurvey, + source, + routeNotSelection, + loop, + iteration, + ); + navToRouteOrRouteNotSelection(idSurvey, pathRoute, value, pathRouteNotSelection, iteration); + } else navToRouteOrRouteNotSelection(idSurvey, pathRoute); +}; + const navToEditActivity = (idSurvey: string, iteration: number) => { const path = getParameterizedNavigatePath(EdtRoutesNameEnum.ACTIVITY, idSurvey) + @@ -710,6 +778,7 @@ export { isActivityPage, isPageGlobal, loopNavigate, + loopNavigateTemp, navFullPath, navToActivityOrPlannerOrSummary, navToActivityRoutePlanner, @@ -719,11 +788,13 @@ export { navToHelp, navToHome, navToHomeReviewer, + navToRouteOrRouteNotSelection, navToWeeklyPlannerOrClose, onClose, onNext, onPrevious, saveAndLoopNavigate, + saveAndLoopNavigateLocally, saveAndNav, saveAndNavFullPath, saveAndNextStep, @@ -732,4 +803,5 @@ export { validate, validateAndNextStep, validateWithAlertAndNav, + saveAndNavLocally, }; diff --git a/src/service/survey-service.ts b/src/service/survey-service.ts index 89e53767..b840d145 100644 --- a/src/service/survey-service.ts +++ b/src/service/survey-service.ts @@ -495,7 +495,9 @@ const initializeData = (remoteSurveyData: SurveyData, idSurvey: string) => { surveyData.EXTERNAL = {}; surveyData.COLLECTED = remoteSurveyData.data?.COLLECTED ?? getDataEmpty(idSurvey); surveyData.lastLocalSaveDate = - remoteSurveyData.data?.lastLocalSaveDate ?? remoteSurveyData.data.stateData?.date; + remoteSurveyData.data?.lastLocalSaveDate ?? + remoteSurveyData.data?.stateData?.date ?? + new Date(0).getTime(); surveyData.stateData = remoteSurveyData.stateData; return surveyData; }; @@ -515,25 +517,34 @@ const getRemoteSavedSurveysDatas = ( const surveyData = initializeData(remoteSurveyData, surveyId); return lunaticDatabase.get(surveyId).then(localSurveyData => { - const lastRemoteSaveDate = remoteSurveyData.data.lastRemoteSaveDate ?? 1; //a supprimer - const lastLocalSaveDate = - remoteSurveyData.data.lastLocalSaveDate ?? - localSurveyData?.lastLocalSaveDate ?? - 0; - const remoteStateData = remoteSurveyData?.stateData?.date ?? 1; - if ( - remoteSurveyData?.stateData?.date != null && - (localSurveyData == null || - ((localSurveyData.lastLocalSaveDate ?? 0) <= lastRemoteSaveDate && - (remoteSurveyData.data.lastRemoteSaveDate != null || //quand existe des données en remote -> a suprrimer - (remoteSurveyData.data.lastLocalSaveDate == null && - remoteSurveyData.data.lastRemoteSaveDate == null)) && - //quand local est vide and jamais saved des données, remoteSurveyData.data.lastRemoteSaveDate change par stateData - lastLocalSaveDate <= remoteStateData)) // local date moins recent que remote date - ) { - const stateData = getSurveyStateData(surveyData, surveyId); - setLocalOrRemoteData(surveyId, remoteSurveyData, surveyData, stateData); - return lunaticDatabase.save(surveyId, surveyData); + if (remoteSurveyData.data) { + const lastRemoteSaveDate = remoteSurveyData.data.lastRemoteSaveDate ?? 1; //a supprimer + const lastLocalSaveDate = + remoteSurveyData.data.lastLocalSaveDate ?? + localSurveyData?.lastLocalSaveDate ?? + 0; + const remoteStateData = remoteSurveyData?.stateData?.date ?? 1; + + if ( + remoteSurveyData?.stateData?.date != null && + (localSurveyData == null || + ((localSurveyData.lastLocalSaveDate ?? 0) <= + lastRemoteSaveDate && + (remoteSurveyData.data.lastRemoteSaveDate != null || //quand existe des données en remote -> a suprrimer + (remoteSurveyData.data.lastLocalSaveDate == null && + remoteSurveyData.data.lastRemoteSaveDate == null)) && + //quand local est vide and jamais saved des données, remoteSurveyData.data.lastRemoteSaveDate change par stateData + lastLocalSaveDate <= remoteStateData)) // local date moins recent que remote date + ) { + const stateData = getSurveyStateData(surveyData, surveyId); + setLocalOrRemoteData( + surveyId, + remoteSurveyData, + surveyData, + stateData, + ); + return lunaticDatabase.save(surveyId, surveyData); + } } }); }) @@ -1045,6 +1056,38 @@ const saveData = ( } }; +const saveDataLocally = ( + idSurvey: string, + data: LunaticData, + localSaveOnly = false, + forceUpdate = false, + stateDataForced?: StateData, +): Promise => { + data.lastLocalSaveDate = navigator.onLine ? Date.now() : Date.now() + 1; + if (!data.houseReference) { + const regexp = new RegExp(process.env.REACT_APP_HOUSE_REFERENCE_REGULAR_EXPRESSION || ""); + data.houseReference = idSurvey.replace(regexp, ""); + } + const isDemoMode = getFlatLocalStorageValue(LocalStorageVariableEnum.IS_DEMO_MODE) === "true"; + //const isReviewerMode = getUserRights() == EdtUserRightsEnum.REVIEWER; + fixConditionals(data); + let oldDataSurvey = datas.get(idSurvey) ?? {}; + const dataIsChanged = dataIsChange(idSurvey, data, oldDataSurvey); + const isChange = forceUpdate || dataIsChanged; + datas.set(idSurvey, data); + + data = updateLocked(idSurvey, data); + let stateData: StateData = stateDataForced ?? initStateData(data); + + if (!navigator.onLine || isDemoMode || localSaveOnly) stateData.date = 0; + + if (isChange) { + data = saveQualityScore(idSurvey, data); + } + data.stateData = stateData; + return setLocalOrRemoteData(idSurvey, { data: data }, data, stateData); +}; + const setLocalOrRemoteData = ( idSurvey: string, dataRemote: SurveyData, @@ -2140,6 +2183,7 @@ export { refreshSurvey, refreshSurveyData, saveData, + saveDataLocally, saveDatas, setData, setValue,