From 9ffc421252172da28bc17d5c14100a77509ee4fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nuno=20G=C3=B3is?= Date: Tue, 3 May 2022 15:27:43 +0100 Subject: [PATCH] feat: show archived toggles on a project level (#942) * feat: show archived toggles on a project level * Update src/component/feature/FeatureToggleList/FeatureToggleListActions/FeatureToggleListActions.tsx Co-authored-by: Fredrik Strand Oseberg * refactor: adapt code to PR comments, clarity Co-authored-by: Fredrik Strand Oseberg --- .../archive/ProjectFeaturesArchiveList.tsx | 58 +++++++++++++ .../FeatureToggleList/FeatureToggleList.tsx | 14 +++- .../FeatureToggleListActions.tsx | 10 ++- .../FeatureToggleListItem.tsx | 50 +++++++---- .../feature/FeatureToggleList/styles.ts | 3 + .../src/component/project/Project/Project.tsx | 7 ++ .../ProjectFeaturesArchive.tsx | 14 ++++ .../api/getters/useApiGetter/useApiGetter.ts | 5 +- .../useProjectFeaturesArchive.ts | 33 ++++++++ frontend/src/openapi/apis/AdminApi.ts | 83 ++++++++----------- .../src/openapi/models/ChangeProjectSchema.ts | 56 ------------- .../src/openapi/models/ConstraintSchema.ts | 2 +- .../src/openapi/models/CreateFeatureSchema.ts | 2 +- frontend/src/openapi/models/FeatureSchema.ts | 2 +- frontend/src/openapi/models/FeaturesSchema.ts | 2 +- frontend/src/openapi/models/OverrideSchema.ts | 2 +- frontend/src/openapi/models/StrategySchema.ts | 2 +- frontend/src/openapi/models/VariantSchema.ts | 2 +- frontend/src/openapi/models/index.ts | 1 - frontend/src/openapi/runtime.ts | 10 +-- 20 files changed, 219 insertions(+), 139 deletions(-) create mode 100644 frontend/src/component/archive/ProjectFeaturesArchiveList.tsx create mode 100644 frontend/src/component/project/Project/ProjectFeaturesArchive/ProjectFeaturesArchive.tsx create mode 100644 frontend/src/hooks/api/getters/useProjectFeaturesArchive/useProjectFeaturesArchive.ts delete mode 100644 frontend/src/openapi/models/ChangeProjectSchema.ts diff --git a/frontend/src/component/archive/ProjectFeaturesArchiveList.tsx b/frontend/src/component/archive/ProjectFeaturesArchiveList.tsx new file mode 100644 index 0000000000..b4e43181df --- /dev/null +++ b/frontend/src/component/archive/ProjectFeaturesArchiveList.tsx @@ -0,0 +1,58 @@ +import { FC } from 'react'; +import { useProjectFeaturesArchive } from 'hooks/api/getters/useProjectFeaturesArchive/useProjectFeaturesArchive'; +import { FeatureToggleList } from '../feature/FeatureToggleList/FeatureToggleList'; +import useUiConfig from 'hooks/api/getters/useUiConfig/useUiConfig'; +import { useFeaturesFilter } from 'hooks/useFeaturesFilter'; +import { useFeatureArchiveApi } from 'hooks/api/actions/useFeatureArchiveApi/useReviveFeatureApi'; +import useToast from 'hooks/useToast'; +import { useFeaturesSort } from 'hooks/useFeaturesSort'; + +interface IProjectFeaturesArchiveList { + projectId: string; +} + +export const ProjectFeaturesArchiveList: FC = ({ + projectId, +}) => { + const { setToastData, setToastApiError } = useToast(); + const { uiConfig } = useUiConfig(); + const { reviveFeature } = useFeatureArchiveApi(); + + const { + archivedFeatures = [], + refetchArchived, + loading, + } = useProjectFeaturesArchive(projectId); + + const { filtered, filter, setFilter } = useFeaturesFilter(archivedFeatures); + const { sorted, sort, setSort } = useFeaturesSort(filtered); + + const onRevive = (feature: string) => { + reviveFeature(feature) + .then(refetchArchived) + .then(() => + setToastData({ + type: 'success', + title: "And we're back!", + text: 'The feature toggle has been revived.', + confetti: true, + }) + ) + .catch(e => setToastApiError(e.toString())); + }; + + return ( + + ); +}; diff --git a/frontend/src/component/feature/FeatureToggleList/FeatureToggleList.tsx b/frontend/src/component/feature/FeatureToggleList/FeatureToggleList.tsx index 8112ebd44c..a6d02cb33e 100644 --- a/frontend/src/component/feature/FeatureToggleList/FeatureToggleList.tsx +++ b/frontend/src/component/feature/FeatureToggleList/FeatureToggleList.tsx @@ -28,6 +28,7 @@ interface IFeatureToggleListProps { sort: IFeaturesSort; setSort: Dispatch>; onRevive?: (feature: string) => void; + inProject?: boolean; isArchive?: boolean; } @@ -52,6 +53,7 @@ const loadingFeaturesPlaceholder: FeatureSchema[] = Array(10) export const FeatureToggleList: VFC = ({ features, onRevive, + inProject, isArchive, loading, flags, @@ -95,6 +97,7 @@ export const FeatureToggleList: VFC = ({ onRevive={onRevive} hasAccess={hasAccess} flags={flags} + inProject={inProject} /> ))} elseShow={ @@ -128,12 +131,18 @@ export const FeatureToggleList: VFC = ({ : ''; const headerTitle = isArchive - ? `Archived Features ${searchResultsHeader}` + ? inProject + ? `Project Archived Features ${searchResultsHeader}` + : `Archived Features ${searchResultsHeader}` : `Features ${searchResultsHeader}`; return (
-
+
= ({ sort={sort} setSort={setSort} loading={loading} + inProject={inProject} /> } /> diff --git a/frontend/src/component/feature/FeatureToggleList/FeatureToggleListActions/FeatureToggleListActions.tsx b/frontend/src/component/feature/FeatureToggleList/FeatureToggleListActions/FeatureToggleListActions.tsx index 4294c70aa6..0ee0f1511f 100644 --- a/frontend/src/component/feature/FeatureToggleList/FeatureToggleListActions/FeatureToggleListActions.tsx +++ b/frontend/src/component/feature/FeatureToggleList/FeatureToggleListActions/FeatureToggleListActions.tsx @@ -13,7 +13,7 @@ import { import { useStyles } from './styles'; import { IFeaturesFilter } from 'hooks/useFeaturesFilter'; -const sortOptions = createFeaturesFilterSortOptions(); +let sortOptions = createFeaturesFilterSortOptions(); interface IFeatureToggleListActionsProps { filter: IFeaturesFilter; @@ -21,6 +21,7 @@ interface IFeatureToggleListActionsProps { sort: IFeaturesSort; setSort: Dispatch>; loading?: boolean; + inProject?: boolean; } export const FeatureToggleListActions: VFC = ({ @@ -29,6 +30,7 @@ export const FeatureToggleListActions: VFC = ({ sort, setSort, loading = false, + inProject, }) => { const { classes: styles } = useStyles(); const { uiConfig } = useUiConfig(); @@ -46,6 +48,10 @@ export const FeatureToggleListActions: VFC = ({ const selectedOption = sortOptions.find(o => o.type === sort.type) || sortOptions[0]; + if (inProject) { + sortOptions = sortOptions.filter(option => option.type !== 'project'); + } + const renderSortingOptions = () => sortOptions.map(option => ( = ({ data-loading /> void; hasAccess: IAccessContext['hasAccess']; flags?: IFlags; + inProject?: boolean; className?: string; } export const FeatureToggleListItem = memo( - ({ feature, onRevive, hasAccess, flags = {}, className, ...rest }) => { + ({ + feature, + onRevive, + hasAccess, + flags = {}, + inProject, + className, + ...rest + }) => { const { classes: styles } = useStyles(); const { projects } = useProjects(); @@ -153,21 +162,30 @@ export const FeatureToggleListItem = memo( )} > - - - + + + + } + /> ({ [theme.breakpoints.down('sm')]: { display: 'block', }, + '&.dense': { + marginBottom: '1rem', + }, }, searchBar: { minWidth: '450px', diff --git a/frontend/src/component/project/Project/Project.tsx b/frontend/src/component/project/Project/Project.tsx index dd4f4c2c27..1456807f54 100644 --- a/frontend/src/component/project/Project/Project.tsx +++ b/frontend/src/component/project/Project/Project.tsx @@ -11,6 +11,7 @@ import useQueryParams from 'hooks/useQueryParams'; import { useEffect } from 'react'; import { ProjectAccess } from '../ProjectAccess/ProjectAccess'; import ProjectEnvironment from '../ProjectEnvironment/ProjectEnvironment'; +import { ProjectFeaturesArchive } from './ProjectFeaturesArchive/ProjectFeaturesArchive'; import ProjectOverview from './ProjectOverview'; import ProjectHealth from './ProjectHealth/ProjectHealth'; import PermissionIconButton from 'component/common/PermissionIconButton/PermissionIconButton'; @@ -52,6 +53,12 @@ const Project = () => { path: `${basePath}/environments`, name: 'environments', }, + { + title: 'Archive', + component: , + path: `${basePath}/archive`, + name: 'archive', + }, ]; const activeTabIdx = activeTab diff --git a/frontend/src/component/project/Project/ProjectFeaturesArchive/ProjectFeaturesArchive.tsx b/frontend/src/component/project/Project/ProjectFeaturesArchive/ProjectFeaturesArchive.tsx new file mode 100644 index 0000000000..7603c9445e --- /dev/null +++ b/frontend/src/component/project/Project/ProjectFeaturesArchive/ProjectFeaturesArchive.tsx @@ -0,0 +1,14 @@ +import { ProjectFeaturesArchiveList } from 'component/archive/ProjectFeaturesArchiveList'; +import { usePageTitle } from 'hooks/usePageTitle'; + +interface IProjectFeaturesArchiveProps { + projectId: string; +} + +export const ProjectFeaturesArchive = ({ + projectId, +}: IProjectFeaturesArchiveProps) => { + usePageTitle('Project Archived Features'); + + return ; +}; diff --git a/frontend/src/hooks/api/getters/useApiGetter/useApiGetter.ts b/frontend/src/hooks/api/getters/useApiGetter/useApiGetter.ts index 88c00d59f3..35829007ba 100644 --- a/frontend/src/hooks/api/getters/useApiGetter/useApiGetter.ts +++ b/frontend/src/hooks/api/getters/useApiGetter/useApiGetter.ts @@ -1,7 +1,10 @@ import useSWR, { SWRConfiguration, mutate } from 'swr'; import { useCallback } from 'react'; -type CacheKey = 'apiAdminFeaturesGet' | 'apiAdminArchiveFeaturesGet'; +type CacheKey = + | 'apiAdminFeaturesGet' + | 'apiAdminArchiveFeaturesGet' + | ['apiAdminArchiveFeaturesGet', string?]; interface IUseApiGetterOutput { data?: T; diff --git a/frontend/src/hooks/api/getters/useProjectFeaturesArchive/useProjectFeaturesArchive.ts b/frontend/src/hooks/api/getters/useProjectFeaturesArchive/useProjectFeaturesArchive.ts new file mode 100644 index 0000000000..3e43ca53a4 --- /dev/null +++ b/frontend/src/hooks/api/getters/useProjectFeaturesArchive/useProjectFeaturesArchive.ts @@ -0,0 +1,33 @@ +import { openApiAdmin } from 'utils/openapiClient'; +import { FeatureSchema } from 'openapi'; +import { useApiGetter } from 'hooks/api/getters/useApiGetter/useApiGetter'; + +export interface IUseProjectFeaturesArchiveOutput { + archivedFeatures?: FeatureSchema[]; + refetchArchived: () => void; + loading: boolean; + error?: Error; +} + +export const useProjectFeaturesArchive = ( + projectId: string +): IUseProjectFeaturesArchiveOutput => { + const { data, refetch, loading, error } = useApiGetter( + ['apiAdminArchiveFeaturesGet', projectId], + () => { + if (projectId) { + return openApiAdmin.apiAdminArchiveFeaturesProjectIdGet({ + projectId, + }); + } + return openApiAdmin.apiAdminArchiveFeaturesGet(); + } + ); + + return { + archivedFeatures: data?.features, + refetchArchived: refetch, + loading, + error, + }; +}; diff --git a/frontend/src/openapi/apis/AdminApi.ts b/frontend/src/openapi/apis/AdminApi.ts index 77caf5e2ec..c17c86b9dc 100644 --- a/frontend/src/openapi/apis/AdminApi.ts +++ b/frontend/src/openapi/apis/AdminApi.ts @@ -4,7 +4,7 @@ * Unleash API * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) * - * The version of the OpenAPI document: 4.10.0-beta.1 + * The version of the OpenAPI document: 4.10.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -15,9 +15,6 @@ import * as runtime from '../runtime'; import { - ChangeProjectSchema, - ChangeProjectSchemaFromJSON, - ChangeProjectSchemaToJSON, CreateFeatureSchema, CreateFeatureSchemaFromJSON, CreateFeatureSchemaToJSON, @@ -29,10 +26,8 @@ import { FeaturesSchemaToJSON, } from '../models'; -export interface ApiAdminProjectsProjectIdFeaturesFeatureNameChangeProjectPostRequest { +export interface ApiAdminArchiveFeaturesProjectIdGetRequest { projectId: string; - featureName: string; - changeProjectSchema: ChangeProjectSchema; } export interface ApiAdminProjectsProjectIdFeaturesFeatureNameGetRequest { @@ -82,6 +77,38 @@ export class AdminApi extends runtime.BaseAPI { return await response.value(); } + /** + */ + async apiAdminArchiveFeaturesProjectIdGetRaw(requestParameters: ApiAdminArchiveFeaturesProjectIdGetRequest, initOverrides?: RequestInit): Promise> { + if (requestParameters.projectId === null || requestParameters.projectId === undefined) { + throw new runtime.RequiredError('projectId','Required parameter requestParameters.projectId was null or undefined when calling apiAdminArchiveFeaturesProjectIdGet.'); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // apiKey authentication + } + + const response = await this.request({ + path: `/api/admin/archive/features/{projectId}`.replace(`{${"projectId"}}`, encodeURIComponent(String(requestParameters.projectId))), + method: 'GET', + headers: headerParameters, + query: queryParameters, + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => FeaturesSchemaFromJSON(jsonValue)); + } + + /** + */ + async apiAdminArchiveFeaturesProjectIdGet(requestParameters: ApiAdminArchiveFeaturesProjectIdGetRequest, initOverrides?: RequestInit): Promise { + const response = await this.apiAdminArchiveFeaturesProjectIdGetRaw(requestParameters, initOverrides); + return await response.value(); + } + /** */ async apiAdminFeaturesGetRaw(initOverrides?: RequestInit): Promise> { @@ -110,48 +137,6 @@ export class AdminApi extends runtime.BaseAPI { return await response.value(); } - /** - */ - async apiAdminProjectsProjectIdFeaturesFeatureNameChangeProjectPostRaw(requestParameters: ApiAdminProjectsProjectIdFeaturesFeatureNameChangeProjectPostRequest, initOverrides?: RequestInit): Promise> { - if (requestParameters.projectId === null || requestParameters.projectId === undefined) { - throw new runtime.RequiredError('projectId','Required parameter requestParameters.projectId was null or undefined when calling apiAdminProjectsProjectIdFeaturesFeatureNameChangeProjectPost.'); - } - - if (requestParameters.featureName === null || requestParameters.featureName === undefined) { - throw new runtime.RequiredError('featureName','Required parameter requestParameters.featureName was null or undefined when calling apiAdminProjectsProjectIdFeaturesFeatureNameChangeProjectPost.'); - } - - if (requestParameters.changeProjectSchema === null || requestParameters.changeProjectSchema === undefined) { - throw new runtime.RequiredError('changeProjectSchema','Required parameter requestParameters.changeProjectSchema was null or undefined when calling apiAdminProjectsProjectIdFeaturesFeatureNameChangeProjectPost.'); - } - - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - headerParameters['Content-Type'] = 'application/json'; - - if (this.configuration && this.configuration.apiKey) { - headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // apiKey authentication - } - - const response = await this.request({ - path: `/api/admin/projects/{projectId}/features/{featureName}/changeProject`.replace(`{${"projectId"}}`, encodeURIComponent(String(requestParameters.projectId))).replace(`{${"featureName"}}`, encodeURIComponent(String(requestParameters.featureName))), - method: 'POST', - headers: headerParameters, - query: queryParameters, - body: ChangeProjectSchemaToJSON(requestParameters.changeProjectSchema), - }, initOverrides); - - return new runtime.VoidApiResponse(response); - } - - /** - */ - async apiAdminProjectsProjectIdFeaturesFeatureNameChangeProjectPost(requestParameters: ApiAdminProjectsProjectIdFeaturesFeatureNameChangeProjectPostRequest, initOverrides?: RequestInit): Promise { - await this.apiAdminProjectsProjectIdFeaturesFeatureNameChangeProjectPostRaw(requestParameters, initOverrides); - } - /** */ async apiAdminProjectsProjectIdFeaturesFeatureNameGetRaw(requestParameters: ApiAdminProjectsProjectIdFeaturesFeatureNameGetRequest, initOverrides?: RequestInit): Promise> { diff --git a/frontend/src/openapi/models/ChangeProjectSchema.ts b/frontend/src/openapi/models/ChangeProjectSchema.ts deleted file mode 100644 index 13a543e5b3..0000000000 --- a/frontend/src/openapi/models/ChangeProjectSchema.ts +++ /dev/null @@ -1,56 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * Unleash API - * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - * - * The version of the OpenAPI document: 4.10.0-beta.1 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -import { exists, mapValues } from '../runtime'; -/** - * - * @export - * @interface ChangeProjectSchema - */ -export interface ChangeProjectSchema { - /** - * - * @type {string} - * @memberof ChangeProjectSchema - */ - newProjectId: string; -} - -export function ChangeProjectSchemaFromJSON(json: any): ChangeProjectSchema { - return ChangeProjectSchemaFromJSONTyped(json, false); -} - -export function ChangeProjectSchemaFromJSONTyped(json: any, ignoreDiscriminator: boolean): ChangeProjectSchema { - if ((json === undefined) || (json === null)) { - return json; - } - return { - - 'newProjectId': json['newProjectId'], - }; -} - -export function ChangeProjectSchemaToJSON(value?: ChangeProjectSchema | null): any { - if (value === undefined) { - return undefined; - } - if (value === null) { - return null; - } - return { - - 'newProjectId': value.newProjectId, - }; -} - diff --git a/frontend/src/openapi/models/ConstraintSchema.ts b/frontend/src/openapi/models/ConstraintSchema.ts index 0cfe1d1360..5920ee9730 100644 --- a/frontend/src/openapi/models/ConstraintSchema.ts +++ b/frontend/src/openapi/models/ConstraintSchema.ts @@ -4,7 +4,7 @@ * Unleash API * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) * - * The version of the OpenAPI document: 4.10.0-beta.1 + * The version of the OpenAPI document: 4.10.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/frontend/src/openapi/models/CreateFeatureSchema.ts b/frontend/src/openapi/models/CreateFeatureSchema.ts index 744a6e3d9a..56cd6a0d9c 100644 --- a/frontend/src/openapi/models/CreateFeatureSchema.ts +++ b/frontend/src/openapi/models/CreateFeatureSchema.ts @@ -4,7 +4,7 @@ * Unleash API * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) * - * The version of the OpenAPI document: 4.10.0-beta.1 + * The version of the OpenAPI document: 4.10.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/frontend/src/openapi/models/FeatureSchema.ts b/frontend/src/openapi/models/FeatureSchema.ts index 99b6ced8bb..2dbe5bf063 100644 --- a/frontend/src/openapi/models/FeatureSchema.ts +++ b/frontend/src/openapi/models/FeatureSchema.ts @@ -4,7 +4,7 @@ * Unleash API * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) * - * The version of the OpenAPI document: 4.10.0-beta.1 + * The version of the OpenAPI document: 4.10.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/frontend/src/openapi/models/FeaturesSchema.ts b/frontend/src/openapi/models/FeaturesSchema.ts index e9486e9549..5594b87ca2 100644 --- a/frontend/src/openapi/models/FeaturesSchema.ts +++ b/frontend/src/openapi/models/FeaturesSchema.ts @@ -4,7 +4,7 @@ * Unleash API * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) * - * The version of the OpenAPI document: 4.10.0-beta.1 + * The version of the OpenAPI document: 4.10.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/frontend/src/openapi/models/OverrideSchema.ts b/frontend/src/openapi/models/OverrideSchema.ts index c9f61a8dad..79e006c19d 100644 --- a/frontend/src/openapi/models/OverrideSchema.ts +++ b/frontend/src/openapi/models/OverrideSchema.ts @@ -4,7 +4,7 @@ * Unleash API * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) * - * The version of the OpenAPI document: 4.10.0-beta.1 + * The version of the OpenAPI document: 4.10.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/frontend/src/openapi/models/StrategySchema.ts b/frontend/src/openapi/models/StrategySchema.ts index 1b08568f05..2522a14766 100644 --- a/frontend/src/openapi/models/StrategySchema.ts +++ b/frontend/src/openapi/models/StrategySchema.ts @@ -4,7 +4,7 @@ * Unleash API * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) * - * The version of the OpenAPI document: 4.10.0-beta.1 + * The version of the OpenAPI document: 4.10.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/frontend/src/openapi/models/VariantSchema.ts b/frontend/src/openapi/models/VariantSchema.ts index 57063b14dc..2144ae081f 100644 --- a/frontend/src/openapi/models/VariantSchema.ts +++ b/frontend/src/openapi/models/VariantSchema.ts @@ -4,7 +4,7 @@ * Unleash API * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) * - * The version of the OpenAPI document: 4.10.0-beta.1 + * The version of the OpenAPI document: 4.10.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/frontend/src/openapi/models/index.ts b/frontend/src/openapi/models/index.ts index 079750bed3..925d0b6d43 100644 --- a/frontend/src/openapi/models/index.ts +++ b/frontend/src/openapi/models/index.ts @@ -1,6 +1,5 @@ /* tslint:disable */ /* eslint-disable */ -export * from './ChangeProjectSchema'; export * from './ConstraintSchema'; export * from './CreateFeatureSchema'; export * from './FeatureSchema'; diff --git a/frontend/src/openapi/runtime.ts b/frontend/src/openapi/runtime.ts index c0322b92a4..212487a155 100644 --- a/frontend/src/openapi/runtime.ts +++ b/frontend/src/openapi/runtime.ts @@ -4,7 +4,7 @@ * Unleash API * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) * - * The version of the OpenAPI document: 4.10.0-beta.1 + * The version of the OpenAPI document: 4.10.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -80,21 +80,21 @@ export class BaseAPI { let fetchParams = { url, init }; for (const middleware of this.middleware) { if (middleware.pre) { - fetchParams = (await middleware.pre({ + fetchParams = await middleware.pre({ fetch: this.fetchApi, ...fetchParams, - })) || fetchParams; + }) || fetchParams; } } let response = await (this.configuration.fetchApi || fetch)(fetchParams.url, fetchParams.init); for (const middleware of this.middleware) { if (middleware.post) { - response = (await middleware.post({ + response = await middleware.post({ fetch: this.fetchApi, url: fetchParams.url, init: fetchParams.init, response: response.clone(), - })) || response; + }) || response; } } return response;