@contentful/field-editor-date 1.2.7 → 1.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,28 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [1.3.3](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@1.3.2...@contentful/field-editor-date@1.3.3) (2023-03-10)
7
+
8
+ **Note:** Version bump only for package @contentful/field-editor-date
9
+
10
+ ## [1.3.2](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@1.3.1...@contentful/field-editor-date@1.3.2) (2023-03-07)
11
+
12
+ ### Bug Fixes
13
+
14
+ - update eslint disable comment ([#1363](https://github.com/contentful/field-editors/issues/1363)) ([952974e](https://github.com/contentful/field-editors/commit/952974ef37b396157e1fd3f7fdee0b4e808871eb))
15
+
16
+ ## [1.3.1](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@1.3.0...@contentful/field-editor-date@1.3.1) (2023-03-06)
17
+
18
+ ### Bug Fixes
19
+
20
+ - provide description for es-lint errors [] ([#1359](https://github.com/contentful/field-editors/issues/1359)) ([866fadf](https://github.com/contentful/field-editors/commit/866fadf808806a1310ed1df1c47e0b83487bf671))
21
+
22
+ # [1.3.0](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@1.2.7...@contentful/field-editor-date@1.3.0) (2023-03-06)
23
+
24
+ ### Features
25
+
26
+ - support disabling dateField [] ([#1356](https://github.com/contentful/field-editors/issues/1356)) ([a9032e3](https://github.com/contentful/field-editors/commit/a9032e3c7adf838f6861e7598ed6b433c9c769b9))
27
+
6
28
  ## [1.2.7](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@1.2.6...@contentful/field-editor-date@1.2.7) (2023-02-21)
7
29
 
8
30
  **Note:** Version bump only for package @contentful/field-editor-date
@@ -6,6 +6,7 @@ export interface DateEditorProps {
6
6
  * is the field disabled initially
7
7
  */
8
8
  isInitiallyDisabled: boolean;
9
+ isDisabled?: boolean;
9
10
  /**
10
11
  * sdk.field
11
12
  */
@@ -6,10 +6,10 @@ function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'defau
6
6
 
7
7
  var React = require('react');
8
8
  var React__default = _interopDefault(React);
9
- var emotion = require('emotion');
9
+ var f36Components = require('@contentful/f36-components');
10
10
  var tokens = _interopDefault(require('@contentful/f36-tokens'));
11
11
  var fieldEditorShared = require('@contentful/field-editor-shared');
12
- var f36Components = require('@contentful/f36-components');
12
+ var emotion = require('emotion');
13
13
  var moment = _interopDefault(require('moment'));
14
14
 
15
15
  function _extends() {
@@ -76,7 +76,7 @@ var DatepickerInput = function DatepickerInput(props) {
76
76
  var validInputFormats = ['hh:mm a', 'hh:mm A', 'h:mm a', 'h:mm A', 'hh:mm', 'k:mm', 'kk:mm', 'h a', 'h A', 'h', 'hh', 'HH'];
77
77
 
78
78
  function parseRawInput(raw) {
79
- var time = null; // eslint-disable-next-line -- TODO: describe this disable @typescript-eslint/prefer-for-of
79
+ var time = null; // eslint-disable-next-line -- TODO: refactor to use for of loop
80
80
 
81
81
  for (var i = 0; i < validInputFormats.length; i++) {
82
82
  var date = moment(raw, validInputFormats[i]);
@@ -175,7 +175,7 @@ var TimezonepickerInput = function TimezonepickerInput(_ref) {
175
175
  }));
176
176
  };
177
177
 
178
- // eslint-disable-next-line -- TODO: describe this disable no-restricted-imports
178
+ // eslint-disable-next-line -- TODO: move to date-fns
179
179
  var ZONE_RX = /(Z|[+-]\d{2}[:+]?\d{2})$/;
180
180
 
181
181
  function startOfToday(format) {
@@ -417,6 +417,8 @@ function DateEditor(props) {
417
417
  isInitiallyDisabled: props.isInitiallyDisabled,
418
418
  throttle: 0
419
419
  }, function (_ref3) {
420
+ var _props$isDisabled;
421
+
420
422
  var value = _ref3.value,
421
423
  disabled = _ref3.disabled,
422
424
  setValue = _ref3.setValue,
@@ -430,7 +432,7 @@ function DateEditor(props) {
430
432
  uses12hClock: uses12hClock,
431
433
  usesTimezone: usesTimezone,
432
434
  usesTime: usesTime,
433
- disabled: disabled,
435
+ disabled: (_props$isDisabled = props.isDisabled) != null ? _props$isDisabled : disabled,
434
436
  hasClear: Boolean(value),
435
437
  onChange: function onChange(data) {
436
438
  var fieldValue = buildFieldValue({
@@ -1 +1 @@
1
- {"version":3,"file":"field-editor-date.cjs.development.js","sources":["../src/DatepickerInput.tsx","../src/TimepickerInput.tsx","../src/utils/zoneOffsets.ts","../src/TimezonePickerInput.tsx","../src/utils/date.ts","../src/DateEditor.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\n\nimport { Datepicker } from '@contentful/f36-components';\nimport { css } from 'emotion';\n// eslint-disable-next-line -- TODO: describe this disable no-restricted-imports\nimport moment from 'moment';\n\nconst YEAR_RANGE = 100;\n\nconst styles = {\n root: css({\n maxWidth: '270px',\n }),\n};\n\nexport type DatePickerProps = {\n value?: moment.Moment;\n onChange: (val: moment.Moment | undefined) => void;\n disabled?: boolean;\n};\n\nexport const DatepickerInput = (props: DatePickerProps) => {\n const [fromDate, toDate] = useMemo(() => {\n const fromDate = new Date();\n fromDate.setFullYear(fromDate.getFullYear() - YEAR_RANGE);\n const toDate = new Date();\n toDate.setFullYear(toDate.getFullYear() + YEAR_RANGE);\n\n return [fromDate, toDate];\n }, []);\n\n // The DatepickerInput should be time and timezone agnostic,\n // thats why we don't use moment().toDate() to get Date object.\n // moment().toDate() takes into account time and timezone and converts it\n // based on your system timezone which can result in the date change.\n // e.g. if user has a timezone +02:00, moment('2022-09-16T00:00+04:00').toDate()\n // will return September 15 instead of September 16\n const dateObj = props.value?.toObject();\n const selectedDate = dateObj ? new Date(dateObj.years, dateObj.months, dateObj.date) : undefined;\n\n return (\n <Datepicker\n className={styles.root}\n selected={selectedDate}\n onSelect={(day) => {\n const momentDay = day ? moment(day) : undefined;\n props.onChange(momentDay);\n }}\n inputProps={{ isDisabled: props.disabled, placeholder: '' }}\n fromDate={fromDate}\n toDate={toDate}\n />\n );\n};\n","import React, { useState, useCallback, useEffect } from 'react';\n// eslint-disable-next-line -- TODO: describe this disable no-restricted-imports\nimport moment from 'moment';\nimport { css } from 'emotion';\n\nimport { TextInput, Flex } from '@contentful/f36-components';\n\nexport type TimepickerProps = {\n disabled: boolean;\n uses12hClock: boolean;\n onChange: (value: { time: string; ampm: string }) => void;\n time?: string;\n ampm?: string;\n};\n\nconst validInputFormats = [\n 'hh:mm a',\n 'hh:mm A',\n 'h:mm a',\n 'h:mm A',\n 'hh:mm',\n 'k:mm',\n 'kk:mm',\n 'h a',\n 'h A',\n 'h',\n 'hh',\n 'HH',\n];\n\nfunction parseRawInput(raw: string): moment.Moment | null {\n let time: moment.Moment | null = null;\n\n // eslint-disable-next-line -- TODO: describe this disable @typescript-eslint/prefer-for-of\n for (let i = 0; i < validInputFormats.length; i++) {\n const date = moment(raw, validInputFormats[i]);\n if (date.isValid()) {\n time = date;\n break;\n }\n }\n\n return time;\n}\n\nconst getDefaultTime = () => {\n return moment(`12:00 AM`, 'hh:mm A');\n};\n\nconst formatToString = (uses12hClock: boolean, value: moment.Moment): string => {\n return uses12hClock ? value.format('hh:mm A') : value.format('HH:mm');\n};\n\nexport const TimepickerInput = ({\n disabled,\n uses12hClock,\n time = '12:00',\n ampm = 'AM',\n onChange,\n}: TimepickerProps) => {\n const [selectedTime, setSelectedTime] = useState<string>(() => {\n return formatToString(uses12hClock, getDefaultTime());\n });\n\n useEffect(() => {\n setSelectedTime(formatToString(uses12hClock, moment(`${time} ${ampm}`, 'hh:mm A')));\n }, [time, ampm, uses12hClock]);\n\n const handleChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n setSelectedTime(e.currentTarget.value);\n }, []);\n\n const handleFocus = useCallback((e) => {\n e.preventDefault();\n e.target.select();\n }, []);\n\n const handleBlur = () => {\n const parsedTime = parseRawInput(selectedTime);\n const value = parsedTime ?? getDefaultTime();\n setSelectedTime(formatToString(uses12hClock, value));\n onChange({ time: value.format('hh:mm'), ampm: value.format('A') });\n };\n\n return (\n <Flex className={css({ width: '145px' })}>\n <TextInput\n aria-label=\"Select time\"\n placeholder={uses12hClock ? '12:00 AM' : '00:00'}\n date-time-type={uses12hClock ? '12' : '24'}\n testId=\"time-input\"\n value={selectedTime}\n isDisabled={disabled}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onChange={handleChange}\n />\n </Flex>\n );\n};\n","export const defaultZoneOffset = '+00:00';\n\nexport const zoneOffsets = [\n '-12:00',\n '-11:00',\n '-10:00',\n '-09:30',\n '-09:00',\n '-08:00',\n '-07:00',\n '-06:00',\n '-05:00',\n '-04:30',\n '-04:00',\n '-03:30',\n '-03:00',\n '-02:00',\n '-01:00',\n '+00:00',\n '+01:00',\n '+02:00',\n '+03:00',\n '+03:30',\n '+04:00',\n '+04:30',\n '+05:00',\n '+05:30',\n '+05:45',\n '+06:00',\n '+06:30',\n '+07:00',\n '+08:00',\n '+08:45',\n '+09:00',\n '+09:30',\n '+10:00',\n '+10:30',\n '+11:00',\n '+11:30',\n '+12:00',\n '+12:45',\n '+13:00',\n '+14:00',\n];\n","import React, { ChangeEvent } from 'react';\nimport { zoneOffsets, defaultZoneOffset } from './utils/zoneOffsets';\n\nimport { Select } from '@contentful/f36-components';\n\nexport type TimezonepickerProps = {\n disabled: boolean;\n onChange: (value: string) => void;\n value?: string;\n};\nexport const TimezonepickerInput = ({\n disabled,\n onChange,\n value = defaultZoneOffset,\n}: TimezonepickerProps) => {\n return (\n <Select\n aria-label=\"Select timezone\"\n testId=\"timezone-input\"\n value={value}\n isDisabled={disabled}\n onChange={(e: ChangeEvent<HTMLSelectElement>) => {\n onChange(e.currentTarget.value);\n }}>\n {zoneOffsets.map((offset) => (\n <Select.Option key={offset} value={offset}>\n UTC{offset}\n </Select.Option>\n ))}\n </Select>\n );\n};\n","// eslint-disable-next-line -- TODO: describe this disable no-restricted-imports\nimport moment from 'moment';\nimport { TimeResult } from '../types';\n\nconst ZONE_RX = /(Z|[+-]\\d{2}[:+]?\\d{2})$/;\n\nfunction startOfToday(format: string) {\n return moment().set({ hours: 0, minutes: 0 }).format(format);\n}\n\nfunction fieldValueToMoment(datetimeString: string | null | undefined): moment.Moment | null {\n if (!datetimeString) {\n return null;\n }\n\n const datetime = moment(datetimeString);\n if (ZONE_RX.test(datetimeString)) {\n datetime.utcOffset(datetimeString);\n }\n return datetime;\n}\n\nfunction timeFromUserInput(input: TimeResult) {\n const timeInput = input.time || '00:00';\n return moment.utc(timeInput + '!' + input.ampm, 'HH:mm!A');\n}\n\n/**\n * Convert the user input object into either a 'moment' value or an\n * invalid symbol.\n *\n * Success is indicated by returning '{valid: value}' and failure is\n * indicated by returning '{invalid: true}'. If 'input.date' is\n * 'null' we return '{valid: null}'\n */\nfunction datetimeFromUserInput(input: TimeResult): {\n invalid?: boolean;\n valid: moment.Moment | null;\n} {\n if (!input.date) {\n return { valid: null };\n }\n\n const time = timeFromUserInput(input);\n\n const date = moment\n .parseZone(input.utcOffset, 'Z')\n .set(input.date.toObject())\n .set({ hours: time.hours(), minutes: time.minutes() });\n\n if (date.isValid()) {\n return { valid: date };\n } else {\n return { invalid: true, valid: null };\n }\n}\n\n/**\n * Parse user input into a string that is stored in the API.\n *\n * Returns a sum type with either the string as the `valid` property\n * or the `invalid` property set to `false`.\n */\nexport function buildFieldValue({\n data,\n usesTime,\n usesTimezone,\n}: {\n data: TimeResult;\n usesTime: boolean;\n usesTimezone: boolean;\n}) {\n const date = datetimeFromUserInput(data);\n if (date.invalid) {\n return {\n invalid: true,\n };\n }\n\n let format;\n if (usesTimezone) {\n format = 'YYYY-MM-DDTHH:mmZ';\n } else if (usesTime) {\n format = 'YYYY-MM-DDTHH:mm';\n } else {\n format = 'YYYY-MM-DD';\n }\n return { valid: date?.valid ? date.valid.format(format) : null, invalid: false };\n}\n\nexport function getDefaultAMPM() {\n return 'AM';\n}\n\nexport function getDefaultUtcOffset() {\n return startOfToday('Z');\n}\n\n/**\n * Create the user input object from the field value.\n */\nexport function userInputFromDatetime({\n value,\n uses12hClock,\n}: {\n value: string | undefined | null;\n uses12hClock: boolean;\n}): TimeResult {\n const datetime = fieldValueToMoment(value);\n\n if (datetime) {\n const timeFormat = uses12hClock ? 'hh:mm' : 'HH:mm';\n return {\n date: datetime,\n time: datetime.format(timeFormat),\n ampm: datetime.format('A'),\n utcOffset: datetime.format('Z'),\n };\n } else {\n return {\n ampm: getDefaultAMPM(),\n utcOffset: getDefaultUtcOffset(),\n };\n }\n}\n","import * as React from 'react';\nimport { css } from 'emotion';\nimport tokens from '@contentful/f36-tokens';\nimport { FieldAPI, FieldConnector, ParametersAPI } from '@contentful/field-editor-shared';\nimport { DatepickerInput } from './DatepickerInput';\nimport { TimepickerInput } from './TimepickerInput';\nimport { TimezonepickerInput } from './TimezonePickerInput';\nimport {\n userInputFromDatetime,\n buildFieldValue,\n getDefaultAMPM,\n getDefaultUtcOffset,\n} from './utils/date';\nimport { TimeFormat, DateTimeFormat, TimeResult } from './types';\n\nimport { TextLink } from '@contentful/f36-components';\n\nexport interface DateEditorProps {\n /**\n * is the field disabled initially\n */\n isInitiallyDisabled: boolean;\n\n /**\n * sdk.field\n */\n field: FieldAPI;\n\n /**\n * sdk.parameters\n */\n parameters?: ParametersAPI & {\n instance?: {\n format?: DateTimeFormat;\n ampm?: TimeFormat;\n };\n };\n}\n\nconst styles = {\n root: css({\n display: 'flex',\n alignItems: 'center',\n }),\n separator: css({\n marginLeft: tokens.spacingM,\n }),\n};\n\nfunction useEffectWithoutFirstRender(callback: Function, deps: Array<any>) {\n const isFirstRun = React.useRef(true);\n React.useEffect(() => {\n if (isFirstRun.current) {\n isFirstRun.current = false;\n return;\n }\n callback();\n // eslint-disable-next-line react-hooks/exhaustive-deps -- TODO: Evaluate the dependencies\n }, deps);\n}\n\nfunction DateEditorContainer({\n initialValue,\n usesTime,\n usesTimezone,\n uses12hClock,\n disabled,\n hasClear,\n onChange,\n}: {\n initialValue: TimeResult;\n usesTime: boolean;\n usesTimezone: boolean;\n uses12hClock: boolean;\n disabled: boolean;\n hasClear: boolean;\n onChange: (value: TimeResult) => void;\n}) {\n const [value, setValue] = React.useState<TimeResult>(() => initialValue);\n\n useEffectWithoutFirstRender(() => {\n onChange(value);\n }, [value]);\n\n return (\n <div data-test-id=\"date-editor\" className={styles.root}>\n <DatepickerInput\n disabled={disabled}\n value={value.date}\n onChange={(date) => {\n setValue((value) => ({\n ...value,\n date,\n }));\n }}\n />\n {usesTime && (\n <>\n <div className={styles.separator} />\n <TimepickerInput\n disabled={disabled}\n time={value.time}\n ampm={value.ampm}\n onChange={({ time, ampm }) => {\n setValue((value) => ({\n ...value,\n time,\n ampm,\n }));\n }}\n uses12hClock={uses12hClock}\n />\n </>\n )}\n {usesTimezone && (\n <>\n <div className={styles.separator} />\n <TimezonepickerInput\n disabled={disabled}\n value={value.utcOffset}\n onChange={(utcOffset) => {\n setValue((value) => ({\n ...value,\n utcOffset,\n }));\n }}\n />\n </>\n )}\n {hasClear && (\n <>\n <div className={styles.separator} />\n <TextLink\n as=\"button\"\n isDisabled={disabled}\n testId=\"date-clear\"\n onClick={() => {\n setValue({\n date: undefined,\n time: undefined,\n ampm: getDefaultAMPM(),\n utcOffset: getDefaultUtcOffset(),\n });\n }}>\n Clear\n </TextLink>\n </>\n )}\n </div>\n );\n}\n\nexport function DateEditor(props: DateEditorProps) {\n const { field, parameters } = props;\n\n const formatParam = parameters?.instance?.format ?? 'timeZ';\n const ampmParam = parameters?.instance?.ampm ?? '24';\n\n const usesTime = formatParam !== 'dateonly';\n const usesTimezone = formatParam === 'timeZ';\n const uses12hClock = ampmParam === '12';\n\n return (\n <FieldConnector<string>\n field={field}\n isInitiallyDisabled={props.isInitiallyDisabled}\n throttle={0}>\n {({ value, disabled, setValue, externalReset }) => {\n const datetimeValue = userInputFromDatetime({\n value,\n uses12hClock,\n });\n return (\n <DateEditorContainer\n initialValue={datetimeValue}\n uses12hClock={uses12hClock}\n usesTimezone={usesTimezone}\n usesTime={usesTime}\n disabled={disabled}\n hasClear={Boolean(value)}\n onChange={(data) => {\n const fieldValue = buildFieldValue({ data, usesTime, usesTimezone });\n if (fieldValue.invalid) {\n return;\n }\n // if value is present - then override it with a new one\n // if value is not present - then set a new one if it's not nullable only\n if (Boolean(value) || (!value && Boolean(fieldValue.valid))) {\n setValue(fieldValue.valid);\n }\n }}\n key={`date-container-${externalReset}`}\n />\n );\n }}\n </FieldConnector>\n );\n}\n\nDateEditor.defaultProps = {\n isInitiallyDisabled: true,\n};\n"],"names":["YEAR_RANGE","styles","root","css","maxWidth","DatepickerInput","props","useMemo","fromDate","Date","setFullYear","getFullYear","toDate","dateObj","value","toObject","selectedDate","years","months","date","undefined","React","Datepicker","className","selected","onSelect","day","momentDay","moment","onChange","inputProps","isDisabled","disabled","placeholder","validInputFormats","parseRawInput","raw","time","i","length","isValid","getDefaultTime","formatToString","uses12hClock","format","TimepickerInput","ampm","useState","selectedTime","setSelectedTime","useEffect","handleChange","useCallback","e","currentTarget","handleFocus","preventDefault","target","select","handleBlur","parsedTime","Flex","width","TextInput","testId","onFocus","onBlur","defaultZoneOffset","zoneOffsets","TimezonepickerInput","Select","map","offset","Option","key","ZONE_RX","startOfToday","set","hours","minutes","fieldValueToMoment","datetimeString","datetime","test","utcOffset","timeFromUserInput","input","timeInput","utc","datetimeFromUserInput","valid","parseZone","invalid","buildFieldValue","data","usesTime","usesTimezone","getDefaultAMPM","getDefaultUtcOffset","userInputFromDatetime","timeFormat","display","alignItems","separator","marginLeft","tokens","spacingM","useEffectWithoutFirstRender","callback","deps","isFirstRun","current","DateEditorContainer","initialValue","hasClear","setValue","TextLink","as","onClick","DateEditor","field","parameters","formatParam","instance","ampmParam","FieldConnector","isInitiallyDisabled","throttle","externalReset","datetimeValue","Boolean","fieldValue","defaultProps"],"mappings":"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"}
1
+ {"version":3,"file":"field-editor-date.cjs.development.js","sources":["../src/DatepickerInput.tsx","../src/TimepickerInput.tsx","../src/utils/zoneOffsets.ts","../src/TimezonePickerInput.tsx","../src/utils/date.ts","../src/DateEditor.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\n\nimport { Datepicker } from '@contentful/f36-components';\nimport { css } from 'emotion';\n// eslint-disable-next-line -- TODO: move to date-fns\nimport moment from 'moment';\n\nconst YEAR_RANGE = 100;\n\nconst styles = {\n root: css({\n maxWidth: '270px',\n }),\n};\n\nexport type DatePickerProps = {\n value?: moment.Moment;\n onChange: (val: moment.Moment | undefined) => void;\n disabled?: boolean;\n};\n\nexport const DatepickerInput = (props: DatePickerProps) => {\n const [fromDate, toDate] = useMemo(() => {\n const fromDate = new Date();\n fromDate.setFullYear(fromDate.getFullYear() - YEAR_RANGE);\n const toDate = new Date();\n toDate.setFullYear(toDate.getFullYear() + YEAR_RANGE);\n\n return [fromDate, toDate];\n }, []);\n\n // The DatepickerInput should be time and timezone agnostic,\n // thats why we don't use moment().toDate() to get Date object.\n // moment().toDate() takes into account time and timezone and converts it\n // based on your system timezone which can result in the date change.\n // e.g. if user has a timezone +02:00, moment('2022-09-16T00:00+04:00').toDate()\n // will return September 15 instead of September 16\n const dateObj = props.value?.toObject();\n const selectedDate = dateObj ? new Date(dateObj.years, dateObj.months, dateObj.date) : undefined;\n\n return (\n <Datepicker\n className={styles.root}\n selected={selectedDate}\n onSelect={(day) => {\n const momentDay = day ? moment(day) : undefined;\n props.onChange(momentDay);\n }}\n inputProps={{ isDisabled: props.disabled, placeholder: '' }}\n fromDate={fromDate}\n toDate={toDate}\n />\n );\n};\n","import React, { useState, useCallback, useEffect } from 'react';\n// eslint-disable-next-line -- TODO: move to date-fns\nimport moment from 'moment';\nimport { css } from 'emotion';\n\nimport { TextInput, Flex } from '@contentful/f36-components';\n\nexport type TimepickerProps = {\n disabled: boolean;\n uses12hClock: boolean;\n onChange: (value: { time: string; ampm: string }) => void;\n time?: string;\n ampm?: string;\n};\n\nconst validInputFormats = [\n 'hh:mm a',\n 'hh:mm A',\n 'h:mm a',\n 'h:mm A',\n 'hh:mm',\n 'k:mm',\n 'kk:mm',\n 'h a',\n 'h A',\n 'h',\n 'hh',\n 'HH',\n];\n\nfunction parseRawInput(raw: string): moment.Moment | null {\n let time: moment.Moment | null = null;\n\n // eslint-disable-next-line -- TODO: refactor to use for of loop\n for (let i = 0; i < validInputFormats.length; i++) {\n const date = moment(raw, validInputFormats[i]);\n if (date.isValid()) {\n time = date;\n break;\n }\n }\n\n return time;\n}\n\nconst getDefaultTime = () => {\n return moment(`12:00 AM`, 'hh:mm A');\n};\n\nconst formatToString = (uses12hClock: boolean, value: moment.Moment): string => {\n return uses12hClock ? value.format('hh:mm A') : value.format('HH:mm');\n};\n\nexport const TimepickerInput = ({\n disabled,\n uses12hClock,\n time = '12:00',\n ampm = 'AM',\n onChange,\n}: TimepickerProps) => {\n const [selectedTime, setSelectedTime] = useState<string>(() => {\n return formatToString(uses12hClock, getDefaultTime());\n });\n\n useEffect(() => {\n setSelectedTime(formatToString(uses12hClock, moment(`${time} ${ampm}`, 'hh:mm A')));\n }, [time, ampm, uses12hClock]);\n\n const handleChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n setSelectedTime(e.currentTarget.value);\n }, []);\n\n const handleFocus = useCallback((e) => {\n e.preventDefault();\n e.target.select();\n }, []);\n\n const handleBlur = () => {\n const parsedTime = parseRawInput(selectedTime);\n const value = parsedTime ?? getDefaultTime();\n setSelectedTime(formatToString(uses12hClock, value));\n onChange({ time: value.format('hh:mm'), ampm: value.format('A') });\n };\n\n return (\n <Flex className={css({ width: '145px' })}>\n <TextInput\n aria-label=\"Select time\"\n placeholder={uses12hClock ? '12:00 AM' : '00:00'}\n date-time-type={uses12hClock ? '12' : '24'}\n testId=\"time-input\"\n value={selectedTime}\n isDisabled={disabled}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onChange={handleChange}\n />\n </Flex>\n );\n};\n","export const defaultZoneOffset = '+00:00';\n\nexport const zoneOffsets = [\n '-12:00',\n '-11:00',\n '-10:00',\n '-09:30',\n '-09:00',\n '-08:00',\n '-07:00',\n '-06:00',\n '-05:00',\n '-04:30',\n '-04:00',\n '-03:30',\n '-03:00',\n '-02:00',\n '-01:00',\n '+00:00',\n '+01:00',\n '+02:00',\n '+03:00',\n '+03:30',\n '+04:00',\n '+04:30',\n '+05:00',\n '+05:30',\n '+05:45',\n '+06:00',\n '+06:30',\n '+07:00',\n '+08:00',\n '+08:45',\n '+09:00',\n '+09:30',\n '+10:00',\n '+10:30',\n '+11:00',\n '+11:30',\n '+12:00',\n '+12:45',\n '+13:00',\n '+14:00',\n];\n","import React, { ChangeEvent } from 'react';\nimport { zoneOffsets, defaultZoneOffset } from './utils/zoneOffsets';\n\nimport { Select } from '@contentful/f36-components';\n\nexport type TimezonepickerProps = {\n disabled: boolean;\n onChange: (value: string) => void;\n value?: string;\n};\nexport const TimezonepickerInput = ({\n disabled,\n onChange,\n value = defaultZoneOffset,\n}: TimezonepickerProps) => {\n return (\n <Select\n aria-label=\"Select timezone\"\n testId=\"timezone-input\"\n value={value}\n isDisabled={disabled}\n onChange={(e: ChangeEvent<HTMLSelectElement>) => {\n onChange(e.currentTarget.value);\n }}>\n {zoneOffsets.map((offset) => (\n <Select.Option key={offset} value={offset}>\n UTC{offset}\n </Select.Option>\n ))}\n </Select>\n );\n};\n","// eslint-disable-next-line -- TODO: move to date-fns\nimport moment from 'moment';\nimport { TimeResult } from '../types';\n\nconst ZONE_RX = /(Z|[+-]\\d{2}[:+]?\\d{2})$/;\n\nfunction startOfToday(format: string) {\n return moment().set({ hours: 0, minutes: 0 }).format(format);\n}\n\nfunction fieldValueToMoment(datetimeString: string | null | undefined): moment.Moment | null {\n if (!datetimeString) {\n return null;\n }\n\n const datetime = moment(datetimeString);\n if (ZONE_RX.test(datetimeString)) {\n datetime.utcOffset(datetimeString);\n }\n return datetime;\n}\n\nfunction timeFromUserInput(input: TimeResult) {\n const timeInput = input.time || '00:00';\n return moment.utc(timeInput + '!' + input.ampm, 'HH:mm!A');\n}\n\n/**\n * Convert the user input object into either a 'moment' value or an\n * invalid symbol.\n *\n * Success is indicated by returning '{valid: value}' and failure is\n * indicated by returning '{invalid: true}'. If 'input.date' is\n * 'null' we return '{valid: null}'\n */\nfunction datetimeFromUserInput(input: TimeResult): {\n invalid?: boolean;\n valid: moment.Moment | null;\n} {\n if (!input.date) {\n return { valid: null };\n }\n\n const time = timeFromUserInput(input);\n\n const date = moment\n .parseZone(input.utcOffset, 'Z')\n .set(input.date.toObject())\n .set({ hours: time.hours(), minutes: time.minutes() });\n\n if (date.isValid()) {\n return { valid: date };\n } else {\n return { invalid: true, valid: null };\n }\n}\n\n/**\n * Parse user input into a string that is stored in the API.\n *\n * Returns a sum type with either the string as the `valid` property\n * or the `invalid` property set to `false`.\n */\nexport function buildFieldValue({\n data,\n usesTime,\n usesTimezone,\n}: {\n data: TimeResult;\n usesTime: boolean;\n usesTimezone: boolean;\n}) {\n const date = datetimeFromUserInput(data);\n if (date.invalid) {\n return {\n invalid: true,\n };\n }\n\n let format;\n if (usesTimezone) {\n format = 'YYYY-MM-DDTHH:mmZ';\n } else if (usesTime) {\n format = 'YYYY-MM-DDTHH:mm';\n } else {\n format = 'YYYY-MM-DD';\n }\n return { valid: date?.valid ? date.valid.format(format) : null, invalid: false };\n}\n\nexport function getDefaultAMPM() {\n return 'AM';\n}\n\nexport function getDefaultUtcOffset() {\n return startOfToday('Z');\n}\n\n/**\n * Create the user input object from the field value.\n */\nexport function userInputFromDatetime({\n value,\n uses12hClock,\n}: {\n value: string | undefined | null;\n uses12hClock: boolean;\n}): TimeResult {\n const datetime = fieldValueToMoment(value);\n\n if (datetime) {\n const timeFormat = uses12hClock ? 'hh:mm' : 'HH:mm';\n return {\n date: datetime,\n time: datetime.format(timeFormat),\n ampm: datetime.format('A'),\n utcOffset: datetime.format('Z'),\n };\n } else {\n return {\n ampm: getDefaultAMPM(),\n utcOffset: getDefaultUtcOffset(),\n };\n }\n}\n","import * as React from 'react';\n\nimport { TextLink } from '@contentful/f36-components';\nimport tokens from '@contentful/f36-tokens';\nimport { FieldAPI, FieldConnector, ParametersAPI } from '@contentful/field-editor-shared';\nimport { css } from 'emotion';\n\nimport { DatepickerInput } from './DatepickerInput';\nimport { TimepickerInput } from './TimepickerInput';\nimport { TimezonepickerInput } from './TimezonePickerInput';\nimport { TimeFormat, DateTimeFormat, TimeResult } from './types';\nimport {\n userInputFromDatetime,\n buildFieldValue,\n getDefaultAMPM,\n getDefaultUtcOffset,\n} from './utils/date';\n\n\nexport interface DateEditorProps {\n /**\n * is the field disabled initially\n */\n isInitiallyDisabled: boolean;\n\n /*\n * is the field manually disabled\n */\n isDisabled?: boolean;\n\n /**\n * sdk.field\n */\n field: FieldAPI;\n\n /**\n * sdk.parameters\n */\n parameters?: ParametersAPI & {\n instance?: {\n format?: DateTimeFormat;\n ampm?: TimeFormat;\n };\n };\n}\n\nconst styles = {\n root: css({\n display: 'flex',\n alignItems: 'center',\n }),\n separator: css({\n marginLeft: tokens.spacingM,\n }),\n};\n\nfunction useEffectWithoutFirstRender(callback: Function, deps: Array<any>) {\n const isFirstRun = React.useRef(true);\n React.useEffect(() => {\n if (isFirstRun.current) {\n isFirstRun.current = false;\n return;\n }\n callback();\n // eslint-disable-next-line react-hooks/exhaustive-deps -- TODO: Evaluate the dependencies\n }, deps);\n}\n\nfunction DateEditorContainer({\n initialValue,\n usesTime,\n usesTimezone,\n uses12hClock,\n disabled,\n hasClear,\n onChange,\n}: {\n initialValue: TimeResult;\n usesTime: boolean;\n usesTimezone: boolean;\n uses12hClock: boolean;\n disabled: boolean;\n hasClear: boolean;\n onChange: (value: TimeResult) => void;\n}) {\n const [value, setValue] = React.useState<TimeResult>(() => initialValue);\n\n useEffectWithoutFirstRender(() => {\n onChange(value);\n }, [value]);\n\n return (\n <div data-test-id=\"date-editor\" className={styles.root}>\n <DatepickerInput\n disabled={disabled}\n value={value.date}\n onChange={(date) => {\n setValue((value) => ({\n ...value,\n date,\n }));\n }}\n />\n {usesTime && (\n <>\n <div className={styles.separator} />\n <TimepickerInput\n disabled={disabled}\n time={value.time}\n ampm={value.ampm}\n onChange={({ time, ampm }) => {\n setValue((value) => ({\n ...value,\n time,\n ampm,\n }));\n }}\n uses12hClock={uses12hClock}\n />\n </>\n )}\n {usesTimezone && (\n <>\n <div className={styles.separator} />\n <TimezonepickerInput\n disabled={disabled}\n value={value.utcOffset}\n onChange={(utcOffset) => {\n setValue((value) => ({\n ...value,\n utcOffset,\n }));\n }}\n />\n </>\n )}\n {hasClear && (\n <>\n <div className={styles.separator} />\n <TextLink\n as=\"button\"\n isDisabled={disabled}\n testId=\"date-clear\"\n onClick={() => {\n setValue({\n date: undefined,\n time: undefined,\n ampm: getDefaultAMPM(),\n utcOffset: getDefaultUtcOffset(),\n });\n }}\n >\n Clear\n </TextLink>\n </>\n )}\n </div>\n );\n}\n\nexport function DateEditor(props: DateEditorProps) {\n const { field, parameters } = props;\n\n const formatParam = parameters?.instance?.format ?? 'timeZ';\n const ampmParam = parameters?.instance?.ampm ?? '24';\n\n const usesTime = formatParam !== 'dateonly';\n const usesTimezone = formatParam === 'timeZ';\n const uses12hClock = ampmParam === '12';\n\n return (\n <FieldConnector<string>\n field={field}\n isInitiallyDisabled={props.isInitiallyDisabled}\n throttle={0}\n >\n {({ value, disabled, setValue, externalReset }) => {\n const datetimeValue = userInputFromDatetime({\n value,\n uses12hClock,\n });\n return (\n <DateEditorContainer\n initialValue={datetimeValue}\n uses12hClock={uses12hClock}\n usesTimezone={usesTimezone}\n usesTime={usesTime}\n disabled={props.isDisabled ?? disabled}\n hasClear={Boolean(value)}\n onChange={(data) => {\n const fieldValue = buildFieldValue({ data, usesTime, usesTimezone });\n if (fieldValue.invalid) {\n return;\n }\n // if value is present - then override it with a new one\n // if value is not present - then set a new one if it's not nullable only\n if (Boolean(value) || (!value && Boolean(fieldValue.valid))) {\n setValue(fieldValue.valid);\n }\n }}\n key={`date-container-${externalReset}`}\n />\n );\n }}\n </FieldConnector>\n );\n}\n\nDateEditor.defaultProps = {\n isInitiallyDisabled: true,\n};\n"],"names":["YEAR_RANGE","styles","root","css","maxWidth","DatepickerInput","props","useMemo","fromDate","Date","setFullYear","getFullYear","toDate","dateObj","value","toObject","selectedDate","years","months","date","undefined","React","Datepicker","className","selected","onSelect","day","momentDay","moment","onChange","inputProps","isDisabled","disabled","placeholder","validInputFormats","parseRawInput","raw","time","i","length","isValid","getDefaultTime","formatToString","uses12hClock","format","TimepickerInput","ampm","useState","selectedTime","setSelectedTime","useEffect","handleChange","useCallback","e","currentTarget","handleFocus","preventDefault","target","select","handleBlur","parsedTime","Flex","width","TextInput","testId","onFocus","onBlur","defaultZoneOffset","zoneOffsets","TimezonepickerInput","Select","map","offset","Option","key","ZONE_RX","startOfToday","set","hours","minutes","fieldValueToMoment","datetimeString","datetime","test","utcOffset","timeFromUserInput","input","timeInput","utc","datetimeFromUserInput","valid","parseZone","invalid","buildFieldValue","data","usesTime","usesTimezone","getDefaultAMPM","getDefaultUtcOffset","userInputFromDatetime","timeFormat","display","alignItems","separator","marginLeft","tokens","spacingM","useEffectWithoutFirstRender","callback","deps","isFirstRun","current","DateEditorContainer","initialValue","hasClear","setValue","TextLink","as","onClick","DateEditor","field","parameters","formatParam","instance","ampmParam","FieldConnector","isInitiallyDisabled","throttle","externalReset","datetimeValue","Boolean","fieldValue","defaultProps"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";function e(e){return e&&"object"==typeof e&&"default"in e?e.default:e}Object.defineProperty(exports,"__esModule",{value:!0});var t=require("react"),n=e(t),a=require("emotion"),r=e(require("@contentful/f36-tokens")),l=require("@contentful/field-editor-shared"),i=require("@contentful/f36-components"),u=e(require("moment"));function o(){return(o=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e}).apply(this,arguments)}var s={root:a.css({maxWidth:"270px"})},m=function(e){var a,r=t.useMemo((function(){var e=new Date;e.setFullYear(e.getFullYear()-100);var t=new Date;return t.setFullYear(t.getFullYear()+100),[e,t]}),[]),l=r[0],o=r[1],m=null==(a=e.value)?void 0:a.toObject(),c=m?new Date(m.years,m.months,m.date):void 0;return n.createElement(i.Datepicker,{className:s.root,selected:c,onSelect:function(t){var n=t?u(t):void 0;e.onChange(n)},inputProps:{isDisabled:e.disabled,placeholder:""},fromDate:l,toDate:o})},c=["hh:mm a","hh:mm A","h:mm a","h:mm A","hh:mm","k:mm","kk:mm","h a","h A","h","hh","HH"],d=function(){return u("12:00 AM","hh:mm A")},f=function(e,t){return t.format(e?"hh:mm A":"HH:mm")},v=function(e){var r=e.disabled,l=e.uses12hClock,o=e.time,s=void 0===o?"12:00":o,m=e.ampm,v=void 0===m?"AM":m,h=e.onChange,p=t.useState((function(){return f(l,d())})),b=p[0],g=p[1];t.useEffect((function(){g(f(l,u(s+" "+v,"hh:mm A")))}),[s,v,l]);var C=t.useCallback((function(e){g(e.currentTarget.value)}),[]),D=t.useCallback((function(e){e.preventDefault(),e.target.select()}),[]);return n.createElement(i.Flex,{className:a.css({width:"145px"})},n.createElement(i.TextInput,{"aria-label":"Select time",placeholder:l?"12:00 AM":"00:00","date-time-type":l?"12":"24",testId:"time-input",value:b,isDisabled:r,onFocus:D,onBlur:function(){var e=function(e){for(var t=null,n=0;n<c.length;n++){var a=u(e,c[n]);if(a.isValid()){t=a;break}}return t}(b),t=null!=e?e:d();g(f(l,t)),h({time:t.format("hh:mm"),ampm:t.format("A")})},onChange:C}))},h=["-12:00","-11:00","-10:00","-09:30","-09:00","-08:00","-07:00","-06:00","-05:00","-04:30","-04:00","-03:30","-03:00","-02:00","-01:00","+00:00","+01:00","+02:00","+03:00","+03:30","+04:00","+04:30","+05:00","+05:30","+05:45","+06:00","+06:30","+07:00","+08:00","+08:45","+09:00","+09:30","+10:00","+10:30","+11:00","+11:30","+12:00","+12:45","+13:00","+14:00"],p=function(e){var t=e.onChange,a=e.value;return n.createElement(i.Select,{"aria-label":"Select timezone",testId:"timezone-input",value:void 0===a?"+00:00":a,isDisabled:e.disabled,onChange:function(e){t(e.currentTarget.value)}},h.map((function(e){return n.createElement(i.Select.Option,{key:e,value:e},"UTC",e)})))},b=/(Z|[+-]\d{2}[:+]?\d{2})$/;function g(){return u().set({hours:0,minutes:0}).format("Z")}var C={root:a.css({display:"flex",alignItems:"center"}),separator:a.css({marginLeft:r.spacingM})};function D(e){var n,a,r,l=e.initialValue,u=e.usesTime,s=e.usesTimezone,c=e.uses12hClock,d=e.disabled,f=e.hasClear,h=e.onChange,b=t.useState((function(){return l})),D=b[0],E=b[1];return n=function(){h(D)},a=[D],r=t.useRef(!0),t.useEffect((function(){r.current?r.current=!1:n()}),a),t.createElement("div",{"data-test-id":"date-editor",className:C.root},t.createElement(m,{disabled:d,value:D.date,onChange:function(e){E((function(t){return o({},t,{date:e})}))}}),u&&t.createElement(t.Fragment,null,t.createElement("div",{className:C.separator}),t.createElement(v,{disabled:d,time:D.time,ampm:D.ampm,onChange:function(e){var t=e.time,n=e.ampm;E((function(e){return o({},e,{time:t,ampm:n})}))},uses12hClock:c})),s&&t.createElement(t.Fragment,null,t.createElement("div",{className:C.separator}),t.createElement(p,{disabled:d,value:D.utcOffset,onChange:function(e){E((function(t){return o({},t,{utcOffset:e})}))}})),f&&t.createElement(t.Fragment,null,t.createElement("div",{className:C.separator}),t.createElement(i.TextLink,{as:"button",isDisabled:d,testId:"date-clear",onClick:function(){E({date:void 0,time:void 0,ampm:"AM",utcOffset:g()})}},"Clear")))}function E(e){var n,a,r,i,o=e.parameters,s=null!=(n=null==o||null==(a=o.instance)?void 0:a.format)?n:"timeZ",m=null!=(r=null==o||null==(i=o.instance)?void 0:i.ampm)?r:"24",c="dateonly"!==s,d="timeZ"===s,f="12"===m;return t.createElement(l.FieldConnector,{field:e.field,isInitiallyDisabled:e.isInitiallyDisabled,throttle:0},(function(e){var n=e.value,a=e.disabled,r=e.setValue,l=e.externalReset,i=function(e){var t=e.uses12hClock,n=function(e){if(!e)return null;var t=u(e);return b.test(e)&&t.utcOffset(e),t}(e.value);return n?{date:n,time:n.format(t?"hh:mm":"HH:mm"),ampm:n.format("A"),utcOffset:n.format("Z")}:{ampm:"AM",utcOffset:g()}}({value:n,uses12hClock:f});return t.createElement(D,{initialValue:i,uses12hClock:f,usesTimezone:d,usesTime:c,disabled:a,hasClear:Boolean(n),onChange:function(e){var t=function(e){var t=e.usesTime,n=e.usesTimezone,a=function(e){if(!e.date)return{valid:null};var t=function(e){return u.utc((e.time||"00:00")+"!"+e.ampm,"HH:mm!A")}(e),n=u.parseZone(e.utcOffset,"Z").set(e.date.toObject()).set({hours:t.hours(),minutes:t.minutes()});return n.isValid()?{valid:n}:{invalid:!0,valid:null}}(e.data);return a.invalid?{invalid:!0}:{valid:null!=a&&a.valid?a.valid.format(n?"YYYY-MM-DDTHH:mmZ":t?"YYYY-MM-DDTHH:mm":"YYYY-MM-DD"):null,invalid:!1}}({data:e,usesTime:c,usesTimezone:d});t.invalid||(Boolean(n)||!n&&Boolean(t.valid))&&r(t.valid)},key:"date-container-"+l})}))}E.defaultProps={isInitiallyDisabled:!0},exports.DateEditor=E,exports.zoneOffsets=h;
1
+ "use strict";function e(e){return e&&"object"==typeof e&&"default"in e?e.default:e}Object.defineProperty(exports,"__esModule",{value:!0});var t=require("react"),n=e(t),a=require("@contentful/f36-components"),r=e(require("@contentful/f36-tokens")),l=require("@contentful/field-editor-shared"),i=require("emotion"),u=e(require("moment"));function o(){return(o=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e}).apply(this,arguments)}var s={root:i.css({maxWidth:"270px"})},m=function(e){var r,l=t.useMemo((function(){var e=new Date;e.setFullYear(e.getFullYear()-100);var t=new Date;return t.setFullYear(t.getFullYear()+100),[e,t]}),[]),i=l[0],o=l[1],m=null==(r=e.value)?void 0:r.toObject(),c=m?new Date(m.years,m.months,m.date):void 0;return n.createElement(a.Datepicker,{className:s.root,selected:c,onSelect:function(t){var n=t?u(t):void 0;e.onChange(n)},inputProps:{isDisabled:e.disabled,placeholder:""},fromDate:i,toDate:o})},c=["hh:mm a","hh:mm A","h:mm a","h:mm A","hh:mm","k:mm","kk:mm","h a","h A","h","hh","HH"],d=function(){return u("12:00 AM","hh:mm A")},f=function(e,t){return t.format(e?"hh:mm A":"HH:mm")},v=function(e){var r=e.disabled,l=e.uses12hClock,o=e.time,s=void 0===o?"12:00":o,m=e.ampm,v=void 0===m?"AM":m,h=e.onChange,p=t.useState((function(){return f(l,d())})),b=p[0],g=p[1];t.useEffect((function(){g(f(l,u(s+" "+v,"hh:mm A")))}),[s,v,l]);var C=t.useCallback((function(e){g(e.currentTarget.value)}),[]),D=t.useCallback((function(e){e.preventDefault(),e.target.select()}),[]);return n.createElement(a.Flex,{className:i.css({width:"145px"})},n.createElement(a.TextInput,{"aria-label":"Select time",placeholder:l?"12:00 AM":"00:00","date-time-type":l?"12":"24",testId:"time-input",value:b,isDisabled:r,onFocus:D,onBlur:function(){var e=function(e){for(var t=null,n=0;n<c.length;n++){var a=u(e,c[n]);if(a.isValid()){t=a;break}}return t}(b),t=null!=e?e:d();g(f(l,t)),h({time:t.format("hh:mm"),ampm:t.format("A")})},onChange:C}))},h=["-12:00","-11:00","-10:00","-09:30","-09:00","-08:00","-07:00","-06:00","-05:00","-04:30","-04:00","-03:30","-03:00","-02:00","-01:00","+00:00","+01:00","+02:00","+03:00","+03:30","+04:00","+04:30","+05:00","+05:30","+05:45","+06:00","+06:30","+07:00","+08:00","+08:45","+09:00","+09:30","+10:00","+10:30","+11:00","+11:30","+12:00","+12:45","+13:00","+14:00"],p=function(e){var t=e.onChange,r=e.value;return n.createElement(a.Select,{"aria-label":"Select timezone",testId:"timezone-input",value:void 0===r?"+00:00":r,isDisabled:e.disabled,onChange:function(e){t(e.currentTarget.value)}},h.map((function(e){return n.createElement(a.Select.Option,{key:e,value:e},"UTC",e)})))},b=/(Z|[+-]\d{2}[:+]?\d{2})$/;function g(){return u().set({hours:0,minutes:0}).format("Z")}var C={root:i.css({display:"flex",alignItems:"center"}),separator:i.css({marginLeft:r.spacingM})};function D(e){var n,r,l,i=e.initialValue,u=e.usesTime,s=e.usesTimezone,c=e.uses12hClock,d=e.disabled,f=e.hasClear,h=e.onChange,b=t.useState((function(){return i})),D=b[0],E=b[1];return n=function(){h(D)},r=[D],l=t.useRef(!0),t.useEffect((function(){l.current?l.current=!1:n()}),r),t.createElement("div",{"data-test-id":"date-editor",className:C.root},t.createElement(m,{disabled:d,value:D.date,onChange:function(e){E((function(t){return o({},t,{date:e})}))}}),u&&t.createElement(t.Fragment,null,t.createElement("div",{className:C.separator}),t.createElement(v,{disabled:d,time:D.time,ampm:D.ampm,onChange:function(e){var t=e.time,n=e.ampm;E((function(e){return o({},e,{time:t,ampm:n})}))},uses12hClock:c})),s&&t.createElement(t.Fragment,null,t.createElement("div",{className:C.separator}),t.createElement(p,{disabled:d,value:D.utcOffset,onChange:function(e){E((function(t){return o({},t,{utcOffset:e})}))}})),f&&t.createElement(t.Fragment,null,t.createElement("div",{className:C.separator}),t.createElement(a.TextLink,{as:"button",isDisabled:d,testId:"date-clear",onClick:function(){E({date:void 0,time:void 0,ampm:"AM",utcOffset:g()})}},"Clear")))}function E(e){var n,a,r,i,o=e.parameters,s=null!=(n=null==o||null==(a=o.instance)?void 0:a.format)?n:"timeZ",m=null!=(r=null==o||null==(i=o.instance)?void 0:i.ampm)?r:"24",c="dateonly"!==s,d="timeZ"===s,f="12"===m;return t.createElement(l.FieldConnector,{field:e.field,isInitiallyDisabled:e.isInitiallyDisabled,throttle:0},(function(n){var a,r=n.value,l=n.disabled,i=n.setValue,o=n.externalReset,s=function(e){var t=e.uses12hClock,n=function(e){if(!e)return null;var t=u(e);return b.test(e)&&t.utcOffset(e),t}(e.value);return n?{date:n,time:n.format(t?"hh:mm":"HH:mm"),ampm:n.format("A"),utcOffset:n.format("Z")}:{ampm:"AM",utcOffset:g()}}({value:r,uses12hClock:f});return t.createElement(D,{initialValue:s,uses12hClock:f,usesTimezone:d,usesTime:c,disabled:null!=(a=e.isDisabled)?a:l,hasClear:Boolean(r),onChange:function(e){var t=function(e){var t=e.usesTime,n=e.usesTimezone,a=function(e){if(!e.date)return{valid:null};var t=function(e){return u.utc((e.time||"00:00")+"!"+e.ampm,"HH:mm!A")}(e),n=u.parseZone(e.utcOffset,"Z").set(e.date.toObject()).set({hours:t.hours(),minutes:t.minutes()});return n.isValid()?{valid:n}:{invalid:!0,valid:null}}(e.data);return a.invalid?{invalid:!0}:{valid:null!=a&&a.valid?a.valid.format(n?"YYYY-MM-DDTHH:mmZ":t?"YYYY-MM-DDTHH:mm":"YYYY-MM-DD"):null,invalid:!1}}({data:e,usesTime:c,usesTimezone:d});t.invalid||(Boolean(r)||!r&&Boolean(t.valid))&&i(t.valid)},key:"date-container-"+o})}))}E.defaultProps={isInitiallyDisabled:!0},exports.DateEditor=E,exports.zoneOffsets=h;
2
2
  //# sourceMappingURL=field-editor-date.cjs.production.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"field-editor-date.cjs.production.min.js","sources":["../src/DatepickerInput.tsx","../src/TimepickerInput.tsx","../src/utils/zoneOffsets.ts","../src/TimezonePickerInput.tsx","../src/utils/date.ts","../src/DateEditor.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\n\nimport { Datepicker } from '@contentful/f36-components';\nimport { css } from 'emotion';\n// eslint-disable-next-line -- TODO: describe this disable no-restricted-imports\nimport moment from 'moment';\n\nconst YEAR_RANGE = 100;\n\nconst styles = {\n root: css({\n maxWidth: '270px',\n }),\n};\n\nexport type DatePickerProps = {\n value?: moment.Moment;\n onChange: (val: moment.Moment | undefined) => void;\n disabled?: boolean;\n};\n\nexport const DatepickerInput = (props: DatePickerProps) => {\n const [fromDate, toDate] = useMemo(() => {\n const fromDate = new Date();\n fromDate.setFullYear(fromDate.getFullYear() - YEAR_RANGE);\n const toDate = new Date();\n toDate.setFullYear(toDate.getFullYear() + YEAR_RANGE);\n\n return [fromDate, toDate];\n }, []);\n\n // The DatepickerInput should be time and timezone agnostic,\n // thats why we don't use moment().toDate() to get Date object.\n // moment().toDate() takes into account time and timezone and converts it\n // based on your system timezone which can result in the date change.\n // e.g. if user has a timezone +02:00, moment('2022-09-16T00:00+04:00').toDate()\n // will return September 15 instead of September 16\n const dateObj = props.value?.toObject();\n const selectedDate = dateObj ? new Date(dateObj.years, dateObj.months, dateObj.date) : undefined;\n\n return (\n <Datepicker\n className={styles.root}\n selected={selectedDate}\n onSelect={(day) => {\n const momentDay = day ? moment(day) : undefined;\n props.onChange(momentDay);\n }}\n inputProps={{ isDisabled: props.disabled, placeholder: '' }}\n fromDate={fromDate}\n toDate={toDate}\n />\n );\n};\n","import React, { useState, useCallback, useEffect } from 'react';\n// eslint-disable-next-line -- TODO: describe this disable no-restricted-imports\nimport moment from 'moment';\nimport { css } from 'emotion';\n\nimport { TextInput, Flex } from '@contentful/f36-components';\n\nexport type TimepickerProps = {\n disabled: boolean;\n uses12hClock: boolean;\n onChange: (value: { time: string; ampm: string }) => void;\n time?: string;\n ampm?: string;\n};\n\nconst validInputFormats = [\n 'hh:mm a',\n 'hh:mm A',\n 'h:mm a',\n 'h:mm A',\n 'hh:mm',\n 'k:mm',\n 'kk:mm',\n 'h a',\n 'h A',\n 'h',\n 'hh',\n 'HH',\n];\n\nfunction parseRawInput(raw: string): moment.Moment | null {\n let time: moment.Moment | null = null;\n\n // eslint-disable-next-line -- TODO: describe this disable @typescript-eslint/prefer-for-of\n for (let i = 0; i < validInputFormats.length; i++) {\n const date = moment(raw, validInputFormats[i]);\n if (date.isValid()) {\n time = date;\n break;\n }\n }\n\n return time;\n}\n\nconst getDefaultTime = () => {\n return moment(`12:00 AM`, 'hh:mm A');\n};\n\nconst formatToString = (uses12hClock: boolean, value: moment.Moment): string => {\n return uses12hClock ? value.format('hh:mm A') : value.format('HH:mm');\n};\n\nexport const TimepickerInput = ({\n disabled,\n uses12hClock,\n time = '12:00',\n ampm = 'AM',\n onChange,\n}: TimepickerProps) => {\n const [selectedTime, setSelectedTime] = useState<string>(() => {\n return formatToString(uses12hClock, getDefaultTime());\n });\n\n useEffect(() => {\n setSelectedTime(formatToString(uses12hClock, moment(`${time} ${ampm}`, 'hh:mm A')));\n }, [time, ampm, uses12hClock]);\n\n const handleChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n setSelectedTime(e.currentTarget.value);\n }, []);\n\n const handleFocus = useCallback((e) => {\n e.preventDefault();\n e.target.select();\n }, []);\n\n const handleBlur = () => {\n const parsedTime = parseRawInput(selectedTime);\n const value = parsedTime ?? getDefaultTime();\n setSelectedTime(formatToString(uses12hClock, value));\n onChange({ time: value.format('hh:mm'), ampm: value.format('A') });\n };\n\n return (\n <Flex className={css({ width: '145px' })}>\n <TextInput\n aria-label=\"Select time\"\n placeholder={uses12hClock ? '12:00 AM' : '00:00'}\n date-time-type={uses12hClock ? '12' : '24'}\n testId=\"time-input\"\n value={selectedTime}\n isDisabled={disabled}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onChange={handleChange}\n />\n </Flex>\n );\n};\n","export const defaultZoneOffset = '+00:00';\n\nexport const zoneOffsets = [\n '-12:00',\n '-11:00',\n '-10:00',\n '-09:30',\n '-09:00',\n '-08:00',\n '-07:00',\n '-06:00',\n '-05:00',\n '-04:30',\n '-04:00',\n '-03:30',\n '-03:00',\n '-02:00',\n '-01:00',\n '+00:00',\n '+01:00',\n '+02:00',\n '+03:00',\n '+03:30',\n '+04:00',\n '+04:30',\n '+05:00',\n '+05:30',\n '+05:45',\n '+06:00',\n '+06:30',\n '+07:00',\n '+08:00',\n '+08:45',\n '+09:00',\n '+09:30',\n '+10:00',\n '+10:30',\n '+11:00',\n '+11:30',\n '+12:00',\n '+12:45',\n '+13:00',\n '+14:00',\n];\n","import React, { ChangeEvent } from 'react';\nimport { zoneOffsets, defaultZoneOffset } from './utils/zoneOffsets';\n\nimport { Select } from '@contentful/f36-components';\n\nexport type TimezonepickerProps = {\n disabled: boolean;\n onChange: (value: string) => void;\n value?: string;\n};\nexport const TimezonepickerInput = ({\n disabled,\n onChange,\n value = defaultZoneOffset,\n}: TimezonepickerProps) => {\n return (\n <Select\n aria-label=\"Select timezone\"\n testId=\"timezone-input\"\n value={value}\n isDisabled={disabled}\n onChange={(e: ChangeEvent<HTMLSelectElement>) => {\n onChange(e.currentTarget.value);\n }}>\n {zoneOffsets.map((offset) => (\n <Select.Option key={offset} value={offset}>\n UTC{offset}\n </Select.Option>\n ))}\n </Select>\n );\n};\n","// eslint-disable-next-line -- TODO: describe this disable no-restricted-imports\nimport moment from 'moment';\nimport { TimeResult } from '../types';\n\nconst ZONE_RX = /(Z|[+-]\\d{2}[:+]?\\d{2})$/;\n\nfunction startOfToday(format: string) {\n return moment().set({ hours: 0, minutes: 0 }).format(format);\n}\n\nfunction fieldValueToMoment(datetimeString: string | null | undefined): moment.Moment | null {\n if (!datetimeString) {\n return null;\n }\n\n const datetime = moment(datetimeString);\n if (ZONE_RX.test(datetimeString)) {\n datetime.utcOffset(datetimeString);\n }\n return datetime;\n}\n\nfunction timeFromUserInput(input: TimeResult) {\n const timeInput = input.time || '00:00';\n return moment.utc(timeInput + '!' + input.ampm, 'HH:mm!A');\n}\n\n/**\n * Convert the user input object into either a 'moment' value or an\n * invalid symbol.\n *\n * Success is indicated by returning '{valid: value}' and failure is\n * indicated by returning '{invalid: true}'. If 'input.date' is\n * 'null' we return '{valid: null}'\n */\nfunction datetimeFromUserInput(input: TimeResult): {\n invalid?: boolean;\n valid: moment.Moment | null;\n} {\n if (!input.date) {\n return { valid: null };\n }\n\n const time = timeFromUserInput(input);\n\n const date = moment\n .parseZone(input.utcOffset, 'Z')\n .set(input.date.toObject())\n .set({ hours: time.hours(), minutes: time.minutes() });\n\n if (date.isValid()) {\n return { valid: date };\n } else {\n return { invalid: true, valid: null };\n }\n}\n\n/**\n * Parse user input into a string that is stored in the API.\n *\n * Returns a sum type with either the string as the `valid` property\n * or the `invalid` property set to `false`.\n */\nexport function buildFieldValue({\n data,\n usesTime,\n usesTimezone,\n}: {\n data: TimeResult;\n usesTime: boolean;\n usesTimezone: boolean;\n}) {\n const date = datetimeFromUserInput(data);\n if (date.invalid) {\n return {\n invalid: true,\n };\n }\n\n let format;\n if (usesTimezone) {\n format = 'YYYY-MM-DDTHH:mmZ';\n } else if (usesTime) {\n format = 'YYYY-MM-DDTHH:mm';\n } else {\n format = 'YYYY-MM-DD';\n }\n return { valid: date?.valid ? date.valid.format(format) : null, invalid: false };\n}\n\nexport function getDefaultAMPM() {\n return 'AM';\n}\n\nexport function getDefaultUtcOffset() {\n return startOfToday('Z');\n}\n\n/**\n * Create the user input object from the field value.\n */\nexport function userInputFromDatetime({\n value,\n uses12hClock,\n}: {\n value: string | undefined | null;\n uses12hClock: boolean;\n}): TimeResult {\n const datetime = fieldValueToMoment(value);\n\n if (datetime) {\n const timeFormat = uses12hClock ? 'hh:mm' : 'HH:mm';\n return {\n date: datetime,\n time: datetime.format(timeFormat),\n ampm: datetime.format('A'),\n utcOffset: datetime.format('Z'),\n };\n } else {\n return {\n ampm: getDefaultAMPM(),\n utcOffset: getDefaultUtcOffset(),\n };\n }\n}\n","import * as React from 'react';\nimport { css } from 'emotion';\nimport tokens from '@contentful/f36-tokens';\nimport { FieldAPI, FieldConnector, ParametersAPI } from '@contentful/field-editor-shared';\nimport { DatepickerInput } from './DatepickerInput';\nimport { TimepickerInput } from './TimepickerInput';\nimport { TimezonepickerInput } from './TimezonePickerInput';\nimport {\n userInputFromDatetime,\n buildFieldValue,\n getDefaultAMPM,\n getDefaultUtcOffset,\n} from './utils/date';\nimport { TimeFormat, DateTimeFormat, TimeResult } from './types';\n\nimport { TextLink } from '@contentful/f36-components';\n\nexport interface DateEditorProps {\n /**\n * is the field disabled initially\n */\n isInitiallyDisabled: boolean;\n\n /**\n * sdk.field\n */\n field: FieldAPI;\n\n /**\n * sdk.parameters\n */\n parameters?: ParametersAPI & {\n instance?: {\n format?: DateTimeFormat;\n ampm?: TimeFormat;\n };\n };\n}\n\nconst styles = {\n root: css({\n display: 'flex',\n alignItems: 'center',\n }),\n separator: css({\n marginLeft: tokens.spacingM,\n }),\n};\n\nfunction useEffectWithoutFirstRender(callback: Function, deps: Array<any>) {\n const isFirstRun = React.useRef(true);\n React.useEffect(() => {\n if (isFirstRun.current) {\n isFirstRun.current = false;\n return;\n }\n callback();\n // eslint-disable-next-line react-hooks/exhaustive-deps -- TODO: Evaluate the dependencies\n }, deps);\n}\n\nfunction DateEditorContainer({\n initialValue,\n usesTime,\n usesTimezone,\n uses12hClock,\n disabled,\n hasClear,\n onChange,\n}: {\n initialValue: TimeResult;\n usesTime: boolean;\n usesTimezone: boolean;\n uses12hClock: boolean;\n disabled: boolean;\n hasClear: boolean;\n onChange: (value: TimeResult) => void;\n}) {\n const [value, setValue] = React.useState<TimeResult>(() => initialValue);\n\n useEffectWithoutFirstRender(() => {\n onChange(value);\n }, [value]);\n\n return (\n <div data-test-id=\"date-editor\" className={styles.root}>\n <DatepickerInput\n disabled={disabled}\n value={value.date}\n onChange={(date) => {\n setValue((value) => ({\n ...value,\n date,\n }));\n }}\n />\n {usesTime && (\n <>\n <div className={styles.separator} />\n <TimepickerInput\n disabled={disabled}\n time={value.time}\n ampm={value.ampm}\n onChange={({ time, ampm }) => {\n setValue((value) => ({\n ...value,\n time,\n ampm,\n }));\n }}\n uses12hClock={uses12hClock}\n />\n </>\n )}\n {usesTimezone && (\n <>\n <div className={styles.separator} />\n <TimezonepickerInput\n disabled={disabled}\n value={value.utcOffset}\n onChange={(utcOffset) => {\n setValue((value) => ({\n ...value,\n utcOffset,\n }));\n }}\n />\n </>\n )}\n {hasClear && (\n <>\n <div className={styles.separator} />\n <TextLink\n as=\"button\"\n isDisabled={disabled}\n testId=\"date-clear\"\n onClick={() => {\n setValue({\n date: undefined,\n time: undefined,\n ampm: getDefaultAMPM(),\n utcOffset: getDefaultUtcOffset(),\n });\n }}>\n Clear\n </TextLink>\n </>\n )}\n </div>\n );\n}\n\nexport function DateEditor(props: DateEditorProps) {\n const { field, parameters } = props;\n\n const formatParam = parameters?.instance?.format ?? 'timeZ';\n const ampmParam = parameters?.instance?.ampm ?? '24';\n\n const usesTime = formatParam !== 'dateonly';\n const usesTimezone = formatParam === 'timeZ';\n const uses12hClock = ampmParam === '12';\n\n return (\n <FieldConnector<string>\n field={field}\n isInitiallyDisabled={props.isInitiallyDisabled}\n throttle={0}>\n {({ value, disabled, setValue, externalReset }) => {\n const datetimeValue = userInputFromDatetime({\n value,\n uses12hClock,\n });\n return (\n <DateEditorContainer\n initialValue={datetimeValue}\n uses12hClock={uses12hClock}\n usesTimezone={usesTimezone}\n usesTime={usesTime}\n disabled={disabled}\n hasClear={Boolean(value)}\n onChange={(data) => {\n const fieldValue = buildFieldValue({ data, usesTime, usesTimezone });\n if (fieldValue.invalid) {\n return;\n }\n // if value is present - then override it with a new one\n // if value is not present - then set a new one if it's not nullable only\n if (Boolean(value) || (!value && Boolean(fieldValue.valid))) {\n setValue(fieldValue.valid);\n }\n }}\n key={`date-container-${externalReset}`}\n />\n );\n }}\n </FieldConnector>\n );\n}\n\nDateEditor.defaultProps = {\n isInitiallyDisabled: true,\n};\n"],"names":["styles","root","css","maxWidth","DatepickerInput","props","useMemo","fromDate","Date","setFullYear","getFullYear","toDate","dateObj","value","_props$value","toObject","selectedDate","years","months","date","undefined","React","Datepicker","className","selected","onSelect","day","momentDay","moment","onChange","inputProps","isDisabled","disabled","placeholder","validInputFormats","getDefaultTime","formatToString","uses12hClock","format","TimepickerInput","time","ampm","useState","selectedTime","setSelectedTime","useEffect","handleChange","useCallback","e","currentTarget","handleFocus","preventDefault","target","select","Flex","width","TextInput","testId","onFocus","onBlur","parsedTime","raw","i","length","isValid","parseRawInput","zoneOffsets","TimezonepickerInput","Select","map","offset","Option","key","ZONE_RX","getDefaultUtcOffset","set","hours","minutes","display","alignItems","separator","marginLeft","tokens","spacingM","DateEditorContainer","callback","deps","isFirstRun","initialValue","usesTime","usesTimezone","hasClear","setValue","current","utcOffset","TextLink","as","onClick","DateEditor","parameters","formatParam","instance","_parameters$instance","ampmParam","_parameters$instance2","FieldConnector","field","isInitiallyDisabled","throttle","externalReset","datetimeValue","datetime","datetimeString","test","fieldValueToMoment","userInputFromDatetime","Boolean","data","fieldValue","input","valid","utc","timeFromUserInput","parseZone","invalid","datetimeFromUserInput","buildFieldValue","defaultProps"],"mappings":"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"}
1
+ {"version":3,"file":"field-editor-date.cjs.production.min.js","sources":["../src/DatepickerInput.tsx","../src/TimepickerInput.tsx","../src/utils/zoneOffsets.ts","../src/TimezonePickerInput.tsx","../src/utils/date.ts","../src/DateEditor.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\n\nimport { Datepicker } from '@contentful/f36-components';\nimport { css } from 'emotion';\n// eslint-disable-next-line -- TODO: move to date-fns\nimport moment from 'moment';\n\nconst YEAR_RANGE = 100;\n\nconst styles = {\n root: css({\n maxWidth: '270px',\n }),\n};\n\nexport type DatePickerProps = {\n value?: moment.Moment;\n onChange: (val: moment.Moment | undefined) => void;\n disabled?: boolean;\n};\n\nexport const DatepickerInput = (props: DatePickerProps) => {\n const [fromDate, toDate] = useMemo(() => {\n const fromDate = new Date();\n fromDate.setFullYear(fromDate.getFullYear() - YEAR_RANGE);\n const toDate = new Date();\n toDate.setFullYear(toDate.getFullYear() + YEAR_RANGE);\n\n return [fromDate, toDate];\n }, []);\n\n // The DatepickerInput should be time and timezone agnostic,\n // thats why we don't use moment().toDate() to get Date object.\n // moment().toDate() takes into account time and timezone and converts it\n // based on your system timezone which can result in the date change.\n // e.g. if user has a timezone +02:00, moment('2022-09-16T00:00+04:00').toDate()\n // will return September 15 instead of September 16\n const dateObj = props.value?.toObject();\n const selectedDate = dateObj ? new Date(dateObj.years, dateObj.months, dateObj.date) : undefined;\n\n return (\n <Datepicker\n className={styles.root}\n selected={selectedDate}\n onSelect={(day) => {\n const momentDay = day ? moment(day) : undefined;\n props.onChange(momentDay);\n }}\n inputProps={{ isDisabled: props.disabled, placeholder: '' }}\n fromDate={fromDate}\n toDate={toDate}\n />\n );\n};\n","import React, { useState, useCallback, useEffect } from 'react';\n// eslint-disable-next-line -- TODO: move to date-fns\nimport moment from 'moment';\nimport { css } from 'emotion';\n\nimport { TextInput, Flex } from '@contentful/f36-components';\n\nexport type TimepickerProps = {\n disabled: boolean;\n uses12hClock: boolean;\n onChange: (value: { time: string; ampm: string }) => void;\n time?: string;\n ampm?: string;\n};\n\nconst validInputFormats = [\n 'hh:mm a',\n 'hh:mm A',\n 'h:mm a',\n 'h:mm A',\n 'hh:mm',\n 'k:mm',\n 'kk:mm',\n 'h a',\n 'h A',\n 'h',\n 'hh',\n 'HH',\n];\n\nfunction parseRawInput(raw: string): moment.Moment | null {\n let time: moment.Moment | null = null;\n\n // eslint-disable-next-line -- TODO: refactor to use for of loop\n for (let i = 0; i < validInputFormats.length; i++) {\n const date = moment(raw, validInputFormats[i]);\n if (date.isValid()) {\n time = date;\n break;\n }\n }\n\n return time;\n}\n\nconst getDefaultTime = () => {\n return moment(`12:00 AM`, 'hh:mm A');\n};\n\nconst formatToString = (uses12hClock: boolean, value: moment.Moment): string => {\n return uses12hClock ? value.format('hh:mm A') : value.format('HH:mm');\n};\n\nexport const TimepickerInput = ({\n disabled,\n uses12hClock,\n time = '12:00',\n ampm = 'AM',\n onChange,\n}: TimepickerProps) => {\n const [selectedTime, setSelectedTime] = useState<string>(() => {\n return formatToString(uses12hClock, getDefaultTime());\n });\n\n useEffect(() => {\n setSelectedTime(formatToString(uses12hClock, moment(`${time} ${ampm}`, 'hh:mm A')));\n }, [time, ampm, uses12hClock]);\n\n const handleChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n setSelectedTime(e.currentTarget.value);\n }, []);\n\n const handleFocus = useCallback((e) => {\n e.preventDefault();\n e.target.select();\n }, []);\n\n const handleBlur = () => {\n const parsedTime = parseRawInput(selectedTime);\n const value = parsedTime ?? getDefaultTime();\n setSelectedTime(formatToString(uses12hClock, value));\n onChange({ time: value.format('hh:mm'), ampm: value.format('A') });\n };\n\n return (\n <Flex className={css({ width: '145px' })}>\n <TextInput\n aria-label=\"Select time\"\n placeholder={uses12hClock ? '12:00 AM' : '00:00'}\n date-time-type={uses12hClock ? '12' : '24'}\n testId=\"time-input\"\n value={selectedTime}\n isDisabled={disabled}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onChange={handleChange}\n />\n </Flex>\n );\n};\n","export const defaultZoneOffset = '+00:00';\n\nexport const zoneOffsets = [\n '-12:00',\n '-11:00',\n '-10:00',\n '-09:30',\n '-09:00',\n '-08:00',\n '-07:00',\n '-06:00',\n '-05:00',\n '-04:30',\n '-04:00',\n '-03:30',\n '-03:00',\n '-02:00',\n '-01:00',\n '+00:00',\n '+01:00',\n '+02:00',\n '+03:00',\n '+03:30',\n '+04:00',\n '+04:30',\n '+05:00',\n '+05:30',\n '+05:45',\n '+06:00',\n '+06:30',\n '+07:00',\n '+08:00',\n '+08:45',\n '+09:00',\n '+09:30',\n '+10:00',\n '+10:30',\n '+11:00',\n '+11:30',\n '+12:00',\n '+12:45',\n '+13:00',\n '+14:00',\n];\n","import React, { ChangeEvent } from 'react';\nimport { zoneOffsets, defaultZoneOffset } from './utils/zoneOffsets';\n\nimport { Select } from '@contentful/f36-components';\n\nexport type TimezonepickerProps = {\n disabled: boolean;\n onChange: (value: string) => void;\n value?: string;\n};\nexport const TimezonepickerInput = ({\n disabled,\n onChange,\n value = defaultZoneOffset,\n}: TimezonepickerProps) => {\n return (\n <Select\n aria-label=\"Select timezone\"\n testId=\"timezone-input\"\n value={value}\n isDisabled={disabled}\n onChange={(e: ChangeEvent<HTMLSelectElement>) => {\n onChange(e.currentTarget.value);\n }}>\n {zoneOffsets.map((offset) => (\n <Select.Option key={offset} value={offset}>\n UTC{offset}\n </Select.Option>\n ))}\n </Select>\n );\n};\n","// eslint-disable-next-line -- TODO: move to date-fns\nimport moment from 'moment';\nimport { TimeResult } from '../types';\n\nconst ZONE_RX = /(Z|[+-]\\d{2}[:+]?\\d{2})$/;\n\nfunction startOfToday(format: string) {\n return moment().set({ hours: 0, minutes: 0 }).format(format);\n}\n\nfunction fieldValueToMoment(datetimeString: string | null | undefined): moment.Moment | null {\n if (!datetimeString) {\n return null;\n }\n\n const datetime = moment(datetimeString);\n if (ZONE_RX.test(datetimeString)) {\n datetime.utcOffset(datetimeString);\n }\n return datetime;\n}\n\nfunction timeFromUserInput(input: TimeResult) {\n const timeInput = input.time || '00:00';\n return moment.utc(timeInput + '!' + input.ampm, 'HH:mm!A');\n}\n\n/**\n * Convert the user input object into either a 'moment' value or an\n * invalid symbol.\n *\n * Success is indicated by returning '{valid: value}' and failure is\n * indicated by returning '{invalid: true}'. If 'input.date' is\n * 'null' we return '{valid: null}'\n */\nfunction datetimeFromUserInput(input: TimeResult): {\n invalid?: boolean;\n valid: moment.Moment | null;\n} {\n if (!input.date) {\n return { valid: null };\n }\n\n const time = timeFromUserInput(input);\n\n const date = moment\n .parseZone(input.utcOffset, 'Z')\n .set(input.date.toObject())\n .set({ hours: time.hours(), minutes: time.minutes() });\n\n if (date.isValid()) {\n return { valid: date };\n } else {\n return { invalid: true, valid: null };\n }\n}\n\n/**\n * Parse user input into a string that is stored in the API.\n *\n * Returns a sum type with either the string as the `valid` property\n * or the `invalid` property set to `false`.\n */\nexport function buildFieldValue({\n data,\n usesTime,\n usesTimezone,\n}: {\n data: TimeResult;\n usesTime: boolean;\n usesTimezone: boolean;\n}) {\n const date = datetimeFromUserInput(data);\n if (date.invalid) {\n return {\n invalid: true,\n };\n }\n\n let format;\n if (usesTimezone) {\n format = 'YYYY-MM-DDTHH:mmZ';\n } else if (usesTime) {\n format = 'YYYY-MM-DDTHH:mm';\n } else {\n format = 'YYYY-MM-DD';\n }\n return { valid: date?.valid ? date.valid.format(format) : null, invalid: false };\n}\n\nexport function getDefaultAMPM() {\n return 'AM';\n}\n\nexport function getDefaultUtcOffset() {\n return startOfToday('Z');\n}\n\n/**\n * Create the user input object from the field value.\n */\nexport function userInputFromDatetime({\n value,\n uses12hClock,\n}: {\n value: string | undefined | null;\n uses12hClock: boolean;\n}): TimeResult {\n const datetime = fieldValueToMoment(value);\n\n if (datetime) {\n const timeFormat = uses12hClock ? 'hh:mm' : 'HH:mm';\n return {\n date: datetime,\n time: datetime.format(timeFormat),\n ampm: datetime.format('A'),\n utcOffset: datetime.format('Z'),\n };\n } else {\n return {\n ampm: getDefaultAMPM(),\n utcOffset: getDefaultUtcOffset(),\n };\n }\n}\n","import * as React from 'react';\n\nimport { TextLink } from '@contentful/f36-components';\nimport tokens from '@contentful/f36-tokens';\nimport { FieldAPI, FieldConnector, ParametersAPI } from '@contentful/field-editor-shared';\nimport { css } from 'emotion';\n\nimport { DatepickerInput } from './DatepickerInput';\nimport { TimepickerInput } from './TimepickerInput';\nimport { TimezonepickerInput } from './TimezonePickerInput';\nimport { TimeFormat, DateTimeFormat, TimeResult } from './types';\nimport {\n userInputFromDatetime,\n buildFieldValue,\n getDefaultAMPM,\n getDefaultUtcOffset,\n} from './utils/date';\n\n\nexport interface DateEditorProps {\n /**\n * is the field disabled initially\n */\n isInitiallyDisabled: boolean;\n\n /*\n * is the field manually disabled\n */\n isDisabled?: boolean;\n\n /**\n * sdk.field\n */\n field: FieldAPI;\n\n /**\n * sdk.parameters\n */\n parameters?: ParametersAPI & {\n instance?: {\n format?: DateTimeFormat;\n ampm?: TimeFormat;\n };\n };\n}\n\nconst styles = {\n root: css({\n display: 'flex',\n alignItems: 'center',\n }),\n separator: css({\n marginLeft: tokens.spacingM,\n }),\n};\n\nfunction useEffectWithoutFirstRender(callback: Function, deps: Array<any>) {\n const isFirstRun = React.useRef(true);\n React.useEffect(() => {\n if (isFirstRun.current) {\n isFirstRun.current = false;\n return;\n }\n callback();\n // eslint-disable-next-line react-hooks/exhaustive-deps -- TODO: Evaluate the dependencies\n }, deps);\n}\n\nfunction DateEditorContainer({\n initialValue,\n usesTime,\n usesTimezone,\n uses12hClock,\n disabled,\n hasClear,\n onChange,\n}: {\n initialValue: TimeResult;\n usesTime: boolean;\n usesTimezone: boolean;\n uses12hClock: boolean;\n disabled: boolean;\n hasClear: boolean;\n onChange: (value: TimeResult) => void;\n}) {\n const [value, setValue] = React.useState<TimeResult>(() => initialValue);\n\n useEffectWithoutFirstRender(() => {\n onChange(value);\n }, [value]);\n\n return (\n <div data-test-id=\"date-editor\" className={styles.root}>\n <DatepickerInput\n disabled={disabled}\n value={value.date}\n onChange={(date) => {\n setValue((value) => ({\n ...value,\n date,\n }));\n }}\n />\n {usesTime && (\n <>\n <div className={styles.separator} />\n <TimepickerInput\n disabled={disabled}\n time={value.time}\n ampm={value.ampm}\n onChange={({ time, ampm }) => {\n setValue((value) => ({\n ...value,\n time,\n ampm,\n }));\n }}\n uses12hClock={uses12hClock}\n />\n </>\n )}\n {usesTimezone && (\n <>\n <div className={styles.separator} />\n <TimezonepickerInput\n disabled={disabled}\n value={value.utcOffset}\n onChange={(utcOffset) => {\n setValue((value) => ({\n ...value,\n utcOffset,\n }));\n }}\n />\n </>\n )}\n {hasClear && (\n <>\n <div className={styles.separator} />\n <TextLink\n as=\"button\"\n isDisabled={disabled}\n testId=\"date-clear\"\n onClick={() => {\n setValue({\n date: undefined,\n time: undefined,\n ampm: getDefaultAMPM(),\n utcOffset: getDefaultUtcOffset(),\n });\n }}\n >\n Clear\n </TextLink>\n </>\n )}\n </div>\n );\n}\n\nexport function DateEditor(props: DateEditorProps) {\n const { field, parameters } = props;\n\n const formatParam = parameters?.instance?.format ?? 'timeZ';\n const ampmParam = parameters?.instance?.ampm ?? '24';\n\n const usesTime = formatParam !== 'dateonly';\n const usesTimezone = formatParam === 'timeZ';\n const uses12hClock = ampmParam === '12';\n\n return (\n <FieldConnector<string>\n field={field}\n isInitiallyDisabled={props.isInitiallyDisabled}\n throttle={0}\n >\n {({ value, disabled, setValue, externalReset }) => {\n const datetimeValue = userInputFromDatetime({\n value,\n uses12hClock,\n });\n return (\n <DateEditorContainer\n initialValue={datetimeValue}\n uses12hClock={uses12hClock}\n usesTimezone={usesTimezone}\n usesTime={usesTime}\n disabled={props.isDisabled ?? disabled}\n hasClear={Boolean(value)}\n onChange={(data) => {\n const fieldValue = buildFieldValue({ data, usesTime, usesTimezone });\n if (fieldValue.invalid) {\n return;\n }\n // if value is present - then override it with a new one\n // if value is not present - then set a new one if it's not nullable only\n if (Boolean(value) || (!value && Boolean(fieldValue.valid))) {\n setValue(fieldValue.valid);\n }\n }}\n key={`date-container-${externalReset}`}\n />\n );\n }}\n </FieldConnector>\n );\n}\n\nDateEditor.defaultProps = {\n isInitiallyDisabled: true,\n};\n"],"names":["styles","root","css","maxWidth","DatepickerInput","props","useMemo","fromDate","Date","setFullYear","getFullYear","toDate","dateObj","value","_props$value","toObject","selectedDate","years","months","date","undefined","React","Datepicker","className","selected","onSelect","day","momentDay","moment","onChange","inputProps","isDisabled","disabled","placeholder","validInputFormats","getDefaultTime","formatToString","uses12hClock","format","TimepickerInput","time","ampm","useState","selectedTime","setSelectedTime","useEffect","handleChange","useCallback","e","currentTarget","handleFocus","preventDefault","target","select","Flex","width","TextInput","testId","onFocus","onBlur","parsedTime","raw","i","length","isValid","parseRawInput","zoneOffsets","TimezonepickerInput","Select","map","offset","Option","key","ZONE_RX","getDefaultUtcOffset","set","hours","minutes","display","alignItems","separator","marginLeft","tokens","spacingM","DateEditorContainer","callback","deps","isFirstRun","initialValue","usesTime","usesTimezone","hasClear","setValue","current","utcOffset","TextLink","as","onClick","DateEditor","parameters","formatParam","instance","_parameters$instance","ampmParam","_parameters$instance2","FieldConnector","field","isInitiallyDisabled","throttle","externalReset","datetimeValue","datetime","datetimeString","test","fieldValueToMoment","userInputFromDatetime","Boolean","data","fieldValue","input","valid","utc","timeFromUserInput","parseZone","invalid","datetimeFromUserInput","buildFieldValue","defaultProps"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import React__default, { useMemo, useState, useEffect, useCallback, createElement, Fragment, useRef } from 'react';
2
- import { css } from 'emotion';
2
+ import { Datepicker, Flex, TextInput, Select, TextLink } from '@contentful/f36-components';
3
3
  import tokens from '@contentful/f36-tokens';
4
4
  import { FieldConnector } from '@contentful/field-editor-shared';
5
- import { Datepicker, Flex, TextInput, Select, TextLink } from '@contentful/f36-components';
5
+ import { css } from 'emotion';
6
6
  import moment from 'moment';
7
7
 
8
8
  function _extends() {
@@ -69,7 +69,7 @@ var DatepickerInput = function DatepickerInput(props) {
69
69
  var validInputFormats = ['hh:mm a', 'hh:mm A', 'h:mm a', 'h:mm A', 'hh:mm', 'k:mm', 'kk:mm', 'h a', 'h A', 'h', 'hh', 'HH'];
70
70
 
71
71
  function parseRawInput(raw) {
72
- var time = null; // eslint-disable-next-line -- TODO: describe this disable @typescript-eslint/prefer-for-of
72
+ var time = null; // eslint-disable-next-line -- TODO: refactor to use for of loop
73
73
 
74
74
  for (var i = 0; i < validInputFormats.length; i++) {
75
75
  var date = moment(raw, validInputFormats[i]);
@@ -168,7 +168,7 @@ var TimezonepickerInput = function TimezonepickerInput(_ref) {
168
168
  }));
169
169
  };
170
170
 
171
- // eslint-disable-next-line -- TODO: describe this disable no-restricted-imports
171
+ // eslint-disable-next-line -- TODO: move to date-fns
172
172
  var ZONE_RX = /(Z|[+-]\d{2}[:+]?\d{2})$/;
173
173
 
174
174
  function startOfToday(format) {
@@ -410,6 +410,8 @@ function DateEditor(props) {
410
410
  isInitiallyDisabled: props.isInitiallyDisabled,
411
411
  throttle: 0
412
412
  }, function (_ref3) {
413
+ var _props$isDisabled;
414
+
413
415
  var value = _ref3.value,
414
416
  disabled = _ref3.disabled,
415
417
  setValue = _ref3.setValue,
@@ -423,7 +425,7 @@ function DateEditor(props) {
423
425
  uses12hClock: uses12hClock,
424
426
  usesTimezone: usesTimezone,
425
427
  usesTime: usesTime,
426
- disabled: disabled,
428
+ disabled: (_props$isDisabled = props.isDisabled) != null ? _props$isDisabled : disabled,
427
429
  hasClear: Boolean(value),
428
430
  onChange: function onChange(data) {
429
431
  var fieldValue = buildFieldValue({
@@ -1 +1 @@
1
- {"version":3,"file":"field-editor-date.esm.js","sources":["../src/DatepickerInput.tsx","../src/TimepickerInput.tsx","../src/utils/zoneOffsets.ts","../src/TimezonePickerInput.tsx","../src/utils/date.ts","../src/DateEditor.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\n\nimport { Datepicker } from '@contentful/f36-components';\nimport { css } from 'emotion';\n// eslint-disable-next-line -- TODO: describe this disable no-restricted-imports\nimport moment from 'moment';\n\nconst YEAR_RANGE = 100;\n\nconst styles = {\n root: css({\n maxWidth: '270px',\n }),\n};\n\nexport type DatePickerProps = {\n value?: moment.Moment;\n onChange: (val: moment.Moment | undefined) => void;\n disabled?: boolean;\n};\n\nexport const DatepickerInput = (props: DatePickerProps) => {\n const [fromDate, toDate] = useMemo(() => {\n const fromDate = new Date();\n fromDate.setFullYear(fromDate.getFullYear() - YEAR_RANGE);\n const toDate = new Date();\n toDate.setFullYear(toDate.getFullYear() + YEAR_RANGE);\n\n return [fromDate, toDate];\n }, []);\n\n // The DatepickerInput should be time and timezone agnostic,\n // thats why we don't use moment().toDate() to get Date object.\n // moment().toDate() takes into account time and timezone and converts it\n // based on your system timezone which can result in the date change.\n // e.g. if user has a timezone +02:00, moment('2022-09-16T00:00+04:00').toDate()\n // will return September 15 instead of September 16\n const dateObj = props.value?.toObject();\n const selectedDate = dateObj ? new Date(dateObj.years, dateObj.months, dateObj.date) : undefined;\n\n return (\n <Datepicker\n className={styles.root}\n selected={selectedDate}\n onSelect={(day) => {\n const momentDay = day ? moment(day) : undefined;\n props.onChange(momentDay);\n }}\n inputProps={{ isDisabled: props.disabled, placeholder: '' }}\n fromDate={fromDate}\n toDate={toDate}\n />\n );\n};\n","import React, { useState, useCallback, useEffect } from 'react';\n// eslint-disable-next-line -- TODO: describe this disable no-restricted-imports\nimport moment from 'moment';\nimport { css } from 'emotion';\n\nimport { TextInput, Flex } from '@contentful/f36-components';\n\nexport type TimepickerProps = {\n disabled: boolean;\n uses12hClock: boolean;\n onChange: (value: { time: string; ampm: string }) => void;\n time?: string;\n ampm?: string;\n};\n\nconst validInputFormats = [\n 'hh:mm a',\n 'hh:mm A',\n 'h:mm a',\n 'h:mm A',\n 'hh:mm',\n 'k:mm',\n 'kk:mm',\n 'h a',\n 'h A',\n 'h',\n 'hh',\n 'HH',\n];\n\nfunction parseRawInput(raw: string): moment.Moment | null {\n let time: moment.Moment | null = null;\n\n // eslint-disable-next-line -- TODO: describe this disable @typescript-eslint/prefer-for-of\n for (let i = 0; i < validInputFormats.length; i++) {\n const date = moment(raw, validInputFormats[i]);\n if (date.isValid()) {\n time = date;\n break;\n }\n }\n\n return time;\n}\n\nconst getDefaultTime = () => {\n return moment(`12:00 AM`, 'hh:mm A');\n};\n\nconst formatToString = (uses12hClock: boolean, value: moment.Moment): string => {\n return uses12hClock ? value.format('hh:mm A') : value.format('HH:mm');\n};\n\nexport const TimepickerInput = ({\n disabled,\n uses12hClock,\n time = '12:00',\n ampm = 'AM',\n onChange,\n}: TimepickerProps) => {\n const [selectedTime, setSelectedTime] = useState<string>(() => {\n return formatToString(uses12hClock, getDefaultTime());\n });\n\n useEffect(() => {\n setSelectedTime(formatToString(uses12hClock, moment(`${time} ${ampm}`, 'hh:mm A')));\n }, [time, ampm, uses12hClock]);\n\n const handleChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n setSelectedTime(e.currentTarget.value);\n }, []);\n\n const handleFocus = useCallback((e) => {\n e.preventDefault();\n e.target.select();\n }, []);\n\n const handleBlur = () => {\n const parsedTime = parseRawInput(selectedTime);\n const value = parsedTime ?? getDefaultTime();\n setSelectedTime(formatToString(uses12hClock, value));\n onChange({ time: value.format('hh:mm'), ampm: value.format('A') });\n };\n\n return (\n <Flex className={css({ width: '145px' })}>\n <TextInput\n aria-label=\"Select time\"\n placeholder={uses12hClock ? '12:00 AM' : '00:00'}\n date-time-type={uses12hClock ? '12' : '24'}\n testId=\"time-input\"\n value={selectedTime}\n isDisabled={disabled}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onChange={handleChange}\n />\n </Flex>\n );\n};\n","export const defaultZoneOffset = '+00:00';\n\nexport const zoneOffsets = [\n '-12:00',\n '-11:00',\n '-10:00',\n '-09:30',\n '-09:00',\n '-08:00',\n '-07:00',\n '-06:00',\n '-05:00',\n '-04:30',\n '-04:00',\n '-03:30',\n '-03:00',\n '-02:00',\n '-01:00',\n '+00:00',\n '+01:00',\n '+02:00',\n '+03:00',\n '+03:30',\n '+04:00',\n '+04:30',\n '+05:00',\n '+05:30',\n '+05:45',\n '+06:00',\n '+06:30',\n '+07:00',\n '+08:00',\n '+08:45',\n '+09:00',\n '+09:30',\n '+10:00',\n '+10:30',\n '+11:00',\n '+11:30',\n '+12:00',\n '+12:45',\n '+13:00',\n '+14:00',\n];\n","import React, { ChangeEvent } from 'react';\nimport { zoneOffsets, defaultZoneOffset } from './utils/zoneOffsets';\n\nimport { Select } from '@contentful/f36-components';\n\nexport type TimezonepickerProps = {\n disabled: boolean;\n onChange: (value: string) => void;\n value?: string;\n};\nexport const TimezonepickerInput = ({\n disabled,\n onChange,\n value = defaultZoneOffset,\n}: TimezonepickerProps) => {\n return (\n <Select\n aria-label=\"Select timezone\"\n testId=\"timezone-input\"\n value={value}\n isDisabled={disabled}\n onChange={(e: ChangeEvent<HTMLSelectElement>) => {\n onChange(e.currentTarget.value);\n }}>\n {zoneOffsets.map((offset) => (\n <Select.Option key={offset} value={offset}>\n UTC{offset}\n </Select.Option>\n ))}\n </Select>\n );\n};\n","// eslint-disable-next-line -- TODO: describe this disable no-restricted-imports\nimport moment from 'moment';\nimport { TimeResult } from '../types';\n\nconst ZONE_RX = /(Z|[+-]\\d{2}[:+]?\\d{2})$/;\n\nfunction startOfToday(format: string) {\n return moment().set({ hours: 0, minutes: 0 }).format(format);\n}\n\nfunction fieldValueToMoment(datetimeString: string | null | undefined): moment.Moment | null {\n if (!datetimeString) {\n return null;\n }\n\n const datetime = moment(datetimeString);\n if (ZONE_RX.test(datetimeString)) {\n datetime.utcOffset(datetimeString);\n }\n return datetime;\n}\n\nfunction timeFromUserInput(input: TimeResult) {\n const timeInput = input.time || '00:00';\n return moment.utc(timeInput + '!' + input.ampm, 'HH:mm!A');\n}\n\n/**\n * Convert the user input object into either a 'moment' value or an\n * invalid symbol.\n *\n * Success is indicated by returning '{valid: value}' and failure is\n * indicated by returning '{invalid: true}'. If 'input.date' is\n * 'null' we return '{valid: null}'\n */\nfunction datetimeFromUserInput(input: TimeResult): {\n invalid?: boolean;\n valid: moment.Moment | null;\n} {\n if (!input.date) {\n return { valid: null };\n }\n\n const time = timeFromUserInput(input);\n\n const date = moment\n .parseZone(input.utcOffset, 'Z')\n .set(input.date.toObject())\n .set({ hours: time.hours(), minutes: time.minutes() });\n\n if (date.isValid()) {\n return { valid: date };\n } else {\n return { invalid: true, valid: null };\n }\n}\n\n/**\n * Parse user input into a string that is stored in the API.\n *\n * Returns a sum type with either the string as the `valid` property\n * or the `invalid` property set to `false`.\n */\nexport function buildFieldValue({\n data,\n usesTime,\n usesTimezone,\n}: {\n data: TimeResult;\n usesTime: boolean;\n usesTimezone: boolean;\n}) {\n const date = datetimeFromUserInput(data);\n if (date.invalid) {\n return {\n invalid: true,\n };\n }\n\n let format;\n if (usesTimezone) {\n format = 'YYYY-MM-DDTHH:mmZ';\n } else if (usesTime) {\n format = 'YYYY-MM-DDTHH:mm';\n } else {\n format = 'YYYY-MM-DD';\n }\n return { valid: date?.valid ? date.valid.format(format) : null, invalid: false };\n}\n\nexport function getDefaultAMPM() {\n return 'AM';\n}\n\nexport function getDefaultUtcOffset() {\n return startOfToday('Z');\n}\n\n/**\n * Create the user input object from the field value.\n */\nexport function userInputFromDatetime({\n value,\n uses12hClock,\n}: {\n value: string | undefined | null;\n uses12hClock: boolean;\n}): TimeResult {\n const datetime = fieldValueToMoment(value);\n\n if (datetime) {\n const timeFormat = uses12hClock ? 'hh:mm' : 'HH:mm';\n return {\n date: datetime,\n time: datetime.format(timeFormat),\n ampm: datetime.format('A'),\n utcOffset: datetime.format('Z'),\n };\n } else {\n return {\n ampm: getDefaultAMPM(),\n utcOffset: getDefaultUtcOffset(),\n };\n }\n}\n","import * as React from 'react';\nimport { css } from 'emotion';\nimport tokens from '@contentful/f36-tokens';\nimport { FieldAPI, FieldConnector, ParametersAPI } from '@contentful/field-editor-shared';\nimport { DatepickerInput } from './DatepickerInput';\nimport { TimepickerInput } from './TimepickerInput';\nimport { TimezonepickerInput } from './TimezonePickerInput';\nimport {\n userInputFromDatetime,\n buildFieldValue,\n getDefaultAMPM,\n getDefaultUtcOffset,\n} from './utils/date';\nimport { TimeFormat, DateTimeFormat, TimeResult } from './types';\n\nimport { TextLink } from '@contentful/f36-components';\n\nexport interface DateEditorProps {\n /**\n * is the field disabled initially\n */\n isInitiallyDisabled: boolean;\n\n /**\n * sdk.field\n */\n field: FieldAPI;\n\n /**\n * sdk.parameters\n */\n parameters?: ParametersAPI & {\n instance?: {\n format?: DateTimeFormat;\n ampm?: TimeFormat;\n };\n };\n}\n\nconst styles = {\n root: css({\n display: 'flex',\n alignItems: 'center',\n }),\n separator: css({\n marginLeft: tokens.spacingM,\n }),\n};\n\nfunction useEffectWithoutFirstRender(callback: Function, deps: Array<any>) {\n const isFirstRun = React.useRef(true);\n React.useEffect(() => {\n if (isFirstRun.current) {\n isFirstRun.current = false;\n return;\n }\n callback();\n // eslint-disable-next-line react-hooks/exhaustive-deps -- TODO: Evaluate the dependencies\n }, deps);\n}\n\nfunction DateEditorContainer({\n initialValue,\n usesTime,\n usesTimezone,\n uses12hClock,\n disabled,\n hasClear,\n onChange,\n}: {\n initialValue: TimeResult;\n usesTime: boolean;\n usesTimezone: boolean;\n uses12hClock: boolean;\n disabled: boolean;\n hasClear: boolean;\n onChange: (value: TimeResult) => void;\n}) {\n const [value, setValue] = React.useState<TimeResult>(() => initialValue);\n\n useEffectWithoutFirstRender(() => {\n onChange(value);\n }, [value]);\n\n return (\n <div data-test-id=\"date-editor\" className={styles.root}>\n <DatepickerInput\n disabled={disabled}\n value={value.date}\n onChange={(date) => {\n setValue((value) => ({\n ...value,\n date,\n }));\n }}\n />\n {usesTime && (\n <>\n <div className={styles.separator} />\n <TimepickerInput\n disabled={disabled}\n time={value.time}\n ampm={value.ampm}\n onChange={({ time, ampm }) => {\n setValue((value) => ({\n ...value,\n time,\n ampm,\n }));\n }}\n uses12hClock={uses12hClock}\n />\n </>\n )}\n {usesTimezone && (\n <>\n <div className={styles.separator} />\n <TimezonepickerInput\n disabled={disabled}\n value={value.utcOffset}\n onChange={(utcOffset) => {\n setValue((value) => ({\n ...value,\n utcOffset,\n }));\n }}\n />\n </>\n )}\n {hasClear && (\n <>\n <div className={styles.separator} />\n <TextLink\n as=\"button\"\n isDisabled={disabled}\n testId=\"date-clear\"\n onClick={() => {\n setValue({\n date: undefined,\n time: undefined,\n ampm: getDefaultAMPM(),\n utcOffset: getDefaultUtcOffset(),\n });\n }}>\n Clear\n </TextLink>\n </>\n )}\n </div>\n );\n}\n\nexport function DateEditor(props: DateEditorProps) {\n const { field, parameters } = props;\n\n const formatParam = parameters?.instance?.format ?? 'timeZ';\n const ampmParam = parameters?.instance?.ampm ?? '24';\n\n const usesTime = formatParam !== 'dateonly';\n const usesTimezone = formatParam === 'timeZ';\n const uses12hClock = ampmParam === '12';\n\n return (\n <FieldConnector<string>\n field={field}\n isInitiallyDisabled={props.isInitiallyDisabled}\n throttle={0}>\n {({ value, disabled, setValue, externalReset }) => {\n const datetimeValue = userInputFromDatetime({\n value,\n uses12hClock,\n });\n return (\n <DateEditorContainer\n initialValue={datetimeValue}\n uses12hClock={uses12hClock}\n usesTimezone={usesTimezone}\n usesTime={usesTime}\n disabled={disabled}\n hasClear={Boolean(value)}\n onChange={(data) => {\n const fieldValue = buildFieldValue({ data, usesTime, usesTimezone });\n if (fieldValue.invalid) {\n return;\n }\n // if value is present - then override it with a new one\n // if value is not present - then set a new one if it's not nullable only\n if (Boolean(value) || (!value && Boolean(fieldValue.valid))) {\n setValue(fieldValue.valid);\n }\n }}\n key={`date-container-${externalReset}`}\n />\n );\n }}\n </FieldConnector>\n );\n}\n\nDateEditor.defaultProps = {\n isInitiallyDisabled: true,\n};\n"],"names":["YEAR_RANGE","styles","root","css","maxWidth","DatepickerInput","props","useMemo","fromDate","Date","setFullYear","getFullYear","toDate","dateObj","value","toObject","selectedDate","years","months","date","undefined","React","Datepicker","className","selected","onSelect","day","momentDay","moment","onChange","inputProps","isDisabled","disabled","placeholder","validInputFormats","parseRawInput","raw","time","i","length","isValid","getDefaultTime","formatToString","uses12hClock","format","TimepickerInput","ampm","useState","selectedTime","setSelectedTime","useEffect","handleChange","useCallback","e","currentTarget","handleFocus","preventDefault","target","select","handleBlur","parsedTime","Flex","width","TextInput","testId","onFocus","onBlur","defaultZoneOffset","zoneOffsets","TimezonepickerInput","Select","map","offset","Option","key","ZONE_RX","startOfToday","set","hours","minutes","fieldValueToMoment","datetimeString","datetime","test","utcOffset","timeFromUserInput","input","timeInput","utc","datetimeFromUserInput","valid","parseZone","invalid","buildFieldValue","data","usesTime","usesTimezone","getDefaultAMPM","getDefaultUtcOffset","userInputFromDatetime","timeFormat","display","alignItems","separator","marginLeft","tokens","spacingM","useEffectWithoutFirstRender","callback","deps","isFirstRun","current","DateEditorContainer","initialValue","hasClear","setValue","TextLink","as","onClick","DateEditor","field","parameters","formatParam","instance","ampmParam","FieldConnector","isInitiallyDisabled","throttle","externalReset","datetimeValue","Boolean","fieldValue","defaultProps"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAOA,IAAMA,UAAU,GAAG,GAAnB;AAEA,IAAMC,MAAM,GAAG;AACbC,EAAAA,IAAI,eAAEC,GAAG,CAAC;AACRC,IAAAA,QAAQ,EAAE;AADF,GAAD;AADI,CAAf;AAYO,IAAMC,eAAe,GAAG,SAAlBA,eAAkB,CAACC,KAAD;;;AAC7B,iBAA2BC,OAAO,CAAC;AACjC,QAAMC,QAAQ,GAAG,IAAIC,IAAJ,EAAjB;AACAD,IAAAA,QAAQ,CAACE,WAAT,CAAqBF,QAAQ,CAACG,WAAT,KAAyBX,UAA9C;AACA,QAAMY,MAAM,GAAG,IAAIH,IAAJ,EAAf;AACAG,IAAAA,MAAM,CAACF,WAAP,CAAmBE,MAAM,CAACD,WAAP,KAAuBX,UAA1C;AAEA,WAAO,CAACQ,QAAD,EAAWI,MAAX,CAAP;AACD,GAPiC,EAO/B,EAP+B,CAAlC;AAAA,MAAOJ,QAAP;AAAA,MAAiBI,MAAjB;AAUA;AACA;AACA;AACA;AACA;;;AACA,MAAMC,OAAO,mBAAGP,KAAK,CAACQ,KAAT,qBAAG,aAAaC,QAAb,EAAhB;AACA,MAAMC,YAAY,GAAGH,OAAO,GAAG,IAAIJ,IAAJ,CAASI,OAAO,CAACI,KAAjB,EAAwBJ,OAAO,CAACK,MAAhC,EAAwCL,OAAO,CAACM,IAAhD,CAAH,GAA2DC,SAAvF;AAEA,SACEC,4BAAA,CAACC,UAAD;AACEC,IAAAA,SAAS,EAAEtB,MAAM,CAACC;AAClBsB,IAAAA,QAAQ,EAAER;AACVS,IAAAA,QAAQ,EAAE,kBAACC,GAAD;AACR,UAAMC,SAAS,GAAGD,GAAG,GAAGE,MAAM,CAACF,GAAD,CAAT,GAAiBN,SAAtC;AACAd,MAAAA,KAAK,CAACuB,QAAN,CAAeF,SAAf;AACD;AACDG,IAAAA,UAAU,EAAE;AAAEC,MAAAA,UAAU,EAAEzB,KAAK,CAAC0B,QAApB;AAA8BC,MAAAA,WAAW,EAAE;AAA3C;AACZzB,IAAAA,QAAQ,EAAEA;AACVI,IAAAA,MAAM,EAAEA;GATV,CADF;AAaD,CAhCM;;ACNP,IAAMsB,iBAAiB,GAAG,CACxB,SADwB,EAExB,SAFwB,EAGxB,QAHwB,EAIxB,QAJwB,EAKxB,OALwB,EAMxB,MANwB,EAOxB,OAPwB,EAQxB,KARwB,EASxB,KATwB,EAUxB,GAVwB,EAWxB,IAXwB,EAYxB,IAZwB,CAA1B;;AAeA,SAASC,aAAT,CAAuBC,GAAvB;AACE,MAAIC,IAAI,GAAyB,IAAjC;;AAGA,OAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGJ,iBAAiB,CAACK,MAAtC,EAA8CD,CAAC,EAA/C,EAAmD;AACjD,QAAMnB,IAAI,GAAGS,MAAM,CAACQ,GAAD,EAAMF,iBAAiB,CAACI,CAAD,CAAvB,CAAnB;;AACA,QAAInB,IAAI,CAACqB,OAAL,EAAJ,EAAoB;AAClBH,MAAAA,IAAI,GAAGlB,IAAP;AACA;AACD;AACF;;AAED,SAAOkB,IAAP;AACD;;AAED,IAAMI,cAAc,GAAG,SAAjBA,cAAiB;AACrB,SAAOb,MAAM,aAAa,SAAb,CAAb;AACD,CAFD;;AAIA,IAAMc,cAAc,GAAG,SAAjBA,cAAiB,CAACC,YAAD,EAAwB7B,KAAxB;AACrB,SAAO6B,YAAY,GAAG7B,KAAK,CAAC8B,MAAN,CAAa,SAAb,CAAH,GAA6B9B,KAAK,CAAC8B,MAAN,CAAa,OAAb,CAAhD;AACD,CAFD;;AAIA,AAAO,IAAMC,eAAe,GAAG,SAAlBA,eAAkB;MAC7Bb,gBAAAA;MACAW,oBAAAA;uBACAN;MAAAA,8BAAO;uBACPS;MAAAA,8BAAO;MACPjB,gBAAAA;;AAEA,kBAAwCkB,QAAQ,CAAS;AACvD,WAAOL,cAAc,CAACC,YAAD,EAAeF,cAAc,EAA7B,CAArB;AACD,GAF+C,CAAhD;AAAA,MAAOO,YAAP;AAAA,MAAqBC,eAArB;;AAIAC,EAAAA,SAAS,CAAC;AACRD,IAAAA,eAAe,CAACP,cAAc,CAACC,YAAD,EAAef,MAAM,CAAIS,IAAJ,SAAYS,IAAZ,EAAoB,SAApB,CAArB,CAAf,CAAf;AACD,GAFQ,EAEN,CAACT,IAAD,EAAOS,IAAP,EAAaH,YAAb,CAFM,CAAT;AAIA,MAAMQ,YAAY,GAAGC,WAAW,CAAC,UAACC,CAAD;AAC/BJ,IAAAA,eAAe,CAACI,CAAC,CAACC,aAAF,CAAgBxC,KAAjB,CAAf;AACD,GAF+B,EAE7B,EAF6B,CAAhC;AAIA,MAAMyC,WAAW,GAAGH,WAAW,CAAC,UAACC,CAAD;AAC9BA,IAAAA,CAAC,CAACG,cAAF;AACAH,IAAAA,CAAC,CAACI,MAAF,CAASC,MAAT;AACD,GAH8B,EAG5B,EAH4B,CAA/B;;AAKA,MAAMC,UAAU,GAAG,SAAbA,UAAa;AACjB,QAAMC,UAAU,GAAGzB,aAAa,CAACa,YAAD,CAAhC;AACA,QAAMlC,KAAK,GAAG8C,UAAH,WAAGA,UAAH,GAAiBnB,cAAc,EAA1C;AACAQ,IAAAA,eAAe,CAACP,cAAc,CAACC,YAAD,EAAe7B,KAAf,CAAf,CAAf;AACAe,IAAAA,QAAQ,CAAC;AAAEQ,MAAAA,IAAI,EAAEvB,KAAK,CAAC8B,MAAN,CAAa,OAAb,CAAR;AAA+BE,MAAAA,IAAI,EAAEhC,KAAK,CAAC8B,MAAN,CAAa,GAAb;AAArC,KAAD,CAAR;AACD,GALD;;AAOA,SACEvB,4BAAA,CAACwC,IAAD;AAAMtC,IAAAA,SAAS,EAAEpB,GAAG,CAAC;AAAE2D,MAAAA,KAAK,EAAE;AAAT,KAAD;GAApB,EACEzC,4BAAA,CAAC0C,SAAD;kBACa;AACX9B,IAAAA,WAAW,EAAEU,YAAY,GAAG,UAAH,GAAgB;sBACzBA,YAAY,GAAG,IAAH,GAAU;AACtCqB,IAAAA,MAAM,EAAC;AACPlD,IAAAA,KAAK,EAAEkC;AACPjB,IAAAA,UAAU,EAAEC;AACZiC,IAAAA,OAAO,EAAEV;AACTW,IAAAA,MAAM,EAAEP;AACR9B,IAAAA,QAAQ,EAAEsB;GATZ,CADF,CADF;AAeD,CA9CM;;ACrDA,IAAMgB,iBAAiB,GAAG,QAA1B;AAEP,IAAaC,WAAW,GAAG,CACzB,QADyB,EAEzB,QAFyB,EAGzB,QAHyB,EAIzB,QAJyB,EAKzB,QALyB,EAMzB,QANyB,EAOzB,QAPyB,EAQzB,QARyB,EASzB,QATyB,EAUzB,QAVyB,EAWzB,QAXyB,EAYzB,QAZyB,EAazB,QAbyB,EAczB,QAdyB,EAezB,QAfyB,EAgBzB,QAhByB,EAiBzB,QAjByB,EAkBzB,QAlByB,EAmBzB,QAnByB,EAoBzB,QApByB,EAqBzB,QArByB,EAsBzB,QAtByB,EAuBzB,QAvByB,EAwBzB,QAxByB,EAyBzB,QAzByB,EA0BzB,QA1ByB,EA2BzB,QA3ByB,EA4BzB,QA5ByB,EA6BzB,QA7ByB,EA8BzB,QA9ByB,EA+BzB,QA/ByB,EAgCzB,QAhCyB,EAiCzB,QAjCyB,EAkCzB,QAlCyB,EAmCzB,QAnCyB,EAoCzB,QApCyB,EAqCzB,QArCyB,EAsCzB,QAtCyB,EAuCzB,QAvCyB,EAwCzB,QAxCyB,CAApB;;ACQA,IAAMC,mBAAmB,GAAG,SAAtBA,mBAAsB;MACjCrC,gBAAAA;MACAH,iBAAAA;wBACAf;MAAAA,gCAAQqD;AAER,SACE9C,4BAAA,CAACiD,MAAD;kBACa;AACXN,IAAAA,MAAM,EAAC;AACPlD,IAAAA,KAAK,EAAEA;AACPiB,IAAAA,UAAU,EAAEC;AACZH,IAAAA,QAAQ,EAAE,kBAACwB,CAAD;AACRxB,MAAAA,SAAQ,CAACwB,CAAC,CAACC,aAAF,CAAgBxC,KAAjB,CAAR;AACD;GAPH,EAQGsD,WAAW,CAACG,GAAZ,CAAgB,UAACC,MAAD;AAAA,WACfnD,4BAAA,CAACiD,MAAM,CAACG,MAAR;AAAeC,MAAAA,GAAG,EAAEF;AAAQ1D,MAAAA,KAAK,EAAE0D;KAAnC,OAAA,EACMA,MADN,CADe;AAAA,GAAhB,CARH,CADF;AAgBD,CArBM;;ACVP;AACA,AAGA,IAAMG,OAAO,GAAG,0BAAhB;;AAEA,SAASC,YAAT,CAAsBhC,MAAtB;AACE,SAAOhB,MAAM,GAAGiD,GAAT,CAAa;AAAEC,IAAAA,KAAK,EAAE,CAAT;AAAYC,IAAAA,OAAO,EAAE;AAArB,GAAb,EAAuCnC,MAAvC,CAA8CA,MAA9C,CAAP;AACD;;AAED,SAASoC,kBAAT,CAA4BC,cAA5B;AACE,MAAI,CAACA,cAAL,EAAqB;AACnB,WAAO,IAAP;AACD;;AAED,MAAMC,QAAQ,GAAGtD,MAAM,CAACqD,cAAD,CAAvB;;AACA,MAAIN,OAAO,CAACQ,IAAR,CAAaF,cAAb,CAAJ,EAAkC;AAChCC,IAAAA,QAAQ,CAACE,SAAT,CAAmBH,cAAnB;AACD;;AACD,SAAOC,QAAP;AACD;;AAED,SAASG,iBAAT,CAA2BC,KAA3B;AACE,MAAMC,SAAS,GAAGD,KAAK,CAACjD,IAAN,IAAc,OAAhC;AACA,SAAOT,MAAM,CAAC4D,GAAP,CAAWD,SAAS,GAAG,GAAZ,GAAkBD,KAAK,CAACxC,IAAnC,EAAyC,SAAzC,CAAP;AACD;AAED;;;;;;;;;;AAQA,SAAS2C,qBAAT,CAA+BH,KAA/B;AAIE,MAAI,CAACA,KAAK,CAACnE,IAAX,EAAiB;AACf,WAAO;AAAEuE,MAAAA,KAAK,EAAE;AAAT,KAAP;AACD;;AAED,MAAMrD,IAAI,GAAGgD,iBAAiB,CAACC,KAAD,CAA9B;AAEA,MAAMnE,IAAI,GAAGS,MAAM,CAChB+D,SADU,CACAL,KAAK,CAACF,SADN,EACiB,GADjB,EAEVP,GAFU,CAENS,KAAK,CAACnE,IAAN,CAAWJ,QAAX,EAFM,EAGV8D,GAHU,CAGN;AAAEC,IAAAA,KAAK,EAAEzC,IAAI,CAACyC,KAAL,EAAT;AAAuBC,IAAAA,OAAO,EAAE1C,IAAI,CAAC0C,OAAL;AAAhC,GAHM,CAAb;;AAKA,MAAI5D,IAAI,CAACqB,OAAL,EAAJ,EAAoB;AAClB,WAAO;AAAEkD,MAAAA,KAAK,EAAEvE;AAAT,KAAP;AACD,GAFD,MAEO;AACL,WAAO;AAAEyE,MAAAA,OAAO,EAAE,IAAX;AAAiBF,MAAAA,KAAK,EAAE;AAAxB,KAAP;AACD;AACF;AAED;;;;;;;;AAMA,SAAgBG;MACdC,YAAAA;MACAC,gBAAAA;MACAC,oBAAAA;AAMA,MAAM7E,IAAI,GAAGsE,qBAAqB,CAACK,IAAD,CAAlC;;AACA,MAAI3E,IAAI,CAACyE,OAAT,EAAkB;AAChB,WAAO;AACLA,MAAAA,OAAO,EAAE;AADJ,KAAP;AAGD;;AAED,MAAIhD,MAAJ;;AACA,MAAIoD,YAAJ,EAAkB;AAChBpD,IAAAA,MAAM,GAAG,mBAAT;AACD,GAFD,MAEO,IAAImD,QAAJ,EAAc;AACnBnD,IAAAA,MAAM,GAAG,kBAAT;AACD,GAFM,MAEA;AACLA,IAAAA,MAAM,GAAG,YAAT;AACD;;AACD,SAAO;AAAE8C,IAAAA,KAAK,EAAEvE,IAAI,QAAJ,IAAAA,IAAI,CAAEuE,KAAN,GAAcvE,IAAI,CAACuE,KAAL,CAAW9C,MAAX,CAAkBA,MAAlB,CAAd,GAA0C,IAAnD;AAAyDgD,IAAAA,OAAO,EAAE;AAAlE,GAAP;AACD;AAED,SAAgBK;AACd,SAAO,IAAP;AACD;AAED,SAAgBC;AACd,SAAOtB,YAAY,CAAC,GAAD,CAAnB;AACD;AAED;;;;AAGA,SAAgBuB;MACdrF,cAAAA;MACA6B,qBAAAA;AAKA,MAAMuC,QAAQ,GAAGF,kBAAkB,CAAClE,KAAD,CAAnC;;AAEA,MAAIoE,QAAJ,EAAc;AACZ,QAAMkB,UAAU,GAAGzD,YAAY,GAAG,OAAH,GAAa,OAA5C;AACA,WAAO;AACLxB,MAAAA,IAAI,EAAE+D,QADD;AAEL7C,MAAAA,IAAI,EAAE6C,QAAQ,CAACtC,MAAT,CAAgBwD,UAAhB,CAFD;AAGLtD,MAAAA,IAAI,EAAEoC,QAAQ,CAACtC,MAAT,CAAgB,GAAhB,CAHD;AAILwC,MAAAA,SAAS,EAAEF,QAAQ,CAACtC,MAAT,CAAgB,GAAhB;AAJN,KAAP;AAMD,GARD,MAQO;AACL,WAAO;AACLE,MAAAA,IAAI,EAAEmD,cAAc,EADf;AAELb,MAAAA,SAAS,EAAEc,mBAAmB;AAFzB,KAAP;AAID;AACF;;ACrFD,IAAMjG,QAAM,GAAG;AACbC,EAAAA,IAAI,eAAEC,GAAG,CAAC;AACRkG,IAAAA,OAAO,EAAE,MADD;AAERC,IAAAA,UAAU,EAAE;AAFJ,GAAD,CADI;AAKbC,EAAAA,SAAS,eAAEpG,GAAG,CAAC;AACbqG,IAAAA,UAAU,EAAEC,MAAM,CAACC;AADN,GAAD;AALD,CAAf;;AAUA,SAASC,2BAAT,CAAqCC,QAArC,EAAyDC,IAAzD;AACE,MAAMC,UAAU,GAAGzF,MAAA,CAAa,IAAb,CAAnB;AACAA,EAAAA,SAAA,CAAgB;AACd,QAAIyF,UAAU,CAACC,OAAf,EAAwB;AACtBD,MAAAA,UAAU,CAACC,OAAX,GAAqB,KAArB;AACA;AACD;;AACDH,IAAAA,QAAQ;AAET,GAPD,EAOGC,IAPH;AAQD;;AAED,SAASG,mBAAT;MACEC,oBAAAA;MACAlB,gBAAAA;MACAC,oBAAAA;MACArD,oBAAAA;MACAX,gBAAAA;MACAkF,gBAAAA;MACArF,gBAAAA;;AAUA,wBAA0BR,QAAA,CAA2B;AAAA,WAAM4F,YAAN;AAAA,GAA3B,CAA1B;AAAA,MAAOnG,KAAP;AAAA,MAAcqG,QAAd;;AAEAR,EAAAA,2BAA2B,CAAC;AAC1B9E,IAAAA,QAAQ,CAACf,KAAD,CAAR;AACD,GAF0B,EAExB,CAACA,KAAD,CAFwB,CAA3B;AAIA,SACEO,aAAA,MAAA;oBAAkB;AAAcE,IAAAA,SAAS,EAAEtB,QAAM,CAACC;GAAlD,EACEmB,aAAA,CAAChB,eAAD;AACE2B,IAAAA,QAAQ,EAAEA;AACVlB,IAAAA,KAAK,EAAEA,KAAK,CAACK;AACbU,IAAAA,QAAQ,EAAE,kBAACV,IAAD;AACRgG,MAAAA,QAAQ,CAAC,UAACrG,KAAD;AAAA,4BACJA,KADI;AAEPK,UAAAA,IAAI,EAAJA;AAFO;AAAA,OAAD,CAAR;AAID;GARH,CADF,EAWG4E,QAAQ,IACP1E,aAAA,SAAA,MAAA,EACEA,aAAA,MAAA;AAAKE,IAAAA,SAAS,EAAEtB,QAAM,CAACsG;GAAvB,CADF,EAEElF,aAAA,CAACwB,eAAD;AACEb,IAAAA,QAAQ,EAAEA;AACVK,IAAAA,IAAI,EAAEvB,KAAK,CAACuB;AACZS,IAAAA,IAAI,EAAEhC,KAAK,CAACgC;AACZjB,IAAAA,QAAQ,EAAE;UAAGQ,aAAAA;UAAMS,aAAAA;AACjBqE,MAAAA,QAAQ,CAAC,UAACrG,KAAD;AAAA,4BACJA,KADI;AAEPuB,UAAAA,IAAI,EAAJA,IAFO;AAGPS,UAAAA,IAAI,EAAJA;AAHO;AAAA,OAAD,CAAR;AAKD;AACDH,IAAAA,YAAY,EAAEA;GAXhB,CAFF,CAZJ,EA6BGqD,YAAY,IACX3E,aAAA,SAAA,MAAA,EACEA,aAAA,MAAA;AAAKE,IAAAA,SAAS,EAAEtB,QAAM,CAACsG;GAAvB,CADF,EAEElF,aAAA,CAACgD,mBAAD;AACErC,IAAAA,QAAQ,EAAEA;AACVlB,IAAAA,KAAK,EAAEA,KAAK,CAACsE;AACbvD,IAAAA,QAAQ,EAAE,kBAACuD,SAAD;AACR+B,MAAAA,QAAQ,CAAC,UAACrG,KAAD;AAAA,4BACJA,KADI;AAEPsE,UAAAA,SAAS,EAATA;AAFO;AAAA,OAAD,CAAR;AAID;GARH,CAFF,CA9BJ,EA4CG8B,QAAQ,IACP7F,aAAA,SAAA,MAAA,EACEA,aAAA,MAAA;AAAKE,IAAAA,SAAS,EAAEtB,QAAM,CAACsG;GAAvB,CADF,EAEElF,aAAA,CAAC+F,QAAD;AACEC,IAAAA,EAAE,EAAC;AACHtF,IAAAA,UAAU,EAAEC;AACZgC,IAAAA,MAAM,EAAC;AACPsD,IAAAA,OAAO,EAAE;AACPH,MAAAA,QAAQ,CAAC;AACPhG,QAAAA,IAAI,EAAEC,SADC;AAEPiB,QAAAA,IAAI,EAAEjB,SAFC;AAGP0B,QAAAA,IAAI,EAAEmD,cAAc,EAHb;AAIPb,QAAAA,SAAS,EAAEc,mBAAmB;AAJvB,OAAD,CAAR;AAMD;GAXH,SAAA,CAFF,CA7CJ,CADF;AAkED;;AAED,SAAgBqB,WAAWjH;;;AACzB,MAAQkH,KAAR,GAA8BlH,KAA9B,CAAQkH,KAAR;AAAA,MAAeC,UAAf,GAA8BnH,KAA9B,CAAemH,UAAf;AAEA,MAAMC,WAAW,4BAAGD,UAAH,4CAAGA,UAAU,CAAEE,QAAf,qBAAG,qBAAsB/E,MAAzB,oCAAmC,OAApD;AACA,MAAMgF,SAAS,6BAAGH,UAAH,6CAAGA,UAAU,CAAEE,QAAf,qBAAG,sBAAsB7E,IAAzB,qCAAiC,IAAhD;AAEA,MAAMiD,QAAQ,GAAG2B,WAAW,KAAK,UAAjC;AACA,MAAM1B,YAAY,GAAG0B,WAAW,KAAK,OAArC;AACA,MAAM/E,YAAY,GAAGiF,SAAS,KAAK,IAAnC;AAEA,SACEvG,aAAA,CAACwG,cAAD;AACEL,IAAAA,KAAK,EAAEA;AACPM,IAAAA,mBAAmB,EAAExH,KAAK,CAACwH;AAC3BC,IAAAA,QAAQ,EAAE;GAHZ,EAIG;QAAGjH,cAAAA;QAAOkB,iBAAAA;QAAUmF,iBAAAA;QAAUa,sBAAAA;AAC7B,QAAMC,aAAa,GAAG9B,qBAAqB,CAAC;AAC1CrF,MAAAA,KAAK,EAALA,KAD0C;AAE1C6B,MAAAA,YAAY,EAAZA;AAF0C,KAAD,CAA3C;AAIA,WACEtB,aAAA,CAAC2F,mBAAD;AACEC,MAAAA,YAAY,EAAEgB;AACdtF,MAAAA,YAAY,EAAEA;AACdqD,MAAAA,YAAY,EAAEA;AACdD,MAAAA,QAAQ,EAAEA;AACV/D,MAAAA,QAAQ,EAAEA;AACVkF,MAAAA,QAAQ,EAAEgB,OAAO,CAACpH,KAAD;AACjBe,MAAAA,QAAQ,EAAE,kBAACiE,IAAD;AACR,YAAMqC,UAAU,GAAGtC,eAAe,CAAC;AAAEC,UAAAA,IAAI,EAAJA,IAAF;AAAQC,UAAAA,QAAQ,EAARA,QAAR;AAAkBC,UAAAA,YAAY,EAAZA;AAAlB,SAAD,CAAlC;;AACA,YAAImC,UAAU,CAACvC,OAAf,EAAwB;AACtB;AACD;AAED;;;AACA,YAAIsC,OAAO,CAACpH,KAAD,CAAP,IAAmB,CAACA,KAAD,IAAUoH,OAAO,CAACC,UAAU,CAACzC,KAAZ,CAAxC,EAA6D;AAC3DyB,UAAAA,QAAQ,CAACgB,UAAU,CAACzC,KAAZ,CAAR;AACD;AACF;AACDhB,MAAAA,GAAG,sBAAoBsD;KAlBzB,CADF;AAsBD,GA/BH,CADF;AAmCD;AAEDT,UAAU,CAACa,YAAX,GAA0B;AACxBN,EAAAA,mBAAmB,EAAE;AADG,CAA1B;;;;"}
1
+ {"version":3,"file":"field-editor-date.esm.js","sources":["../src/DatepickerInput.tsx","../src/TimepickerInput.tsx","../src/utils/zoneOffsets.ts","../src/TimezonePickerInput.tsx","../src/utils/date.ts","../src/DateEditor.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\n\nimport { Datepicker } from '@contentful/f36-components';\nimport { css } from 'emotion';\n// eslint-disable-next-line -- TODO: move to date-fns\nimport moment from 'moment';\n\nconst YEAR_RANGE = 100;\n\nconst styles = {\n root: css({\n maxWidth: '270px',\n }),\n};\n\nexport type DatePickerProps = {\n value?: moment.Moment;\n onChange: (val: moment.Moment | undefined) => void;\n disabled?: boolean;\n};\n\nexport const DatepickerInput = (props: DatePickerProps) => {\n const [fromDate, toDate] = useMemo(() => {\n const fromDate = new Date();\n fromDate.setFullYear(fromDate.getFullYear() - YEAR_RANGE);\n const toDate = new Date();\n toDate.setFullYear(toDate.getFullYear() + YEAR_RANGE);\n\n return [fromDate, toDate];\n }, []);\n\n // The DatepickerInput should be time and timezone agnostic,\n // thats why we don't use moment().toDate() to get Date object.\n // moment().toDate() takes into account time and timezone and converts it\n // based on your system timezone which can result in the date change.\n // e.g. if user has a timezone +02:00, moment('2022-09-16T00:00+04:00').toDate()\n // will return September 15 instead of September 16\n const dateObj = props.value?.toObject();\n const selectedDate = dateObj ? new Date(dateObj.years, dateObj.months, dateObj.date) : undefined;\n\n return (\n <Datepicker\n className={styles.root}\n selected={selectedDate}\n onSelect={(day) => {\n const momentDay = day ? moment(day) : undefined;\n props.onChange(momentDay);\n }}\n inputProps={{ isDisabled: props.disabled, placeholder: '' }}\n fromDate={fromDate}\n toDate={toDate}\n />\n );\n};\n","import React, { useState, useCallback, useEffect } from 'react';\n// eslint-disable-next-line -- TODO: move to date-fns\nimport moment from 'moment';\nimport { css } from 'emotion';\n\nimport { TextInput, Flex } from '@contentful/f36-components';\n\nexport type TimepickerProps = {\n disabled: boolean;\n uses12hClock: boolean;\n onChange: (value: { time: string; ampm: string }) => void;\n time?: string;\n ampm?: string;\n};\n\nconst validInputFormats = [\n 'hh:mm a',\n 'hh:mm A',\n 'h:mm a',\n 'h:mm A',\n 'hh:mm',\n 'k:mm',\n 'kk:mm',\n 'h a',\n 'h A',\n 'h',\n 'hh',\n 'HH',\n];\n\nfunction parseRawInput(raw: string): moment.Moment | null {\n let time: moment.Moment | null = null;\n\n // eslint-disable-next-line -- TODO: refactor to use for of loop\n for (let i = 0; i < validInputFormats.length; i++) {\n const date = moment(raw, validInputFormats[i]);\n if (date.isValid()) {\n time = date;\n break;\n }\n }\n\n return time;\n}\n\nconst getDefaultTime = () => {\n return moment(`12:00 AM`, 'hh:mm A');\n};\n\nconst formatToString = (uses12hClock: boolean, value: moment.Moment): string => {\n return uses12hClock ? value.format('hh:mm A') : value.format('HH:mm');\n};\n\nexport const TimepickerInput = ({\n disabled,\n uses12hClock,\n time = '12:00',\n ampm = 'AM',\n onChange,\n}: TimepickerProps) => {\n const [selectedTime, setSelectedTime] = useState<string>(() => {\n return formatToString(uses12hClock, getDefaultTime());\n });\n\n useEffect(() => {\n setSelectedTime(formatToString(uses12hClock, moment(`${time} ${ampm}`, 'hh:mm A')));\n }, [time, ampm, uses12hClock]);\n\n const handleChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n setSelectedTime(e.currentTarget.value);\n }, []);\n\n const handleFocus = useCallback((e) => {\n e.preventDefault();\n e.target.select();\n }, []);\n\n const handleBlur = () => {\n const parsedTime = parseRawInput(selectedTime);\n const value = parsedTime ?? getDefaultTime();\n setSelectedTime(formatToString(uses12hClock, value));\n onChange({ time: value.format('hh:mm'), ampm: value.format('A') });\n };\n\n return (\n <Flex className={css({ width: '145px' })}>\n <TextInput\n aria-label=\"Select time\"\n placeholder={uses12hClock ? '12:00 AM' : '00:00'}\n date-time-type={uses12hClock ? '12' : '24'}\n testId=\"time-input\"\n value={selectedTime}\n isDisabled={disabled}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onChange={handleChange}\n />\n </Flex>\n );\n};\n","export const defaultZoneOffset = '+00:00';\n\nexport const zoneOffsets = [\n '-12:00',\n '-11:00',\n '-10:00',\n '-09:30',\n '-09:00',\n '-08:00',\n '-07:00',\n '-06:00',\n '-05:00',\n '-04:30',\n '-04:00',\n '-03:30',\n '-03:00',\n '-02:00',\n '-01:00',\n '+00:00',\n '+01:00',\n '+02:00',\n '+03:00',\n '+03:30',\n '+04:00',\n '+04:30',\n '+05:00',\n '+05:30',\n '+05:45',\n '+06:00',\n '+06:30',\n '+07:00',\n '+08:00',\n '+08:45',\n '+09:00',\n '+09:30',\n '+10:00',\n '+10:30',\n '+11:00',\n '+11:30',\n '+12:00',\n '+12:45',\n '+13:00',\n '+14:00',\n];\n","import React, { ChangeEvent } from 'react';\nimport { zoneOffsets, defaultZoneOffset } from './utils/zoneOffsets';\n\nimport { Select } from '@contentful/f36-components';\n\nexport type TimezonepickerProps = {\n disabled: boolean;\n onChange: (value: string) => void;\n value?: string;\n};\nexport const TimezonepickerInput = ({\n disabled,\n onChange,\n value = defaultZoneOffset,\n}: TimezonepickerProps) => {\n return (\n <Select\n aria-label=\"Select timezone\"\n testId=\"timezone-input\"\n value={value}\n isDisabled={disabled}\n onChange={(e: ChangeEvent<HTMLSelectElement>) => {\n onChange(e.currentTarget.value);\n }}>\n {zoneOffsets.map((offset) => (\n <Select.Option key={offset} value={offset}>\n UTC{offset}\n </Select.Option>\n ))}\n </Select>\n );\n};\n","// eslint-disable-next-line -- TODO: move to date-fns\nimport moment from 'moment';\nimport { TimeResult } from '../types';\n\nconst ZONE_RX = /(Z|[+-]\\d{2}[:+]?\\d{2})$/;\n\nfunction startOfToday(format: string) {\n return moment().set({ hours: 0, minutes: 0 }).format(format);\n}\n\nfunction fieldValueToMoment(datetimeString: string | null | undefined): moment.Moment | null {\n if (!datetimeString) {\n return null;\n }\n\n const datetime = moment(datetimeString);\n if (ZONE_RX.test(datetimeString)) {\n datetime.utcOffset(datetimeString);\n }\n return datetime;\n}\n\nfunction timeFromUserInput(input: TimeResult) {\n const timeInput = input.time || '00:00';\n return moment.utc(timeInput + '!' + input.ampm, 'HH:mm!A');\n}\n\n/**\n * Convert the user input object into either a 'moment' value or an\n * invalid symbol.\n *\n * Success is indicated by returning '{valid: value}' and failure is\n * indicated by returning '{invalid: true}'. If 'input.date' is\n * 'null' we return '{valid: null}'\n */\nfunction datetimeFromUserInput(input: TimeResult): {\n invalid?: boolean;\n valid: moment.Moment | null;\n} {\n if (!input.date) {\n return { valid: null };\n }\n\n const time = timeFromUserInput(input);\n\n const date = moment\n .parseZone(input.utcOffset, 'Z')\n .set(input.date.toObject())\n .set({ hours: time.hours(), minutes: time.minutes() });\n\n if (date.isValid()) {\n return { valid: date };\n } else {\n return { invalid: true, valid: null };\n }\n}\n\n/**\n * Parse user input into a string that is stored in the API.\n *\n * Returns a sum type with either the string as the `valid` property\n * or the `invalid` property set to `false`.\n */\nexport function buildFieldValue({\n data,\n usesTime,\n usesTimezone,\n}: {\n data: TimeResult;\n usesTime: boolean;\n usesTimezone: boolean;\n}) {\n const date = datetimeFromUserInput(data);\n if (date.invalid) {\n return {\n invalid: true,\n };\n }\n\n let format;\n if (usesTimezone) {\n format = 'YYYY-MM-DDTHH:mmZ';\n } else if (usesTime) {\n format = 'YYYY-MM-DDTHH:mm';\n } else {\n format = 'YYYY-MM-DD';\n }\n return { valid: date?.valid ? date.valid.format(format) : null, invalid: false };\n}\n\nexport function getDefaultAMPM() {\n return 'AM';\n}\n\nexport function getDefaultUtcOffset() {\n return startOfToday('Z');\n}\n\n/**\n * Create the user input object from the field value.\n */\nexport function userInputFromDatetime({\n value,\n uses12hClock,\n}: {\n value: string | undefined | null;\n uses12hClock: boolean;\n}): TimeResult {\n const datetime = fieldValueToMoment(value);\n\n if (datetime) {\n const timeFormat = uses12hClock ? 'hh:mm' : 'HH:mm';\n return {\n date: datetime,\n time: datetime.format(timeFormat),\n ampm: datetime.format('A'),\n utcOffset: datetime.format('Z'),\n };\n } else {\n return {\n ampm: getDefaultAMPM(),\n utcOffset: getDefaultUtcOffset(),\n };\n }\n}\n","import * as React from 'react';\n\nimport { TextLink } from '@contentful/f36-components';\nimport tokens from '@contentful/f36-tokens';\nimport { FieldAPI, FieldConnector, ParametersAPI } from '@contentful/field-editor-shared';\nimport { css } from 'emotion';\n\nimport { DatepickerInput } from './DatepickerInput';\nimport { TimepickerInput } from './TimepickerInput';\nimport { TimezonepickerInput } from './TimezonePickerInput';\nimport { TimeFormat, DateTimeFormat, TimeResult } from './types';\nimport {\n userInputFromDatetime,\n buildFieldValue,\n getDefaultAMPM,\n getDefaultUtcOffset,\n} from './utils/date';\n\n\nexport interface DateEditorProps {\n /**\n * is the field disabled initially\n */\n isInitiallyDisabled: boolean;\n\n /*\n * is the field manually disabled\n */\n isDisabled?: boolean;\n\n /**\n * sdk.field\n */\n field: FieldAPI;\n\n /**\n * sdk.parameters\n */\n parameters?: ParametersAPI & {\n instance?: {\n format?: DateTimeFormat;\n ampm?: TimeFormat;\n };\n };\n}\n\nconst styles = {\n root: css({\n display: 'flex',\n alignItems: 'center',\n }),\n separator: css({\n marginLeft: tokens.spacingM,\n }),\n};\n\nfunction useEffectWithoutFirstRender(callback: Function, deps: Array<any>) {\n const isFirstRun = React.useRef(true);\n React.useEffect(() => {\n if (isFirstRun.current) {\n isFirstRun.current = false;\n return;\n }\n callback();\n // eslint-disable-next-line react-hooks/exhaustive-deps -- TODO: Evaluate the dependencies\n }, deps);\n}\n\nfunction DateEditorContainer({\n initialValue,\n usesTime,\n usesTimezone,\n uses12hClock,\n disabled,\n hasClear,\n onChange,\n}: {\n initialValue: TimeResult;\n usesTime: boolean;\n usesTimezone: boolean;\n uses12hClock: boolean;\n disabled: boolean;\n hasClear: boolean;\n onChange: (value: TimeResult) => void;\n}) {\n const [value, setValue] = React.useState<TimeResult>(() => initialValue);\n\n useEffectWithoutFirstRender(() => {\n onChange(value);\n }, [value]);\n\n return (\n <div data-test-id=\"date-editor\" className={styles.root}>\n <DatepickerInput\n disabled={disabled}\n value={value.date}\n onChange={(date) => {\n setValue((value) => ({\n ...value,\n date,\n }));\n }}\n />\n {usesTime && (\n <>\n <div className={styles.separator} />\n <TimepickerInput\n disabled={disabled}\n time={value.time}\n ampm={value.ampm}\n onChange={({ time, ampm }) => {\n setValue((value) => ({\n ...value,\n time,\n ampm,\n }));\n }}\n uses12hClock={uses12hClock}\n />\n </>\n )}\n {usesTimezone && (\n <>\n <div className={styles.separator} />\n <TimezonepickerInput\n disabled={disabled}\n value={value.utcOffset}\n onChange={(utcOffset) => {\n setValue((value) => ({\n ...value,\n utcOffset,\n }));\n }}\n />\n </>\n )}\n {hasClear && (\n <>\n <div className={styles.separator} />\n <TextLink\n as=\"button\"\n isDisabled={disabled}\n testId=\"date-clear\"\n onClick={() => {\n setValue({\n date: undefined,\n time: undefined,\n ampm: getDefaultAMPM(),\n utcOffset: getDefaultUtcOffset(),\n });\n }}\n >\n Clear\n </TextLink>\n </>\n )}\n </div>\n );\n}\n\nexport function DateEditor(props: DateEditorProps) {\n const { field, parameters } = props;\n\n const formatParam = parameters?.instance?.format ?? 'timeZ';\n const ampmParam = parameters?.instance?.ampm ?? '24';\n\n const usesTime = formatParam !== 'dateonly';\n const usesTimezone = formatParam === 'timeZ';\n const uses12hClock = ampmParam === '12';\n\n return (\n <FieldConnector<string>\n field={field}\n isInitiallyDisabled={props.isInitiallyDisabled}\n throttle={0}\n >\n {({ value, disabled, setValue, externalReset }) => {\n const datetimeValue = userInputFromDatetime({\n value,\n uses12hClock,\n });\n return (\n <DateEditorContainer\n initialValue={datetimeValue}\n uses12hClock={uses12hClock}\n usesTimezone={usesTimezone}\n usesTime={usesTime}\n disabled={props.isDisabled ?? disabled}\n hasClear={Boolean(value)}\n onChange={(data) => {\n const fieldValue = buildFieldValue({ data, usesTime, usesTimezone });\n if (fieldValue.invalid) {\n return;\n }\n // if value is present - then override it with a new one\n // if value is not present - then set a new one if it's not nullable only\n if (Boolean(value) || (!value && Boolean(fieldValue.valid))) {\n setValue(fieldValue.valid);\n }\n }}\n key={`date-container-${externalReset}`}\n />\n );\n }}\n </FieldConnector>\n );\n}\n\nDateEditor.defaultProps = {\n isInitiallyDisabled: true,\n};\n"],"names":["YEAR_RANGE","styles","root","css","maxWidth","DatepickerInput","props","useMemo","fromDate","Date","setFullYear","getFullYear","toDate","dateObj","value","toObject","selectedDate","years","months","date","undefined","React","Datepicker","className","selected","onSelect","day","momentDay","moment","onChange","inputProps","isDisabled","disabled","placeholder","validInputFormats","parseRawInput","raw","time","i","length","isValid","getDefaultTime","formatToString","uses12hClock","format","TimepickerInput","ampm","useState","selectedTime","setSelectedTime","useEffect","handleChange","useCallback","e","currentTarget","handleFocus","preventDefault","target","select","handleBlur","parsedTime","Flex","width","TextInput","testId","onFocus","onBlur","defaultZoneOffset","zoneOffsets","TimezonepickerInput","Select","map","offset","Option","key","ZONE_RX","startOfToday","set","hours","minutes","fieldValueToMoment","datetimeString","datetime","test","utcOffset","timeFromUserInput","input","timeInput","utc","datetimeFromUserInput","valid","parseZone","invalid","buildFieldValue","data","usesTime","usesTimezone","getDefaultAMPM","getDefaultUtcOffset","userInputFromDatetime","timeFormat","display","alignItems","separator","marginLeft","tokens","spacingM","useEffectWithoutFirstRender","callback","deps","isFirstRun","current","DateEditorContainer","initialValue","hasClear","setValue","TextLink","as","onClick","DateEditor","field","parameters","formatParam","instance","ampmParam","FieldConnector","isInitiallyDisabled","throttle","externalReset","datetimeValue","Boolean","fieldValue","defaultProps"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@contentful/field-editor-date",
3
- "version": "1.2.7",
3
+ "version": "1.3.3",
4
4
  "main": "dist/index.js",
5
5
  "module": "dist/field-editor-date.esm.js",
6
6
  "typings": "dist/index.d.ts",
@@ -24,13 +24,13 @@
24
24
  "dependencies": {
25
25
  "@contentful/f36-components": "^4.20.1",
26
26
  "@contentful/f36-tokens": "^4.0.0",
27
- "@contentful/field-editor-shared": "^1.1.6",
27
+ "@contentful/field-editor-shared": "^1.1.7",
28
28
  "emotion": "^10.0.17",
29
29
  "moment": "^2.20.0"
30
30
  },
31
31
  "devDependencies": {
32
32
  "@babel/core": "^7.7.4",
33
- "@contentful/field-editor-test-utils": "^1.2.5",
33
+ "@contentful/field-editor-test-utils": "^1.2.6",
34
34
  "@types/timezoned-date": "^3.0.0",
35
35
  "timezoned-date": "^3.0.2"
36
36
  },
@@ -47,5 +47,5 @@
47
47
  }
48
48
  }
49
49
  },
50
- "gitHead": "320c8066c77ca41cde74d4c17dc9708188432088"
50
+ "gitHead": "1e4a7d92c48f0e1949f2b48b3c9974da1602fd5c"
51
51
  }