From 09585dc5e8c9f037dd942883523aa6b5a5d674e2 Mon Sep 17 00:00:00 2001 From: MailineN Date: Tue, 20 Aug 2024 16:39:15 +0200 Subject: [PATCH 1/5] fix: removed ISVALIDATED unused variable & isClosed check --- src/assets/surveyData/dataEmptyActivity.json | 7 ----- src/assets/surveyData/edtActivitySurvey.json | 12 -------- src/service/survey-state-service.ts | 29 +++++++------------- 3 files changed, 10 insertions(+), 38 deletions(-) diff --git a/src/assets/surveyData/dataEmptyActivity.json b/src/assets/surveyData/dataEmptyActivity.json index 7f32771f..ec344d2e 100644 --- a/src/assets/surveyData/dataEmptyActivity.json +++ b/src/assets/surveyData/dataEmptyActivity.json @@ -271,12 +271,5 @@ "INPUTED": null, "PREVIOUS": null, "COLLECTED": null - }, - "ISVALIDATED": { - "EDITED": null, - "FORCED": null, - "INPUTED": null, - "PREVIOUS": null, - "COLLECTED": null } } diff --git a/src/assets/surveyData/edtActivitySurvey.json b/src/assets/surveyData/edtActivitySurvey.json index 3ca9d826..895bf3f3 100644 --- a/src/assets/surveyData/edtActivitySurvey.json +++ b/src/assets/surveyData/edtActivitySurvey.json @@ -485,18 +485,6 @@ "componentRef": "activityselecter_mainactivity", "variableType": "COLLECTED" }, - { - "name": "ISVALIDATED", - "values": { - "EDITED": null, - "FORCED": null, - "INPUTED": null, - "PREVIOUS": null, - "COLLECTED": null - }, - "componentRef": "", - "variableType": "COLLECTED" - }, { "name": "ISLOCKED", "values": { diff --git a/src/service/survey-state-service.ts b/src/service/survey-state-service.ts index ad0d191b..f09d4313 100644 --- a/src/service/survey-state-service.ts +++ b/src/service/survey-state-service.ts @@ -26,30 +26,11 @@ const isDemoMode = () => { return getFlatLocalStorageValue(LocalStorageVariableEnum.IS_DEMO_MODE) === "true"; }; -const isSurveyLocked = (idSurvey: string) => { - const isLocked = getValue(idSurvey, FieldNameEnum.ISLOCKED) as boolean; - return (isLocked != null && isLocked) || existVariableEdited(idSurvey); -}; - -// const surveyValidated = (idSurvey: string) => { -// const isValidated = getValue(idSurvey, FieldNameEnum.ISVALIDATED) as boolean; -// return isValidated != null && isValidated; -// }; - -// const surveyClosed = (idSurvey: string) => { -// const isClosed = getValue(idSurvey, FieldNameEnum.ISCLOSED) as boolean; -// return isClosed != null && isClosed; -// }; - const isSurveyValidated = (idSurvey: string) => { const stateData = getSurveyStateData(getData(idSurvey)); return stateData.state == StateDataStateEnum.VALIDATED; }; -const isSurveyClosed = (idSurvey: string) => { - const stateData = getSurveyStateData(getData(idSurvey)); - return stateData.state == StateDataStateEnum.COMPLETED; -}; const isSurveyStarted = (idSurvey: string) => { const stateData = getSurveyStateData(getData(idSurvey)); return stateData.state == StateDataStateEnum.INIT; @@ -60,6 +41,16 @@ const isSurveyCompleted = (idSurvey: string) => { return stateData.state == StateDataStateEnum.COMPLETED; }; +const isSurveyClosed = (idSurvey: string) => { + const isClosed = getValue(idSurvey, FieldNameEnum.ISCLOSED) as boolean; + return isClosed != null && isClosed; +}; + +const isSurveyLocked = (idSurvey: string) => { + const isLocked = getValue(idSurvey, FieldNameEnum.ISLOCKED) as boolean; + return (isLocked != null && isLocked) || existVariableEdited(idSurvey); +}; + const getStatutSurvey = (idSurvey: string) => { const isLocked = getValue(idSurvey, FieldNameEnum.ISLOCKED) as boolean; const isValidated = isSurveyValidated(idSurvey); From 0664096c63f88aa79eafd25983a6730e57d318d8 Mon Sep 17 00:00:00 2001 From: MailineN Date: Wed, 21 Aug 2024 10:42:04 +0200 Subject: [PATCH 2/5] fix: double save when the user complete a survey --- .../activity-duration/ActivityDuration.tsx | 3 +-- src/pages/end-survey/EndSurvey.tsx | 6 +++--- src/service/api-service/putRemoteData.ts | 2 +- src/service/loop-service.ts | 3 +++ 4 files changed, 8 insertions(+), 6 deletions(-) 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 95a9a2e7..a504b599 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 @@ -28,7 +28,6 @@ import { import { isDesktop } from "service/responsive"; import { getActivitiesOrRoutes, surveyReadOnly } from "service/survey-activity-service"; import { getData, getValue, getValueOfData, saveDataLocally } from "service/survey-service"; -import { isSurveyCompleted } from "service/survey-state-service"; import { getSurveyIdFromUrl } from "utils/utils"; const ActivityDurationPage = () => { @@ -173,7 +172,7 @@ const ActivityDurationPage = () => { }; const onClose = (forceQuit: boolean) => { - const isCompleted = isSurveyCompleted(idSurvey); + const isCompleted = getValue(idSurvey, FieldNameEnum.ISCOMPLETED, currentIteration) as boolean; const isCloture = getValue(idSurvey, FieldNameEnum.ISCLOSED) as boolean; if (!openSnackbar) { if (!isCompleted) { diff --git a/src/pages/end-survey/EndSurvey.tsx b/src/pages/end-survey/EndSurvey.tsx index f369d21f..f829512c 100644 --- a/src/pages/end-survey/EndSurvey.tsx +++ b/src/pages/end-survey/EndSurvey.tsx @@ -81,7 +81,7 @@ const EndSurveyPage = () => { }; const saveDataAndInit = useCallback((surveyData: SurveyData, forceUpdate?: boolean) => { - saveData(idSurvey, surveyData.data, false, forceUpdate).then(() => { + saveData(idSurvey, surveyData, false, forceUpdate).then(() => { initializeSurveysDatasCache().finally(() => { setIsModalDisplayed(true); }); @@ -112,10 +112,10 @@ const EndSurveyPage = () => { if (!isDemoMode && navigator.onLine) { if (isReviewer()) { return remotePutSurveyDataReviewer(idSurvey, stateData, surveyData.data) - .then(handleSuccess) + .then(navToHome) .catch(handleError); } else { - return remotePutSurveyData(idSurvey, surveyData).then(handleSuccess).catch(handleError); + return remotePutSurveyData(idSurvey, surveyData).then(navToHome).catch(handleError); } } else { return saveDataAndInit(surveyData, true); diff --git a/src/service/api-service/putRemoteData.ts b/src/service/api-service/putRemoteData.ts index f8caec91..ca51f3a3 100644 --- a/src/service/api-service/putRemoteData.ts +++ b/src/service/api-service/putRemoteData.ts @@ -95,7 +95,7 @@ const requestPutDataReviewer = ( ): Promise => { console.log("requestPutDataReviewer", data); data.COLLECTED = transformCollectedArray(data?.COLLECTED); - //TODO: Find another solution to avoid ui bug + //TODO: Find another solution to avoid ui problem delete data.COLLECTED?.WEEKLYPLANNER; return new Promise(resolve => { axios diff --git a/src/service/loop-service.ts b/src/service/loop-service.ts index 279707d4..6f310c34 100644 --- a/src/service/loop-service.ts +++ b/src/service/loop-service.ts @@ -577,6 +577,7 @@ const getCodesSubCategories = ( } }; +//TODO: Fix isCompleted here const setIfLoopCompleted = (components: LunaticModelComponent[], notFilled: boolean, i: number) => { return i == components.length && !notFilled; }; @@ -635,7 +636,9 @@ const getCurrentLoopPage = ( //TODO: Edit this function to send state data with COMPLETED status instead const setLoopCompleted = (idSurvey: string, iteration: number | undefined, isCompleted: boolean) => { + console.log("setLoopCompleted ", idSurvey, iteration, isCompleted); const completed = setValue(idSurvey, FieldNameEnum.ISCOMPLETED, isCompleted, iteration); + console.log("setLoopCompleted -> completed", completed); if (completed) { saveData(idSurvey, completed); } From 27128e3d85494f10089db1049b42d9f48d8a3b18 Mon Sep 17 00:00:00 2001 From: MailineN Date: Wed, 21 Aug 2024 11:37:42 +0200 Subject: [PATCH 3/5] refactor: switch from remote to local survey source for reviewer --- src/pages/end-survey/EndSurvey.tsx | 8 ++++---- src/service/loop-service.ts | 2 -- src/service/survey-service.ts | 21 +++++++++------------ 3 files changed, 13 insertions(+), 18 deletions(-) diff --git a/src/pages/end-survey/EndSurvey.tsx b/src/pages/end-survey/EndSurvey.tsx index f829512c..c06f2356 100644 --- a/src/pages/end-survey/EndSurvey.tsx +++ b/src/pages/end-survey/EndSurvey.tsx @@ -101,10 +101,10 @@ const EndSurveyPage = () => { data: dataWithIsEnvoyed ?? callbackHolder.getData(), }; - const handleSuccess = (surveyDataAnswer: any) => { - surveyData.data.lastRemoteSaveDate = surveyDataAnswer.stateData?.date; - return saveDataAndInit(surveyData, true); - }; + // const handleSuccess = (surveyDataAnswer: any) => { + // surveyData.data.lastRemoteSaveDate = surveyDataAnswer.stateData?.date; + // return saveDataAndInit(surveyData, true); + // }; const handleError = () => { setErrorSubmit(true); diff --git a/src/service/loop-service.ts b/src/service/loop-service.ts index 6f310c34..77d364bb 100644 --- a/src/service/loop-service.ts +++ b/src/service/loop-service.ts @@ -636,9 +636,7 @@ const getCurrentLoopPage = ( //TODO: Edit this function to send state data with COMPLETED status instead const setLoopCompleted = (idSurvey: string, iteration: number | undefined, isCompleted: boolean) => { - console.log("setLoopCompleted ", idSurvey, iteration, isCompleted); const completed = setValue(idSurvey, FieldNameEnum.ISCOMPLETED, isCompleted, iteration); - console.log("setLoopCompleted -> completed", completed); if (completed) { saveData(idSurvey, completed); } diff --git a/src/service/survey-service.ts b/src/service/survey-service.ts index 64bdcf9c..cba4c824 100644 --- a/src/service/survey-service.ts +++ b/src/service/survey-service.ts @@ -55,7 +55,6 @@ import { import { EdtUserRightsEnum } from "./../enumerations/EdtUserRightsEnum"; import { LunaticData } from "./../interface/lunatic/Lunatic"; import { - fetchSurveysSourcesByIds, fetchUserSurveysInfo, remoteGetSurveyData, remoteGetSurveyDataReviewer, @@ -235,23 +234,21 @@ const initDataForSurveys = (setError: (error: ErrorCodeEnum) => void) => { [SurveysIdsEnum.ACTIVITY_SURVEYS_IDS]: activitySurveysIds, [SurveysIdsEnum.WORK_TIME_SURVEYS_IDS]: workingTimeSurveysIds, }; + const sources: SourceData = { + [SourcesEnum.ACTIVITY_SURVEY]: edtActivitySurvey, + [SourcesEnum.WORK_TIME_SURVEY]: edtWorkTimeSurvey, + }; const innerPromises: Promise[] = [ getRemoteSavedSurveysDatas(allSurveysIds, setError).then(() => { return initializeSurveysDatasCache(allSurveysIds); }), saveSurveysIds(surveysIds), - fetchSurveysSourcesByIds( - [SourcesEnum.ACTIVITY_SURVEY, SourcesEnum.WORK_TIME_SURVEY], - setError, - ).then(sources => { - const inerFetchPromises: Promise[] = [ - saveSources(sources), - saveUserSurveysData({ data: userDatas }), - ]; - return Promise.all(inerFetchPromises); - }), ]; - return Promise.all(innerPromises); + const inerFetchPromises: Promise[] = [ + saveSources(sources), + saveUserSurveysData({ data: userDatas }), + ]; + return Promise.all([...innerPromises, ...inerFetchPromises]); }); } else { return lunaticDatabase.get(USER_SURVEYS_DATA).then((data: LunaticData | undefined) => { From 952829d2efec01f5e7e162891f0f9b05108a3288 Mon Sep 17 00:00:00 2001 From: MailineN Date: Thu, 22 Aug 2024 14:20:37 +0200 Subject: [PATCH 4/5] fix: handle the case where the user has never logged in before the interview --- src/service/api-service/getRemoteData.ts | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/service/api-service/getRemoteData.ts b/src/service/api-service/getRemoteData.ts index 2355efd9..5001385e 100644 --- a/src/service/api-service/getRemoteData.ts +++ b/src/service/api-service/getRemoteData.ts @@ -172,8 +172,12 @@ const remoteGetSurveyData = ( ) .then(response => { if (response.data.COLLECTED != null) { - const revertedTranformedData = revertTransformedArray(response.data.COLLECTED); - response.data.COLLECTED = revertedTranformedData; + try { + const revertedTranformedData = revertTransformedArray(response.data.COLLECTED); + response.data.COLLECTED = revertedTranformedData; + } catch (error) { + console.error("Error reverting transformed data:", error); + } resolve(response.data); } resolve(response.data); @@ -200,8 +204,12 @@ const requestGetDataReviewer = ( ) .then(response => { if (response.data != null) { - const revertedTranformedData = revertTransformedArray(response.data.COLLECTED); - response.data.COLLECTED = revertedTranformedData; + try { + const revertedTranformedData = revertTransformedArray(response.data.COLLECTED); + response.data.COLLECTED = revertedTranformedData; + } catch (error) { + console.error("Error reverting transformed data:", error); + } resolve(response.data); } else { resolve(response.data); @@ -249,8 +257,8 @@ const requestGetSurveyDataReviewer = ( idSurvey: string, setError: (error: ErrorCodeEnum) => void, ): Promise => { - return requestGetStateReviewer(idSurvey, setError).then((stateData: StateData) => { - return requestGetDataReviewer(idSurvey, setError).then(data => { + return requestGetDataReviewer(idSurvey, setError).then(data => { + return requestGetStateReviewer(idSurvey, setError).then((stateData: StateData) => { return new Promise(resolve => { const surveyData: SurveyData = { stateData: stateData, From 83dc2b598bea7a709f2e59a7f3f0808ace38eb45 Mon Sep 17 00:00:00 2001 From: MailineN Date: Thu, 22 Aug 2024 14:53:28 +0200 Subject: [PATCH 5/5] fix: get StateData from remote --- src/service/api-service/getRemoteData.ts | 26 ++++++++++++++++++++++++ src/service/api-service/putRemoteData.ts | 5 +++-- src/service/loop-service.ts | 2 -- src/service/survey-service.ts | 9 ++++---- src/utils/utils.ts | 1 + 5 files changed, 35 insertions(+), 8 deletions(-) diff --git a/src/service/api-service/getRemoteData.ts b/src/service/api-service/getRemoteData.ts index 2355efd9..6e39f4bc 100644 --- a/src/service/api-service/getRemoteData.ts +++ b/src/service/api-service/getRemoteData.ts @@ -188,6 +188,31 @@ const remoteGetSurveyData = ( }); }; +const remoteGetSurveyStateData = ( + idSurvey: string, + setError?: (error: ErrorCodeEnum) => void, +): Promise => { + return new Promise(resolve => { + axios + .get( + stromaeBackOfficeApiBaseUrl + "api/survey-unit/" + idSurvey + "/state-data", + getHeader(stromaeBackOfficeApiBaseUrl), + ) + .then(response => { + console.log("Get stateData", response.data); + const stateData: StateData = response.data; + resolve(stateData); + }) + .catch(err => { + if (err.response?.status === 403) { + setError?.(ErrorCodeEnum.NO_RIGHTS); + } else if (err.response?.status != 404) { + setError?.(ErrorCodeEnum.UNREACHABLE_SURVEYS_DATAS); + } + }); + }); +}; + const requestGetDataReviewer = ( idSurvey: string, setError: (error: ErrorCodeEnum) => void, @@ -292,5 +317,6 @@ export { fetchSurveysSourcesByIds, fetchUserSurveysInfo, remoteGetSurveyData, + remoteGetSurveyStateData, remoteGetSurveyDataReviewer, }; diff --git a/src/service/api-service/putRemoteData.ts b/src/service/api-service/putRemoteData.ts index ca51f3a3..f990760b 100644 --- a/src/service/api-service/putRemoteData.ts +++ b/src/service/api-service/putRemoteData.ts @@ -14,12 +14,13 @@ const requestPutSurveyData = ( data: SurveyData, token?: string, ): Promise => { - console.log("requestPutSurveyData", data); const collectedData = transformCollectedArray(data?.data?.COLLECTED); if (data.data) { data.data.COLLECTED = collectedData; delete data.data.COLLECTED?.WEEKLYPLANNER; + delete data.data.stateData; } + console.log("requestPutSurveyData", data); const stateData = data.stateData; const putLunaticData = axios.put( `${stromaeBackOfficeApiBaseUrl}api/survey-unit/${idSurvey}/data`, @@ -68,7 +69,7 @@ const remotePutSurveyDataReviewer = ( data: LunaticData, ): Promise => { //Temporar check on token validity to avoid 401 error, if not valid, reload page - //# + // const now = new Date(); const tokenExpiresAt = jwt(getUserToken() ?? "").exp; // * 1000 because tokenExpiresAt is in seconds and now.getTime() in milliseconds diff --git a/src/service/loop-service.ts b/src/service/loop-service.ts index 77d364bb..e69abc01 100644 --- a/src/service/loop-service.ts +++ b/src/service/loop-service.ts @@ -577,7 +577,6 @@ const getCodesSubCategories = ( } }; -//TODO: Fix isCompleted here const setIfLoopCompleted = (components: LunaticModelComponent[], notFilled: boolean, i: number) => { return i == components.length && !notFilled; }; @@ -634,7 +633,6 @@ const getCurrentLoopPage = ( return { step: currentLoopSubpage, completed: false }; }; -//TODO: Edit this function to send state data with COMPLETED status instead const setLoopCompleted = (idSurvey: string, iteration: number | undefined, isCompleted: boolean) => { const completed = setValue(idSurvey, FieldNameEnum.ISCOMPLETED, isCompleted, iteration); if (completed) { diff --git a/src/service/survey-service.ts b/src/service/survey-service.ts index cba4c824..65a361e4 100644 --- a/src/service/survey-service.ts +++ b/src/service/survey-service.ts @@ -747,7 +747,8 @@ const getData = (idSurvey: string): LunaticData => { }; const getDataCache = (idSurvey: string) => { - return datas.get(idSurvey) ?? getItemFromSession(idSurvey); + const data = datas.get(idSurvey) ?? getItemFromSession(idSurvey); + return data; }; const setDataCache = (idSurvey: string, data: LunaticData) => { @@ -898,17 +899,15 @@ const saveData = ( if (!navigator.onLine || isDemoMode || localSaveOnly) stateData.date = 0; if (isChange) { - console.log("SaveRemote data", data.COLLECTED); + console.log("SaveRemote data", data); data = saveQualityScore(idSurvey, data); - stateData = getSurveyStateData(data); if (!navigator.onLine) { stateData.date = 0; data.stateData = stateData; return setLocalDatabase(stateData, data, idSurvey); } - if (!isDemoMode && !localSaveOnly) { stateData.date = data.lastLocalSaveDate ?? Date.now(); const surveyData: SurveyData = { @@ -916,6 +915,7 @@ const saveData = ( data: data, }; data.lastRemoteSaveDate = stateData.date; + console.log("StateData to save", stateData); if (isReviewerMode) { return remotePutSurveyDataReviewer(idSurvey, stateData, data).then(() => { @@ -925,6 +925,7 @@ const saveData = ( return setLocalDatabase(stateData, data, idSurvey); }); } else { + //TODO: TEMP: need to figure out why there is still a state data here return remotePutSurveyData(idSurvey, surveyData).then(() => { data.stateData = stateData; return setLocalDatabase(stateData, data, idSurvey); diff --git a/src/utils/utils.ts b/src/utils/utils.ts index 32ba76ff..ac2f2894 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -63,6 +63,7 @@ function addItemToSession(idSurvey: string, item: any) { } function getItemFromSession(idSurvey: string) { + console.log("getItemFromSession", idSurvey, sessionStorage.getItem(idSurvey)); return JSON.parse(sessionStorage.getItem(idSurvey ?? "") ?? "{}"); }