From eeb3929b1a0489207be79a7477b175371c0ac806 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Tue, 4 Jul 2023 20:21:53 +0200 Subject: [PATCH] method to extend data source response data --- ...xtend-data-source-response-data.function.ts | 18 ++++++++++++++++++ .../src/shared/repository/data-source/index.ts | 7 ++++--- 2 files changed, 22 insertions(+), 3 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/shared/repository/data-source/extend-data-source-response-data.function.ts 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 new file mode 100644 index 0000000000..e42d9d1868 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/shared/repository/data-source/extend-data-source-response-data.function.ts @@ -0,0 +1,18 @@ +import { DataSourceResponse } from '../index.js'; + +type FilterKeys = { + [K in keyof T]: K extends keyof U ? never : K; +}; + +type Diff = Pick[keyof T]>; + +export function extendDataSourceResponseData< + 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, ...appendData } as unknown as ToType }; +} 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 33f1ddf6bc..2cf5f1106c 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 @@ -1,8 +1,9 @@ +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-response-data.function.js'; export * from './folder-data-source.interface.js'; -export * from './tree-data-source.interface.js'; export * from './item-data-source.interface.js'; export * from './move-data-source.interface.js'; -export * from './copy-data-source.interface.js'; -export * from './collection-data-source.interface.js'; +export * from './tree-data-source.interface.js';