From b1155789944fbb36988c81b4deccdfe04139e67c Mon Sep 17 00:00:00 2001 From: achour94 Date: Fri, 17 Oct 2025 09:50:22 +0200 Subject: [PATCH] Refactor API utility functions and update commons-ui dependency to 0.132.0 Signed-off-by: achour94 --- package-lock.json | 8 +++--- package.json | 2 +- src/services/directory.ts | 4 +-- src/services/study.ts | 4 +-- src/services/user-admin.ts | 9 +++--- src/utils/api-rest.ts | 59 -------------------------------------- 6 files changed, 14 insertions(+), 72 deletions(-) diff --git a/package-lock.json b/package-lock.json index eba9efb..517e9ed 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "@emotion/react": "^11.14.0", "@emotion/styled": "^11.14.1", - "@gridsuite/commons-ui": "0.130.0", + "@gridsuite/commons-ui": "0.132.0", "@hookform/resolvers": "^4.1.3", "@mui/icons-material": "^5.18.0", "@mui/lab": "5.0.0-alpha.175", @@ -3207,9 +3207,9 @@ } }, "node_modules/@gridsuite/commons-ui": { - "version": "0.130.0", - "resolved": "https://registry.npmjs.org/@gridsuite/commons-ui/-/commons-ui-0.130.0.tgz", - "integrity": "sha512-x4Mx65XnmDJdCxj5y7KFIJIv+IlfuWN/aezKDNXcfjtsJKOhmZVvIFz8g53549fAFYR2Cf+KUYZmSIlR8iGf/A==", + "version": "0.132.0", + "resolved": "https://registry.npmjs.org/@gridsuite/commons-ui/-/commons-ui-0.132.0.tgz", + "integrity": "sha512-QPjt/YIUiruivInMoBm3cnGf/n0/oSRleaqUM3L7QWqWqtLI88ZXkHnvu0yKHProW7I+peUCTMtVqMm54rntXQ==", "license": "MPL-2.0", "dependencies": { "@ag-grid-community/locale": "^33.3.2", diff --git a/package.json b/package.json index e34faf6..d060675 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "dependencies": { "@emotion/react": "^11.14.0", "@emotion/styled": "^11.14.1", - "@gridsuite/commons-ui": "0.130.0", + "@gridsuite/commons-ui": "0.132.0", "@hookform/resolvers": "^4.1.3", "@mui/icons-material": "^5.18.0", "@mui/lab": "5.0.0-alpha.175", diff --git a/src/services/directory.ts b/src/services/directory.ts index 0d651ad..48bd8fb 100644 --- a/src/services/directory.ts +++ b/src/services/directory.ts @@ -5,9 +5,9 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -import { backendFetchJson, getRestBase } from '../utils/api-rest'; +import { getRestBase } from '../utils/api-rest'; import type { UUID } from 'node:crypto'; -import { ElementAttributes } from '@gridsuite/commons-ui'; +import { ElementAttributes, backendFetchJson } from '@gridsuite/commons-ui'; const EXPLORE_URL = `${getRestBase()}/explore/v1`; diff --git a/src/services/study.ts b/src/services/study.ts index d39ee85..8184f7b 100644 --- a/src/services/study.ts +++ b/src/services/study.ts @@ -5,8 +5,8 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -import { GridSuiteModule } from '@gridsuite/commons-ui'; -import { backendFetchJson, getRestBase } from '../utils/api-rest'; +import { GridSuiteModule, backendFetchJson } from '@gridsuite/commons-ui'; +import { getRestBase } from '../utils/api-rest'; import { getErrorMessage } from '../utils/error'; import { APP_NAME } from '../utils/config-params'; diff --git a/src/services/user-admin.ts b/src/services/user-admin.ts index 01f5ef8..44acdb3 100644 --- a/src/services/user-admin.ts +++ b/src/services/user-admin.ts @@ -5,7 +5,8 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -import { backendFetch, backendFetchJson, getRestBase } from '../utils/api-rest'; +import { backendFetch, backendFetchJson } from '@gridsuite/commons-ui'; +import { getRestBase } from '../utils/api-rest'; import type { UUID } from 'node:crypto'; const USER_ADMIN_URL = `${getRestBase()}/user-admin/v1`; @@ -23,7 +24,7 @@ export type UserInfos = UserInfosUpdate & { export function fetchUsers(): Promise { console.debug(`Fetching list of users...`); - return backendFetchJson(`${USER_ADMIN_URL}/users`, { + return backendFetchJson(`${USER_ADMIN_URL}/users`, { headers: { Accept: 'application/json', //'Content-Type': 'application/json; utf-8', @@ -271,7 +272,7 @@ export type Announcement = NewAnnouncement & { export async function addAnnouncement(announcement: NewAnnouncement) { console.debug(`Creating announcement ...`); - return backendFetchJson( + return backendFetchJson( `${USER_ADMIN_URL}/announcements?startDate=${announcement.startDate}&endDate=${announcement.endDate}&severity=${announcement.severity}`, { method: 'put', @@ -290,7 +291,7 @@ export async function addAnnouncement(announcement: NewAnnouncement) { export async function fetchAnnouncementList() { console.debug(`Fetching announcement ...`); try { - return await backendFetchJson(`${USER_ADMIN_URL}/announcements`, { method: 'get' }); + return await backendFetchJson(`${USER_ADMIN_URL}/announcements`, { method: 'get' }); } catch (reason) { console.error('Error while fetching announcement:', reason); throw reason; diff --git a/src/utils/api-rest.ts b/src/utils/api-rest.ts index 884829e..81c0139 100644 --- a/src/utils/api-rest.ts +++ b/src/utils/api-rest.ts @@ -5,66 +5,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -import type { JsonValue } from 'type-fest'; -import { getToken, parseError, Token } from './api'; - -export type { Token } from './api'; - -export interface ErrorWithStatus extends Error { - status?: number; -} - -export type Url = string | URL; -export type InitRequest = Partial; - export function getRestBase(): string { // We use the `baseURI` (from `` in index.html) to build the URL, which is corrected by httpd/nginx return document.baseURI.replace(/\/+$/, '') + import.meta.env.VITE_API_GATEWAY; } - -function handleError(response: Response): Promise { - return response.text().then((text: string) => { - const errorName = 'HttpResponseError : '; - let error: ErrorWithStatus; - const errorJson = parseError(text); - if (errorJson?.status && errorJson?.error && errorJson?.message) { - error = new Error( - `${errorName}${errorJson.status} ${errorJson.error}, message : ${errorJson.message}` - ) as ErrorWithStatus; - error.status = errorJson.status; - } else { - error = new Error( - `${errorName}${response.status} ${response.statusText}, message : ${text}` - ) as ErrorWithStatus; - error.status = response.status; - } - throw error; - }); -} - -function prepareRequest(init?: InitRequest, token?: Token): RequestInit { - if (!(typeof init === 'undefined' || typeof init === 'object')) { - throw new TypeError(`Argument 2 of backendFetch is not an object ${typeof init}`); - } - const initCopy: RequestInit = { ...init }; - initCopy.headers = new Headers(initCopy.headers || {}); - const tokenCopy = token || getToken(); - initCopy.headers.append('Authorization', `Bearer ${tokenCopy}`); - return initCopy; -} - -function safeFetch(url: Url, initCopy?: InitRequest) { - return fetch(url, initCopy).then((response: Response) => (response.ok ? response : handleError(response))); -} - -export function backendFetch(url: Url, init?: InitRequest, token?: Token): Promise { - return safeFetch(url, prepareRequest(init, token)); -} - -export function backendFetchText(url: Url, init?: InitRequest, token?: Token) { - return backendFetch(url, init, token).then((safeResponse) => safeResponse.text()) as Promise; -} - -export function backendFetchJson(url: Url, init?: InitRequest, token?: Token): Promise { - return backendFetch(url, init, token).then((safeResponse) => safeResponse.json()); -}