From efa1c086a0b39b0ea5f9457eba5a7a73999b6464 Mon Sep 17 00:00:00 2001 From: Firman Ramdhani <33869609+firmanramdhani@users.noreply.github.com> Date: Mon, 20 Jul 2026 14:29:20 +0700 Subject: [PATCH] feat: add transformPayloadFilter method to IDataTransformer and integrate it in getMany for filter transformation --- .../data-services/base-data.transformer.ts | 19 +++++++++++++++++++ .../base-remote.data-services.ts | 6 +++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/packages/core-api/src/data-services/base-data.transformer.ts b/packages/core-api/src/data-services/base-data.transformer.ts index c07974b..3b923a8 100644 --- a/packages/core-api/src/data-services/base-data.transformer.ts +++ b/packages/core-api/src/data-services/base-data.transformer.ts @@ -75,6 +75,12 @@ export interface IDataTransformer): Partial; + + /** + * Transform the filter payload before a `getMany()` call. + * If not provided, falls back to identity. + */ + transformPayloadFilter?(filter: Record): Record; } // ─── Abstract Base Transformer ────────────────────────────────── @@ -213,4 +219,17 @@ export abstract class BaseDataTransformer): Partial { return this.transformToDTO(entity as TEntity) as Partial; } + + /** + * Transform the filter payload before a `getMany()` call. + * + * Override this when getMany filters need special formatting + * (e.g., date formats, converting arrays to comma-separated strings). + * + * @param filter - The filter params from the frontend + * @returns The mapped filter params for the API query + */ + transformPayloadFilter(filter: Record): Record { + return filter; + } } diff --git a/packages/core-api/src/data-services/base-remote.data-services.ts b/packages/core-api/src/data-services/base-remote.data-services.ts index ca06e61..e0cc24f 100644 --- a/packages/core-api/src/data-services/base-remote.data-services.ts +++ b/packages/core-api/src/data-services/base-remote.data-services.ts @@ -168,7 +168,11 @@ export abstract class BaseRemoteDataServices(config?: AxiosRequestConfig): Promise> { - const result = await this.execute(DESCRIPTORS.getMany, { config }); + const finalConfig = config?.params && this.transformer?.transformPayloadFilter + ? { ...config, params: this.transformer.transformPayloadFilter(config.params) } + : config; + + const result = await this.execute(DESCRIPTORS.getMany, { config: finalConfig }); if (this.transformer && Array.isArray(result.data)) { return {