Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions src/components/auth/AuthProvider.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,9 @@ import {
OidcProvider,
TokenRenewMode,
} from '@axa-fr/react-oidc';

import { Layout as LayoutSkeleton } from '../skeleton/Layout';
import { Authenticating } from '../Oidc/Authenticating';
import { publicGetRequest } from '../../lib/commons/axios-utils';
import { getRequest } from '../../lib/commons/axios-utils';
import { useAsyncEffect } from '../../hooks/useAsyncEffect';
import { CallbackSuccess } from '../Oidc/CallbackSuccess';
import { AuthenticatingError } from '../Oidc/AuthenticatingError';
Expand All @@ -23,7 +22,7 @@ type AuthProviderProps = {
};

function fetchConfig(): Promise<OidcConfiguration> {
return publicGetRequest<OidcConfiguration>('/configuration.json');
return getRequest<OidcConfiguration>('/configuration.json');
}

export function AuthProvider({ children }: AuthProviderProps) {
Expand Down
41 changes: 16 additions & 25 deletions src/components/loadSourceData/LoadFromApi.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { PropsWithChildren, useCallback } from 'react';
import { useOidcAccessToken } from '../../lib/oidc';
import { surveyApi } from '../../lib/surveys/surveysApi';
import { DataVariables, StateData } from '../../typeStromae/type';

Expand All @@ -15,8 +14,6 @@ export function LoadFromApi({
unit,
children,
}: PropsWithChildren<LoadFromApiProps>) {
const { accessToken } = useOidcAccessToken();

const getMetadata = useCallback(async () => {
if (survey) {
return surveyApi.getMetadataSurvey(survey);
Expand All @@ -25,38 +22,32 @@ export function LoadFromApi({
}, [survey]);

const getSurvey = useCallback(async () => {
if (survey && accessToken) {
return surveyApi.getSurvey(survey, accessToken);
if (survey) {
return surveyApi.getSurvey(survey);
}
return undefined;
}, [survey, accessToken]);
}, [survey]);

const getSurveyUnitData = useCallback(async () => {
if (accessToken && unit) {
return surveyApi.getSurveyUnitData(unit, accessToken);
if (unit) {
return surveyApi.getSurveyUnitData(unit);
}
return undefined;
}, [unit, accessToken]);
}, [unit]);

const getReferentiel = useCallback(
async (name: string) => {
return surveyApi.getNomenclature(name, accessToken);
},
[accessToken]
);
const getReferentiel = useCallback(async (name: string) => {
return surveyApi.getNomenclature(name);
}, []);

const getDepositProof = useCallback(
async (unit: string) => {
return surveyApi.getDepositiProof(unit, accessToken);
},
[accessToken]
);
const getDepositProof = useCallback(async (unit: string) => {
return surveyApi.getDepositiProof(unit);
}, []);

const putSurveyUnitStateData = useCallback(
async (state?: StateData) => {
try {
if (state && unit) {
await surveyApi.putSurveyUnitStateData(state, unit, accessToken);
await surveyApi.putSurveyUnitStateData(state, unit);
}
} catch (e) {
// eslint-disable-next-line no-console
Expand All @@ -65,15 +56,15 @@ export function LoadFromApi({
}
return true;
},
[accessToken, unit]
[unit]
);

const putSurveyUnitData = useCallback(
async (data?: DataVariables) => {
try {
if (data) {
if (unit) {
await surveyApi.putSurveyUnitData(data, unit, accessToken);
await surveyApi.putSurveyUnitData(data, unit);
}
}
} catch (e) {
Expand All @@ -83,7 +74,7 @@ export function LoadFromApi({
}
return true;
},
[accessToken, unit]
[unit]
);

return (
Expand Down
10 changes: 5 additions & 5 deletions src/components/loadSourceData/LoadFromUrl.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { PropsWithChildren, useCallback } from 'react';
import type { LunaticSource } from '../../typeLunatic/type-source';
import { publicGetRequest } from '../../lib/commons/axios-utils';
import { getRequest } from '../../lib/commons/axios-utils';
import { SurveyUnitData, MetadataSurvey } from '../../typeStromae/type';
import { loadSourceDataContext } from './LoadSourceDataContext';

Expand Down Expand Up @@ -31,19 +31,19 @@ export function LoadFromUrl({
}: PropsWithChildren<LoadFromUrlProps>) {
const getMetadata = useCallback(async () => {
if (urlMetadata) {
return publicGetRequest<MetadataSurvey>(urlMetadata);
return getRequest<MetadataSurvey>(urlMetadata);
}
return undefined;
}, [urlMetadata]);
const getSurvey = useCallback(async () => {
if (urlSource) {
return publicGetRequest<LunaticSource>(urlSource);
return getRequest<LunaticSource>(urlSource);
}
return undefined;
}, [urlSource]);
const getSurveyUnitData = useCallback(async () => {
if (urlData) {
return publicGetRequest<SurveyUnitData>(urlData);
return getRequest<SurveyUnitData>(urlData);
}
return undefined;
}, [urlData]);
Expand All @@ -52,7 +52,7 @@ export function LoadFromUrl({
async (name: string): Promise<Array<unknown>> => {
if (name in urlNomenclatures) {
const url = urlNomenclatures[name];
return publicGetRequest<Array<unknown>>(url);
return getRequest<Array<unknown>>(url);
}

return [];
Expand Down
40 changes: 5 additions & 35 deletions src/lib/commons/axios-utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,18 +30,11 @@ function errorHandler(error: AxiosError) {
}
}

function jwtHeaders(token: string, contentType?: string) {
return {
Authorization: `Bearer ${token}`,
'Content-type': contentType ?? 'application/json; charset=utf-8',
};
}

function publicHeader() {
return { 'Content-type': 'application/json; charset=utf-8' };
}

export async function publicGetRequest<T>(url: string) {
export async function getRequest<T>(url: string) {
try {
const headers = publicHeader();
const { data } = await axios<T>({ method: HTTP_VERBS.get, url, headers });
Expand All @@ -52,28 +45,9 @@ export async function publicGetRequest<T>(url: string) {
}
}

export async function authenticatedGetRequest<T>(
url: string,
token: string,
contentType?: string
) {
try {
const headers = jwtHeaders(token, contentType);
const { data } = await axios<T>({
method: HTTP_VERBS.get,
url,
headers,
});
return data;
} catch (error: AxiosError | any) {
errorHandler(error);
throw new Error(`Request fail : ${url}`);
}
}

export async function authenticatedGetBlob(url: string, token: string) {
export async function getBlob(url: string) {
try {
const headers = jwtHeaders(token, 'application/pdf');
const headers = publicHeader();
const { data } = await axios<BlobPart>({
method: HTTP_VERBS.get,
url,
Expand All @@ -87,13 +61,9 @@ export async function authenticatedGetBlob(url: string, token: string) {
}
}

export async function authenticatedPutRequest<T>(
url: string,
data: T,
token: string
) {
export async function putRequest<T>(url: string, data: T) {
try {
const headers = jwtHeaders(token);
const headers = publicHeader();
await axios<T>({ method: HTTP_VERBS.put, url, headers, data });
} catch (error: AxiosError | any) {
errorHandler(error);
Expand Down
9 changes: 4 additions & 5 deletions src/lib/surveys/getDepositProof.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import { authenticatedGetBlob } from '../commons/axios-utils';
import { getBlob } from '../commons/axios-utils';
import { depositProof } from './api';

export const getDepositProof =
(baseUrl: string) => async (unit: string, token: string) => {
return authenticatedGetBlob(depositProof(baseUrl, unit), token);
};
export const getDepositProof = (baseUrl: string) => async (unit: string) => {
return getBlob(depositProof(baseUrl, unit));
};
4 changes: 2 additions & 2 deletions src/lib/surveys/getMetadataSurvey.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import moize from 'moize';
import { MetadataSurvey } from '../../typeStromae/type';
import { publicGetRequest } from '../commons/axios-utils';
import { getRequest } from '../commons/axios-utils';

import * as API from './api';

export const getMetadataSurvey = (BASE_URL: string) =>
moize(async (survey: string): Promise<MetadataSurvey> => {
const url = API.surveyMetada(BASE_URL, survey);
return publicGetRequest<MetadataSurvey>(url);
return getRequest<MetadataSurvey>(url);
});
9 changes: 3 additions & 6 deletions src/lib/surveys/getNomenclature.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
import { authenticatedGetRequest } from '../commons/axios-utils';
import { getRequest } from '../commons/axios-utils';
import { nomenclature } from './api';

export const getNomenclature =
(BASE_URL: string) =>
(name: string, token: string): Promise<Array<unknown>> => {
return authenticatedGetRequest<Array<unknown>>(
nomenclature(BASE_URL, name),
token
);
(name: string): Promise<Array<unknown>> => {
return getRequest<Array<unknown>>(nomenclature(BASE_URL, name));
};
9 changes: 3 additions & 6 deletions src/lib/surveys/getRequiredNomenclatures.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
import { authenticatedGetRequest } from '../commons/axios-utils';
import { getRequest } from '../commons/axios-utils';

import { requiredNomenclature } from './api';

export const getRequiredNomenclatures =
(BASE_URL: string) =>
(survey: string, token: string): Promise<Array<string>> => {
return authenticatedGetRequest<Array<string>>(
requiredNomenclature(BASE_URL, survey),
token
);
(survey: string): Promise<Array<string>> => {
return getRequest<Array<string>>(requiredNomenclature(BASE_URL, survey));
};
9 changes: 3 additions & 6 deletions src/lib/surveys/getSurvey.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { authenticatedGetRequest } from '../commons/axios-utils';
import { getRequest } from '../commons/axios-utils';
import { LunaticSource } from '../../typeLunatic/type-source';

import { surveySource } from './api';
Expand All @@ -8,9 +8,6 @@ import { surveySource } from './api';
*/
export const getSurvey =
(BASE_URL: string) =>
(survey: string, token: string): Promise<LunaticSource> => {
return authenticatedGetRequest<LunaticSource>(
surveySource(BASE_URL, survey),
token
);
(survey: string): Promise<LunaticSource> => {
return getRequest<LunaticSource>(surveySource(BASE_URL, survey));
};
10 changes: 3 additions & 7 deletions src/lib/surveys/getSurveyUnit.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,12 @@
import type { SurveyUnitData } from '../../typeStromae/type';
import { authenticatedGetRequest } from '../commons/axios-utils';

import { getRequest } from '../commons/axios-utils';
import { surveyUnit } from './api';

export const getSurveyUnitData =
(BASE_URL: string) =>
async (unit: string, token: string): Promise<SurveyUnitData> => {
async (unit: string): Promise<SurveyUnitData> => {
const { data, stateData, personalization } =
await authenticatedGetRequest<SurveyUnitData>(
surveyUnit(BASE_URL, unit),
token
);
await getRequest<SurveyUnitData>(surveyUnit(BASE_URL, unit));

return { data, stateData, personalization };
};
10 changes: 3 additions & 7 deletions src/lib/surveys/putSurveyUnitData.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,9 @@
import { DataVariables } from '../../typeStromae/type';
import { authenticatedPutRequest } from '../commons/axios-utils';
import { putRequest } from '../commons/axios-utils';

import { surveyUnitDataUrl } from './api';

export const putSurveyUnitData =
(domain: string) => (data: DataVariables, unit: string, token: string) => {
return authenticatedPutRequest<DataVariables>(
surveyUnitDataUrl(domain, unit),
data,
token
);
(domain: string) => (data: DataVariables, unit: string) => {
return putRequest<DataVariables>(surveyUnitDataUrl(domain, unit), data);
};
10 changes: 3 additions & 7 deletions src/lib/surveys/putSurveyUnitStateData.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,9 @@
import { StateData } from '../../typeStromae/type';
import { authenticatedPutRequest } from '../commons/axios-utils';
import { putRequest } from '../commons/axios-utils';

import { surveyUnitStateDataUrl } from './api';

export const putSurveyUnitStateData =
(domain: string) => async (state: StateData, unit: string, token: string) => {
await authenticatedPutRequest<StateData>(
surveyUnitStateDataUrl(domain, unit),
state,
token
);
(domain: string) => async (state: StateData, unit: string) => {
await putRequest<StateData>(surveyUnitStateDataUrl(domain, unit), state);
};
25 changes: 7 additions & 18 deletions src/lib/surveys/surveysApi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,25 +19,14 @@ const DOMAIN: string = process.env.REACT_APP_SURVEY_API_BASE_URL ?? '';

export interface SurveyApi {
// any type JSon lunatic
getSurvey: (survey: string, token: string) => Promise<LunaticSource>;
getSurveyUnitData: (unit: string, token: string) => Promise<SurveyUnitData>;
getSurvey: (survey: string) => Promise<LunaticSource>;
getSurveyUnitData: (unit: string) => Promise<SurveyUnitData>;
getMetadataSurvey: (survey: string) => Promise<MetadataSurvey>;
getRequiredNomenclatures: (
survey: string,
token: string
) => Promise<Array<string>>;
getNomenclature: (name: string, token: string) => Promise<Array<any>>;
putSurveyUnitData: (
data: DataVariables,
unit: string,
token: string
) => Promise<void>;
putSurveyUnitStateData: (
stateData: StateData,
unit: string,
token: string
) => Promise<void>;
getDepositiProof: (unit: string, token: string) => Promise<BlobPart>;
getRequiredNomenclatures: (survey: string) => Promise<Array<string>>;
getNomenclature: (name: string) => Promise<Array<any>>;
putSurveyUnitData: (data: DataVariables, unit: string) => Promise<void>;
putSurveyUnitStateData: (stateData: StateData, unit: string) => Promise<void>;
getDepositiProof: (unit: string) => Promise<BlobPart>;
}

export const surveyApi: SurveyApi = {
Expand Down