diff --git a/libs/core/packages/core/src/lib/store/store-provider-helper.spec.ts b/libs/core/packages/core/src/lib/store/store-provider-helper.spec.ts index 5721c91..d9a3b36 100644 --- a/libs/core/packages/core/src/lib/store/store-provider-helper.spec.ts +++ b/libs/core/packages/core/src/lib/store/store-provider-helper.spec.ts @@ -113,6 +113,39 @@ describe('Store Provider Helper', () => { }); + it('should correctly manage Date fields', () => { + + StoreProviderHelper.clearConfigCache(); + + let result = StoreProviderHelper.findSpecialFields("creation/entity/b", { + name:"EntityB", + fields: { + "ba": { + name: "_id", + type:"Text" + }, + "bb": { + name: "Date", + type:"Date & Time" + } + } + }); + + expect(result.dateFields).toEqual(["Date"]); + + let listToTest:Array=[{ + _id:454545, + Date:"2024-12-23T13:18:37.000Z" + }, { + _id:76877, + Date:"2022-12-10T14:51:59.110Z" + }] + + StoreProviderHelper.cleanUpLoadedData(listToTest, result); + expect(listToTest[0].Date.valueOf()).not.toBeNaN(); + expect(listToTest[1].Date.valueOf()).not.toBeNaN(); + }); + it('should dynamically manage Id fields', () => { StoreProviderHelper.clearConfigCache(); const result = StoreProviderHelper.findSpecialFields("creation/entity/d", { diff --git a/libs/core/packages/core/src/lib/store/store-provider-helper.ts b/libs/core/packages/core/src/lib/store/store-provider-helper.ts index 3f879a1..fd719b7 100644 --- a/libs/core/packages/core/src/lib/store/store-provider-helper.ts +++ b/libs/core/packages/core/src/lib/store/store-provider-helper.ts @@ -184,6 +184,7 @@ export class StoreProviderHelper { } else { val[prop]=new Date(timeEpoch); + } } }) @@ -273,7 +274,7 @@ export class StoreProviderHelper { if ((value!=null) && ((maxValue==null) || (value > maxValue))) { counter.maximum = valSrc; counter.maxAsValue = value;} - + } if (value!=null) { diff --git a/plugins/standard/libs/std/src/lib/preview/time/time-fields.component.ts b/plugins/standard/libs/std/src/lib/preview/time/time-fields.component.ts index 337d52b..013ad0a 100644 --- a/plugins/standard/libs/std/src/lib/preview/time/time-fields.component.ts +++ b/plugins/standard/libs/std/src/lib/preview/time/time-fields.component.ts @@ -68,10 +68,12 @@ export class TimeFieldsComponent extends AbstractDynamicComponent { } localizeLongDate (value:Date): string { + if( (value!=null) && (Number.isNaN(value.valueOf())) ) return ""; return this.longConverter.format(value); } localizeShortDate (value:Date): string { + if( (value!=null) && (Number.isNaN(value.valueOf())) ) return ""; return this.shortConverter.format(value); } diff --git a/plugins/standard/libs/std/src/lib/store/dont-code-api-store-provider.ts b/plugins/standard/libs/std/src/lib/store/dont-code-api-store-provider.ts index 9291e32..c544419 100644 --- a/plugins/standard/libs/std/src/lib/store/dont-code-api-store-provider.ts +++ b/plugins/standard/libs/std/src/lib/store/dont-code-api-store-provider.ts @@ -59,6 +59,10 @@ export class DontCodeApiStoreProvider extends AbstractDontCodeStoreProv } const id=(data as any)._id; + // Reconverts dates or Ids + const specialFields = StoreProviderHelper.findSpecialFields(position, entity); + StoreProviderHelper.cleanUpDataBeforeSaving([data], specialFields); + if( id != undefined) { return lastValueFrom(this.http.put(this.apiUrl+'/'+entity.name+'/'+id, data, {observe:"body", responseType:"json"})); } else { @@ -73,7 +77,12 @@ export class DontCodeApiStoreProvider extends AbstractDontCodeStoreProv } const obs = this.http.get(this.apiUrl+'/'+entity.name+'/'+key, {observe:"body", responseType:"json"}); - return lastValueFrom(obs); + const specialFields = StoreProviderHelper.findSpecialFields(position, entity); + + return lastValueFrom(obs).then((value) => { + StoreProviderHelper.cleanUpLoadedData([value], specialFields); + return value; + }); } deleteEntity(position: string, key: any): Promise { @@ -82,7 +91,7 @@ export class DontCodeApiStoreProvider extends AbstractDontCodeStoreProv return Promise.reject("No entity found at position "+position); } - return this.http.delete(this.apiUrl+'/'+entity.name+'/'+key, {observe:"body", responseType:"json"}).toPromise().then(value => { + return lastValueFrom(this.http.delete(this.apiUrl+'/'+entity.name+'/'+key, {observe:"body", responseType:"json"})).then(value => { return true; }); } @@ -93,10 +102,16 @@ export class DontCodeApiStoreProvider extends AbstractDontCodeStoreProv return throwError(()=> new Error ("No entity found at position "+position)); } - return this.http.get(this.apiUrl+'/'+entity.name, {observe:"body", responseType:"json"}).pipe(map(value => { - return StoreProviderHelper.applyFilters( value as Array, ...criteria); - } - )); + const specialFields = StoreProviderHelper.findSpecialFields(position, entity); + return this.http.get(this.apiUrl+'/'+entity.name, {observe:"body", responseType:"json"}).pipe( + map(value => { + StoreProviderHelper.cleanUpLoadedData(value as T [], specialFields); + return value as T[]; + }),map(value => { + return StoreProviderHelper.applyFilters( value, ...criteria); + } + ) + ); } canStoreDocument(position?: string): boolean {