@contentful/field-editor-date 1.4.0 → 1.5.0

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.
Files changed (40) hide show
  1. package/dist/cjs/DateEditor.js +186 -0
  2. package/dist/cjs/DatepickerInput.js +92 -0
  3. package/dist/cjs/DatepickerInput.spec.js +110 -0
  4. package/dist/cjs/TimepickerInput.js +132 -0
  5. package/dist/cjs/TimezonePickerInput.js +32 -0
  6. package/dist/cjs/index.js +20 -0
  7. package/dist/cjs/types.js +4 -0
  8. package/dist/cjs/utils/data.spec.js +56 -0
  9. package/dist/cjs/utils/date.js +116 -0
  10. package/dist/cjs/utils/zoneOffsets.js +61 -0
  11. package/dist/esm/DateEditor.js +132 -0
  12. package/dist/esm/DatepickerInput.js +38 -0
  13. package/dist/esm/DatepickerInput.spec.js +62 -0
  14. package/dist/esm/TimepickerInput.js +78 -0
  15. package/dist/esm/TimezonePickerInput.js +17 -0
  16. package/dist/esm/index.js +2 -0
  17. package/dist/esm/types.js +1 -0
  18. package/dist/esm/utils/data.spec.js +47 -0
  19. package/dist/esm/utils/date.js +87 -0
  20. package/dist/esm/utils/zoneOffsets.js +43 -0
  21. package/dist/{DateEditor.d.ts → types/DateEditor.d.ts} +29 -29
  22. package/dist/{DatepickerInput.d.ts → types/DatepickerInput.d.ts} +8 -8
  23. package/dist/types/DatepickerInput.spec.d.ts +1 -0
  24. package/dist/{TimepickerInput.d.ts → types/TimepickerInput.d.ts} +12 -12
  25. package/dist/{TimezonePickerInput.d.ts → types/TimezonePickerInput.d.ts} +7 -7
  26. package/dist/{index.d.ts → types/index.d.ts} +2 -2
  27. package/dist/types/types.d.ts +9 -0
  28. package/dist/types/utils/data.spec.d.ts +1 -0
  29. package/dist/{utils → types/utils}/date.d.ts +27 -27
  30. package/dist/{utils → types/utils}/zoneOffsets.d.ts +2 -2
  31. package/package.json +26 -12
  32. package/CHANGELOG.md +0 -294
  33. package/dist/field-editor-date.cjs.development.js +0 -430
  34. package/dist/field-editor-date.cjs.development.js.map +0 -1
  35. package/dist/field-editor-date.cjs.production.min.js +0 -2
  36. package/dist/field-editor-date.cjs.production.min.js.map +0 -1
  37. package/dist/field-editor-date.esm.js +0 -422
  38. package/dist/field-editor-date.esm.js.map +0 -1
  39. package/dist/index.js +0 -8
  40. package/dist/types.d.ts +0 -9
