UNPKG

@webiny/api-headless-cms-ddb-es

Version:

DynamoDB and Elasticsearch storage operations plugin for Headless CMS API.

77 lines (76 loc) 2.08 kB
import { CmsEntryOpenSearchFieldIndex } from "../abstractions/CmsEntryOpenSearchFieldIndex.js"; const convertTimeToNumber = time => { if (!time) { return null; } const [hours, minutes, seconds = 0] = time.split(":").map(Number); return hours * 60 * 60 + minutes * 60 + seconds; }; const convertNumberToTime = value => { if (value === undefined || value === null) { return null; } const hours = Math.floor(value / 60 / 60); const minutes = Math.floor((value - hours * 60 * 60) / 60); const seconds = Math.floor(value - hours * 60 * 60 - minutes * 60); return [hours, minutes, seconds].map(v => String(v).padStart(2, "0")).join(":"); }; const convertValueToIndex = (value, field) => { if (!value) { return null; } else if (field.settings?.type === "time") { return convertTimeToNumber(value); } return value; }; const convertValueFromIndex = (value, field) => { const type = field.settings?.type; if (type === "time") { return convertNumberToTime(value); } else if (!value) { return null; } else if (type === "dateTimeWithTimezone") { return value; } else if (type === "date") { const dateValue = new Date(value); return dateValue.toISOString().slice(0, 10); } return new Date(value).toISOString(); }; class DateTimeFieldIndexImpl { fieldType = "datetime"; unmappedType() { return "date"; } toIndex({ field, value }) { if (Array.isArray(value) === true) { return { value: value.map(v => { return convertValueToIndex(v, field); }) }; } return { value: convertValueToIndex(value, field) }; } fromIndex({ field, value }) { if (Array.isArray(value) === true) { return value.map(v => { return convertValueFromIndex(v, field); }); } return convertValueFromIndex(value, field); } } export const DateTimeFieldIndex = CmsEntryOpenSearchFieldIndex.createImplementation({ implementation: DateTimeFieldIndexImpl, dependencies: [] }); //# sourceMappingURL=DateTimeFieldIndex.js.map