From 64e98a128a2e5c7a13837a786d47596c73fc653c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Tue, 4 Jul 2023 20:36:56 +0200 Subject: [PATCH] extend pages result --- ...ata-source-paged-response-data.function.ts | 24 +++++++++++++++++++ ...tend-data-source-response-data.function.ts | 7 +----- .../shared/repository/data-source/index.ts | 1 + .../src/shared/utils/diff.type.ts | 5 ++++ .../src/shared/utils/index.ts | 1 + 5 files changed, 32 insertions(+), 6 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/shared/repository/data-source/extend-data-source-paged-response-data.function.ts create mode 100644 src/Umbraco.Web.UI.Client/src/shared/utils/diff.type.ts diff --git a/src/Umbraco.Web.UI.Client/src/shared/repository/data-source/extend-data-source-paged-response-data.function.ts b/src/Umbraco.Web.UI.Client/src/shared/repository/data-source/extend-data-source-paged-response-data.function.ts new file mode 100644 index 0000000000..88e5638b9b --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/shared/repository/data-source/extend-data-source-paged-response-data.function.ts @@ -0,0 +1,24 @@ +import { DataSourceResponse, UmbPagedData } from '../index.js'; +import { Diff } from '@umbraco-cms/backoffice/utils'; + +export function extendDataSourcePagedResponseData< + ExtendedDataType extends IncomingDataType, + IncomingDataType extends object = object, + MissingPropsType extends object = Omit, '$type'>, + // Maybe this Omit<..., "$ype"> can be removed, but for now it kept showing up as a difference, though its not a difference on the two types. + ToType = IncomingDataType & ExtendedDataType +>( + response: DataSourceResponse>, + appendData: MissingPropsType +): DataSourceResponse> { + if (response.data === undefined) return response as unknown as DataSourceResponse>; + return { + ...response, + data: { + ...response.data, + items: response.data.items.map((x) => { + return { ...x, ...appendData } as unknown as ToType; + }), + }, + }; +} diff --git a/src/Umbraco.Web.UI.Client/src/shared/repository/data-source/extend-data-source-response-data.function.ts b/src/Umbraco.Web.UI.Client/src/shared/repository/data-source/extend-data-source-response-data.function.ts index e42d9d1868..2c43336ef0 100644 --- a/src/Umbraco.Web.UI.Client/src/shared/repository/data-source/extend-data-source-response-data.function.ts +++ b/src/Umbraco.Web.UI.Client/src/shared/repository/data-source/extend-data-source-response-data.function.ts @@ -1,10 +1,5 @@ import { DataSourceResponse } from '../index.js'; - -type FilterKeys = { - [K in keyof T]: K extends keyof U ? never : K; -}; - -type Diff = Pick[keyof T]>; +import { Diff } from '@umbraco-cms/backoffice/utils'; export function extendDataSourceResponseData< ExtendedDataType extends IncomingDataType, diff --git a/src/Umbraco.Web.UI.Client/src/shared/repository/data-source/index.ts b/src/Umbraco.Web.UI.Client/src/shared/repository/data-source/index.ts index 2cf5f1106c..8ab1dd95e1 100644 --- a/src/Umbraco.Web.UI.Client/src/shared/repository/data-source/index.ts +++ b/src/Umbraco.Web.UI.Client/src/shared/repository/data-source/index.ts @@ -2,6 +2,7 @@ export * from './collection-data-source.interface.js'; export * from './copy-data-source.interface.js'; export * from './data-source-response.interface.js'; export * from './data-source.interface.js'; +export * from './extend-data-source-paged-response-data.function.js'; export * from './extend-data-source-response-data.function.js'; export * from './folder-data-source.interface.js'; export * from './item-data-source.interface.js'; diff --git a/src/Umbraco.Web.UI.Client/src/shared/utils/diff.type.ts b/src/Umbraco.Web.UI.Client/src/shared/utils/diff.type.ts new file mode 100644 index 0000000000..cbce25da17 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/shared/utils/diff.type.ts @@ -0,0 +1,5 @@ +type FilterKeys = { + [K in keyof T]: K extends keyof U ? never : K; +}; + +export type Diff = Pick[keyof T]>; diff --git a/src/Umbraco.Web.UI.Client/src/shared/utils/index.ts b/src/Umbraco.Web.UI.Client/src/shared/utils/index.ts index ca1ea4709a..84bb11fa6b 100644 --- a/src/Umbraco.Web.UI.Client/src/shared/utils/index.ts +++ b/src/Umbraco.Web.UI.Client/src/shared/utils/index.ts @@ -1,3 +1,4 @@ +export * from './diff.type.js'; export * from './generate-umbraco-alias.function.js'; export * from './increment-string.function.js'; export * from './media-helper.service.js';