@contentful/field-editor-date 1.1.10-beta.1 → 1.2.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.
- package/CHANGELOG.md +222 -0
- package/LICENSE +21 -0
- package/dist/field-editor-date.cjs.development.js +2 -1
- package/dist/field-editor-date.cjs.development.js.map +1 -1
- package/dist/field-editor-date.cjs.production.min.js +1 -1
- package/dist/field-editor-date.cjs.production.min.js.map +1 -1
- package/dist/field-editor-date.esm.js +2 -1
- package/dist/field-editor-date.esm.js.map +1 -1
- package/package.json +6 -8
- package/styles/styles.css +0 -213
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
# Change Log
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
|
+
|
|
6
|
+
# [1.2.0](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@1.1.10...@contentful/field-editor-date@1.2.0) (2022-09-14)
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
- cleanup console log ([#1235](https://github.com/contentful/field-editors/issues/1235)) ([823b09f](https://github.com/contentful/field-editors/commit/823b09f77c2576cf0e8ae33b8bec4dc9abb51999))
|
|
11
|
+
|
|
12
|
+
### Features
|
|
13
|
+
|
|
14
|
+
- date editor with new f36 datepicker, do yarn deduplicate for f36-components [BAU-696] ([#1225](https://github.com/contentful/field-editors/issues/1225)) ([bc142a3](https://github.com/contentful/field-editors/commit/bc142a3522b7e55666eb3796f69f6cfcbab9a574))
|
|
15
|
+
|
|
16
|
+
## [1.1.10](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@1.1.9...@contentful/field-editor-date@1.1.10) (2022-07-29)
|
|
17
|
+
|
|
18
|
+
**Note:** Version bump only for package @contentful/field-editor-date
|
|
19
|
+
|
|
20
|
+
## [1.1.9](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@1.1.8...@contentful/field-editor-date@1.1.9) (2022-07-29)
|
|
21
|
+
|
|
22
|
+
**Note:** Version bump only for package @contentful/field-editor-date
|
|
23
|
+
|
|
24
|
+
## [1.1.8](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@1.1.7...@contentful/field-editor-date@1.1.8) (2022-07-11)
|
|
25
|
+
|
|
26
|
+
**Note:** Version bump only for package @contentful/field-editor-date
|
|
27
|
+
|
|
28
|
+
## [1.1.7](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@1.1.6...@contentful/field-editor-date@1.1.7) (2022-06-22)
|
|
29
|
+
|
|
30
|
+
**Note:** Version bump only for package @contentful/field-editor-date
|
|
31
|
+
|
|
32
|
+
## [1.1.6](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@1.1.5...@contentful/field-editor-date@1.1.6) (2022-05-27)
|
|
33
|
+
|
|
34
|
+
### Bug Fixes
|
|
35
|
+
|
|
36
|
+
- temporary revert of date editor changes ([#1153](https://github.com/contentful/field-editors/issues/1153)) ([7002aab](https://github.com/contentful/field-editors/commit/7002aab9bd82312a585903c7411558f79b66c964))
|
|
37
|
+
|
|
38
|
+
## [1.1.5](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@1.1.4...@contentful/field-editor-date@1.1.5) (2022-05-24)
|
|
39
|
+
|
|
40
|
+
### Bug Fixes
|
|
41
|
+
|
|
42
|
+
- change GMT to UTC in datepicker [TOL-60] ([#1149](https://github.com/contentful/field-editors/issues/1149)) ([a407b1a](https://github.com/contentful/field-editors/commit/a407b1a0b9d4861e3d0cc2f7bed17ac90e7489c0))
|
|
43
|
+
|
|
44
|
+
## [1.1.4](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@1.1.3...@contentful/field-editor-date@1.1.4) (2022-05-23)
|
|
45
|
+
|
|
46
|
+
### Bug Fixes
|
|
47
|
+
|
|
48
|
+
- increased time input width in date picker to fix visual bug [TOL-122] ([#1150](https://github.com/contentful/field-editors/issues/1150)) ([f992f3b](https://github.com/contentful/field-editors/commit/f992f3b333bfac8469cf84cb0f64120526136448))
|
|
49
|
+
|
|
50
|
+
## [1.1.3](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@1.1.2...@contentful/field-editor-date@1.1.3) (2022-05-20)
|
|
51
|
+
|
|
52
|
+
### Bug Fixes
|
|
53
|
+
|
|
54
|
+
- made timezone picker match webapp, added guessing [SHE-831] ([#1146](https://github.com/contentful/field-editors/issues/1146)) ([9d98a31](https://github.com/contentful/field-editors/commit/9d98a3171aa4d2fa9641e6a10a92221686f934c5))
|
|
55
|
+
|
|
56
|
+
## [1.1.2](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@1.1.1...@contentful/field-editor-date@1.1.2) (2022-02-15)
|
|
57
|
+
|
|
58
|
+
### Bug Fixes
|
|
59
|
+
|
|
60
|
+
- bump f36 packages ([#1025](https://github.com/contentful/field-editors/issues/1025)) ([ec37a40](https://github.com/contentful/field-editors/commit/ec37a4000db7cd75c66dd9621136b2272c9feeea))
|
|
61
|
+
|
|
62
|
+
## [1.1.1](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@1.1.0...@contentful/field-editor-date@1.1.1) (2022-02-14)
|
|
63
|
+
|
|
64
|
+
**Note:** Version bump only for package @contentful/field-editor-date
|
|
65
|
+
|
|
66
|
+
# [1.1.0](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@1.0.3...@contentful/field-editor-date@1.1.0) (2022-01-11)
|
|
67
|
+
|
|
68
|
+
### Features
|
|
69
|
+
|
|
70
|
+
- bump f36 packages to stable v4 [BAU-521] ([#988](https://github.com/contentful/field-editors/issues/988)) ([419cf56](https://github.com/contentful/field-editors/commit/419cf56692179b074fcfa2743469d5265ed98429))
|
|
71
|
+
|
|
72
|
+
## [1.0.3](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@1.0.2...@contentful/field-editor-date@1.0.3) (2021-12-23)
|
|
73
|
+
|
|
74
|
+
### Bug Fixes
|
|
75
|
+
|
|
76
|
+
- markdown buttons ([#968](https://github.com/contentful/field-editors/issues/968)) ([9803b98](https://github.com/contentful/field-editors/commit/9803b98c25d92df6148686ffe2749a77f7efdbb9))
|
|
77
|
+
|
|
78
|
+
## [1.0.2](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@1.0.1...@contentful/field-editor-date@1.0.2) (2021-12-20)
|
|
79
|
+
|
|
80
|
+
**Note:** Version bump only for package @contentful/field-editor-date
|
|
81
|
+
|
|
82
|
+
## [1.0.1](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@1.0.0...@contentful/field-editor-date@1.0.1) (2021-11-17)
|
|
83
|
+
|
|
84
|
+
### Bug Fixes
|
|
85
|
+
|
|
86
|
+
- **card-actions:** update forma 36 to fix card actions click issue ([#927](https://github.com/contentful/field-editors/issues/927)) ([3dfdef2](https://github.com/contentful/field-editors/commit/3dfdef2c2b0045f12ea94ddafca89a8e9f25e7d0))
|
|
87
|
+
|
|
88
|
+
# [1.0.0](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@0.13.0...@contentful/field-editor-date@1.0.0) (2021-11-04)
|
|
89
|
+
|
|
90
|
+
**Note:** Version bump only for package @contentful/field-editor-date
|
|
91
|
+
|
|
92
|
+
# [0.13.0](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@0.12.6...@contentful/field-editor-date@0.13.0) (2021-11-04)
|
|
93
|
+
|
|
94
|
+
### Features
|
|
95
|
+
|
|
96
|
+
- Forma v4 components adoption ([#805](https://github.com/contentful/field-editors/issues/805)) ([526bde6](https://github.com/contentful/field-editors/commit/526bde6e10e0ee3789705ec10fb31489af7ca59e))
|
|
97
|
+
|
|
98
|
+
### BREAKING CHANGES
|
|
99
|
+
|
|
100
|
+
- adopts a new Forma v4 beta
|
|
101
|
+
|
|
102
|
+
## [0.12.6](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@0.12.5...@contentful/field-editor-date@0.12.6) (2021-10-14)
|
|
103
|
+
|
|
104
|
+
**Note:** Version bump only for package @contentful/field-editor-date
|
|
105
|
+
|
|
106
|
+
## [0.12.5](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@0.12.4...@contentful/field-editor-date@0.12.5) (2021-10-06)
|
|
107
|
+
|
|
108
|
+
**Note:** Version bump only for package @contentful/field-editor-date
|
|
109
|
+
|
|
110
|
+
## [0.12.4](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@0.12.3...@contentful/field-editor-date@0.12.4) (2021-09-17)
|
|
111
|
+
|
|
112
|
+
**Note:** Version bump only for package @contentful/field-editor-date
|
|
113
|
+
|
|
114
|
+
## [0.12.3](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@0.12.2...@contentful/field-editor-date@0.12.3) (2021-09-16)
|
|
115
|
+
|
|
116
|
+
**Note:** Version bump only for package @contentful/field-editor-date
|
|
117
|
+
|
|
118
|
+
## [0.12.2](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@0.12.1...@contentful/field-editor-date@0.12.2) (2021-08-19)
|
|
119
|
+
|
|
120
|
+
**Note:** Version bump only for package @contentful/field-editor-date
|
|
121
|
+
|
|
122
|
+
## [0.12.1](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@0.12.0...@contentful/field-editor-date@0.12.1) (2021-07-29)
|
|
123
|
+
|
|
124
|
+
**Note:** Version bump only for package @contentful/field-editor-date
|
|
125
|
+
|
|
126
|
+
# [0.12.0](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@0.11.6...@contentful/field-editor-date@0.12.0) (2021-07-23)
|
|
127
|
+
|
|
128
|
+
### Features
|
|
129
|
+
|
|
130
|
+
- 💡 new color tokens ([#778](https://github.com/contentful/field-editors/issues/778)) ([fba548d](https://github.com/contentful/field-editors/commit/fba548de32305016df7f2685634eefb14294828f))
|
|
131
|
+
|
|
132
|
+
## [0.11.6](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@0.11.3...@contentful/field-editor-date@0.11.6) (2021-07-06)
|
|
133
|
+
|
|
134
|
+
**Note:** Version bump only for package @contentful/field-editor-date
|
|
135
|
+
|
|
136
|
+
## [0.11.5](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@0.11.3...@contentful/field-editor-date@0.11.5) (2021-07-06)
|
|
137
|
+
|
|
138
|
+
**Note:** Version bump only for package @contentful/field-editor-date
|
|
139
|
+
|
|
140
|
+
## [0.11.4](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@0.11.3...@contentful/field-editor-date@0.11.4) (2021-06-23)
|
|
141
|
+
|
|
142
|
+
**Note:** Version bump only for package @contentful/field-editor-date
|
|
143
|
+
|
|
144
|
+
## [0.11.3](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@0.11.2...@contentful/field-editor-date@0.11.3) (2021-06-23)
|
|
145
|
+
|
|
146
|
+
**Note:** Version bump only for package @contentful/field-editor-date
|
|
147
|
+
|
|
148
|
+
## [0.11.2](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@0.11.1...@contentful/field-editor-date@0.11.2) (2021-06-22)
|
|
149
|
+
|
|
150
|
+
**Note:** Version bump only for package @contentful/field-editor-date
|
|
151
|
+
|
|
152
|
+
## [0.11.1](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@0.11.0...@contentful/field-editor-date@0.11.1) (2021-03-05)
|
|
153
|
+
|
|
154
|
+
**Note:** Version bump only for package @contentful/field-editor-date
|
|
155
|
+
|
|
156
|
+
# [0.11.0](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@0.10.2...@contentful/field-editor-date@0.11.0) (2021-02-19)
|
|
157
|
+
|
|
158
|
+
### Features
|
|
159
|
+
|
|
160
|
+
- bump min version of forma-36 ([#606](https://github.com/contentful/field-editors/issues/606)) ([fd57c7a](https://github.com/contentful/field-editors/commit/fd57c7a4312766af38c01507f17706ab22992617))
|
|
161
|
+
|
|
162
|
+
## [0.10.2](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@0.10.1...@contentful/field-editor-date@0.10.2) (2021-02-09)
|
|
163
|
+
|
|
164
|
+
**Note:** Version bump only for package @contentful/field-editor-date
|
|
165
|
+
|
|
166
|
+
## [0.10.1](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@0.10.0...@contentful/field-editor-date@0.10.1) (2021-02-01)
|
|
167
|
+
|
|
168
|
+
**Note:** Version bump only for package @contentful/field-editor-date
|
|
169
|
+
|
|
170
|
+
# [0.10.0](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@0.9.2...@contentful/field-editor-date@0.10.0) (2021-01-20)
|
|
171
|
+
|
|
172
|
+
### Features
|
|
173
|
+
|
|
174
|
+
- update minimal forma-36 versions to use updated design ([#565](https://github.com/contentful/field-editors/issues/565)) ([332c734](https://github.com/contentful/field-editors/commit/332c734bfaf54f0e9773fcbb460d743b1f5459ec))
|
|
175
|
+
|
|
176
|
+
## [0.9.2](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@0.9.1...@contentful/field-editor-date@0.9.2) (2021-01-15)
|
|
177
|
+
|
|
178
|
+
### Bug Fixes
|
|
179
|
+
|
|
180
|
+
- 🐛 small layout adjustments ([#555](https://github.com/contentful/field-editors/issues/555)) ([235c594](https://github.com/contentful/field-editors/commit/235c5941db152d2921a9ef134c1a71b0069a4dc2))
|
|
181
|
+
|
|
182
|
+
## [0.9.1](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@0.9.0...@contentful/field-editor-date@0.9.1) (2021-01-12)
|
|
183
|
+
|
|
184
|
+
### Bug Fixes
|
|
185
|
+
|
|
186
|
+
- use forma tokens for border radiuses ([#553](https://github.com/contentful/field-editors/issues/553)) ([f4eb745](https://github.com/contentful/field-editors/commit/f4eb74568c7bc0cc25028542821ba64e50e226bd))
|
|
187
|
+
|
|
188
|
+
# [0.9.0](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@0.8.4...@contentful/field-editor-date@0.9.0) (2021-01-12)
|
|
189
|
+
|
|
190
|
+
### Features
|
|
191
|
+
|
|
192
|
+
- update minimal required Forma version to the 3.73.12 ([#552](https://github.com/contentful/field-editors/issues/552)) ([2816fd9](https://github.com/contentful/field-editors/commit/2816fd960c28815faebf49a9ef8f4c4c0d91fc36))
|
|
193
|
+
|
|
194
|
+
## [0.8.4](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@0.8.3...@contentful/field-editor-date@0.8.4) (2020-12-16)
|
|
195
|
+
|
|
196
|
+
**Note:** Version bump only for package @contentful/field-editor-date
|
|
197
|
+
|
|
198
|
+
## [0.8.3](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@0.8.2...@contentful/field-editor-date@0.8.3) (2020-11-06)
|
|
199
|
+
|
|
200
|
+
**Note:** Version bump only for package @contentful/field-editor-date
|
|
201
|
+
|
|
202
|
+
## [0.8.2](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@0.8.1...@contentful/field-editor-date@0.8.2) (2020-11-06)
|
|
203
|
+
|
|
204
|
+
**Note:** Version bump only for package @contentful/field-editor-date
|
|
205
|
+
|
|
206
|
+
## [0.8.1](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@0.8.0...@contentful/field-editor-date@0.8.1) (2020-11-05)
|
|
207
|
+
|
|
208
|
+
**Note:** Version bump only for package @contentful/field-editor-date
|
|
209
|
+
|
|
210
|
+
# [0.8.0](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@0.7.1...@contentful/field-editor-date@0.8.0) (2020-10-28)
|
|
211
|
+
|
|
212
|
+
### Bug Fixes
|
|
213
|
+
|
|
214
|
+
- 🐛 isInitiallyDisabled being null in examples ([#414](https://github.com/contentful/field-editors/issues/414)) ([df53405](https://github.com/contentful/field-editors/commit/df534055cfa64c533725cb5bca392a0a82e54be6))
|
|
215
|
+
|
|
216
|
+
### Features
|
|
217
|
+
|
|
218
|
+
- 🎸 do not show link actions on full reference/media fields ([#437](https://github.com/contentful/field-editors/issues/437)) ([4d11496](https://github.com/contentful/field-editors/commit/4d11496acda86046710e650948b7d87c97925205))
|
|
219
|
+
|
|
220
|
+
## [0.7.1](https://github.com/contentful/field-editors/compare/@contentful/field-editor-date@0.7.0...@contentful/field-editor-date@0.7.1) (2020-08-24)
|
|
221
|
+
|
|
222
|
+
**Note:** Version bump only for package @contentful/field-editor-date
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
The MIT License (MIT)
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2020 Contentful
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -54,7 +54,8 @@ var DatepickerInput = function DatepickerInput(props) {
|
|
|
54
54
|
className: styles.root,
|
|
55
55
|
selected: (_props$value = props.value) == null ? void 0 : _props$value.toDate(),
|
|
56
56
|
onSelect: function onSelect(day) {
|
|
57
|
-
|
|
57
|
+
var momentDay = day ? moment(day) : undefined;
|
|
58
|
+
props.onChange(momentDay);
|
|
58
59
|
},
|
|
59
60
|
inputProps: {
|
|
60
61
|
isDisabled: props.disabled,
|
|
@@ -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-datepicker';\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 return (\n <Datepicker\n className={styles.root}\n selected={props.value?.toDate()}\n onSelect={(day) => {\n props.onChange(moment(day));\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","React","Datepicker","className","selected","value","onSelect","day","onChange","moment","inputProps","isDisabled","disabled","placeholder","validInputFormats","parseRawInput","raw","time","i","length","date","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","toObject","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","undefined","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-datepicker';\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 return (\n <Datepicker\n className={styles.root}\n selected={props.value?.toDate()}\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","React","Datepicker","className","selected","value","onSelect","day","momentDay","moment","undefined","onChange","inputProps","isDisabled","disabled","placeholder","validInputFormats","parseRawInput","raw","time","i","length","date","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","toObject","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-datepicker"),u=e(require("moment")),o=require("@contentful/f36-components");function s(){return(s=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 m={root:a.css({maxWidth:"270px"})},c=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];return n.createElement(i.Datepicker,{className:m.root,selected:null==(a=e.value)?void 0:a.toDate(),onSelect:function(t){e.onChange(
|
|
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-datepicker"),u=e(require("moment")),o=require("@contentful/f36-components");function s(){return(s=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 m={root:a.css({maxWidth:"270px"})},c=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];return n.createElement(i.Datepicker,{className:m.root,selected:null==(a=e.value)?void 0:a.toDate(),onSelect:function(t){var n=t?u(t):void 0;e.onChange(n)},inputProps:{isDisabled:e.disabled,placeholder:""},fromDate:l,toDate:o})},d=["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"],f=function(){return u("12:00 AM","hh:mm A")},v=function(e,t){return t.format(e?"hh:mm A":"HH:mm")},h=function(e){var r=e.disabled,l=e.uses12hClock,i=e.time,s=void 0===i?"12:00":i,m=e.ampm,c=void 0===m?"AM":m,h=e.onChange,p=t.useState((function(){return v(l,f())})),b=p[0],g=p[1];t.useEffect((function(){g(v(l,u(s+" "+c,"hh:mm A")))}),[s,c,l]);var C=t.useCallback((function(e){g(e.currentTarget.value)}),[]),D=t.useCallback((function(e){e.preventDefault(),e.target.select()}),[]);return n.createElement(o.Flex,{className:a.css({width:"145px"})},n.createElement(o.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<d.length;n++){var a=u(e,d[n]);if(a.isValid()){t=a;break}}return t}(b),t=null!=e?e:f();g(v(l,t)),h({time:t.format("hh:mm"),ampm:t.format("A")})},onChange:C}))},p=["-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"],b=function(e){var t=e.onChange,a=e.value;return n.createElement(o.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)}},p.map((function(e){return n.createElement(o.Select.Option,{key:e,value:e},"UTC",e)})))},g=/(Z|[+-]\d{2}[:+]?\d{2})$/;function C(){return u().set({hours:0,minutes:0}).format("Z")}var D={root:a.css({display:"flex",alignItems:"center"}),separator:a.css({marginLeft:r.spacingM})};function E(e){var n,a,r,l=e.initialValue,i=e.usesTime,u=e.usesTimezone,m=e.uses12hClock,d=e.disabled,f=e.hasClear,v=e.onChange,p=t.useState((function(){return l})),g=p[0],E=p[1];return n=function(){v(g)},a=[g],r=t.useRef(!0),t.useEffect((function(){r.current?r.current=!1:n()}),a),t.createElement("div",{"data-test-id":"date-editor",className:D.root},t.createElement(c,{disabled:d,value:g.date,onChange:function(e){E((function(t){return s({},t,{date:e})}))}}),i&&t.createElement(t.Fragment,null,t.createElement("div",{className:D.separator}),t.createElement(h,{disabled:d,time:g.time,ampm:g.ampm,onChange:function(e){var t=e.time,n=e.ampm;E((function(e){return s({},e,{time:t,ampm:n})}))},uses12hClock:m})),u&&t.createElement(t.Fragment,null,t.createElement("div",{className:D.separator}),t.createElement(b,{disabled:d,value:g.utcOffset,onChange:function(e){E((function(t){return s({},t,{utcOffset:e})}))}})),f&&t.createElement(t.Fragment,null,t.createElement("div",{className:D.separator}),t.createElement(o.TextLink,{as:"button",isDisabled:d,testId:"date-clear",onClick:function(){E({date:void 0,time:void 0,ampm:"AM",utcOffset:C()})}},"Clear")))}function k(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 g.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:C()}}({value:n,uses12hClock:f});return t.createElement(E,{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})}))}k.defaultProps={isInitiallyDisabled:!0},exports.DateEditor=k,exports.zoneOffsets=p;
|
|
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-datepicker';\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 return (\n <Datepicker\n className={styles.root}\n selected={props.value?.toDate()}\n onSelect={(day) => {\n props.onChange(moment(day));\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","React","Datepicker","className","selected","value","_props$value","onSelect","day","onChange","moment","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","date","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","undefined","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","toObject","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-datepicker';\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 return (\n <Datepicker\n className={styles.root}\n selected={props.value?.toDate()}\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","React","Datepicker","className","selected","value","_props$value","onSelect","day","momentDay","moment","undefined","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","date","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","toObject","invalid","datetimeFromUserInput","buildFieldValue","defaultProps"],"mappings":"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"}
|
|
@@ -47,7 +47,8 @@ var DatepickerInput = function DatepickerInput(props) {
|
|
|
47
47
|
className: styles.root,
|
|
48
48
|
selected: (_props$value = props.value) == null ? void 0 : _props$value.toDate(),
|
|
49
49
|
onSelect: function onSelect(day) {
|
|
50
|
-
|
|
50
|
+
var momentDay = day ? moment(day) : undefined;
|
|
51
|
+
props.onChange(momentDay);
|
|
51
52
|
},
|
|
52
53
|
inputProps: {
|
|
53
54
|
isDisabled: props.disabled,
|
|
@@ -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-datepicker';\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 return (\n <Datepicker\n className={styles.root}\n selected={props.value?.toDate()}\n onSelect={(day) => {\n props.onChange(moment(day));\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","React","Datepicker","className","selected","value","onSelect","day","onChange","moment","inputProps","isDisabled","disabled","placeholder","validInputFormats","parseRawInput","raw","time","i","length","date","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","toObject","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","undefined","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.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-datepicker';\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 return (\n <Datepicker\n className={styles.root}\n selected={props.value?.toDate()}\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","React","Datepicker","className","selected","value","onSelect","day","momentDay","moment","undefined","onChange","inputProps","isDisabled","disabled","placeholder","validInputFormats","parseRawInput","raw","time","i","length","date","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","toObject","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,13 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@contentful/field-editor-date",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"module": "dist/field-editor-date.esm.js",
|
|
6
6
|
"typings": "dist/index.d.ts",
|
|
7
7
|
"style": "styles/styles.css",
|
|
8
8
|
"files": [
|
|
9
|
-
"dist"
|
|
10
|
-
"styles"
|
|
9
|
+
"dist"
|
|
11
10
|
],
|
|
12
11
|
"author": "Contentful GmbH",
|
|
13
12
|
"license": "MIT",
|
|
@@ -23,17 +22,15 @@
|
|
|
23
22
|
"test:ci": "tsdx test --env=jsdom --ci"
|
|
24
23
|
},
|
|
25
24
|
"dependencies": {
|
|
26
|
-
"@contentful/f36-components": "^4.
|
|
25
|
+
"@contentful/f36-components": "^4.20.1",
|
|
27
26
|
"@contentful/f36-tokens": "^4.0.0",
|
|
28
|
-
"@contentful/f36-datepicker": "^4.1.0-beta.8",
|
|
29
27
|
"@contentful/field-editor-shared": "^1.1.3",
|
|
30
28
|
"emotion": "^10.0.17",
|
|
31
29
|
"moment": "^2.20.0"
|
|
32
30
|
},
|
|
33
31
|
"devDependencies": {
|
|
34
32
|
"@babel/core": "^7.7.4",
|
|
35
|
-
"@contentful/field-editor-test-utils": "^1.2.2"
|
|
36
|
-
"@types/pikaday": "^1.7.4"
|
|
33
|
+
"@contentful/field-editor-test-utils": "^1.2.2"
|
|
37
34
|
},
|
|
38
35
|
"peerDependencies": {
|
|
39
36
|
"react": ">=16.8.0"
|
|
@@ -47,5 +44,6 @@
|
|
|
47
44
|
"diagnostics": false
|
|
48
45
|
}
|
|
49
46
|
}
|
|
50
|
-
}
|
|
47
|
+
},
|
|
48
|
+
"gitHead": "df229e11845ea29005b374bd53217fd8605c5b44"
|
|
51
49
|
}
|
package/styles/styles.css
DELETED
|
@@ -1,213 +0,0 @@
|
|
|
1
|
-
.pika-single.is-hidden {
|
|
2
|
-
display: none;
|
|
3
|
-
}
|
|
4
|
-
.pika-single {
|
|
5
|
-
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, sans-serif,
|
|
6
|
-
Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol;
|
|
7
|
-
z-index: 200;
|
|
8
|
-
min-width: 19ex;
|
|
9
|
-
position: absolute;
|
|
10
|
-
padding: 0.3rem 0;
|
|
11
|
-
border: 1px solid #d3dce0;
|
|
12
|
-
border-radius: 4px;
|
|
13
|
-
background: #fff;
|
|
14
|
-
-webkit-box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.1);
|
|
15
|
-
box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.1);
|
|
16
|
-
width: 230px;
|
|
17
|
-
padding: 8px;
|
|
18
|
-
margin-top: 13px;
|
|
19
|
-
position: relative;
|
|
20
|
-
}
|
|
21
|
-
.pika-single:after,
|
|
22
|
-
.pika-single:before {
|
|
23
|
-
content: '';
|
|
24
|
-
left: 50%;
|
|
25
|
-
border: solid transparent;
|
|
26
|
-
height: 0;
|
|
27
|
-
width: 0;
|
|
28
|
-
position: absolute;
|
|
29
|
-
pointer-events: none;
|
|
30
|
-
}
|
|
31
|
-
.pika-single:after {
|
|
32
|
-
border-width: 9px 5px;
|
|
33
|
-
margin-left: -5px;
|
|
34
|
-
}
|
|
35
|
-
.pika-single:before {
|
|
36
|
-
border-width: 11px 7px;
|
|
37
|
-
margin-left: -7px;
|
|
38
|
-
}
|
|
39
|
-
.pika-single:after,
|
|
40
|
-
.pika-single:before {
|
|
41
|
-
bottom: 100%;
|
|
42
|
-
}
|
|
43
|
-
.pika-single:after {
|
|
44
|
-
border-bottom-color: #fff;
|
|
45
|
-
}
|
|
46
|
-
.pika-single:before {
|
|
47
|
-
border-bottom-color: #d3dce0;
|
|
48
|
-
}
|
|
49
|
-
.hide-carret {
|
|
50
|
-
margin-top: 5px;
|
|
51
|
-
}
|
|
52
|
-
.hide-carret:after,
|
|
53
|
-
.hide-carret:before {
|
|
54
|
-
display: none;
|
|
55
|
-
}
|
|
56
|
-
.pika-title {
|
|
57
|
-
display: -webkit-box;
|
|
58
|
-
display: -ms-flexbox;
|
|
59
|
-
display: flex;
|
|
60
|
-
-ms-flex-align: baseline;
|
|
61
|
-
-webkit-box-align: baseline;
|
|
62
|
-
align-items: baseline;
|
|
63
|
-
margin-bottom: 6px;
|
|
64
|
-
}
|
|
65
|
-
.pika-label {
|
|
66
|
-
display: inline-block;
|
|
67
|
-
overflow: hidden;
|
|
68
|
-
font-size: 14px;
|
|
69
|
-
padding: 5px 3px 0 3px;
|
|
70
|
-
margin-bottom: 5px;
|
|
71
|
-
line-height: 20px;
|
|
72
|
-
position: relative;
|
|
73
|
-
border-width: 0 0 1px 0;
|
|
74
|
-
border-style: solid;
|
|
75
|
-
border-color: transparent;
|
|
76
|
-
}
|
|
77
|
-
.pika-label > select {
|
|
78
|
-
cursor: pointer;
|
|
79
|
-
position: absolute;
|
|
80
|
-
margin: 0;
|
|
81
|
-
left: 0;
|
|
82
|
-
top: 5px;
|
|
83
|
-
opacity: 0;
|
|
84
|
-
-ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=0)';
|
|
85
|
-
filter: alpha(opacity=0);
|
|
86
|
-
}
|
|
87
|
-
.pika-prev,
|
|
88
|
-
.pika-next {
|
|
89
|
-
color: inherit;
|
|
90
|
-
font: inherit;
|
|
91
|
-
font-size: inherit;
|
|
92
|
-
line-height: normal;
|
|
93
|
-
vertical-align: baseline;
|
|
94
|
-
padding: 0;
|
|
95
|
-
margin: 0;
|
|
96
|
-
border: 0;
|
|
97
|
-
background: none;
|
|
98
|
-
overflow: visible;
|
|
99
|
-
-webkit-user-select: none;
|
|
100
|
-
-moz-user-select: none;
|
|
101
|
-
-ms-user-select: none;
|
|
102
|
-
user-select: none;
|
|
103
|
-
cursor: pointer;
|
|
104
|
-
cursor: pointer;
|
|
105
|
-
width: 20px;
|
|
106
|
-
text-indent: 20px;
|
|
107
|
-
white-space: nowrap;
|
|
108
|
-
overflow: hidden;
|
|
109
|
-
background-position: center;
|
|
110
|
-
background-repeat: no-repeat;
|
|
111
|
-
background-size: 60%;
|
|
112
|
-
}
|
|
113
|
-
.pika-prev::-moz-focus-inner,
|
|
114
|
-
.pika-next::-moz-focus-inner {
|
|
115
|
-
border: 0;
|
|
116
|
-
padding: 0;
|
|
117
|
-
}
|
|
118
|
-
.pika-prev {
|
|
119
|
-
-ms-flex-order: -1;
|
|
120
|
-
-webkit-box-ordinal-group: 0;
|
|
121
|
-
order: -1;
|
|
122
|
-
margin-right: auto;
|
|
123
|
-
background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMS4yNDEiIGhlaWdodD0iNy4yMTYiIHZpZXdCb3g9Ii0xIC0xIDEzIDkiPjxwYXRoIGQ9Ik0uMTMgNS4zYS40NS40NSAwIDAwMCAuNjM0bDEuMTYgMS4xNTFhLjQ0Mi40NDIgMCAwMC42MjggMEw1LjYyIDMuMzgxbDMuNzA0IDMuNzA0YS40NDIuNDQyIDAgMDAuNjI4IDBsMS4xNTgtMS4xNWEuNDUuNDUgMCAwMDAtLjYzNUw1LjkzNC4xM2EuNDQyLjQ0MiAwIDAwLS42MjcgMEwuMTMgNS4zeiIgZmlsbD0iIzViOWZlZiIvPjwvc3ZnPg==);
|
|
124
|
-
-webkit-transform: rotate(-90deg);
|
|
125
|
-
transform: rotate(-90deg);
|
|
126
|
-
}
|
|
127
|
-
.pika-next {
|
|
128
|
-
margin-left: auto;
|
|
129
|
-
background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMS4yNDEiIGhlaWdodD0iNy4yMTYiIHZpZXdCb3g9Ii0xIC0xIDEzIDkiPjxwYXRoIGQ9Ik0uMTMgNS4zYS40NS40NSAwIDAwMCAuNjM0bDEuMTYgMS4xNTFhLjQ0Mi40NDIgMCAwMC42MjggMEw1LjYyIDMuMzgxbDMuNzA0IDMuNzA0YS40NDIuNDQyIDAgMDAuNjI4IDBsMS4xNTgtMS4xNWEuNDUuNDUgMCAwMDAtLjYzNUw1LjkzNC4xM2EuNDQyLjQ0MiAwIDAwLS42MjcgMEwuMTMgNS4zeiIgZmlsbD0iIzViOWZlZiIvPjwvc3ZnPg==);
|
|
130
|
-
-webkit-transform: rotate(90deg);
|
|
131
|
-
transform: rotate(90deg);
|
|
132
|
-
}
|
|
133
|
-
.pika-select {
|
|
134
|
-
display: inline-block;
|
|
135
|
-
}
|
|
136
|
-
.pika-table {
|
|
137
|
-
width: 100%;
|
|
138
|
-
border-collapse: collapse;
|
|
139
|
-
border-spacing: 0;
|
|
140
|
-
border: 0;
|
|
141
|
-
}
|
|
142
|
-
.pika-table th,
|
|
143
|
-
.pika-table td {
|
|
144
|
-
width: 14.285714285714286%;
|
|
145
|
-
padding: 0;
|
|
146
|
-
}
|
|
147
|
-
.pika-table th {
|
|
148
|
-
font-weight: normal;
|
|
149
|
-
}
|
|
150
|
-
.pika-table {
|
|
151
|
-
font-size: 12px;
|
|
152
|
-
}
|
|
153
|
-
.pika-table thead {
|
|
154
|
-
line-height: 25px;
|
|
155
|
-
text-align: center;
|
|
156
|
-
}
|
|
157
|
-
.pika-table thead th {
|
|
158
|
-
background: #e5ebed;
|
|
159
|
-
}
|
|
160
|
-
.pika-table thead th:first-child {
|
|
161
|
-
border-radius: 4px 0 0 4px;
|
|
162
|
-
}
|
|
163
|
-
.pika-table thead th:last-child {
|
|
164
|
-
border-radius: 0 4px 4px 0;
|
|
165
|
-
}
|
|
166
|
-
.pika-table thead abbr {
|
|
167
|
-
border-bottom: none;
|
|
168
|
-
cursor: help;
|
|
169
|
-
}
|
|
170
|
-
.pika-table .is-today {
|
|
171
|
-
font-weight: bold;
|
|
172
|
-
}
|
|
173
|
-
.pika-button {
|
|
174
|
-
color: inherit;
|
|
175
|
-
font: inherit;
|
|
176
|
-
font-size: inherit;
|
|
177
|
-
line-height: normal;
|
|
178
|
-
vertical-align: baseline;
|
|
179
|
-
padding: 0;
|
|
180
|
-
margin: 0;
|
|
181
|
-
border: 0;
|
|
182
|
-
background: none;
|
|
183
|
-
overflow: visible;
|
|
184
|
-
-webkit-user-select: none;
|
|
185
|
-
-moz-user-select: none;
|
|
186
|
-
-ms-user-select: none;
|
|
187
|
-
user-select: none;
|
|
188
|
-
cursor: pointer;
|
|
189
|
-
-webkit-box-sizing: border-box;
|
|
190
|
-
box-sizing: border-box;
|
|
191
|
-
padding: 5px;
|
|
192
|
-
width: 100%;
|
|
193
|
-
font-size: 12px;
|
|
194
|
-
line-height: 15px;
|
|
195
|
-
text-align: center;
|
|
196
|
-
border-radius: 4px;
|
|
197
|
-
}
|
|
198
|
-
.pika-button::-moz-focus-inner {
|
|
199
|
-
border: 0;
|
|
200
|
-
padding: 0;
|
|
201
|
-
}
|
|
202
|
-
.is-selected .pika-button {
|
|
203
|
-
background: #e5ebed;
|
|
204
|
-
}
|
|
205
|
-
.pika-button:hover {
|
|
206
|
-
color: #fff;
|
|
207
|
-
background: #5b9fef;
|
|
208
|
-
}
|
|
209
|
-
.pika-row .is-disabled {
|
|
210
|
-
opacity: 0.3;
|
|
211
|
-
-ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=30)';
|
|
212
|
-
filter: alpha(opacity=30);
|
|
213
|
-
}
|