@@ -0,0 +1,186 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "DateEditor", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return DateEditor;
9
+ }
10
+ });
11
+ const _react = _interop_require_wildcard(require("react"));
12
+ const _f36components = require("@contentful/f36-components");
13
+ const _f36tokens = _interop_require_default(require("@contentful/f36-tokens"));
14
+ const _fieldeditorshared = require("@contentful/field-editor-shared");
15
+ const _emotion = require("emotion");
16
+ const _DatepickerInput = require("./DatepickerInput");
17
+ const _TimepickerInput = require("./TimepickerInput");
18
+ const _TimezonePickerInput = require("./TimezonePickerInput");
19
+ const _date = require("./utils/date");
20
+ function _interop_require_default(obj) {
21
+ return obj && obj.__esModule ? obj : {
22
+ default: obj
23
+ };
24
+ }
25
+ function _getRequireWildcardCache(nodeInterop) {
26
+ if (typeof WeakMap !== "function") return null;
27
+ var cacheBabelInterop = new WeakMap();
28
+ var cacheNodeInterop = new WeakMap();
29
+ return (_getRequireWildcardCache = function(nodeInterop) {
30
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
31
+ })(nodeInterop);
32
+ }
33
+ function _interop_require_wildcard(obj, nodeInterop) {
34
+ if (!nodeInterop && obj && obj.__esModule) {
35
+ return obj;
36
+ }
37
+ if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
38
+ return {
39
+ default: obj
40
+ };
41
+ }
42
+ var cache = _getRequireWildcardCache(nodeInterop);
43
+ if (cache && cache.has(obj)) {
44
+ return cache.get(obj);
45
+ }
46
+ var newObj = {};
47
+ var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
48
+ for(var key in obj){
49
+ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
50
+ var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
51
+ if (desc && (desc.get || desc.set)) {
52
+ Object.defineProperty(newObj, key, desc);
53
+ } else {
54
+ newObj[key] = obj[key];
55
+ }
56
+ }
57
+ }
58
+ newObj.default = obj;
59
+ if (cache) {
60
+ cache.set(obj, newObj);
61
+ }
62
+ return newObj;
63
+ }
64
+ const styles = {
65
+ root: (0, _emotion.css)({
66
+ display: 'flex',
67
+ alignItems: 'center'
68
+ }),
69
+ separator: (0, _emotion.css)({
70
+ marginLeft: _f36tokens.default.spacingM
71
+ })
72
+ };
73
+ function useEffectWithoutFirstRender(callback, deps) {
74
+ const isFirstRun = _react.useRef(true);
75
+ _react.useEffect(()=>{
76
+ if (isFirstRun.current) {
77
+ isFirstRun.current = false;
78
+ return;
79
+ }
80
+ callback();
81
+ }, deps);
82
+ }
83
+ function DateEditorContainer({ initialValue , usesTime , usesTimezone , uses12hClock , disabled , hasClear , onChange }) {
84
+ const [value, setValue] = _react.useState(()=>initialValue);
85
+ useEffectWithoutFirstRender(()=>{
86
+ onChange(value);
87
+ }, [
88
+ value
89
+ ]);
90
+ return _react.createElement("div", {
91
+ "data-test-id": "date-editor",
92
+ className: styles.root
93
+ }, _react.createElement(_DatepickerInput.DatepickerInput, {
94
+ disabled: disabled,
95
+ value: value.date,
96
+ onChange: (date)=>{
97
+ setValue((value)=>({
98
+ ...value,
99
+ date
100
+ }));
101
+ }
102
+ }), usesTime && _react.createElement(_react.Fragment, null, _react.createElement("div", {
103
+ className: styles.separator
104
+ }), _react.createElement(_TimepickerInput.TimepickerInput, {
105
+ disabled: disabled,
106
+ time: value.time,
107
+ ampm: value.ampm,
108
+ onChange: ({ time , ampm })=>{
109
+ setValue((value)=>({
110
+ ...value,
111
+ time,
112
+ ampm
113
+ }));
114
+ },
115
+ uses12hClock: uses12hClock
116
+ })), usesTimezone && _react.createElement(_react.Fragment, null, _react.createElement("div", {
117
+ className: styles.separator
118
+ }), _react.createElement(_TimezonePickerInput.TimezonepickerInput, {
119
+ disabled: disabled,
120
+ value: value.utcOffset,
121
+ onChange: (utcOffset)=>{
122
+ setValue((value)=>({
123
+ ...value,
124
+ utcOffset
125
+ }));
126
+ }
127
+ })), hasClear && _react.createElement(_react.Fragment, null, _react.createElement("div", {
128
+ className: styles.separator
129
+ }), _react.createElement(_f36components.TextLink, {
130
+ as: "button",
131
+ isDisabled: disabled,
132
+ testId: "date-clear",
133
+ onClick: ()=>{
134
+ setValue({
135
+ date: undefined,
136
+ time: undefined,
137
+ ampm: (0, _date.getDefaultAMPM)(),
138
+ utcOffset: (0, _date.getDefaultUtcOffset)()
139
+ });
140
+ }
141
+ }, "Clear")));
142
+ }
143
+ function DateEditor(props) {
144
+ const { field , parameters } = props;
145
+ const formatParam = parameters?.instance?.format ?? 'timeZ';
146
+ const ampmParam = parameters?.instance?.ampm ?? '24';
147
+ const usesTime = formatParam !== 'dateonly';
148
+ const usesTimezone = formatParam === 'timeZ';
149
+ const uses12hClock = ampmParam === '12';
150
+ return _react.createElement(_fieldeditorshared.FieldConnector, {
151
+ field: field,
152
+ isInitiallyDisabled: props.isInitiallyDisabled,
153
+ isDisabled: props.isDisabled,
154
+ throttle: 0
155
+ }, ({ value , disabled , setValue , externalReset })=>{
156
+ const datetimeValue = (0, _date.userInputFromDatetime)({
157
+ value,
158
+ uses12hClock
159
+ });
160
+ return _react.createElement(DateEditorContainer, {
161
+ initialValue: datetimeValue,
162
+ uses12hClock: uses12hClock,
163
+ usesTimezone: usesTimezone,
164
+ usesTime: usesTime,
165
+ disabled: disabled,
166
+ hasClear: Boolean(value),
167
+ onChange: (data)=>{
168
+ const fieldValue = (0, _date.buildFieldValue)({
169
+ data,
170
+ usesTime,
171
+ usesTimezone
172
+ });
173
+ if (fieldValue.invalid) {
174
+ return;
175
+ }
176
+ if (Boolean(value) || !value && Boolean(fieldValue.valid)) {
177
+ setValue(fieldValue.valid);
178
+ }
179
+ },
180
+ key: `date-container-${externalReset}`
181
+ });
182
+ });
183
+ }
184
+ DateEditor.defaultProps = {
185
+ isInitiallyDisabled: true
186
+ };
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "DatepickerInput", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return DatepickerInput;
9
+ }
10
+ });
11
+ const _react = _interop_require_wildcard(require("react"));
12
+ const _f36components = require("@contentful/f36-components");
13
+ const _emotion = require("emotion");
14
+ const _moment = _interop_require_default(require("moment"));
15
+ function _interop_require_default(obj) {
16
+ return obj && obj.__esModule ? obj : {
17
+ default: obj
18
+ };
19
+ }
20
+ function _getRequireWildcardCache(nodeInterop) {
21
+ if (typeof WeakMap !== "function") return null;
22
+ var cacheBabelInterop = new WeakMap();
23
+ var cacheNodeInterop = new WeakMap();
24
+ return (_getRequireWildcardCache = function(nodeInterop) {
25
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
26
+ })(nodeInterop);
27
+ }
28
+ function _interop_require_wildcard(obj, nodeInterop) {
29
+ if (!nodeInterop && obj && obj.__esModule) {
30
+ return obj;
31
+ }
32
+ if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
33
+ return {
34
+ default: obj
35
+ };
36
+ }
37
+ var cache = _getRequireWildcardCache(nodeInterop);
38
+ if (cache && cache.has(obj)) {
39
+ return cache.get(obj);
40
+ }
41
+ var newObj = {};
42
+ var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
43
+ for(var key in obj){
44
+ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
45
+ var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
46
+ if (desc && (desc.get || desc.set)) {
47
+ Object.defineProperty(newObj, key, desc);
48
+ } else {
49
+ newObj[key] = obj[key];
50
+ }
51
+ }
52
+ }
53
+ newObj.default = obj;
54
+ if (cache) {
55
+ cache.set(obj, newObj);
56
+ }
57
+ return newObj;
58
+ }
59
+ const YEAR_RANGE = 100;
60
+ const styles = {
61
+ root: (0, _emotion.css)({
62
+ maxWidth: '270px'
63
+ })
64
+ };
65
+ const DatepickerInput = (props)=>{
66
+ const [fromDate, toDate] = (0, _react.useMemo)(()=>{
67
+ const fromDate = new Date();
68
+ fromDate.setFullYear(fromDate.getFullYear() - YEAR_RANGE);
69
+ const toDate = new Date();
70
+ toDate.setFullYear(toDate.getFullYear() + YEAR_RANGE);
71
+ return [
72
+ fromDate,
73
+ toDate
74
+ ];
75
+ }, []);
76
+ const dateObj = props.value?.toObject();
77
+ const selectedDate = dateObj ? new Date(dateObj.years, dateObj.months, dateObj.date) : undefined;
78
+ return _react.default.createElement(_f36components.Datepicker, {
79
+ className: styles.root,
80
+ selected: selectedDate,
81
+ onSelect: (day)=>{
82
+ const momentDay = day ? (0, _moment.default)(day) : undefined;
83
+ props.onChange(momentDay);
84
+ },
85
+ inputProps: {
86
+ isDisabled: props.disabled,
87
+ placeholder: ''
88
+ },
89
+ fromDate: fromDate,
90
+ toDate: toDate
91
+ });
92
+ };
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ const _react = _interop_require_wildcard(require("react"));
6
+ require("@testing-library/jest-dom/extend-expect");
7
+ const _react1 = require("@testing-library/react");
8
+ const _timezoneddate = _interop_require_default(require("timezoned-date"));
9
+ const _DatepickerInput = require("./DatepickerInput");
10
+ const _date = require("./utils/date");
11
+ function _interop_require_default(obj) {
12
+ return obj && obj.__esModule ? obj : {
13
+ default: obj
14
+ };
15
+ }
16
+ function _getRequireWildcardCache(nodeInterop) {
17
+ if (typeof WeakMap !== "function") return null;
18
+ var cacheBabelInterop = new WeakMap();
19
+ var cacheNodeInterop = new WeakMap();
20
+ return (_getRequireWildcardCache = function(nodeInterop) {
21
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
22
+ })(nodeInterop);
23
+ }
24
+ function _interop_require_wildcard(obj, nodeInterop) {
25
+ if (!nodeInterop && obj && obj.__esModule) {
26
+ return obj;
27
+ }
28
+ if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
29
+ return {
30
+ default: obj
31
+ };
32
+ }
33
+ var cache = _getRequireWildcardCache(nodeInterop);
34
+ if (cache && cache.has(obj)) {
35
+ return cache.get(obj);
36
+ }
37
+ var newObj = {};
38
+ var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
39
+ for(var key in obj){
40
+ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
41
+ var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
42
+ if (desc && (desc.get || desc.set)) {
43
+ Object.defineProperty(newObj, key, desc);
44
+ } else {
45
+ newObj[key] = obj[key];
46
+ }
47
+ }
48
+ }
49
+ newObj.default = obj;
50
+ if (cache) {
51
+ cache.set(obj, newObj);
52
+ }
53
+ return newObj;
54
+ }
55
+ (0, _react1.configure)({
56
+ testIdAttribute: 'data-test-id'
57
+ });
58
+ let originalDate;
59
+ beforeEach(()=>{
60
+ originalDate = global.Date;
61
+ });
62
+ afterEach(()=>{
63
+ global.Date = originalDate;
64
+ });
65
+ const renderDatepicker = (dateString)=>{
66
+ const { date } = (0, _date.userInputFromDatetime)({
67
+ value: dateString,
68
+ uses12hClock: false
69
+ });
70
+ return (0, _react1.render)(_react.createElement(_DatepickerInput.DatepickerInput, {
71
+ value: date,
72
+ onChange: jest.fn()
73
+ }));
74
+ };
75
+ describe('Date: DatepickerInput', function() {
76
+ describe('renders correct date, when the system UTC offset is +02:00 and the one in the props.value is', ()=>{
77
+ it('+04:00', async ()=>{
78
+ global.Date = _timezoneddate.default.makeConstructor(120);
79
+ renderDatepicker('2022-09-22T00:00+04:00');
80
+ expect(_react1.screen.getByTestId('cf-ui-datepicker-input')).toHaveValue('22 Sep 2022');
81
+ });
82
+ it('+10:00', async ()=>{
83
+ global.Date = _timezoneddate.default.makeConstructor(120);
84
+ renderDatepicker('2022-09-22T00:00+10:00');
85
+ expect(_react1.screen.getByTestId('cf-ui-datepicker-input')).toHaveValue('22 Sep 2022');
86
+ });
87
+ it('-08:00', async ()=>{
88
+ global.Date = _timezoneddate.default.makeConstructor(120);
89
+ renderDatepicker('2022-09-22T00:00-08:00');
90
+ expect(_react1.screen.getByTestId('cf-ui-datepicker-input')).toHaveValue('22 Sep 2022');
91
+ });
92
+ });
93
+ describe('renders correct date, when the system UTC offset is -06:00 and the one in the props.value is', ()=>{
94
+ it('+02:00', async ()=>{
95
+ global.Date = _timezoneddate.default.makeConstructor(-360);
96
+ renderDatepicker('2022-09-22T00:00+02:00');
97
+ expect(_react1.screen.getByTestId('cf-ui-datepicker-input')).toHaveValue('22 Sep 2022');
98
+ });
99
+ it('+10:00', async ()=>{
100
+ global.Date = _timezoneddate.default.makeConstructor(-360);
101
+ renderDatepicker('2022-09-22T00:00+10:00');
102
+ expect(_react1.screen.getByTestId('cf-ui-datepicker-input')).toHaveValue('22 Sep 2022');
103
+ });
104
+ it('-08:00', async ()=>{
105
+ global.Date = _timezoneddate.default.makeConstructor(-360);
106
+ renderDatepicker('2022-09-22T00:00-08:00');
107
+ expect(_react1.screen.getByTestId('cf-ui-datepicker-input')).toHaveValue('22 Sep 2022');
108
+ });
109
+ });
110
+ });
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "TimepickerInput", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return TimepickerInput;
9
+ }
10
+ });
11
+ const _react = _interop_require_wildcard(require("react"));
12
+ const _f36components = require("@contentful/f36-components");
13
+ const _emotion = require("emotion");
14
+ const _moment = _interop_require_default(require("moment"));
15
+ function _interop_require_default(obj) {
16
+ return obj && obj.__esModule ? obj : {
17
+ default: obj
18
+ };
19
+ }
20
+ function _getRequireWildcardCache(nodeInterop) {
21
+ if (typeof WeakMap !== "function") return null;
22
+ var cacheBabelInterop = new WeakMap();
23
+ var cacheNodeInterop = new WeakMap();
24
+ return (_getRequireWildcardCache = function(nodeInterop) {
25
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
26
+ })(nodeInterop);
27
+ }
28
+ function _interop_require_wildcard(obj, nodeInterop) {
29
+ if (!nodeInterop && obj && obj.__esModule) {
30
+ return obj;
31
+ }
32
+ if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
33
+ return {
34
+ default: obj
35
+ };
36
+ }
37
+ var cache = _getRequireWildcardCache(nodeInterop);
38
+ if (cache && cache.has(obj)) {
39
+ return cache.get(obj);
40
+ }
41
+ var newObj = {};
42
+ var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
43
+ for(var key in obj){
44
+ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
45
+ var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
46
+ if (desc && (desc.get || desc.set)) {
47
+ Object.defineProperty(newObj, key, desc);
48
+ } else {
49
+ newObj[key] = obj[key];
50
+ }
51
+ }
52
+ }
53
+ newObj.default = obj;
54
+ if (cache) {
55
+ cache.set(obj, newObj);
56
+ }
57
+ return newObj;
58
+ }
59
+ const validInputFormats = [
60
+ 'hh:mm a',
61
+ 'hh:mm A',
62
+ 'h:mm a',
63
+ 'h:mm A',
64
+ 'hh:mm',
65
+ 'k:mm',
66
+ 'kk:mm',
67
+ 'h a',
68
+ 'h A',
69
+ 'h',
70
+ 'hh',
71
+ 'HH'
72
+ ];
73
+ function parseRawInput(raw) {
74
+ let time = null;
75
+ for(let i = 0; i < validInputFormats.length; i++){
76
+ const date = (0, _moment.default)(raw, validInputFormats[i]);
77
+ if (date.isValid()) {
78
+ time = date;
79
+ break;
80
+ }
81
+ }
82
+ return time;
83
+ }
84
+ const getDefaultTime = ()=>{
85
+ return (0, _moment.default)(`12:00 AM`, 'hh:mm A');
86
+ };
87
+ const formatToString = (uses12hClock, value)=>{
88
+ return uses12hClock ? value.format('hh:mm A') : value.format('HH:mm');
89
+ };
90
+ const TimepickerInput = ({ disabled , uses12hClock , time ='12:00' , ampm ='AM' , onChange })=>{
91
+ const [selectedTime, setSelectedTime] = (0, _react.useState)(()=>{
92
+ return formatToString(uses12hClock, getDefaultTime());
93
+ });
94
+ (0, _react.useEffect)(()=>{
95
+ setSelectedTime(formatToString(uses12hClock, (0, _moment.default)(`${time} ${ampm}`, 'hh:mm A')));
96
+ }, [
97
+ time,
98
+ ampm,
99
+ uses12hClock
100
+ ]);
101
+ const handleChange = (0, _react.useCallback)((e)=>{
102
+ setSelectedTime(e.currentTarget.value);
103
+ }, []);
104
+ const handleFocus = (0, _react.useCallback)((e)=>{
105
+ e.preventDefault();
106
+ e.target.select();
107
+ }, []);
108
+ const handleBlur = ()=>{
109
+ const parsedTime = parseRawInput(selectedTime);
110
+ const value = parsedTime ?? getDefaultTime();
111
+ setSelectedTime(formatToString(uses12hClock, value));
112
+ onChange({
113
+ time: value.format('hh:mm'),
114
+ ampm: value.format('A')
115
+ });
116
+ };
117
+ return _react.default.createElement(_f36components.Flex, {
118
+ className: (0, _emotion.css)({
119
+ width: '145px'
120
+ })
121
+ }, _react.default.createElement(_f36components.TextInput, {
122
+ "aria-label": "Select time",
123
+ placeholder: uses12hClock ? '12:00 AM' : '00:00',
124
+ "date-time-type": uses12hClock ? '12' : '24',
125
+ testId: "time-input",
126
+ value: selectedTime,
127
+ isDisabled: disabled,
128
+ onFocus: handleFocus,
129
+ onBlur: handleBlur,
130
+ onChange: handleChange
131
+ }));
132
+ };
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "TimezonepickerInput", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return TimezonepickerInput;
9
+ }
10
+ });
11
+ const _react = _interop_require_default(require("react"));
12
+ const _f36components = require("@contentful/f36-components");
13
+ const _zoneOffsets = require("./utils/zoneOffsets");
14
+ function _interop_require_default(obj) {
15
+ return obj && obj.__esModule ? obj : {
16
+ default: obj
17
+ };
18
+ }
19
+ const TimezonepickerInput = ({ disabled , onChange , value =_zoneOffsets.defaultZoneOffset })=>{
20
+ return _react.default.createElement(_f36components.Select, {
21
+ "aria-label": "Select timezone",
22
+ testId: "timezone-input",
23
+ value: value,
24
+ isDisabled: disabled,
25
+ onChange: (e)=>{
26
+ onChange(e.currentTarget.value);
27
+ }
28
+ }, _zoneOffsets.zoneOffsets.map((offset)=>_react.default.createElement(_f36components.Select.Option, {
29
+ key: offset,
30
+ value: offset
31
+ }, "UTC", offset)));
32
+ };
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: all[name]
9
+ });
10
+ }
11
+ _export(exports, {
12
+ DateEditor: function() {
13
+ return _DateEditor.DateEditor;
14
+ },
15
+ zoneOffsets: function() {
16
+ return _zoneOffsets.zoneOffsets;
17
+ }
18
+ });
19
+ const _DateEditor = require("./DateEditor");
20
+ const _zoneOffsets = require("./utils/zoneOffsets");
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ const _moment = _interop_require_default(require("moment"));
6
+ const _date = require("./date");
7
+ function _interop_require_default(obj) {
8
+ return obj && obj.__esModule ? obj : {
9
+ default: obj
10
+ };
11
+ }
12
+ describe('date utils', ()=>{
13
+ describe('buildFieldValue', ()=>{
14
+ it('should work properly', ()=>{
15
+ expect((0, _date.buildFieldValue)({
16
+ data: {
17
+ date: (0, _moment.default)('2018-02-02'),
18
+ time: '05:00',
19
+ ampm: 'PM',
20
+ utcOffset: '+03:00'
21
+ },
22
+ usesTimezone: true,
23
+ usesTime: true
24
+ })).toEqual({
25
+ invalid: false,
26
+ valid: '2018-02-02T17:00+03:00'
27
+ });
28
+ expect((0, _date.buildFieldValue)({
29
+ data: {
30
+ date: (0, _moment.default)('2015-01-14'),
31
+ time: '05:00',
32
+ ampm: 'AM',
33
+ utcOffset: '-05:00'
34
+ },
35
+ usesTimezone: true,
36
+ usesTime: true
37
+ })).toEqual({
38
+ invalid: false,
39
+ valid: '2015-01-14T05:00-05:00'
40
+ });
41
+ expect((0, _date.buildFieldValue)({
42
+ data: {
43
+ date: (0, _moment.default)('2015-01-14'),
44
+ time: '17:00',
45
+ ampm: 'PM',
46
+ utcOffset: '-05:00'
47
+ },
48
+ usesTimezone: true,
49
+ usesTime: true
50
+ })).toEqual({
51
+ invalid: false,
52
+ valid: '2015-01-14T17:00-05:00'
53
+ });
54
+ });
55
+ });
56
+ });