From bea85e29738b15c6bb3eefdee6a8f2d548ba6ccc Mon Sep 17 00:00:00 2001 From: Laila Abjil Date: Fri, 8 Mar 2024 09:52:18 +0000 Subject: [PATCH 01/36] Feat/offline auth --- package.json | 4 +- src/App.tsx | 79 +++++++- src/index.tsx | 1 + src/interface/lunatic/Lunatic.ts | 22 +++ src/pages/end-survey/EndSurvey.tsx | 4 +- src/pages/help/contact/ContactPage.tsx | 17 +- src/pages/home-surveyed/HomeSurveyed.tsx | 9 + src/service/api-service.ts | 1 + src/service/survey-activity-service.ts | 2 +- src/service/survey-service.ts | 232 +++++++++++++++++------ 10 files changed, 291 insertions(+), 80 deletions(-) diff --git a/package.json b/package.json index 4a51d513..349eb4fc 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "edt", - "version": "3.13.2", - "dateVersion": "05/03/2024", + "version": "3.13.3", + "dateVersion": "07/03/2024", "licence": "MIT", "dependencies": { "@emotion/react": "^11.10.4", diff --git a/src/App.tsx b/src/App.tsx index 456ed2d8..f7c8d288 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -3,12 +3,18 @@ import LoadingFull from "components/commons/LoadingFull/LoadingFull"; import { EdtUserRightsEnum } from "enumerations/EdtUserRightsEnum"; import { ErrorCodeEnum } from "enumerations/ErrorCodeEnum"; import "i18n/i18n"; -import { useAuth } from "oidc-react"; +import { User, useAuth } from "oidc-react"; import ErrorPage from "pages/error/Error"; import { useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import { EdtRoutes } from "routes/EdtRoutes"; -import { getDatas, initializeDatas, initializeListSurveys } from "service/survey-service"; +import { + getAuthCache, + getDatas, + initPropsAuth, + initializeDatas, + initializeListSurveys, +} from "service/survey-service"; import { getUserRights, setAuth, setUser, setUserToken } from "service/user-service"; import { getCookie } from "utils/utils"; const App = () => { @@ -28,6 +34,7 @@ const App = () => { setError(ErrorCodeEnum.COMMON); } }; + const promisesToWait: Promise[] = []; useEffect(() => { if ( @@ -38,19 +45,21 @@ const App = () => { localStorage.setItem("setauth", "yes"); window.location.search = ""; } - + console.log(auth); if (auth?.userData?.access_token && getDatas().size === 0 && error === undefined) { setUserToken(auth.userData?.access_token); setUser(auth.userData); setAuth(auth); //keeps user token up to date after session renewal auth.userManager.events.addUserLoaded(() => { + console.log("user loaded"); auth.userManager.getUser().then(user => { setUserToken(user?.access_token || ""); }); }); auth.userManager.events.addSilentRenewError(() => { + console.log("user addSilentRenewError"); if (navigator.onLine) { auth.userManager .signoutRedirect({ @@ -67,18 +76,70 @@ const App = () => { .catch(err => { setErrorType(err); }); + } else { + console.log(auth, "user add silen offline"); } }); - - initializeDatas(setError).then(() => { - setInitialized(true); + auth.userManager.events.addUserSignedIn(() => { + console.log("user signed in"); }); - if (getUserRights() === EdtUserRightsEnum.REVIEWER) { - initializeListSurveys(setError).then(() => { + //auth.userManager.startSilentRenew(); + promisesToWait.push( + initializeDatas(setError).then(data => { + console.log("init datas"); setInitialized(true); - }); + return initPropsAuth(auth).then(() => setInitialized(true)); + }), + ); + + if (getUserRights() === EdtUserRightsEnum.REVIEWER && navigator.onLine) { + promisesToWait.push( + initializeListSurveys(setError).then(() => { + console.log("init list surveys"); + setInitialized(true); + }), + ); } + Promise.all(promisesToWait); + } else if (!navigator.onLine) { + console.log(auth, initialized); + + getAuthCache().then(auth => { + if (auth?.data.userData?.access_token) { + const user: User = { + access_token: auth.data.userData?.access_token, + expires_at: auth.data.userData?.expires_at, + id_token: auth.data.userData?.id_token, + profile: auth.data.userData?.profile, + refresh_token: auth.data.userData?.refresh_token, + scope: auth.data.userData?.scope, + session_state: auth.data.userData?.session_state ?? "", + token_type: auth.data.userData?.token_type ?? "", + state: auth.data.userData.state, + expires_in: auth.data.userData.expires_in, + expired: auth.data.userData.expired, + scopes: auth.data.userData.scopes ?? [], + toStorageString: () => "", + }; + setUserToken(auth.data.userData?.access_token); + setUser(user); + } + + promisesToWait.push( + initializeDatas(setError).then(() => { + console.log("offline - init datas"); + if (getUserRights() === EdtUserRightsEnum.REVIEWER) { + return initializeListSurveys(setError).then(() => { + console.log("offline - init list surveys"); + setInitialized(true); + }); + } else setInitialized(true); + }), + ); + + Promise.all(promisesToWait); + }); } }, [auth]); diff --git a/src/index.tsx b/src/index.tsx index ec222d14..66482674 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -28,6 +28,7 @@ const oidcConfig = { authority: getAuthority(), clientId: process.env.REACT_APP_KEYCLOAK_CLIENT_ID, redirectUri: process.env.REACT_APP_KEYCLOAK_REDIRECT_URI, + automaticSilentRenew: !navigator.onLine, }; const oidcProps = isSSO ? Object.assign(oidcConfig, oidcConfigSSO) : oidcConfig; diff --git a/src/interface/lunatic/Lunatic.ts b/src/interface/lunatic/Lunatic.ts index da262762..2a53400a 100644 --- a/src/interface/lunatic/Lunatic.ts +++ b/src/interface/lunatic/Lunatic.ts @@ -15,6 +15,7 @@ export const REFERENTIELS_ID = "referentiels"; export const SOURCES_MODELS = "sources"; export const SURVEYS_IDS = "surveysIds"; export const USER_SURVEYS_DATA = "userSurveysData"; +export const DATA_STATE = "dataState"; export interface Collected { COLLECTED: string | boolean | null; @@ -72,6 +73,27 @@ export interface UserSurveysData extends LunaticData { data: UserSurveys[]; } +export interface DataState extends LunaticData { + data: { + userData: AuthData | undefined; + }; +} + +export interface AuthData { + access_token?: string; + expires_at?: number; + id_token?: string; + profile?: any; + refresh_token?: string; + scope?: string; + session_state?: string; + token_type?: string; + state?: any; + expires_in?: number; + expired?: boolean; + scopes?: string[]; +} + export interface LunaticModel { variables: LunaticModelVariable[]; components: LunaticModelComponent[]; diff --git a/src/pages/end-survey/EndSurvey.tsx b/src/pages/end-survey/EndSurvey.tsx index 3a277d01..d69c4d74 100644 --- a/src/pages/end-survey/EndSurvey.tsx +++ b/src/pages/end-survey/EndSurvey.tsx @@ -101,7 +101,7 @@ const EndSurveyPage = () => { data: dataWithIsEnvoyed ?? callbackHolder.getData(), }; - if (!isDemoMode && !isReviewer()) { + if (!isDemoMode && !isReviewer() && navigator.onLine) { remotePutSurveyData(idSurvey, surveyData) .then(surveyDataAnswer => { surveyData.data.lastRemoteSaveDate = surveyDataAnswer.stateData?.date; @@ -110,7 +110,7 @@ const EndSurveyPage = () => { .catch(() => { setErrorSubmit(true); }); - } else if (!isDemoMode && isReviewer()) { + } else if (!isDemoMode && isReviewer() && navigator.onLine) { remotePutSurveyDataReviewer(idSurvey, stateData, surveyData.data) .then(surveyDataAnswer => { surveyData.data.lastRemoteSaveDate = surveyDataAnswer.stateData?.date; diff --git a/src/pages/help/contact/ContactPage.tsx b/src/pages/help/contact/ContactPage.tsx index bd84c100..e45f1d01 100644 --- a/src/pages/help/contact/ContactPage.tsx +++ b/src/pages/help/contact/ContactPage.tsx @@ -34,7 +34,7 @@ const ContactPage = () => { onNavigateBack={useCallback(() => navToHome(), [])} backgroundWhite={false} /> - + @@ -71,26 +71,29 @@ const ContactPage = () => { const useStyles = makeStylesEdt<{ innerHeight: number }>({ "name": { ContactPage } })(theme => ({ installBox: { - padding: "1rem", + padding: "0rem 1rem", }, contentBox: { - height: "100vh", + height: innerHeight + "px", + maxHeight: innerHeight + "px", }, contentBoxMobile: { height: "95vh", + maxHeight: "95vh", }, innerContentBox: { display: "flex", flexDirection: "column", justifyContent: "space-between", height: innerHeight - 78 + "px", + maxHeight: innerHeight - 78 + "px", }, innerBox: { display: "flex", justifyContent: "center", }, textBox: { textAlign: "center", width: "50%", fontSize: "14px" }, - textBoxMobile: { textAlign: "center", width: "100%", fontSize: "14px" }, + textBoxMobile: { textAlign: "center", width: "100%", fontSize: "74%" }, actionsBox: { display: "flex", flexDirection: "column", alignItems: "center" }, actionBox: { maxWidth: "300px", margin: "0.5rem 0", width: "90%" }, button: { width: "100%", backgroundColor: theme.palette.text.primary }, @@ -111,6 +114,12 @@ const useStyles = makeStylesEdt<{ innerHeight: number }>({ "name": { ContactPage paddingBox: { marginBottom: "2rem", }, + imageBox: { + height: "15%", + svg: { + height: "100%", + }, + }, })); export default ContactPage; diff --git a/src/pages/home-surveyed/HomeSurveyed.tsx b/src/pages/home-surveyed/HomeSurveyed.tsx index c5a5634b..6179db7d 100644 --- a/src/pages/home-surveyed/HomeSurveyed.tsx +++ b/src/pages/home-surveyed/HomeSurveyed.tsx @@ -73,8 +73,10 @@ const HomeSurveyedPage = () => { const initHome = (idsSurveysSelected: string[]) => { initializeHomeSurveys(idHousehold ?? "").then(() => { + console.log("init home"); initializeSurveysDatasCache(idsSurveysSelected).finally(() => { userDatas = userDatasMap(); + console.log(userDatas); if (getData(idsSurveysSelected[0]) != undefined) { setState(getData(idsSurveysSelected[0])); setInitialized(true); @@ -90,6 +92,7 @@ const HomeSurveyedPage = () => { setInitialized(true); }); } else if (getUserRights() === EdtUserRightsEnum.SURVEYED) { + console.log("SURVEYED"); initializeDatas(setError).then(() => { setInitialized(true); setState({}); @@ -97,6 +100,7 @@ const HomeSurveyedPage = () => { } if (getUserRights() == EdtUserRightsEnum.REVIEWER && !isDemo) { + console.log("REVIEWER"); userDatas = userDatasMap(); const idsSurveysSelected = userDatas .map(data => data.data.surveyUnitId) @@ -105,10 +109,12 @@ const HomeSurveyedPage = () => { !survey.startsWith("activitySurvey") && !survey.startsWith("workTimeSurvey"), ); if (navigator.onLine) { + console.log("REMOTE SAVED SURVEY"); getRemoteSavedSurveysDatas(idsSurveysSelected, setError).then(() => { initHome(idsSurveysSelected); }); } else { + console.log("OFFLINE INIT HOME"); initHome(idsSurveysSelected); } } else if (getUserRights() == EdtUserRightsEnum.REVIEWER && isDemo) { @@ -226,6 +232,7 @@ const HomeSurveyedPage = () => { }; const renderPageOrLoadingOrError = (page: any) => { + console.log(initialized, state); if (initialized && state != null) { return page; } else { @@ -330,6 +337,7 @@ const HomeSurveyedPage = () => { const renderHomeReviewer = () => { let userDatas = groupBy(userDatasMap(), nameSurveyData => nameSurveyData.num); let groups = Object.keys(userDatas); + console.log(userDatas, groups); return renderPageOrLoadingOrError( <> {renderReminderNote()} @@ -377,6 +385,7 @@ const HomeSurveyedPage = () => { }; const renderHome = () => { + console.log("user rights", getUserRights()); if (getUserRights() === EdtUserRightsEnum.REVIEWER) { return renderHomeReviewer(); } else { diff --git a/src/service/api-service.ts b/src/service/api-service.ts index b50eab86..ebe59678 100644 --- a/src/service/api-service.ts +++ b/src/service/api-service.ts @@ -25,6 +25,7 @@ axios.interceptors.response.use( ); export const getHeader = (origin?: string, userToken?: string) => { + console.log(getUserToken()); return { headers: { "Authorization": "Bearer " + (userToken ?? getUserToken()), diff --git a/src/service/survey-activity-service.ts b/src/service/survey-activity-service.ts index 15d95aff..ddc9950f 100644 --- a/src/service/survey-activity-service.ts +++ b/src/service/survey-activity-service.ts @@ -536,7 +536,7 @@ const deleteActivity = (idSurvey: string, source: LunaticModel, iteration: numbe } } }); - saveData(idSurvey, data).then(() => { + saveData(idSurvey, data, false, true).then(() => { return saveData(idSurvey, data); }); } diff --git a/src/service/survey-service.ts b/src/service/survey-service.ts index f5262b1f..a2ca2c4a 100644 --- a/src/service/survey-service.ts +++ b/src/service/survey-service.ts @@ -28,6 +28,8 @@ import { Person } from "interface/entity/Person"; import { StatsHousehold } from "interface/entity/StatsHouseHold"; import { Collected, + DATA_STATE, + DataState, LunaticModel, LunaticModelComponent, LunaticModelVariable, @@ -41,6 +43,7 @@ import { USER_SURVEYS_DATA, UserSurveysData, } from "interface/lunatic/Lunatic"; +import { AuthContextProps } from "oidc-react"; import { NavigateFunction } from "react-router-dom"; import { fetchReviewerSurveysAssignments } from "service/api-service"; import { lunaticDatabase } from "service/lunatic-database"; @@ -88,6 +91,7 @@ let userDatasWorkTime: UserSurveys[] = []; let userDatas: UserSurveys[] = []; let surveysData: UserSurveys[] = []; let initData = false; +let authData = null; const toIgnoreForRoute = [ FieldNameEnum.PLACE, @@ -125,67 +129,146 @@ const initializeDatas = (setError: (error: ErrorCodeEnum) => void): Promise => { + const dataState: DataState = { + data: { + userData: { + access_token: auth.userData?.access_token, + expires_at: auth.userData?.expires_at, + id_token: auth.userData?.id_token, + profile: auth.userData?.profile, + refresh_token: auth.userData?.refresh_token, + scope: auth.userData?.scope, + session_state: auth.userData?.session_state ?? "", + token_type: auth.userData?.token_type, + state: auth.userData?.state, + expires_in: auth.userData?.expires_in, + expired: auth.userData?.expired, + scopes: auth.userData?.scopes, + }, + }, + }; + return lunaticDatabase.save(DATA_STATE, dataState).then(() => { + authData = dataState.data.userData; + console.log(authData); + return dataState; + }); +}; + +const getAuthCache = (): Promise => { + return lunaticDatabase.get(DATA_STATE).then(data => { + let dataState = data as DataState; + return dataState; + }); +}; + const initializeRefs = (setError: (error: ErrorCodeEnum) => void) => { return lunaticDatabase.get(REFERENTIELS_ID).then(refData => { - if (!refData) { + if (!refData && navigator.onLine) { + console.log("refs online", refData); return fetchReferentiels(setError).then(refs => { return saveReferentiels(refs); }); } else { + console.log("refs", refData); referentielsData = refData as ReferentielData; } }); }; const initDataForSurveys = (setError: (error: ErrorCodeEnum) => void) => { - return fetchUserSurveysInfo(setError).then(userSurveyData => { - let activitySurveysIds: string[] = []; - let userSurveyDataActivity: UserSurveys[] = []; - let workingTimeSurveysIds: string[] = []; - let userSurveyDataWorkTime: UserSurveys[] = []; - userSurveyData.forEach(surveyData => { - if (surveyData.questionnaireModelId === SourcesEnum.ACTIVITY_SURVEY) { - activitySurveysIds.push(surveyData.surveyUnitId); - userSurveyDataActivity.push(surveyData); - userDatas.push(surveyData); - } - if (surveyData.questionnaireModelId === SourcesEnum.WORK_TIME_SURVEY) { - workingTimeSurveysIds.push(surveyData.surveyUnitId); - userSurveyDataWorkTime.push(surveyData); - userDatas.push(surveyData); - } + if (navigator.onLine) { + return fetchUserSurveysInfo(setError).then(userSurveyData => { + let activitySurveysIds: string[] = []; + let userSurveyDataActivity: UserSurveys[] = []; + let workingTimeSurveysIds: string[] = []; + let userSurveyDataWorkTime: UserSurveys[] = []; + userSurveyData.forEach(surveyData => { + if (surveyData.questionnaireModelId === SourcesEnum.ACTIVITY_SURVEY) { + activitySurveysIds.push(surveyData.surveyUnitId); + userSurveyDataActivity.push(surveyData); + userDatas.push(surveyData); + } + if (surveyData.questionnaireModelId === SourcesEnum.WORK_TIME_SURVEY) { + workingTimeSurveysIds.push(surveyData.surveyUnitId); + userSurveyDataWorkTime.push(surveyData); + userDatas.push(surveyData); + } + }); + userDatasActivity = userSurveyDataActivity; + userDatasWorkTime = userSurveyDataWorkTime; + + addArrayToSession("userDatasWorkTime", userDatasWorkTime); + addArrayToSession("userDatasActivity", userDatasActivity); + addArrayToSession("userDatas", userDatas); + + let allSurveysIds = [...activitySurveysIds, ...workingTimeSurveysIds]; + const surveysIds: SurveysIds = { + [SurveysIdsEnum.ALL_SURVEYS_IDS]: allSurveysIds, + [SurveysIdsEnum.ACTIVITY_SURVEYS_IDS]: activitySurveysIds, + [SurveysIdsEnum.WORK_TIME_SURVEYS_IDS]: workingTimeSurveysIds, + }; + const innerPromises: Promise[] = [ + getRemoteSavedSurveysDatas(allSurveysIds, setError).then(() => { + console.log("remote saved surveys"); + 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); }); - userDatasActivity = userSurveyDataActivity; - userDatasWorkTime = userSurveyDataWorkTime; - - addArrayToSession("userDatasWorkTime", userDatasWorkTime); - addArrayToSession("userDatasActivity", userDatasActivity); - addArrayToSession("userDatas", userDatas); - - let allSurveysIds = [...activitySurveysIds, ...workingTimeSurveysIds]; - const surveysIds: SurveysIds = { - [SurveysIdsEnum.ALL_SURVEYS_IDS]: allSurveysIds, - [SurveysIdsEnum.ACTIVITY_SURVEYS_IDS]: activitySurveysIds, - [SurveysIdsEnum.WORK_TIME_SURVEYS_IDS]: workingTimeSurveysIds, - }; - 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); - }); + } else { + return lunaticDatabase.get(USER_SURVEYS_DATA).then((data: LunaticData | undefined) => { + let userDaras = data as UserSurveysData; + let userSurveyData = userDaras.data; + let activitySurveysIds: string[] = []; + let userSurveyDataActivity: UserSurveys[] = []; + let workingTimeSurveysIds: string[] = []; + let userSurveyDataWorkTime: UserSurveys[] = []; + userSurveyData.forEach(surveyData => { + if (surveyData.questionnaireModelId === SourcesEnum.ACTIVITY_SURVEY) { + activitySurveysIds.push(surveyData.surveyUnitId); + userSurveyDataActivity.push(surveyData); + userDatas.push(surveyData); + } + if (surveyData.questionnaireModelId === SourcesEnum.WORK_TIME_SURVEY) { + workingTimeSurveysIds.push(surveyData.surveyUnitId); + userSurveyDataWorkTime.push(surveyData); + userDatas.push(surveyData); + } + }); + userDatasActivity = userSurveyDataActivity; + userDatasWorkTime = userSurveyDataWorkTime; + + addArrayToSession("userDatasWorkTime", userDatasWorkTime); + addArrayToSession("userDatasActivity", userDatasActivity); + addArrayToSession("userDatas", userDatas); + + let allSurveysIds = [...activitySurveysIds, ...workingTimeSurveysIds]; + const surveysIds: SurveysIds = { + [SurveysIdsEnum.ALL_SURVEYS_IDS]: allSurveysIds, + [SurveysIdsEnum.ACTIVITY_SURVEYS_IDS]: activitySurveysIds, + [SurveysIdsEnum.WORK_TIME_SURVEYS_IDS]: workingTimeSurveysIds, + }; + console.log("offline"); + const innerPromisesOffline: Promise[] = [ + initializeSurveysDatasCache(allSurveysIds), + saveSurveysIds(surveysIds), + saveUserSurveysData({ data: userDatas }), + ]; + return Promise.all(innerPromisesOffline); + }); + } }; const initializeSurveysIdsAndSources = (setError: (error: ErrorCodeEnum) => void): Promise => { @@ -195,9 +278,11 @@ const initializeSurveysIdsAndSources = (setError: (error: ErrorCodeEnum) => void const existSurveysIds = surveyIdsData?.[SurveysIdsEnum.ALL_SURVEYS_IDS].length > 0; if (!existSurveysIds) { + console.log("not exist surveys", surveyIdsData); promises.push(initDataForSurveys(setError)); } else { surveysIds = data as SurveysIds; + console.log("exist surveys", surveysIds); const idHousehold = localStorage.getItem(LocalStorageVariableEnum.ID_HOUSEHOLD); const listSurveysOfHousehold = getListSurveysHousehold() @@ -210,6 +295,7 @@ const initializeSurveysIdsAndSources = (setError: (error: ErrorCodeEnum) => void promises.push( lunaticDatabase.get(SOURCES_MODELS).then(data => { + console.log("sources", data); if (sourcesData == undefined) { sourcesData = data as SourceData; } @@ -431,10 +517,10 @@ const getRemoteSavedSurveysDatas = ( withoutState?: boolean, ): Promise => { const promises: Promise[] = []; - const urlRemote = isReviewer() ? remoteGetSurveyDataReviewer : remoteGetSurveyData; - surveysIds.forEach(surveyId => { - promises.push(lunaticDatabase.get(surveyId)); - if (navigator.onLine) { + if (navigator.onLine) { + const urlRemote = isReviewer() ? remoteGetSurveyDataReviewer : remoteGetSurveyData; + surveysIds.forEach(surveyId => { + promises.push(lunaticDatabase.get(surveyId)); promises.push( urlRemote(surveyId, setError, withoutState ?? true).then( (remoteSurveyData: SurveyData) => { @@ -455,8 +541,8 @@ const getRemoteSavedSurveysDatas = ( }, ), ); - } - }); + }); + } return Promise.all(promises); }; @@ -474,7 +560,8 @@ const initializeSurveysDatasCache = (idSurveys?: string[]): Promise => { }), ); } - Promise.all(promises).finally(() => { + return Promise.all(promises).finally(() => { + console.log("init survey data cache"); resolve(true); }); }); @@ -499,11 +586,32 @@ const initializeDatasCache = (idSurvey: string) => { }; const initializeListSurveys = (setError: (error: ErrorCodeEnum) => void) => { - return fetchReviewerSurveysAssignments(setError) - .then(data => { - surveysData = data; + if (navigator.onLine) { + return fetchReviewerSurveysAssignments(setError) + .then(data => { + console.log("fetchReviewerSurveysAssignments", data); + surveysData = data; + addArrayToSession("surveysData", surveysData); + data.forEach((surveyData: UserSurveys) => { + if (surveyData.questionnaireModelId === SourcesEnum.ACTIVITY_SURVEY) { + userDatas.push(surveyData); + } + if (surveyData.questionnaireModelId === SourcesEnum.WORK_TIME_SURVEY) { + userDatas.push(surveyData); + } + }); + return saveUserSurveysData({ data: userDatas }); + }) + .catch(() => { + return lunaticDatabase.get(USER_SURVEYS_DATA); + }); + } else { + return lunaticDatabase.get(USER_SURVEYS_DATA).then((data: LunaticData | undefined) => { + let datas = data as UserSurveysData; + console.log("offline - fetchReviewerSurveysAssignments", datas.data); + surveysData = datas.data; addArrayToSession("surveysData", surveysData); - data.forEach((surveyData: UserSurveys) => { + datas.data.forEach((surveyData: UserSurveys) => { if (surveyData.questionnaireModelId === SourcesEnum.ACTIVITY_SURVEY) { userDatas.push(surveyData); } @@ -512,10 +620,8 @@ const initializeListSurveys = (setError: (error: ErrorCodeEnum) => void) => { } }); return saveUserSurveysData({ data: userDatas }); - }) - .catch(() => { - return lunaticDatabase.get(USER_SURVEYS_DATA); }); + } }; const getListSurveys = () => { @@ -1858,6 +1964,7 @@ export { createDataEmpty, createNewActivityInCategory, existVariableEdited, + getAuthCache, getComponentId, getComponentsOfVariable, getCurrentPage, @@ -1888,6 +1995,7 @@ export { getValueOfData, getValueWithData, getVariable, + initPropsAuth, initializeDatas, initializeHomeSurveys, initializeListSurveys, From 22580184ead536f4a35d9549f19e9215d5920026 Mon Sep 17 00:00:00 2001 From: Laila Abjil Date: Fri, 8 Mar 2024 10:54:23 +0100 Subject: [PATCH 02/36] fix(version): update version offline + fix delete call + responsive --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 349eb4fc..48603876 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "edt", - "version": "3.13.3", - "dateVersion": "07/03/2024", + "version": "3.13.4", + "dateVersion": "08/03/2024", "licence": "MIT", "dependencies": { "@emotion/react": "^11.10.4", From d5f6e404adb86d0159ed18cbbe243e9981620c5e Mon Sep 17 00:00:00 2001 From: Laila Abjil Date: Fri, 8 Mar 2024 12:24:35 +0100 Subject: [PATCH 03/36] fix(eslint): remove unused code --- src/pages/home-surveyed/HomeSurveyed.tsx | 9 --------- src/service/api-service.ts | 1 - 2 files changed, 10 deletions(-) diff --git a/src/pages/home-surveyed/HomeSurveyed.tsx b/src/pages/home-surveyed/HomeSurveyed.tsx index 6179db7d..c5a5634b 100644 --- a/src/pages/home-surveyed/HomeSurveyed.tsx +++ b/src/pages/home-surveyed/HomeSurveyed.tsx @@ -73,10 +73,8 @@ const HomeSurveyedPage = () => { const initHome = (idsSurveysSelected: string[]) => { initializeHomeSurveys(idHousehold ?? "").then(() => { - console.log("init home"); initializeSurveysDatasCache(idsSurveysSelected).finally(() => { userDatas = userDatasMap(); - console.log(userDatas); if (getData(idsSurveysSelected[0]) != undefined) { setState(getData(idsSurveysSelected[0])); setInitialized(true); @@ -92,7 +90,6 @@ const HomeSurveyedPage = () => { setInitialized(true); }); } else if (getUserRights() === EdtUserRightsEnum.SURVEYED) { - console.log("SURVEYED"); initializeDatas(setError).then(() => { setInitialized(true); setState({}); @@ -100,7 +97,6 @@ const HomeSurveyedPage = () => { } if (getUserRights() == EdtUserRightsEnum.REVIEWER && !isDemo) { - console.log("REVIEWER"); userDatas = userDatasMap(); const idsSurveysSelected = userDatas .map(data => data.data.surveyUnitId) @@ -109,12 +105,10 @@ const HomeSurveyedPage = () => { !survey.startsWith("activitySurvey") && !survey.startsWith("workTimeSurvey"), ); if (navigator.onLine) { - console.log("REMOTE SAVED SURVEY"); getRemoteSavedSurveysDatas(idsSurveysSelected, setError).then(() => { initHome(idsSurveysSelected); }); } else { - console.log("OFFLINE INIT HOME"); initHome(idsSurveysSelected); } } else if (getUserRights() == EdtUserRightsEnum.REVIEWER && isDemo) { @@ -232,7 +226,6 @@ const HomeSurveyedPage = () => { }; const renderPageOrLoadingOrError = (page: any) => { - console.log(initialized, state); if (initialized && state != null) { return page; } else { @@ -337,7 +330,6 @@ const HomeSurveyedPage = () => { const renderHomeReviewer = () => { let userDatas = groupBy(userDatasMap(), nameSurveyData => nameSurveyData.num); let groups = Object.keys(userDatas); - console.log(userDatas, groups); return renderPageOrLoadingOrError( <> {renderReminderNote()} @@ -385,7 +377,6 @@ const HomeSurveyedPage = () => { }; const renderHome = () => { - console.log("user rights", getUserRights()); if (getUserRights() === EdtUserRightsEnum.REVIEWER) { return renderHomeReviewer(); } else { diff --git a/src/service/api-service.ts b/src/service/api-service.ts index ebe59678..b50eab86 100644 --- a/src/service/api-service.ts +++ b/src/service/api-service.ts @@ -25,7 +25,6 @@ axios.interceptors.response.use( ); export const getHeader = (origin?: string, userToken?: string) => { - console.log(getUserToken()); return { headers: { "Authorization": "Bearer " + (userToken ?? getUserToken()), From 65e87d8d0df22d0d6319514c547440c933448447 Mon Sep 17 00:00:00 2001 From: Laila Abjil Date: Fri, 8 Mar 2024 13:22:50 +0100 Subject: [PATCH 04/36] fix(data): fix load data when refresh list households --- package.json | 2 +- src/App.tsx | 14 ------- .../surveys-overview/SurveysOverview.tsx | 16 ++++---- src/service/survey-service.ts | 38 ++++++++----------- 4 files changed, 24 insertions(+), 46 deletions(-) diff --git a/package.json b/package.json index 48603876..4263c135 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "edt", - "version": "3.13.4", + "version": "3.13.5", "dateVersion": "08/03/2024", "licence": "MIT", "dependencies": { diff --git a/src/App.tsx b/src/App.tsx index f7c8d288..4c01d15f 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -45,21 +45,18 @@ const App = () => { localStorage.setItem("setauth", "yes"); window.location.search = ""; } - console.log(auth); if (auth?.userData?.access_token && getDatas().size === 0 && error === undefined) { setUserToken(auth.userData?.access_token); setUser(auth.userData); setAuth(auth); //keeps user token up to date after session renewal auth.userManager.events.addUserLoaded(() => { - console.log("user loaded"); auth.userManager.getUser().then(user => { setUserToken(user?.access_token || ""); }); }); auth.userManager.events.addSilentRenewError(() => { - console.log("user addSilentRenewError"); if (navigator.onLine) { auth.userManager .signoutRedirect({ @@ -76,18 +73,12 @@ const App = () => { .catch(err => { setErrorType(err); }); - } else { - console.log(auth, "user add silen offline"); } }); - auth.userManager.events.addUserSignedIn(() => { - console.log("user signed in"); - }); //auth.userManager.startSilentRenew(); promisesToWait.push( initializeDatas(setError).then(data => { - console.log("init datas"); setInitialized(true); return initPropsAuth(auth).then(() => setInitialized(true)); }), @@ -96,15 +87,12 @@ const App = () => { if (getUserRights() === EdtUserRightsEnum.REVIEWER && navigator.onLine) { promisesToWait.push( initializeListSurveys(setError).then(() => { - console.log("init list surveys"); setInitialized(true); }), ); } Promise.all(promisesToWait); } else if (!navigator.onLine) { - console.log(auth, initialized); - getAuthCache().then(auth => { if (auth?.data.userData?.access_token) { const user: User = { @@ -128,10 +116,8 @@ const App = () => { promisesToWait.push( initializeDatas(setError).then(() => { - console.log("offline - init datas"); if (getUserRights() === EdtUserRightsEnum.REVIEWER) { return initializeListSurveys(setError).then(() => { - console.log("offline - init list surveys"); setInitialized(true); }); } else setInitialized(true); diff --git a/src/pages/surveys-overview/SurveysOverview.tsx b/src/pages/surveys-overview/SurveysOverview.tsx index 8c4584f9..53122c9d 100644 --- a/src/pages/surveys-overview/SurveysOverview.tsx +++ b/src/pages/surveys-overview/SurveysOverview.tsx @@ -133,16 +133,15 @@ const SurveysOverviewPage = () => { const refreshHouseholds = useCallback(() => { setRefreshing(true); - return initializeListSurveys(setError) - .then(() => { - return refreshSurveyData(setError).then(() => { - initHouseholds(); - setSearchResult(dataHouseholds); - }); - }) - .then(() => { + const promisesToWait: Promise[] = []; + return initializeListSurveys(setError).then(() => { + return refreshSurveyData(setError).finally(() => { + setRefreshing(true); + initHouseholds(); + setSearchResult(dataHouseholds); setRefreshing(false); }); + }); }, [searchResult]); useEffect(() => { @@ -163,7 +162,6 @@ const SurveysOverviewPage = () => { .finally(() => { initHouseholds(); setInitialized(true); - setRefreshing(false); }); }); diff --git a/src/service/survey-service.ts b/src/service/survey-service.ts index a2ca2c4a..7fa4058d 100644 --- a/src/service/survey-service.ts +++ b/src/service/survey-service.ts @@ -150,7 +150,6 @@ const initPropsAuth = (auth: AuthContextProps): Promise => { }; return lunaticDatabase.save(DATA_STATE, dataState).then(() => { authData = dataState.data.userData; - console.log(authData); return dataState; }); }; @@ -165,12 +164,10 @@ const getAuthCache = (): Promise => { const initializeRefs = (setError: (error: ErrorCodeEnum) => void) => { return lunaticDatabase.get(REFERENTIELS_ID).then(refData => { if (!refData && navigator.onLine) { - console.log("refs online", refData); return fetchReferentiels(setError).then(refs => { return saveReferentiels(refs); }); } else { - console.log("refs", refData); referentielsData = refData as ReferentielData; } }); @@ -210,7 +207,6 @@ const initDataForSurveys = (setError: (error: ErrorCodeEnum) => void) => { }; const innerPromises: Promise[] = [ getRemoteSavedSurveysDatas(allSurveysIds, setError).then(() => { - console.log("remote saved surveys"); return initializeSurveysDatasCache(allSurveysIds); }), saveSurveysIds(surveysIds), @@ -260,7 +256,6 @@ const initDataForSurveys = (setError: (error: ErrorCodeEnum) => void) => { [SurveysIdsEnum.ACTIVITY_SURVEYS_IDS]: activitySurveysIds, [SurveysIdsEnum.WORK_TIME_SURVEYS_IDS]: workingTimeSurveysIds, }; - console.log("offline"); const innerPromisesOffline: Promise[] = [ initializeSurveysDatasCache(allSurveysIds), saveSurveysIds(surveysIds), @@ -278,11 +273,9 @@ const initializeSurveysIdsAndSources = (setError: (error: ErrorCodeEnum) => void const existSurveysIds = surveyIdsData?.[SurveysIdsEnum.ALL_SURVEYS_IDS].length > 0; if (!existSurveysIds) { - console.log("not exist surveys", surveyIdsData); promises.push(initDataForSurveys(setError)); } else { surveysIds = data as SurveysIds; - console.log("exist surveys", surveysIds); const idHousehold = localStorage.getItem(LocalStorageVariableEnum.ID_HOUSEHOLD); const listSurveysOfHousehold = getListSurveysHousehold() @@ -295,7 +288,6 @@ const initializeSurveysIdsAndSources = (setError: (error: ErrorCodeEnum) => void promises.push( lunaticDatabase.get(SOURCES_MODELS).then(data => { - console.log("sources", data); if (sourcesData == undefined) { sourcesData = data as SourceData; } @@ -464,12 +456,15 @@ const refreshSurveyData = ( specifiquesSurveysIds?: string[], ): Promise => { initData = false; - return getRemoteSavedSurveysDatas( - specifiquesSurveysIds ?? surveysIds[SurveysIdsEnum.ALL_SURVEYS_IDS], - setError, - ).then(() => { - return initializeSurveysDatasCache(); - }); + const promisesToWait: Promise[] = []; + promisesToWait.push( + getRemoteSavedSurveysDatas( + specifiquesSurveysIds ?? surveysIds[SurveysIdsEnum.ALL_SURVEYS_IDS], + setError, + ), + initializeSurveysDatasCache(), + ); + return Promise.all(promisesToWait); }; const refreshSurvey = (idSurvey: string, setError: (error: ErrorCodeEnum) => void): Promise => { @@ -520,7 +515,6 @@ const getRemoteSavedSurveysDatas = ( if (navigator.onLine) { const urlRemote = isReviewer() ? remoteGetSurveyDataReviewer : remoteGetSurveyData; surveysIds.forEach(surveyId => { - promises.push(lunaticDatabase.get(surveyId)); promises.push( urlRemote(surveyId, setError, withoutState ?? true).then( (remoteSurveyData: SurveyData) => { @@ -535,6 +529,8 @@ const getRemoteSavedSurveysDatas = ( (localSurveyData.lastLocalSaveDate ?? 0) < remoteSurveyData.stateData.date)) ) { + const stateData = getSurveyStateData(surveyData, surveyId); + setLocalOrRemoteData(surveyId, remoteSurveyData, surveyData, stateData); return lunaticDatabase.save(surveyId, surveyData); } }); @@ -561,7 +557,6 @@ const initializeSurveysDatasCache = (idSurveys?: string[]): Promise => { ); } return Promise.all(promises).finally(() => { - console.log("init survey data cache"); resolve(true); }); }); @@ -589,7 +584,6 @@ const initializeListSurveys = (setError: (error: ErrorCodeEnum) => void) => { if (navigator.onLine) { return fetchReviewerSurveysAssignments(setError) .then(data => { - console.log("fetchReviewerSurveysAssignments", data); surveysData = data; addArrayToSession("surveysData", surveysData); data.forEach((surveyData: UserSurveys) => { @@ -608,7 +602,6 @@ const initializeListSurveys = (setError: (error: ErrorCodeEnum) => void) => { } else { return lunaticDatabase.get(USER_SURVEYS_DATA).then((data: LunaticData | undefined) => { let datas = data as UserSurveysData; - console.log("offline - fetchReviewerSurveysAssignments", datas.data); surveysData = datas.data; addArrayToSession("surveysData", surveysData); datas.data.forEach((surveyData: UserSurveys) => { @@ -1017,12 +1010,14 @@ const setLocalDatabase = (stateData: StateData, data: LunaticData, idSurvey: str const getStateOfSurvey = (idSurvey: string): StateDataStateEnum => { const isSent = getValue(idSurvey, FieldNameEnum.ISENVOYED) as boolean; + const isValidated = surveyValidated(idSurvey); let state: StateDataStateEnum = StateDataStateEnum.INIT; - const data = getDataCache(idSurvey) as LunaticData; + if (isSent) { state = StateDataStateEnum.COMPLETED; + } else if (isValidated) { + state = StateDataStateEnum.VALIDATED; } - state = data.stateData?.state ?? state; return state; }; @@ -1622,8 +1617,7 @@ const surveyLocked = (idSurvey: string) => { }; const surveyValidated = (idSurvey: string) => { - const data = getDataCache(idSurvey) as LunaticData; - const isValidated = StateDataStateEnum.VALIDATED == data?.stateData?.state; + const isValidated = getValue(idSurvey, FieldNameEnum.ISVALIDATED) as boolean; return isValidated != null && isValidated; }; From f5b05705bcd2c03f3ebce2f6d95adcbf7545732c Mon Sep 17 00:00:00 2001 From: Laila Abjil Date: Mon, 11 Mar 2024 15:27:03 +0100 Subject: [PATCH 05/36] fix(eslint): remove unused code --- src/pages/home-surveyed/HomeSurveyed.tsx | 27 ------------------------ src/service/survey-service.ts | 13 ++++++++---- 2 files changed, 9 insertions(+), 31 deletions(-) diff --git a/src/pages/home-surveyed/HomeSurveyed.tsx b/src/pages/home-surveyed/HomeSurveyed.tsx index c5a5634b..c8acdeb2 100644 --- a/src/pages/home-surveyed/HomeSurveyed.tsx +++ b/src/pages/home-surveyed/HomeSurveyed.tsx @@ -4,7 +4,6 @@ import { ReactComponent as DisconnectIcon } from "assets/illustration/disconnect import logo from "assets/illustration/logo.png"; import { ReactComponent as HelpIcon } from "assets/illustration/mui-icon/help.svg"; import { ReactComponent as HomeIcon } from "assets/illustration/mui-icon/home.svg"; -import { ReactComponent as LockIcon } from "assets/illustration/mui-icon/lock.svg"; import { ReactComponent as PowerSettingsIcon } from "assets/illustration/mui-icon/power-settings.svg"; import { ReactComponent as RemoveCircleIcon } from "assets/illustration/mui-icon/remove-circle.svg"; import { ReactComponent as ReminderNoteImg } from "assets/illustration/reminder-note.svg"; @@ -346,32 +345,6 @@ const HomeSurveyedPage = () => { ); })} - - - - - - - , ); }; diff --git a/src/service/survey-service.ts b/src/service/survey-service.ts index 7fa4058d..2f5bd8d3 100644 --- a/src/service/survey-service.ts +++ b/src/service/survey-service.ts @@ -231,16 +231,19 @@ const initDataForSurveys = (setError: (error: ErrorCodeEnum) => void) => { let userSurveyDataActivity: UserSurveys[] = []; let workingTimeSurveysIds: string[] = []; let userSurveyDataWorkTime: UserSurveys[] = []; + userSurveyData.forEach(surveyData => { if (surveyData.questionnaireModelId === SourcesEnum.ACTIVITY_SURVEY) { activitySurveysIds.push(surveyData.surveyUnitId); userSurveyDataActivity.push(surveyData); - userDatas.push(surveyData); + if (!userDatas.find(survey => survey.surveyUnitId == surveyData.surveyUnitId)) + userDatas.push(surveyData); } if (surveyData.questionnaireModelId === SourcesEnum.WORK_TIME_SURVEY) { workingTimeSurveysIds.push(surveyData.surveyUnitId); userSurveyDataWorkTime.push(surveyData); - userDatas.push(surveyData); + if (!userDatas.find(survey => survey.surveyUnitId == surveyData.surveyUnitId)) + userDatas.push(surveyData); } }); userDatasActivity = userSurveyDataActivity; @@ -606,10 +609,12 @@ const initializeListSurveys = (setError: (error: ErrorCodeEnum) => void) => { addArrayToSession("surveysData", surveysData); datas.data.forEach((surveyData: UserSurveys) => { if (surveyData.questionnaireModelId === SourcesEnum.ACTIVITY_SURVEY) { - userDatas.push(surveyData); + if (!userDatas.find(survey => survey.surveyUnitId == surveyData.surveyUnitId)) + userDatas.push(surveyData); } if (surveyData.questionnaireModelId === SourcesEnum.WORK_TIME_SURVEY) { - userDatas.push(surveyData); + if (!userDatas.find(survey => survey.surveyUnitId == surveyData.surveyUnitId)) + userDatas.push(surveyData); } }); return saveUserSurveysData({ data: userDatas }); From 7edd46acff15326e94a550f056633924f9db4db2 Mon Sep 17 00:00:00 2001 From: Laila Abjil Date: Mon, 11 Mar 2024 15:27:19 +0100 Subject: [PATCH 06/36] fix(error): fix page blanc --- package.json | 4 ++-- .../LoopSurveyPage/LoopSurveyPageStep/LoopSurveyPageStep.tsx | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 4263c135..187cf85e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "edt", - "version": "3.13.5", - "dateVersion": "08/03/2024", + "version": "3.13.8", + "dateVersion": "11/03/2024", "licence": "MIT", "dependencies": { "@emotion/react": "^11.10.4", diff --git a/src/components/commons/LoopSurveyPage/LoopSurveyPageStep/LoopSurveyPageStep.tsx b/src/components/commons/LoopSurveyPage/LoopSurveyPageStep/LoopSurveyPageStep.tsx index fc3bb31e..b9b9b4f3 100644 --- a/src/components/commons/LoopSurveyPage/LoopSurveyPageStep/LoopSurveyPageStep.tsx +++ b/src/components/commons/LoopSurveyPage/LoopSurveyPageStep/LoopSurveyPageStep.tsx @@ -89,7 +89,9 @@ const LoopSurveyPageStep = (props: LoopSurveyPageStepProps) => { ); }, labels: getLabels(labelOfPage), - errorIcon: IconError, + errorIcon: ( + + ), onSelectValue: () => { validate(idSurvey).then(() => { skipNextPage( From c0e1f49810988ad1132193c9d5a689ba97a348f3 Mon Sep 17 00:00:00 2001 From: Laila Abjil Date: Mon, 11 Mar 2024 16:27:57 +0100 Subject: [PATCH 07/36] fix(eslint): remove unused code --- src/App.tsx | 2 +- src/pages/home-surveyed/HomeSurveyed.tsx | 28 +++++++++++++++++++ .../surveys-overview/SurveysOverview.tsx | 1 - src/service/survey-service.ts | 2 -- 4 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 4c01d15f..cf004a21 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -78,7 +78,7 @@ const App = () => { //auth.userManager.startSilentRenew(); promisesToWait.push( - initializeDatas(setError).then(data => { + initializeDatas(setError).then(() => { setInitialized(true); return initPropsAuth(auth).then(() => setInitialized(true)); }), diff --git a/src/pages/home-surveyed/HomeSurveyed.tsx b/src/pages/home-surveyed/HomeSurveyed.tsx index c8acdeb2..529105f6 100644 --- a/src/pages/home-surveyed/HomeSurveyed.tsx +++ b/src/pages/home-surveyed/HomeSurveyed.tsx @@ -4,6 +4,7 @@ import { ReactComponent as DisconnectIcon } from "assets/illustration/disconnect import logo from "assets/illustration/logo.png"; import { ReactComponent as HelpIcon } from "assets/illustration/mui-icon/help.svg"; import { ReactComponent as HomeIcon } from "assets/illustration/mui-icon/home.svg"; +import { ReactComponent as LockIcon } from "assets/illustration/mui-icon/lock.svg"; import { ReactComponent as PowerSettingsIcon } from "assets/illustration/mui-icon/power-settings.svg"; import { ReactComponent as RemoveCircleIcon } from "assets/illustration/mui-icon/remove-circle.svg"; import { ReactComponent as ReminderNoteImg } from "assets/illustration/reminder-note.svg"; @@ -345,6 +346,33 @@ const HomeSurveyedPage = () => { ); })} + + + + + + + , ); }; diff --git a/src/pages/surveys-overview/SurveysOverview.tsx b/src/pages/surveys-overview/SurveysOverview.tsx index 53122c9d..8532dd3a 100644 --- a/src/pages/surveys-overview/SurveysOverview.tsx +++ b/src/pages/surveys-overview/SurveysOverview.tsx @@ -133,7 +133,6 @@ const SurveysOverviewPage = () => { const refreshHouseholds = useCallback(() => { setRefreshing(true); - const promisesToWait: Promise[] = []; return initializeListSurveys(setError).then(() => { return refreshSurveyData(setError).finally(() => { setRefreshing(true); diff --git a/src/service/survey-service.ts b/src/service/survey-service.ts index 2f5bd8d3..32d42e6f 100644 --- a/src/service/survey-service.ts +++ b/src/service/survey-service.ts @@ -91,7 +91,6 @@ let userDatasWorkTime: UserSurveys[] = []; let userDatas: UserSurveys[] = []; let surveysData: UserSurveys[] = []; let initData = false; -let authData = null; const toIgnoreForRoute = [ FieldNameEnum.PLACE, @@ -149,7 +148,6 @@ const initPropsAuth = (auth: AuthContextProps): Promise => { }, }; return lunaticDatabase.save(DATA_STATE, dataState).then(() => { - authData = dataState.data.userData; return dataState; }); }; From 7053370523c3006f10ed3bede10f051f312f3e0f Mon Sep 17 00:00:00 2001 From: Laila Abjil Date: Thu, 21 Mar 2024 10:59:15 +0100 Subject: [PATCH 08/36] fix(stateData): fix stateData when not exist --- src/service/api-service.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/service/api-service.ts b/src/service/api-service.ts index b50eab86..1bcac1f3 100644 --- a/src/service/api-service.ts +++ b/src/service/api-service.ts @@ -2,6 +2,7 @@ import { NomenclatureActivityOption } from "@inseefrlab/lunatic-edt"; import axios from "axios"; import { ErrorCodeEnum } from "enumerations/ErrorCodeEnum"; import { ReferentielsEnum } from "enumerations/ReferentielsEnum"; +import { StateDataStateEnum } from "enumerations/StateDataStateEnum"; import { StateData, SurveyData, UserSurveys } from "interface/entity/Api"; import { LunaticData, ReferentielData, SourceData } from "interface/lunatic/Lunatic"; import jwt, { JwtPayload } from "jwt-decode"; @@ -259,6 +260,16 @@ const requestPutStateReviewer = ( ) .then(() => { resolve(data); + }) + .catch(err => { + if (err.response?.statut == 404) { + console.log(err); + return { + state: StateDataStateEnum.INIT, + date: Date.now(), + currentPage: 0, + }; + } }); }); }; @@ -365,6 +376,13 @@ const requestGetStateReviewer = ( setError(ErrorCodeEnum.NO_RIGHTS); } else if (err.response?.status != 404) { setError(ErrorCodeEnum.UNREACHABLE_SURVEYS_DATAS); + } else if (err.response?.statut == 404) { + console.log(err); + return { + state: StateDataStateEnum.INIT, + date: Date.now(), + currentPage: 0, + }; } }); }); From 9440c0555a33f297b6770fecc6dfe68a231483e1 Mon Sep 17 00:00:00 2001 From: Laila Abjil Date: Thu, 21 Mar 2024 11:03:12 +0100 Subject: [PATCH 09/36] fix(eslint): remove unused code --- src/service/api-service.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/service/api-service.ts b/src/service/api-service.ts index 1bcac1f3..72d71b57 100644 --- a/src/service/api-service.ts +++ b/src/service/api-service.ts @@ -263,7 +263,6 @@ const requestPutStateReviewer = ( }) .catch(err => { if (err.response?.statut == 404) { - console.log(err); return { state: StateDataStateEnum.INIT, date: Date.now(), @@ -377,7 +376,6 @@ const requestGetStateReviewer = ( } else if (err.response?.status != 404) { setError(ErrorCodeEnum.UNREACHABLE_SURVEYS_DATAS); } else if (err.response?.statut == 404) { - console.log(err); return { state: StateDataStateEnum.INIT, date: Date.now(), From 07de74e7440f29f8dba107a607a149cd8766a319 Mon Sep 17 00:00:00 2001 From: Laila Abjil Date: Thu, 21 Mar 2024 11:08:27 +0100 Subject: [PATCH 10/36] fix(version): update version --- package.json | 4 ++-- src/service/api-service.ts | 10 ++++++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 187cf85e..7d02a31f 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "edt", - "version": "3.13.8", - "dateVersion": "11/03/2024", + "version": "3.13.9", + "dateVersion": "21/03/2024", "licence": "MIT", "dependencies": { "@emotion/react": "^11.10.4", diff --git a/src/service/api-service.ts b/src/service/api-service.ts index 72d71b57..c22af9c4 100644 --- a/src/service/api-service.ts +++ b/src/service/api-service.ts @@ -262,12 +262,13 @@ const requestPutStateReviewer = ( resolve(data); }) .catch(err => { - if (err.response?.statut == 404) { - return { + if (err.response?.status == 404) { + const stateData = { state: StateDataStateEnum.INIT, date: Date.now(), currentPage: 0, }; + resolve(stateData); } }); }); @@ -375,12 +376,13 @@ const requestGetStateReviewer = ( setError(ErrorCodeEnum.NO_RIGHTS); } else if (err.response?.status != 404) { setError(ErrorCodeEnum.UNREACHABLE_SURVEYS_DATAS); - } else if (err.response?.statut == 404) { - return { + } else if (err.response?.status == 404) { + const stateData = { state: StateDataStateEnum.INIT, date: Date.now(), currentPage: 0, }; + resolve(stateData); } }); }); From 8e603ff80f452329502f4d0b2ec5d3485318d83d Mon Sep 17 00:00:00 2001 From: Laila Abjil Date: Fri, 22 Mar 2024 13:47:09 +0100 Subject: [PATCH 11/36] fix(api): catch erros and set statedata Initial --- src/service/api-service.ts | 23 +++++++++--------- src/service/survey-service.ts | 44 +++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 12 deletions(-) diff --git a/src/service/api-service.ts b/src/service/api-service.ts index c22af9c4..eb821165 100644 --- a/src/service/api-service.ts +++ b/src/service/api-service.ts @@ -7,6 +7,7 @@ import { StateData, SurveyData, UserSurveys } from "interface/entity/Api"; import { LunaticData, ReferentielData, SourceData } from "interface/lunatic/Lunatic"; import jwt, { JwtPayload } from "jwt-decode"; import { AuthContextProps, User } from "oidc-react"; +import { initStateData, initSurveyData } from "./survey-service"; import { getAuth, getUserToken, isReviewer } from "./user-service"; export const edtOrganisationApiBaseUrl = process.env.REACT_APP_EDT_ORGANISATION_API_BASE_URL; @@ -153,7 +154,7 @@ const fetchReviewerSurveysAssignments = (setError: (error: ErrorCodeEnum) => voi resolve(response.data); }) .catch(err => { - if (err.response.status === 403) { + if (err.response?.status === 403) { setError(ErrorCodeEnum.NO_RIGHTS); } else { setError(ErrorCodeEnum.UNREACHABLE_SOURCE); @@ -326,7 +327,7 @@ const remoteGetSurveyData = ( .catch(err => { if (err.response?.status === 403) { setError?.(ErrorCodeEnum.NO_RIGHTS); - } else { + } else if (err.response?.status != 404) { setError?.(ErrorCodeEnum.UNREACHABLE_SURVEYS_DATAS); } }); @@ -353,6 +354,8 @@ const requestGetDataReviewer = ( .catch(err => { if (err.response?.status === 403) { setError(ErrorCodeEnum.NO_RIGHTS); + } else { + return resolve(initSurveyData(idSurvey)); } }); }); @@ -374,15 +377,8 @@ const requestGetStateReviewer = ( .catch(err => { if (err.response?.status === 403) { setError(ErrorCodeEnum.NO_RIGHTS); - } else if (err.response?.status != 404) { - setError(ErrorCodeEnum.UNREACHABLE_SURVEYS_DATAS); - } else if (err.response?.status == 404) { - const stateData = { - state: StateDataStateEnum.INIT, - date: Date.now(), - currentPage: 0, - }; - resolve(stateData); + } else { + resolve(initStateData()); } }); }); @@ -429,7 +425,10 @@ const remoteGetSurveyDataReviewer = ( if (err.response?.status === 403) { setError?.(ErrorCodeEnum.NO_RIGHTS); } else { - setError?.(ErrorCodeEnum.UNREACHABLE_SURVEYS_DATAS); + return { + data: initSurveyData(idSurvey), + stateData: initStateData(), + }; } return Promise.reject(err); }); diff --git a/src/service/survey-service.ts b/src/service/survey-service.ts index 32d42e6f..90c18b9c 100644 --- a/src/service/survey-service.ts +++ b/src/service/survey-service.ts @@ -920,6 +920,19 @@ const saveQualityScore = (idSurvey: string, data: LunaticData) => { return data; }; +const updateLocked = (idSurvey: string, data: LunaticData) => { + if (existVariableEdited(idSurvey, data) && data.COLLECTED) { + data.COLLECTED[FieldNameEnum.ISLOCKED] = { + COLLECTED: true, + EDITED: true, + FORCED: null, + INPUTED: null, + PREVIOUS: null, + }; + } + return data; +}; + const saveData = ( idSurvey: string, data: LunaticData, @@ -935,6 +948,7 @@ const saveData = ( const isReviewerMode = getUserRights() == EdtUserRightsEnum.REVIEWER; fixConditionals(data); const isChange = forceUpdate || dataIsChange(idSurvey, data); + data = updateLocked(idSurvey, data); return lunaticDatabase.save(idSurvey, data).then(() => { const promisesToWait: Promise[] = []; datas.set(idSurvey, data); @@ -1954,6 +1968,34 @@ const validateAllGroup = ( ); }; +const initStateData = () => { + const stateData = { + state: StateDataStateEnum.INIT, + date: Date.now(), + currentPage: 0, + }; + return stateData; +}; + +const initSurveyData = (surveyId: string): LunaticData => { + const regexp = new RegExp(process.env.REACT_APP_HOUSE_REFERENCE_REGULAR_EXPRESSION || ""); + let surveyData: LunaticData = { + COLLECTED: {}, + CALCULATED: {}, + EXTERNAL: {}, + houseReference: "", + id: "", + lastLocalSaveDate: Date.now(), + }; + surveyData.houseReference = surveyId?.replace(regexp, ""); + surveyData.CALCULATED = {}; + surveyData.EXTERNAL = {}; + surveyData.COLLECTED = getDataEmpty(surveyId); + surveyData.lastLocalSaveDate = Date.now(); + surveyData.stateData = initStateData(); + return surveyData; +}; + export { addToAutocompleteActivityReferentiel, addToSecondaryActivityReferentiel, @@ -1993,6 +2035,8 @@ export { getValueWithData, getVariable, initPropsAuth, + initStateData, + initSurveyData, initializeDatas, initializeHomeSurveys, initializeListSurveys, From c084a386c32f3021b5746b256337e07f69bdc1f7 Mon Sep 17 00:00:00 2001 From: Laila Abjil Date: Wed, 27 Mar 2024 10:30:49 +0100 Subject: [PATCH 12/36] fix(eslint): clean code --- src/pages/activity/Activity.tsx | 3 --- .../activity-or-route-planner/ActivityOrRoutePlanner.tsx | 4 ++-- src/pages/error/Error.tsx | 1 - src/pages/work-time/WorkTime.tsx | 3 --- src/service/navigation-service.ts | 4 ---- 5 files changed, 2 insertions(+), 13 deletions(-) diff --git a/src/pages/activity/Activity.tsx b/src/pages/activity/Activity.tsx index 103a97cd..840dfbd5 100644 --- a/src/pages/activity/Activity.tsx +++ b/src/pages/activity/Activity.tsx @@ -42,9 +42,6 @@ const ActivityPage = () => { if (idSurvey && source) { navToActivityOrPlannerOrSummary(idSurvey, source.maxPage, navigate, source); } else { - console.error( - `Activité - Erreur recuperation du idSurvey: ${idSurvey} et source: ${source}`, - ); navigate(getParameterizedNavigatePath(EdtRoutesNameEnum.ERROR, ErrorCodeEnum.COMMON)); } }, []); diff --git a/src/pages/activity/activity-or-route-planner/ActivityOrRoutePlanner.tsx b/src/pages/activity/activity-or-route-planner/ActivityOrRoutePlanner.tsx index facc901c..521a58f6 100644 --- a/src/pages/activity/activity-or-route-planner/ActivityOrRoutePlanner.tsx +++ b/src/pages/activity/activity-or-route-planner/ActivityOrRoutePlanner.tsx @@ -772,14 +772,14 @@ const ActivityOrRoutePlannerPage = () => { {t("page.activity-planner.activity-for-day")} - +

{formateDateToFrenchFormat( generateDateFromStringInput(surveyDate), getLanguage(), )}

-
+ )} diff --git a/src/pages/error/Error.tsx b/src/pages/error/Error.tsx index 206a3dc7..08894b21 100644 --- a/src/pages/error/Error.tsx +++ b/src/pages/error/Error.tsx @@ -63,7 +63,6 @@ const ErrorPage = (props: ErrorPageProps) => { }, []); const getErrorText = (errorCode: ErrorCodeEnum | undefined): string => { - console.error(`Type d'erreur: ${errorCode}`); switch (errorCode) { case ErrorCodeEnum.NO_RIGHTS: return t("common.error.error-no-rights"); diff --git a/src/pages/work-time/WorkTime.tsx b/src/pages/work-time/WorkTime.tsx index 7a429856..063f8fae 100644 --- a/src/pages/work-time/WorkTime.tsx +++ b/src/pages/work-time/WorkTime.tsx @@ -42,9 +42,6 @@ const WorkTimePage = () => { if (idSurvey && source) { navToWeeklyPlannerOrClose(idSurvey, navigate, source); } else { - console.error( - `Semanier - Erreur recuperation du idSurvey: ${idSurvey} et source: ${source}`, - ); navigate(getParameterizedNavigatePath(EdtRoutesNameEnum.ERROR, ErrorCodeEnum.COMMON)); } }, []); diff --git a/src/service/navigation-service.ts b/src/service/navigation-service.ts index 7aba56a8..b2fa6d20 100644 --- a/src/service/navigation-service.ts +++ b/src/service/navigation-service.ts @@ -74,13 +74,9 @@ const getLoopParameterizedNavigatePath = ( getParameterizedNavigatePath(page, iteration.toString()) ); } else { - console.error( - `Erreur get parent page orchestrator with pageOrchestator : ${pageOrchestrator.parentPage} and page : ${page}`, - ); return getParameterizedNavigatePath(EdtRoutesNameEnum.ERROR, ErrorCodeEnum.COMMON); } } else { - console.error(`Erreur get page orchestrator with loop : ${loopPage} and page : ${page}`); return getParameterizedNavigatePath(EdtRoutesNameEnum.ERROR, ErrorCodeEnum.COMMON); } }; From 54de2990152bfd8f1dec967550f42bf0ff5b4f85 Mon Sep 17 00:00:00 2001 From: Laila Abjil Date: Wed, 27 Mar 2024 10:31:11 +0100 Subject: [PATCH 13/36] fix(weeklyplanner): fix update question place work --- src/pages/work-time/weekly-planner/WeeklyPlanner.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pages/work-time/weekly-planner/WeeklyPlanner.tsx b/src/pages/work-time/weekly-planner/WeeklyPlanner.tsx index 9df88ed5..079dadcf 100644 --- a/src/pages/work-time/weekly-planner/WeeklyPlanner.tsx +++ b/src/pages/work-time/weekly-planner/WeeklyPlanner.tsx @@ -210,12 +210,13 @@ const WeeklyPlannerPage = () => { const validateAndNav = (): void => { if (displayDayOverview) { - save(idSurvey); if (isPlaceWorkDisplayed) { + saveData(idSurvey, callbackHolder.getData()); setDisplayDayOverview(true); setIsPlaceWorkDisplayed(false); isPlaceWorkDisplayed = false; } else { + save(idSurvey); setDisplayDayOverview(false); } } else { From b071d6d72c21882e57029e42bc2a09d844b810f6 Mon Sep 17 00:00:00 2001 From: Laila Abjil Date: Wed, 27 Mar 2024 10:31:28 +0100 Subject: [PATCH 14/36] fix(api): fix code errors --- src/service/api-service.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/service/api-service.ts b/src/service/api-service.ts index eb821165..48ddbb97 100644 --- a/src/service/api-service.ts +++ b/src/service/api-service.ts @@ -80,7 +80,7 @@ export const fetchReferentiels = ( resolve(refs); }) .catch(err => { - if (err.response.status === 403) { + if (err.response?.status === 403) { setError(ErrorCodeEnum.NO_RIGHTS); } else { setError(ErrorCodeEnum.UNREACHABLE_NOMENCLATURES); @@ -101,7 +101,7 @@ const fetchUserSurveysInfo = (setError: (error: ErrorCodeEnum) => void): Promise resolve(data); }) .catch(err => { - if (err.response.status === 403) { + if (err.response?.status === 403) { setError(ErrorCodeEnum.NO_RIGHTS); } else { setError(ErrorCodeEnum.UNREACHABLE_SURVEYS_ASSIGNMENTS); @@ -134,7 +134,7 @@ const fetchSurveysSourcesByIds = ( resolve(sources as SourceData); }) .catch(err => { - if (err.response.status === 403) { + if (err.response?.status === 403) { setError(ErrorCodeEnum.NO_RIGHTS); } else { setError(ErrorCodeEnum.UNREACHABLE_SOURCE); From 3367b92f7d419f94ad2a27788e6fbb7a7280e4c2 Mon Sep 17 00:00:00 2001 From: Laila Abjil Date: Wed, 27 Mar 2024 10:32:15 +0100 Subject: [PATCH 15/36] fix(version): update version lunatic --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 7d02a31f..991ae7b9 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,13 @@ { "name": "edt", - "version": "3.13.9", - "dateVersion": "21/03/2024", + "version": "3.14.2", + "dateVersion": "27/03/2024", "licence": "MIT", "dependencies": { "@emotion/react": "^11.10.4", "@emotion/styled": "^11.10.4", "@inseefr/lunatic": "2.0.7-v2", - "@inseefrlab/lunatic-edt": "^0.12.3", + "@inseefrlab/lunatic-edt": "0.12.4", "@mui/material": "^5.10.7", "@mui/styles": "^5.12.0", "@react-pdf/font": "2.2.0", From 196c0075d3e238d62e81d3bc05d5f181bf81c033 Mon Sep 17 00:00:00 2001 From: Laila Abjil Date: Wed, 27 Mar 2024 10:56:49 +0100 Subject: [PATCH 16/36] fix(offline): doesn't save userData and surveysids --- src/service/survey-service.ts | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/service/survey-service.ts b/src/service/survey-service.ts index 90c18b9c..f48ae646 100644 --- a/src/service/survey-service.ts +++ b/src/service/survey-service.ts @@ -257,10 +257,11 @@ const initDataForSurveys = (setError: (error: ErrorCodeEnum) => void) => { [SurveysIdsEnum.ACTIVITY_SURVEYS_IDS]: activitySurveysIds, [SurveysIdsEnum.WORK_TIME_SURVEYS_IDS]: workingTimeSurveysIds, }; + const innerPromisesOffline: Promise[] = [ initializeSurveysDatasCache(allSurveysIds), - saveSurveysIds(surveysIds), - saveUserSurveysData({ data: userDatas }), + //saveSurveysIds(surveysIds), + //saveUserSurveysData({ data: userDatas }), ]; return Promise.all(innerPromisesOffline); }); @@ -615,7 +616,8 @@ const initializeListSurveys = (setError: (error: ErrorCodeEnum) => void) => { userDatas.push(surveyData); } }); - return saveUserSurveysData({ data: userDatas }); + console.log("user surveys datas gets", data); + //return saveUserSurveysData({ data: userDatas }); }); } }; @@ -1063,6 +1065,10 @@ const saveSources = (data: SourceData): Promise => { }); }; +const setSurveysIds = (data: SurveysIds) => { + surveysIds = data; +}; + const saveSurveysIds = (data: SurveysIds): Promise => { return lunaticDatabase.save(SURVEYS_IDS, data).then(() => { surveysIds = data; @@ -1070,6 +1076,10 @@ const saveSurveysIds = (data: SurveysIds): Promise => { }); }; +const setUserSurveysData = (data: UserSurveysData) => { + userDatas = data.data; +}; + const saveUserSurveysData = (data: UserSurveysData): Promise => { return lunaticDatabase.save(USER_SURVEYS_DATA, data).then(() => { userDatas = data.data; @@ -2054,6 +2064,8 @@ export { refreshSurveyData, saveData, setData, + setSurveysIds, + setUserSurveysData, setValue, surveyLocked, surveyValidated, From bdc34844a70ff0888bebedb5a7360ced17de3781 Mon Sep 17 00:00:00 2001 From: Laila Abjil Date: Wed, 27 Mar 2024 11:22:57 +0100 Subject: [PATCH 17/36] fix(offline): test --- package.json | 2 +- src/App.tsx | 12 ++++++++++-- src/index.tsx | 11 ++++++++++- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 991ae7b9..d9af1764 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "edt", - "version": "3.14.2", + "version": "3.14.4", "dateVersion": "27/03/2024", "licence": "MIT", "dependencies": { diff --git a/src/App.tsx b/src/App.tsx index cf004a21..f2002474 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -17,11 +17,11 @@ import { } from "service/survey-service"; import { getUserRights, setAuth, setUser, setUserToken } from "service/user-service"; import { getCookie } from "utils/utils"; + const App = () => { const { t } = useTranslation(); const [initialized, setInitialized] = useState(false); const [error, setError] = useState(undefined); - const auth = useAuth(); const getTokenHint = () => { return localStorage.getItem("id_token") ?? undefined; @@ -36,6 +36,10 @@ const App = () => { }; const promisesToWait: Promise[] = []; + const auth = useAuth(); + + console.log(auth); + useEffect(() => { if ( window.location.search && @@ -80,13 +84,16 @@ const App = () => { promisesToWait.push( initializeDatas(setError).then(() => { setInitialized(true); - return initPropsAuth(auth).then(() => setInitialized(true)); + return initPropsAuth(auth).then(() => { + setInitialized(true); + }); }), ); if (getUserRights() === EdtUserRightsEnum.REVIEWER && navigator.onLine) { promisesToWait.push( initializeListSurveys(setError).then(() => { + console.log("initialized"); setInitialized(true); }), ); @@ -118,6 +125,7 @@ const App = () => { initializeDatas(setError).then(() => { if (getUserRights() === EdtUserRightsEnum.REVIEWER) { return initializeListSurveys(setError).then(() => { + console.log("initializeListSurveys"); setInitialized(true); }); } else setInitialized(true); diff --git a/src/index.tsx b/src/index.tsx index 66482674..7ce960a4 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -20,7 +20,7 @@ const oidcConfigSSO = { userManager: createUserManager(), }; -const oidcConfig = { +const oidcConfigOnline = { onSignIn: () => { //to remove keycloak params in url window.history.replaceState(null, "", window.location.pathname); @@ -31,8 +31,17 @@ const oidcConfig = { automaticSilentRenew: !navigator.onLine, }; +const oidcConfigOffline = { + automaticSilentRenew: !navigator.onLine, + silent_redirect_uri: "https://insee-edt.k8s.keyconsulting.fr/", +}; + +const oidcConfig = navigator.onLine ? oidcConfigOnline : oidcConfigOffline; + const oidcProps = isSSO ? Object.assign(oidcConfig, oidcConfigSSO) : oidcConfig; +console.log(oidcProps); + root.render( From 882e72716bce7a29b31ed07b6f97b4803a26fd9a Mon Sep 17 00:00:00 2001 From: Laila Abjil Date: Wed, 27 Mar 2024 12:03:32 +0100 Subject: [PATCH 18/36] fix(eslint): clean code --- src/App.tsx | 4 ---- src/index.tsx | 2 -- src/service/auth-service.ts | 12 ++++++------ src/service/survey-service.ts | 8 +------- 4 files changed, 7 insertions(+), 19 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index f2002474..48fceee7 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -38,8 +38,6 @@ const App = () => { const auth = useAuth(); - console.log(auth); - useEffect(() => { if ( window.location.search && @@ -93,7 +91,6 @@ const App = () => { if (getUserRights() === EdtUserRightsEnum.REVIEWER && navigator.onLine) { promisesToWait.push( initializeListSurveys(setError).then(() => { - console.log("initialized"); setInitialized(true); }), ); @@ -125,7 +122,6 @@ const App = () => { initializeDatas(setError).then(() => { if (getUserRights() === EdtUserRightsEnum.REVIEWER) { return initializeListSurveys(setError).then(() => { - console.log("initializeListSurveys"); setInitialized(true); }); } else setInitialized(true); diff --git a/src/index.tsx b/src/index.tsx index 7ce960a4..7bd855cf 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -40,8 +40,6 @@ const oidcConfig = navigator.onLine ? oidcConfigOnline : oidcConfigOffline; const oidcProps = isSSO ? Object.assign(oidcConfig, oidcConfigSSO) : oidcConfig; -console.log(oidcProps); - root.render( diff --git a/src/service/auth-service.ts b/src/service/auth-service.ts index b97b9ecd..7298435d 100644 --- a/src/service/auth-service.ts +++ b/src/service/auth-service.ts @@ -66,10 +66,13 @@ const createUserManager = () => { }); userManager.events.addUserLoaded(user => { + console.log("add user"); setUserToken(user?.access_token || ""); }); userManager.events.addAccessTokenExpired(() => { - signinSilent(userManager); + if (navigator.onLine) { + signinSilent(userManager); + } }); return userManager; @@ -90,14 +93,11 @@ export const parseJwt = (token: string) => { }; const signinRedirect = (userManager: UserManager) => { + console.log("signinredirect"); localStorage.setItem("redirectUri", window.location.pathname); userManager.signinRedirect({}); }; -const navigateToScreen = () => { - window.location.replace("/en/dashboard"); -}; - const isAuthenticated = () => { const url = process.env.REACT_APP_AUTH_URL; const clientId = process.env.REACT_APP_IDENTITY_CLIENT_ID; @@ -122,6 +122,7 @@ const signinSilent = (userManager: UserManager) => { }; const signinSilentCallback = (userManager: UserManager) => { + console.log("signinSilentCallback"); userManager.signinSilentCallback(); }; @@ -146,7 +147,6 @@ export { isAuthenticated, isSSO, logout, - navigateToScreen, signinRedirect, signinSilent, signinSilentCallback, diff --git a/src/service/survey-service.ts b/src/service/survey-service.ts index f48ae646..9b9b121d 100644 --- a/src/service/survey-service.ts +++ b/src/service/survey-service.ts @@ -258,11 +258,7 @@ const initDataForSurveys = (setError: (error: ErrorCodeEnum) => void) => { [SurveysIdsEnum.WORK_TIME_SURVEYS_IDS]: workingTimeSurveysIds, }; - const innerPromisesOffline: Promise[] = [ - initializeSurveysDatasCache(allSurveysIds), - //saveSurveysIds(surveysIds), - //saveUserSurveysData({ data: userDatas }), - ]; + const innerPromisesOffline: Promise[] = [initializeSurveysDatasCache(allSurveysIds)]; return Promise.all(innerPromisesOffline); }); } @@ -616,8 +612,6 @@ const initializeListSurveys = (setError: (error: ErrorCodeEnum) => void) => { userDatas.push(surveyData); } }); - console.log("user surveys datas gets", data); - //return saveUserSurveysData({ data: userDatas }); }); } }; From 53d6bc38585ee347a803db394d6f44d16b146c96 Mon Sep 17 00:00:00 2001 From: Laila Abjil Date: Thu, 28 Mar 2024 10:03:46 +0000 Subject: [PATCH 19/36] Fix/perf --- package.json | 4 +- public/manifest.json | 5 +- src/App.tsx | 3 +- src/index.tsx | 4 +- src/pages/home-surveyed/HomeSurveyed.tsx | 2 +- .../surveys-overview/SurveysOverview.tsx | 1 - src/service/api-service.ts | 103 +++++----- src/service/auth-service.ts | 3 +- src/service/survey-service.ts | 194 ++++++++---------- yarn.lock | 8 +- 10 files changed, 154 insertions(+), 173 deletions(-) diff --git a/package.json b/package.json index d9af1764..7629d9b2 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "edt", - "version": "3.14.4", - "dateVersion": "27/03/2024", + "version": "3.14.7", + "dateVersion": "28/03/2024", "licence": "MIT", "dependencies": { "@emotion/react": "^11.10.4", diff --git a/public/manifest.json b/public/manifest.json index ea3e511c..5de68057 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -4,7 +4,7 @@ "icons": [ { "src": "favicon.ico", - "sizes": "48x48 32x32 16x16", + "sizes": "32x32 16x16", "type": "image/x-icon" }, { @@ -219,5 +219,6 @@ "start_url": ".", "display": "standalone", "theme_color": "#000000", - "background_color": "#ffffff" + "background_color": "#ffffff", + "prefer_related_applications": true } diff --git a/src/App.tsx b/src/App.tsx index 48fceee7..ff6757c7 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -22,6 +22,7 @@ const App = () => { const { t } = useTranslation(); const [initialized, setInitialized] = useState(false); const [error, setError] = useState(undefined); + const auth = useAuth(); const getTokenHint = () => { return localStorage.getItem("id_token") ?? undefined; @@ -36,8 +37,6 @@ const App = () => { }; const promisesToWait: Promise[] = []; - const auth = useAuth(); - useEffect(() => { if ( window.location.search && diff --git a/src/index.tsx b/src/index.tsx index 7bd855cf..1d43b5b8 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -20,6 +20,8 @@ const oidcConfigSSO = { userManager: createUserManager(), }; +const currentHost = `${window.location.protocol}//${window.location.hostname}`; + const oidcConfigOnline = { onSignIn: () => { //to remove keycloak params in url @@ -33,7 +35,7 @@ const oidcConfigOnline = { const oidcConfigOffline = { automaticSilentRenew: !navigator.onLine, - silent_redirect_uri: "https://insee-edt.k8s.keyconsulting.fr/", + silent_redirect_uri: currentHost, }; const oidcConfig = navigator.onLine ? oidcConfigOnline : oidcConfigOffline; diff --git a/src/pages/home-surveyed/HomeSurveyed.tsx b/src/pages/home-surveyed/HomeSurveyed.tsx index 529105f6..30075100 100644 --- a/src/pages/home-surveyed/HomeSurveyed.tsx +++ b/src/pages/home-surveyed/HomeSurveyed.tsx @@ -105,7 +105,7 @@ const HomeSurveyedPage = () => { !survey.startsWith("activitySurvey") && !survey.startsWith("workTimeSurvey"), ); if (navigator.onLine) { - getRemoteSavedSurveysDatas(idsSurveysSelected, setError).then(() => { + getRemoteSavedSurveysDatas(idsSurveysSelected, setError, false).then(() => { initHome(idsSurveysSelected); }); } else { diff --git a/src/pages/surveys-overview/SurveysOverview.tsx b/src/pages/surveys-overview/SurveysOverview.tsx index 8532dd3a..4c206ccc 100644 --- a/src/pages/surveys-overview/SurveysOverview.tsx +++ b/src/pages/surveys-overview/SurveysOverview.tsx @@ -124,7 +124,6 @@ const SurveysOverviewPage = () => { const initHouseholds = () => { dataHouseholds = getListSurveysHousehold(); - if (searchResult == null || searchResult.length == 0) { setSearchResult(dataHouseholds); } diff --git a/src/service/api-service.ts b/src/service/api-service.ts index 48ddbb97..4d4718c1 100644 --- a/src/service/api-service.ts +++ b/src/service/api-service.ts @@ -168,16 +168,18 @@ const requestPutSurveyData = ( data: SurveyData, token?: string, ): Promise => { - return new Promise(resolve => { - axios - .put( - stromaeBackOfficeApiBaseUrl + "api/survey-unit/" + idSurvey, - data, - getHeader(stromaeBackOfficeApiBaseUrl, token), - ) - .then(() => { - resolve(data); - }); + return new Promise((resolve, reject) => { + setTimeout(() => { + axios + .put( + stromaeBackOfficeApiBaseUrl + "api/survey-unit/" + idSurvey, + data, + getHeader(stromaeBackOfficeApiBaseUrl, token), + ) + .then(() => { + resolve(data); + }); + }, 1000); }); }; @@ -235,15 +237,17 @@ const requestPutDataReviewer = ( token?: string, ): Promise => { return new Promise(resolve => { - axios - .put( - stromaeBackOfficeApiBaseUrl + "api/survey-unit/" + idSurvey + "/data", - data, - getHeader(stromaeBackOfficeApiBaseUrl, token), - ) - .then(() => { - resolve(data); - }); + setTimeout(() => { + axios + .put( + stromaeBackOfficeApiBaseUrl + "api/survey-unit/" + idSurvey + "/data", + data, + getHeader(stromaeBackOfficeApiBaseUrl, token), + ) + .then(() => { + resolve(data); + }); + }, 1000); }); }; @@ -253,25 +257,27 @@ const requestPutStateReviewer = ( token?: string, ): Promise => { return new Promise(resolve => { - axios - .put( - stromaeBackOfficeApiBaseUrl + "api/survey-unit/" + idSurvey + "/state-data", - data, - getHeader(stromaeBackOfficeApiBaseUrl, token), - ) - .then(() => { - resolve(data); - }) - .catch(err => { - if (err.response?.status == 404) { - const stateData = { - state: StateDataStateEnum.INIT, - date: Date.now(), - currentPage: 0, - }; - resolve(stateData); - } - }); + setTimeout(() => { + axios + .put( + stromaeBackOfficeApiBaseUrl + "api/survey-unit/" + idSurvey + "/state-data", + data, + getHeader(stromaeBackOfficeApiBaseUrl, token), + ) + .then(() => { + resolve(data); + }) + .catch(err => { + if (err.response?.status == 404) { + const stateData = { + state: StateDataStateEnum.INIT, + date: Date.now(), + currentPage: 0, + }; + resolve(stateData); + } + }); + }, 1000); }); }; @@ -281,18 +287,17 @@ const requestPutSurveyDataReviewer = ( stateData: StateData, token?: string, ): Promise => { - const promises = requestPutDataReviewer(idSurvey, data, token).then(() => { - return requestPutStateReviewer(idSurvey, stateData, token).then(() => { - return new Promise(resolve => { - const surveyData: SurveyData = { - stateData: stateData, - data: data, - }; - resolve(surveyData); - }); - }); + requestPutStateReviewer(idSurvey, stateData, token).then(() => { + requestPutDataReviewer(idSurvey, data, token); + }); + + return new Promise(resolve => { + const surveyData: SurveyData = { + stateData: stateData, + data: data, + }; + return surveyData; }); - return promises; }; const logout = () => { diff --git a/src/service/auth-service.ts b/src/service/auth-service.ts index 7298435d..763397e6 100644 --- a/src/service/auth-service.ts +++ b/src/service/auth-service.ts @@ -66,9 +66,10 @@ const createUserManager = () => { }); userManager.events.addUserLoaded(user => { - console.log("add user"); + console.log("add user", user); setUserToken(user?.access_token || ""); }); + userManager.events.addAccessTokenExpired(() => { if (navigator.onLine) { signinSilent(userManager); diff --git a/src/service/survey-service.ts b/src/service/survey-service.ts index 9b9b121d..5f6f1b3f 100644 --- a/src/service/survey-service.ts +++ b/src/service/survey-service.ts @@ -45,7 +45,7 @@ import { } from "interface/lunatic/Lunatic"; import { AuthContextProps } from "oidc-react"; import { NavigateFunction } from "react-router-dom"; -import { fetchReviewerSurveysAssignments } from "service/api-service"; +import { fetchReviewerSurveysAssignments, remotePutSurveyData } from "service/api-service"; import { lunaticDatabase } from "service/lunatic-database"; import { LABEL_WORK_TIME_SURVEY, getCurrentPageSource } from "service/orchestrator-service"; import dataEmptyActivity from "utils/dataEmptyActivity.json"; @@ -68,7 +68,6 @@ import { fetchUserSurveysInfo, remoteGetSurveyData, remoteGetSurveyDataReviewer, - remotePutSurveyData, remotePutSurveyDataReviewer, } from "./api-service"; import { getFlatLocalStorageValue } from "./local-storage-service"; @@ -178,6 +177,7 @@ const initDataForSurveys = (setError: (error: ErrorCodeEnum) => void) => { let userSurveyDataActivity: UserSurveys[] = []; let workingTimeSurveysIds: string[] = []; let userSurveyDataWorkTime: UserSurveys[] = []; + userSurveyData.forEach(surveyData => { if (surveyData.questionnaireModelId === SourcesEnum.ACTIVITY_SURVEY) { activitySurveysIds.push(surveyData.surveyUnitId); @@ -204,7 +204,7 @@ const initDataForSurveys = (setError: (error: ErrorCodeEnum) => void) => { [SurveysIdsEnum.WORK_TIME_SURVEYS_IDS]: workingTimeSurveysIds, }; const innerPromises: Promise[] = [ - getRemoteSavedSurveysDatas(allSurveysIds, setError).then(() => { + getRemoteSavedSurveysDatas(allSurveysIds, setError, false).then(() => { return initializeSurveysDatasCache(allSurveysIds); }), saveSurveysIds(surveysIds), @@ -229,7 +229,6 @@ const initDataForSurveys = (setError: (error: ErrorCodeEnum) => void) => { let userSurveyDataActivity: UserSurveys[] = []; let workingTimeSurveysIds: string[] = []; let userSurveyDataWorkTime: UserSurveys[] = []; - userSurveyData.forEach(surveyData => { if (surveyData.questionnaireModelId === SourcesEnum.ACTIVITY_SURVEY) { activitySurveysIds.push(surveyData.surveyUnitId); @@ -252,11 +251,6 @@ const initDataForSurveys = (setError: (error: ErrorCodeEnum) => void) => { addArrayToSession("userDatas", userDatas); let allSurveysIds = [...activitySurveysIds, ...workingTimeSurveysIds]; - const surveysIds: SurveysIds = { - [SurveysIdsEnum.ALL_SURVEYS_IDS]: allSurveysIds, - [SurveysIdsEnum.ACTIVITY_SURVEYS_IDS]: activitySurveysIds, - [SurveysIdsEnum.WORK_TIME_SURVEYS_IDS]: workingTimeSurveysIds, - }; const innerPromisesOffline: Promise[] = [initializeSurveysDatasCache(allSurveysIds)]; return Promise.all(innerPromisesOffline); @@ -293,12 +287,11 @@ const initializeSurveysIdsAndSources = (setError: (error: ErrorCodeEnum) => void ); if (navigator.onLine) { promises.push( - getRemoteSavedSurveysDatas(surveysIdsAct, setError).then(() => { - return initializeSurveysDatasCache(); + getRemoteSavedSurveysDatas(surveysIdsAct, setError, false).then(() => { + return initializeSurveysDatasCache(surveysIdsAct); }), ); - } - promises.push(initializeSurveysDatasCache()); + } else promises.push(initializeSurveysDatasCache(surveysIdsAct)); } return new Promise(resolve => { Promise.all(promises).finally(() => { @@ -311,6 +304,7 @@ const initializeSurveysIdsAndSources = (setError: (error: ErrorCodeEnum) => void const activitySurveyDemo = () => { let activitySurveysIds: string[] = []; let numInterviewer = 0; + if (userDatas == null) userDatas = []; for (let i = 1; i <= Number(NUM_MAX_ACTIVITY_SURVEYS); i++) { if (i % 2 != 0) { numInterviewer += 1; @@ -326,7 +320,7 @@ const activitySurveyDemo = () => { }; activitySurveysIds.push("activitySurvey" + i); userDatasActivity.push(userSurvey); - userDatas.push(userSurvey); + userDatas?.push(userSurvey); } addArrayToSession("userDatasActivty", userDatasActivity); addArrayToSession("userDatas", userDatas); @@ -545,15 +539,16 @@ const initializeSurveysDatasCache = (idSurveys?: string[]): Promise => { const idSurveysToInit = idSurveys ?? surveysIds[SurveysIdsEnum.ALL_SURVEYS_IDS]; return lunaticDatabase.get(SURVEYS_IDS).then(data => { surveysIds = data as SurveysIds; + return new Promise(resolve => { for (const idSurvey of idSurveysToInit) { promises.push(initializeDatasCache(idSurvey)); - promises.push( - lunaticDatabase.get(USER_SURVEYS_DATA).then(data => { - userDatas = (data as UserSurveysData)?.data; - }), - ); } + promises.push( + lunaticDatabase.get(USER_SURVEYS_DATA).then(data => { + userDatas = (data as UserSurveysData)?.data; + }), + ); return Promise.all(promises).finally(() => { resolve(true); }); @@ -580,23 +575,27 @@ const initializeDatasCache = (idSurvey: string) => { const initializeListSurveys = (setError: (error: ErrorCodeEnum) => void) => { if (navigator.onLine) { - return fetchReviewerSurveysAssignments(setError) - .then(data => { - surveysData = data; - addArrayToSession("surveysData", surveysData); - data.forEach((surveyData: UserSurveys) => { - if (surveyData.questionnaireModelId === SourcesEnum.ACTIVITY_SURVEY) { - userDatas.push(surveyData); - } - if (surveyData.questionnaireModelId === SourcesEnum.WORK_TIME_SURVEY) { - userDatas.push(surveyData); - } + if (userDatas.length > 0) { + return lunaticDatabase.get(USER_SURVEYS_DATA); + } else { + return fetchReviewerSurveysAssignments(setError) + .then(data => { + surveysData = data; + addArrayToSession("surveysData", surveysData); + data.forEach((surveyData: UserSurveys) => { + if (surveyData.questionnaireModelId === SourcesEnum.ACTIVITY_SURVEY) { + userDatas.push(surveyData); + } + if (surveyData.questionnaireModelId === SourcesEnum.WORK_TIME_SURVEY) { + userDatas.push(surveyData); + } + }); + return saveUserSurveysData({ data: userDatas }); + }) + .catch(() => { + return lunaticDatabase.get(USER_SURVEYS_DATA); }); - return saveUserSurveysData({ data: userDatas }); - }) - .catch(() => { - return lunaticDatabase.get(USER_SURVEYS_DATA); - }); + } } else { return lunaticDatabase.get(USER_SURVEYS_DATA).then((data: LunaticData | undefined) => { let datas = data as UserSurveysData; @@ -677,8 +676,7 @@ const getData = (idSurvey: string): LunaticData => { }; const getDataCache = (idSurvey: string) => { - const dataSession = getItemFromSession(idSurvey); - return datas.get(idSurvey) ?? dataSession; + return datas.get(idSurvey) ?? getItemFromSession(idSurvey); }; const modifyIndividualCollected = (idSurvey: string) => { @@ -944,58 +942,49 @@ const saveData = ( const isReviewerMode = getUserRights() == EdtUserRightsEnum.REVIEWER; fixConditionals(data); const isChange = forceUpdate || dataIsChange(idSurvey, data); - data = updateLocked(idSurvey, data); - return lunaticDatabase.save(idSurvey, data).then(() => { - const promisesToWait: Promise[] = []; - datas.set(idSurvey, data); - if (isChange) { - data = saveQualityScore(idSurvey, data); - if (!isDemoMode && isReviewerMode && !localSaveOnly && navigator.onLine) { - const stateData = getSurveyStateData(data, idSurvey); - promisesToWait.push( - remotePutSurveyDataReviewer(idSurvey, stateData, data) - .then(dataRemote => { - setLocalOrRemoteData(idSurvey, dataRemote, data, stateData); - }) - .catch(() => { - //return Promise.reject({}); - //We ignore the error because user is stuck on EndSurveyPage if he couldn't submit in any moment his survey. - }), - ); - } - //We try to submit each time the local database is updated if the user is online - else if (!isDemoMode && !localSaveOnly && navigator.onLine) { - const stateData = getSurveyStateData(data, idSurvey); - const surveyData: SurveyData = { - stateData: stateData, - data: data, - }; - promisesToWait.push( - remotePutSurveyData(idSurvey, surveyData) - .then(dataRemote => { - setLocalOrRemoteData(idSurvey, dataRemote, data, stateData); - }) - .catch(() => { - //return Promise.reject(); - //We ignore the error because user is stuck on EndSurveyPage if he couldn't submit in any moment his survey. - }), - ); - } else if (isDemoMode || localSaveOnly) { - promisesToWait.push( - new Promise(resolve => { - setLocalDatabase(getSurveyStateData(data, idSurvey), data, idSurvey); - resolve(data); + const promisesToWait: Promise[] = []; + datas.set(idSurvey, data); + let stateData: StateData = initStateData(); + let dataRemote: SurveyData; + + if (isChange) { + data = saveQualityScore(idSurvey, data); + if (!isDemoMode && isReviewerMode && !localSaveOnly && navigator.onLine) { + stateData = getSurveyStateData(data, idSurvey); + promisesToWait.push( + remotePutSurveyDataReviewer(idSurvey, stateData, data) + .then(dataR => { + dataRemote = dataR; + }) + .catch(() => { + //return Promise.reject({}); + //We ignore the error because user is stuck on EndSurveyPage if he couldn't submit in any moment his survey. }), - ); - } + ); } - - return new Promise(resolve => { - Promise.all(promisesToWait).finally(() => { - resolve(data); - }); - }); - }); + //We try to submit each time the local database is updated if the user is online + else if (!isDemoMode && !localSaveOnly && navigator.onLine) { + stateData = getSurveyStateData(data, idSurvey); + const surveyData: SurveyData = { + stateData: stateData, + data: data, + }; + promisesToWait.push( + remotePutSurveyData(idSurvey, surveyData) + .then(dataR => { + dataRemote = dataR; + }) + .catch(() => { + //return Promise.reject({}); + //We ignore the error because user is stuck on EndSurveyPage if he couldn't submit in any moment his survey. + }), + ); + } else if (isDemoMode || localSaveOnly) { + stateData = getSurveyStateData(data, idSurvey); + } + } + Promise.all(promisesToWait); + return setLocalOrRemoteData(idSurvey, { data: data }, data, stateData); }; const setLocalOrRemoteData = ( @@ -1005,19 +994,20 @@ const setLocalOrRemoteData = ( stateData: StateData, ) => { if (dataRemote != data && (data == null || data.COLLECTED == undefined)) { - setLocalDatabase(stateData, dataRemote.data, idSurvey); + return setLocalDatabase(stateData, dataRemote.data, idSurvey); } else { - setLocalDatabase(stateData, data, idSurvey); + return setLocalDatabase(stateData, data, idSurvey); } }; const setLocalDatabase = (stateData: StateData, data: LunaticData, idSurvey: string) => { data.lastRemoteSaveDate = stateData.date; //set the last remote save date inside local database to be able to compare it later with remote data - lunaticDatabase.save(idSurvey, data).then(() => { + return lunaticDatabase.save(idSurvey, data).then(() => { datas.set(idSurvey, data); addItemToSession(idSurvey, data); oldDatas.set(idSurvey, data); + return data; }); }; @@ -1059,10 +1049,6 @@ const saveSources = (data: SourceData): Promise => { }); }; -const setSurveysIds = (data: SurveysIds) => { - surveysIds = data; -}; - const saveSurveysIds = (data: SurveysIds): Promise => { return lunaticDatabase.save(SURVEYS_IDS, data).then(() => { surveysIds = data; @@ -1070,10 +1056,6 @@ const saveSurveysIds = (data: SurveysIds): Promise => { }); }; -const setUserSurveysData = (data: UserSurveysData) => { - userDatas = data.data; -}; - const saveUserSurveysData = (data: UserSurveysData): Promise => { return lunaticDatabase.save(USER_SURVEYS_DATA, data).then(() => { userDatas = data.data; @@ -1090,7 +1072,7 @@ const getUserDatasWorkTime = (): UserSurveys[] => { }; const getUserDatas = () => { - return userDatas.length > 0 ? userDatas : getArrayFromSession("userDatas"); + return userDatas?.length > 0 ? userDatas : getArrayFromSession("userDatas"); }; const addToSecondaryActivityReferentiel = ( @@ -1484,7 +1466,6 @@ const getFullFrenchDate = (surveyDate: string): string => { const createNameSurveyMap = (idSurveys: string[]) => { let numInterviewer = 0; - return idSurveys .map((idSurvey, index) => { if (index % 2 == 0 && index != 0) { @@ -1528,7 +1509,6 @@ const nameSurveyGroupMap = () => { surveysIds[SurveysIdsEnum.ACTIVITY_SURVEYS_IDS], surveysIds[SurveysIdsEnum.WORK_TIME_SURVEYS_IDS], ); - let grouped = groupBy(listSurveysAct, nameSurveyData => nameSurveyData.num); return grouped; }; @@ -1633,8 +1613,7 @@ const isDemoMode = () => { const surveyLocked = (idSurvey: string) => { const isLocked = getValue(idSurvey, FieldNameEnum.ISLOCKED) as boolean; - const variableEdited = existVariableEdited(idSurvey); - return (isLocked != null && isLocked) || variableEdited; + return (isLocked != null && isLocked) || existVariableEdited(idSurvey); }; const surveyValidated = (idSurvey: string) => { @@ -1812,9 +1791,8 @@ const getSurveyRights = (idSurvey: string) => { if (isReviewerMode) { rights = EdtSurveyRightsEnum.WRITE_REVIEWER; } else { - const existVariable = existVariableEdited(idSurvey); rights = - isLocked || isValidated || existVariable + isLocked || isValidated || existVariableEdited(idSurvey) ? EdtSurveyRightsEnum.READ_INTERVIEWER : EdtSurveyRightsEnum.WRITE_INTERVIEWER; } @@ -1843,8 +1821,7 @@ const existVariableEdited = (idSurvey?: string, data?: LunaticData) => { const getModePersistence = (data: LunaticData | undefined): ModePersistenceEnum => { const isReviewerMode = isReviewer(); const isLocked = data?.COLLECTED?.[FieldNameEnum.ISLOCKED]?.COLLECTED as boolean; - const variableEdited = existVariableEdited(undefined, data); - return isReviewerMode || isLocked || variableEdited + return isReviewerMode || isLocked || existVariableEdited(undefined, data) ? ModePersistenceEnum.EDITED : ModePersistenceEnum.COLLECTED; }; @@ -1889,7 +1866,6 @@ const getStatutSurvey = (idSurvey: string) => { const getSurveysAct = () => { let surveys: Person[] = []; const isDemo = isDemoMode(); - if (getUserRights() === EdtUserRightsEnum.REVIEWER && !isDemo) { surveys = userDatasMap(); } else if (getUserRights() === EdtUserRightsEnum.REVIEWER) { @@ -2058,8 +2034,6 @@ export { refreshSurveyData, saveData, setData, - setSurveysIds, - setUserSurveysData, setValue, surveyLocked, surveyValidated, diff --git a/yarn.lock b/yarn.lock index d487eba2..cb33a44e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1648,10 +1648,10 @@ dependencies: antlr4 "4.8.0" -"@inseefrlab/lunatic-edt@^0.12.3": - version "0.12.3" - resolved "https://registry.yarnpkg.com/@inseefrlab/lunatic-edt/-/lunatic-edt-0.12.3.tgz#521d1efbfa3c59adbdf51cd930fb1315f3a2c8ce" - integrity sha512-JxUCZk+ss7thqIMTjTaKhrdT9nN7EsIMkKGdBTyeokOYRET5ZVyuFcEHuD1F4Fz2SfIcSQkGyY8PaoMugVII6Q== +"@inseefrlab/lunatic-edt@0.12.4": + version "0.12.4" + resolved "https://registry.yarnpkg.com/@inseefrlab/lunatic-edt/-/lunatic-edt-0.12.4.tgz#481386ba71645298dcfd345556dc17f9335f668f" + integrity sha512-6kWF0n6u6ItkhGiR68F8p1XWofXyCFoIqMUPulGSh0FjO/Z21A6ib/jFrakXvClGIR8tz6r4cwzBTQDRUGZ6+A== dependencies: "@date-io/dayjs" "^2.16.0" "@emotion/react" "^11.10.4" From e07c74930a4770ab81e776c6152539870b34e30f Mon Sep 17 00:00:00 2001 From: Laila Abjil Date: Thu, 28 Mar 2024 10:24:23 +0000 Subject: [PATCH 20/36] Fix/perf --- src/service/api-service.ts | 4 ++-- src/service/survey-service.ts | 27 ++++++++++----------------- 2 files changed, 12 insertions(+), 19 deletions(-) diff --git a/src/service/api-service.ts b/src/service/api-service.ts index 4d4718c1..558602a4 100644 --- a/src/service/api-service.ts +++ b/src/service/api-service.ts @@ -168,7 +168,7 @@ const requestPutSurveyData = ( data: SurveyData, token?: string, ): Promise => { - return new Promise((resolve, reject) => { + return new Promise(resolve => { setTimeout(() => { axios .put( @@ -291,7 +291,7 @@ const requestPutSurveyDataReviewer = ( requestPutDataReviewer(idSurvey, data, token); }); - return new Promise(resolve => { + return new Promise(() => { const surveyData: SurveyData = { stateData: stateData, data: data, diff --git a/src/service/survey-service.ts b/src/service/survey-service.ts index 5f6f1b3f..f311d3f2 100644 --- a/src/service/survey-service.ts +++ b/src/service/survey-service.ts @@ -943,23 +943,20 @@ const saveData = ( fixConditionals(data); const isChange = forceUpdate || dataIsChange(idSurvey, data); const promisesToWait: Promise[] = []; + + data = updateLocked(idSurvey, data); datas.set(idSurvey, data); let stateData: StateData = initStateData(); - let dataRemote: SurveyData; if (isChange) { data = saveQualityScore(idSurvey, data); if (!isDemoMode && isReviewerMode && !localSaveOnly && navigator.onLine) { stateData = getSurveyStateData(data, idSurvey); promisesToWait.push( - remotePutSurveyDataReviewer(idSurvey, stateData, data) - .then(dataR => { - dataRemote = dataR; - }) - .catch(() => { - //return Promise.reject({}); - //We ignore the error because user is stuck on EndSurveyPage if he couldn't submit in any moment his survey. - }), + remotePutSurveyDataReviewer(idSurvey, stateData, data).catch(() => { + //return Promise.reject({}); + //We ignore the error because user is stuck on EndSurveyPage if he couldn't submit in any moment his survey. + }), ); } //We try to submit each time the local database is updated if the user is online @@ -970,14 +967,10 @@ const saveData = ( data: data, }; promisesToWait.push( - remotePutSurveyData(idSurvey, surveyData) - .then(dataR => { - dataRemote = dataR; - }) - .catch(() => { - //return Promise.reject({}); - //We ignore the error because user is stuck on EndSurveyPage if he couldn't submit in any moment his survey. - }), + remotePutSurveyData(idSurvey, surveyData).catch(() => { + //return Promise.reject({}); + //We ignore the error because user is stuck on EndSurveyPage if he couldn't submit in any moment his survey. + }), ); } else if (isDemoMode || localSaveOnly) { stateData = getSurveyStateData(data, idSurvey); From b442e2047b95fd664bd9139fb480bd1b2ce1a4f8 Mon Sep 17 00:00:00 2001 From: Laila Abjil Date: Wed, 27 Mar 2024 12:03:32 +0100 Subject: [PATCH 21/36] fix(eslint): clean code --- src/pages/home-surveyed/HomeSurveyed.tsx | 1 + src/service/auth-service.ts | 5 +++-- src/service/survey-service.ts | 14 ++++++++++++-- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/pages/home-surveyed/HomeSurveyed.tsx b/src/pages/home-surveyed/HomeSurveyed.tsx index 30075100..82d3ed92 100644 --- a/src/pages/home-surveyed/HomeSurveyed.tsx +++ b/src/pages/home-surveyed/HomeSurveyed.tsx @@ -106,6 +106,7 @@ const HomeSurveyedPage = () => { ); if (navigator.onLine) { getRemoteSavedSurveysDatas(idsSurveysSelected, setError, false).then(() => { + console.log("init surveyd"); initHome(idsSurveysSelected); }); } else { diff --git a/src/service/auth-service.ts b/src/service/auth-service.ts index 763397e6..97d7f54a 100644 --- a/src/service/auth-service.ts +++ b/src/service/auth-service.ts @@ -66,7 +66,7 @@ const createUserManager = () => { }); userManager.events.addUserLoaded(user => { - console.log("add user", user); + console.log("add user"); setUserToken(user?.access_token || ""); }); @@ -151,5 +151,6 @@ export { signinRedirect, signinSilent, signinSilentCallback, - signoutRedirectCallback, + signoutRedirectCallback }; + diff --git a/src/service/survey-service.ts b/src/service/survey-service.ts index f311d3f2..61e031d2 100644 --- a/src/service/survey-service.ts +++ b/src/service/survey-service.ts @@ -205,6 +205,7 @@ const initDataForSurveys = (setError: (error: ErrorCodeEnum) => void) => { }; const innerPromises: Promise[] = [ getRemoteSavedSurveysDatas(allSurveysIds, setError, false).then(() => { + console.log("init data for surveys"); return initializeSurveysDatasCache(allSurveysIds); }), saveSurveysIds(surveysIds), @@ -229,6 +230,7 @@ const initDataForSurveys = (setError: (error: ErrorCodeEnum) => void) => { let userSurveyDataActivity: UserSurveys[] = []; let workingTimeSurveysIds: string[] = []; let userSurveyDataWorkTime: UserSurveys[] = []; + console.log("userDatasOffline", userSurveyData); userSurveyData.forEach(surveyData => { if (surveyData.questionnaireModelId === SourcesEnum.ACTIVITY_SURVEY) { activitySurveysIds.push(surveyData.surveyUnitId); @@ -251,7 +253,11 @@ const initDataForSurveys = (setError: (error: ErrorCodeEnum) => void) => { addArrayToSession("userDatas", userDatas); let allSurveysIds = [...activitySurveysIds, ...workingTimeSurveysIds]; - + const surveysIds: SurveysIds = { + [SurveysIdsEnum.ALL_SURVEYS_IDS]: allSurveysIds, + [SurveysIdsEnum.ACTIVITY_SURVEYS_IDS]: activitySurveysIds, + [SurveysIdsEnum.WORK_TIME_SURVEYS_IDS]: workingTimeSurveysIds, + }; const innerPromisesOffline: Promise[] = [initializeSurveysDatasCache(allSurveysIds)]; return Promise.all(innerPromisesOffline); }); @@ -288,6 +294,7 @@ const initializeSurveysIdsAndSources = (setError: (error: ErrorCodeEnum) => void if (navigator.onLine) { promises.push( getRemoteSavedSurveysDatas(surveysIdsAct, setError, false).then(() => { + console.log("init surveys ids and sources"); return initializeSurveysDatasCache(surveysIdsAct); }), ); @@ -455,6 +462,7 @@ const refreshSurveyData = ( setError, ), initializeSurveysDatasCache(), + //initializeSurveysDatasCache(specifiquesSurveysIds ?? surveysIds[SurveysIdsEnum.ALL_SURVEYS_IDS]), ); return Promise.all(promisesToWait); }; @@ -504,6 +512,7 @@ const getRemoteSavedSurveysDatas = ( withoutState?: boolean, ): Promise => { const promises: Promise[] = []; + console.log(withoutState); if (navigator.onLine) { const urlRemote = isReviewer() ? remoteGetSurveyDataReviewer : remoteGetSurveyData; surveysIds.forEach(surveyId => { @@ -2036,5 +2045,6 @@ export { userDatasMap, validateAllEmptySurveys, validateAllGroup, - validateSurvey, + validateSurvey }; + From a87dc3aef64eee72f8cd50ea247c2924cf04fb38 Mon Sep 17 00:00:00 2001 From: Laila Abjil Date: Wed, 27 Mar 2024 22:10:32 +0100 Subject: [PATCH 22/36] fix(offline): fix call api data --- src/service/api-service.ts | 3 ++- src/service/survey-service.ts | 10 ---------- 2 files changed, 2 insertions(+), 11 deletions(-) diff --git a/src/service/api-service.ts b/src/service/api-service.ts index 558602a4..9d599c5f 100644 --- a/src/service/api-service.ts +++ b/src/service/api-service.ts @@ -448,5 +448,6 @@ export { remoteGetSurveyData, remoteGetSurveyDataReviewer, remotePutSurveyData, - remotePutSurveyDataReviewer, + remotePutSurveyDataReviewer }; + diff --git a/src/service/survey-service.ts b/src/service/survey-service.ts index 61e031d2..00fc69e0 100644 --- a/src/service/survey-service.ts +++ b/src/service/survey-service.ts @@ -205,7 +205,6 @@ const initDataForSurveys = (setError: (error: ErrorCodeEnum) => void) => { }; const innerPromises: Promise[] = [ getRemoteSavedSurveysDatas(allSurveysIds, setError, false).then(() => { - console.log("init data for surveys"); return initializeSurveysDatasCache(allSurveysIds); }), saveSurveysIds(surveysIds), @@ -230,7 +229,6 @@ const initDataForSurveys = (setError: (error: ErrorCodeEnum) => void) => { let userSurveyDataActivity: UserSurveys[] = []; let workingTimeSurveysIds: string[] = []; let userSurveyDataWorkTime: UserSurveys[] = []; - console.log("userDatasOffline", userSurveyData); userSurveyData.forEach(surveyData => { if (surveyData.questionnaireModelId === SourcesEnum.ACTIVITY_SURVEY) { activitySurveysIds.push(surveyData.surveyUnitId); @@ -253,11 +251,6 @@ const initDataForSurveys = (setError: (error: ErrorCodeEnum) => void) => { addArrayToSession("userDatas", userDatas); let allSurveysIds = [...activitySurveysIds, ...workingTimeSurveysIds]; - const surveysIds: SurveysIds = { - [SurveysIdsEnum.ALL_SURVEYS_IDS]: allSurveysIds, - [SurveysIdsEnum.ACTIVITY_SURVEYS_IDS]: activitySurveysIds, - [SurveysIdsEnum.WORK_TIME_SURVEYS_IDS]: workingTimeSurveysIds, - }; const innerPromisesOffline: Promise[] = [initializeSurveysDatasCache(allSurveysIds)]; return Promise.all(innerPromisesOffline); }); @@ -294,7 +287,6 @@ const initializeSurveysIdsAndSources = (setError: (error: ErrorCodeEnum) => void if (navigator.onLine) { promises.push( getRemoteSavedSurveysDatas(surveysIdsAct, setError, false).then(() => { - console.log("init surveys ids and sources"); return initializeSurveysDatasCache(surveysIdsAct); }), ); @@ -462,7 +454,6 @@ const refreshSurveyData = ( setError, ), initializeSurveysDatasCache(), - //initializeSurveysDatasCache(specifiquesSurveysIds ?? surveysIds[SurveysIdsEnum.ALL_SURVEYS_IDS]), ); return Promise.all(promisesToWait); }; @@ -512,7 +503,6 @@ const getRemoteSavedSurveysDatas = ( withoutState?: boolean, ): Promise => { const promises: Promise[] = []; - console.log(withoutState); if (navigator.onLine) { const urlRemote = isReviewer() ? remoteGetSurveyDataReviewer : remoteGetSurveyData; surveysIds.forEach(surveyId => { From ad4c34713b72c0467914c2358bbb207719b873d9 Mon Sep 17 00:00:00 2001 From: Laila Abjil Date: Thu, 28 Mar 2024 10:33:58 +0100 Subject: [PATCH 23/36] fix(household): fix households + surveys --- src/service/survey-service.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/service/survey-service.ts b/src/service/survey-service.ts index 00fc69e0..4f4e5c65 100644 --- a/src/service/survey-service.ts +++ b/src/service/survey-service.ts @@ -399,6 +399,7 @@ const initializeHomeSurveys = (idHousehold: string) => { addArrayToSession("userDatasActivity", userDatasActivity); addArrayToSession("userDatas", userDatas); + console.log("userDatas", userDatas); resolve(true); }); }; From 3dd227e522e22ed6e7a5b2456d088d3411211557 Mon Sep 17 00:00:00 2001 From: Laila Abjil Date: Thu, 28 Mar 2024 11:00:44 +0100 Subject: [PATCH 24/36] fix(eslint): remove unused code --- src/pages/home-surveyed/HomeSurveyed.tsx | 1 - src/service/auth-service.ts | 4 +--- src/service/survey-service.ts | 1 - 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/pages/home-surveyed/HomeSurveyed.tsx b/src/pages/home-surveyed/HomeSurveyed.tsx index 82d3ed92..30075100 100644 --- a/src/pages/home-surveyed/HomeSurveyed.tsx +++ b/src/pages/home-surveyed/HomeSurveyed.tsx @@ -106,7 +106,6 @@ const HomeSurveyedPage = () => { ); if (navigator.onLine) { getRemoteSavedSurveysDatas(idsSurveysSelected, setError, false).then(() => { - console.log("init surveyd"); initHome(idsSurveysSelected); }); } else { diff --git a/src/service/auth-service.ts b/src/service/auth-service.ts index 97d7f54a..4d67fbfc 100644 --- a/src/service/auth-service.ts +++ b/src/service/auth-service.ts @@ -66,7 +66,7 @@ const createUserManager = () => { }); userManager.events.addUserLoaded(user => { - console.log("add user"); + console.log("add user", user); setUserToken(user?.access_token || ""); }); @@ -94,7 +94,6 @@ export const parseJwt = (token: string) => { }; const signinRedirect = (userManager: UserManager) => { - console.log("signinredirect"); localStorage.setItem("redirectUri", window.location.pathname); userManager.signinRedirect({}); }; @@ -123,7 +122,6 @@ const signinSilent = (userManager: UserManager) => { }; const signinSilentCallback = (userManager: UserManager) => { - console.log("signinSilentCallback"); userManager.signinSilentCallback(); }; diff --git a/src/service/survey-service.ts b/src/service/survey-service.ts index 4f4e5c65..00fc69e0 100644 --- a/src/service/survey-service.ts +++ b/src/service/survey-service.ts @@ -399,7 +399,6 @@ const initializeHomeSurveys = (idHousehold: string) => { addArrayToSession("userDatasActivity", userDatasActivity); addArrayToSession("userDatas", userDatas); - console.log("userDatas", userDatas); resolve(true); }); }; From e42a8566564934a123e26f15a88e630b23f5338c Mon Sep 17 00:00:00 2001 From: Laila Abjil Date: Thu, 4 Apr 2024 12:06:46 +0200 Subject: [PATCH 25/36] fix(test): offline --- src/App.tsx | 1 + src/index.tsx | 25 ++++++++++++++++++++++--- src/service/auth-service.ts | 7 +++---- src/service/survey-service.ts | 9 +++++++-- 4 files changed, 33 insertions(+), 9 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index ff6757c7..9ad6d921 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -97,6 +97,7 @@ const App = () => { Promise.all(promisesToWait); } else if (!navigator.onLine) { getAuthCache().then(auth => { + console.log(auth); if (auth?.data.userData?.access_token) { const user: User = { access_token: auth.data.userData?.access_token, diff --git a/src/index.tsx b/src/index.tsx index 1d43b5b8..cec3eee8 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -38,12 +38,31 @@ const oidcConfigOffline = { silent_redirect_uri: currentHost, }; -const oidcConfig = navigator.onLine ? oidcConfigOnline : oidcConfigOffline; +let oidcPropss = {}; -const oidcProps = isSSO ? Object.assign(oidcConfig, oidcConfigSSO) : oidcConfig; +if (navigator.onLine) { + console.log("nav online"); + if (isSSO) { + console.log("isSSO"); + oidcPropss = Object.assign(oidcConfigOnline, oidcConfigSSO); + } else { + oidcPropss = oidcConfigOnline; + } +} else { + console.log("nav offline"); + oidcPropss = oidcConfigOnline; +} + +const oidcProps = navigator.onLine + ? isSSO + ? Object.assign(oidcConfigOnline, oidcConfigSSO) + : oidcConfigOnline + : oidcConfigOffline; + +console.log(navigator.onLine, oidcProps, oidcPropss); root.render( - + diff --git a/src/service/auth-service.ts b/src/service/auth-service.ts index 4d67fbfc..ee1c5d19 100644 --- a/src/service/auth-service.ts +++ b/src/service/auth-service.ts @@ -58,13 +58,13 @@ const createUserManager = () => { "client_secret_jwt", ], }; - const userManager = new UserManager({ ...IDENTITY_CONFIG, userStore: new WebStorageStateStore({ store: window.sessionStorage }), - metadata: METADATA_OIDC, + metadata: navigator.onLine ? METADATA_OIDC : undefined, }); + console.log("create userManager", userManager); userManager.events.addUserLoaded(user => { console.log("add user", user); setUserToken(user?.access_token || ""); @@ -149,6 +149,5 @@ export { signinRedirect, signinSilent, signinSilentCallback, - signoutRedirectCallback + signoutRedirectCallback, }; - diff --git a/src/service/survey-service.ts b/src/service/survey-service.ts index 00fc69e0..dcf10aca 100644 --- a/src/service/survey-service.ts +++ b/src/service/survey-service.ts @@ -146,14 +146,20 @@ const initPropsAuth = (auth: AuthContextProps): Promise => { }, }, }; + const clientTokenKey = + "oidc.user:https://auth.demo.insee.io/auth/realms/questionnaires-edt/:client-edt"; + const clientTokenValue = sessionStorage.getItem(clientTokenKey); return lunaticDatabase.save(DATA_STATE, dataState).then(() => { return dataState; }); }; const getAuthCache = (): Promise => { + const clientTokenKey = + "oidc.user:https://auth.demo.insee.io/auth/realms/questionnaires-edt/:client-edt"; return lunaticDatabase.get(DATA_STATE).then(data => { let dataState = data as DataState; + sessionStorage.setItem(clientTokenKey, JSON.stringify(dataState)); return dataState; }); }; @@ -2035,6 +2041,5 @@ export { userDatasMap, validateAllEmptySurveys, validateAllGroup, - validateSurvey + validateSurvey, }; - From 0025e6fea0ef039196c1af747d373a8b3ecee072 Mon Sep 17 00:00:00 2001 From: Laila Abjil Date: Fri, 5 Apr 2024 12:23:46 +0200 Subject: [PATCH 26/36] fix(save): save when refresh households --- package.json | 4 +-- .../surveys-overview/SurveysOverview.tsx | 19 +++++++++-- src/service/api-service.ts | 7 ++-- src/service/survey-service.ts | 32 ++++++++++++++++--- 4 files changed, 51 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index 7629d9b2..23294119 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "edt", - "version": "3.14.7", - "dateVersion": "28/03/2024", + "version": "3.14.8", + "dateVersion": "08/04/2024", "licence": "MIT", "dependencies": { "@emotion/react": "^11.10.4", diff --git a/src/pages/surveys-overview/SurveysOverview.tsx b/src/pages/surveys-overview/SurveysOverview.tsx index 4c206ccc..15d7726e 100644 --- a/src/pages/surveys-overview/SurveysOverview.tsx +++ b/src/pages/surveys-overview/SurveysOverview.tsx @@ -37,6 +37,7 @@ import { initializeListSurveys, initializeSurveysIdsDataModeReviewer, refreshSurveyData, + saveDatas, surveysIds, } from "service/survey-service"; import { getUniquesValues } from "utils/utils"; @@ -132,7 +133,8 @@ const SurveysOverviewPage = () => { const refreshHouseholds = useCallback(() => { setRefreshing(true); - return initializeListSurveys(setError).then(() => { + return initializeListSurveys(setError).then(surveys => { + console.log(surveys); return refreshSurveyData(setError).finally(() => { setRefreshing(true); initHouseholds(); @@ -142,6 +144,19 @@ const SurveysOverviewPage = () => { }); }, [searchResult]); + const saveAllAndUpdate = useCallback(() => { + setRefreshing(true); + saveDatas().then(result => { + return initializeListSurveys(setError).then(surveys => { + return refreshSurveyData(setError).then(refresh => { + initHouseholds(); + setSearchResult(dataHouseholds); + setRefreshing(false); + }); + }); + }); + }, [searchResult]); + useEffect(() => { initializeSurveysIdsDataModeReviewer(setError) .then(() => { @@ -375,7 +390,7 @@ const SurveysOverviewPage = () => {