From d4f02b190360df9d185a5dc82254c9fd3eea9105 Mon Sep 17 00:00:00 2001 From: Victor Tomaili Date: Wed, 26 Jun 2024 17:07:54 +0300 Subject: [PATCH] fixing date time formatter for respect displayformat attribute --- packages/corelib/dist/index.d.ts | 4 +- .../corelib/src/ui/formatters/formatters.ts | 6 +-- .../src/ui/helpers/slickhelpers.spec.ts | 39 ++++++++++++++++++- packages/corelib/wwwroot/index.global.d.ts | 4 +- 4 files changed, 47 insertions(+), 6 deletions(-) diff --git a/packages/corelib/dist/index.d.ts b/packages/corelib/dist/index.d.ts index 1d2065650d..2f68168aed 100644 --- a/packages/corelib/dist/index.d.ts +++ b/packages/corelib/dist/index.d.ts @@ -4886,7 +4886,9 @@ declare class DateFormatter implements Formatter { format(ctx: FormatterContext): string; } declare class DateTimeFormatter extends DateFormatter { - constructor(); + constructor(props?: { + displayFormat?: string; + }); } declare class EnumFormatter implements Formatter { readonly props: { diff --git a/packages/corelib/src/ui/formatters/formatters.ts b/packages/corelib/src/ui/formatters/formatters.ts index 3dae241d4d..4dd5c44859 100644 --- a/packages/corelib/src/ui/formatters/formatters.ts +++ b/packages/corelib/src/ui/formatters/formatters.ts @@ -88,9 +88,9 @@ export class DateFormatter implements Formatter { @Decorators.registerFormatter('Serenity.DateTimeFormatter') export class DateTimeFormatter extends DateFormatter { - constructor() { - super(); - this.displayFormat = Culture.dateTimeFormat; + constructor(props: { displayFormat?: string } = {}) { + props.displayFormat ??= Culture.dateTimeFormat; + super(props) } } diff --git a/packages/corelib/src/ui/helpers/slickhelpers.spec.ts b/packages/corelib/src/ui/helpers/slickhelpers.spec.ts index 92ca376508..d220eee749 100644 --- a/packages/corelib/src/ui/helpers/slickhelpers.spec.ts +++ b/packages/corelib/src/ui/helpers/slickhelpers.spec.ts @@ -1,4 +1,4 @@ -import { addLocalText } from "../../base"; +import { Culture, addLocalText } from "../../base"; import { PropertyItemSlickConverter } from "./slickhelpers"; describe('SlickHelpers.toSlickColumn', () => { @@ -17,4 +17,41 @@ describe('SlickHelpers.toSlickColumn', () => { expect(converted2.name).toBe('translated'); }); + + it('should pass date formatter to slick formatter', () => { + var converted = PropertyItemSlickConverter.toSlickColumn({ + title: 'Test.Local.Text.Key', + formatterType: 'Serenity.DateFormatter' + }); + + Culture.dateSeparator = '/'; + Culture.dateOrder = 'dmy'; + Culture.dateFormat = 'dd/MM/yyyy'; + Culture.dateTimeFormat = 'dd/MM/yyyy HH:mm:ss'; + + expect(converted.format).toBeDefined(); + var formattedDate = converted.format.call(null, { value: '2021-01-01T00:00:00' }); + expect(formattedDate).toBe('01/01/2021'); + }); + + + it('should pass date time formatter parameters to slick formatter', () => { + var converted = PropertyItemSlickConverter.toSlickColumn({ + title: 'Test.Local.Text.Key', + formatterType: 'Serenity.DateTimeFormatter', + formatterParams: { + displayFormat: 'g' + } + }); + + Culture.dateSeparator = '/'; + Culture.dateOrder = 'dmy'; + Culture.dateFormat = 'dd/MM/yyyy'; + Culture.dateTimeFormat = 'dd/MM/yyyy HH:mm:ss'; + + expect(converted.format).toBeDefined(); + var formattedDate = converted.format.call(null, { value: '2021-01-01T00:00:00' }); + console.log(formattedDate) + expect(formattedDate).toBe('01/01/2021 00:00'); + }); }); \ No newline at end of file diff --git a/packages/corelib/wwwroot/index.global.d.ts b/packages/corelib/wwwroot/index.global.d.ts index c07db28344..da7aae388d 100644 --- a/packages/corelib/wwwroot/index.global.d.ts +++ b/packages/corelib/wwwroot/index.global.d.ts @@ -6175,7 +6175,9 @@ declare namespace Serenity { format(ctx: Slick.FormatterContext): string; } class DateTimeFormatter extends DateFormatter { - constructor(); + constructor(props?: { + displayFormat?: string; + }); } class EnumFormatter implements Formatter { readonly props: {