diff --git a/src/common/utilities/GeneralHelper.ts b/src/common/utilities/GeneralHelper.ts index 8e81b8ed3..4b3815ef4 100644 --- a/src/common/utilities/GeneralHelper.ts +++ b/src/common/utilities/GeneralHelper.ts @@ -1,4 +1,5 @@ import '../extensions/String.extensions'; +import { parseISO, isValid } from 'date-fns'; import * as strings from 'ControlStrings'; @@ -405,3 +406,7 @@ export function dateToNumber(date: string | number | Date): number { return dateObj.getTime(); } + +export function isValidISODateString(dateString: string): boolean { + return isValid(parseISO(dateString)); +} \ No newline at end of file diff --git a/src/services/SPService.ts b/src/services/SPService.ts index 6dd506945..5b0f25aa5 100644 --- a/src/services/SPService.ts +++ b/src/services/SPService.ts @@ -3,7 +3,7 @@ import { ISPHttpClientOptions, SPHttpClient } from "@microsoft/sp-http"; import filter from 'lodash/filter'; import find from 'lodash/find'; import { ISPContentType, ISPField, ISPList, ISPLists, IUploadImageResult, ISPViews } from "../common/SPEntities"; -import { SPHelper, urlCombine } from "../common/utilities"; +import { isValidISODateString, SPHelper, urlCombine } from "../common/utilities"; import { IContentTypesOptions, IFieldsOptions, ILibsOptions, IRenderListDataAsStreamClientFormResult, ISPService, LibsOrderBy } from "./ISPService"; import {orderBy } from '../controls/viewPicker/IViewPicker'; @@ -578,29 +578,15 @@ export default class SPService implements ISPService { if (data.ok) { const result = await data.json(); if (result && result[fieldName]) { - const lookups = []; - const isArray = Array.isArray(result[fieldName]); - //multiselect lookups are arrays - if (isArray) { - result[fieldName].forEach((element: any) => { // eslint-disable-line @typescript-eslint/no-explicit-any - let value = element[lookupFieldName || 'Title']; - const dateVal = Date.parse(value); - if (!Number.isNaN(dateVal)) { - value = new Date(value).toLocaleDateString(); - } - lookups.push({ key: element.ID, name: value }); - }); - } - //single select lookups are objects - else { - const singleItem = result[fieldName]; - let value = singleItem[lookupFieldName || 'Title']; - const dateVal = Date.parse(value); - if (!Number.isNaN(dateVal)) { - value = new Date(value).toLocaleDateString(); - } - lookups.push({ key: singleItem.ID, name: value }); - } + const lookups: { key: number; name: string }[] = []; + const items = Array.isArray(result[fieldName]) ? result[fieldName] : Array.of(result[fieldName]); + items.forEach((element: any) => { // eslint-disable-line @typescript-eslint/no-explicit-any + let value = element[lookupFieldName || 'Title']; + if (isValidISODateString(value)) { + value = new Date(value).toLocaleDateString(); + } + lookups.push({ key: element.ID, name: value }); + }); return lookups; } }