1 | import { useMemo, createElement, memo } from 'react';
|
2 | import { object, func, bool, number, oneOf } from 'prop-types';
|
3 | import { u as useUtils } from './useUtils-cfb96ac9.js';
|
4 | import clsx from 'clsx';
|
5 | import _extends from '@babel/runtime/helpers/esm/extends';
|
6 | import Typography from '@material-ui/core/Typography';
|
7 | import { makeStyles } from '@material-ui/core/styles';
|
8 | import '@babel/runtime/helpers/esm/classCallCheck';
|
9 | import '@babel/runtime/helpers/esm/createClass';
|
10 | import '@babel/runtime/helpers/esm/possibleConstructorReturn';
|
11 | import '@babel/runtime/helpers/esm/getPrototypeOf';
|
12 | import '@babel/runtime/helpers/esm/inherits';
|
13 | import { b as ClockType, g as getMeridiem, c as convertToMeridiem, a as Clock } from './Clock-48fde975.js';
|
14 |
|
15 | var positions = {
|
16 | 0: [0, 40],
|
17 | 1: [55, 19.6],
|
18 | 2: [94.4, 59.5],
|
19 | 3: [109, 114],
|
20 | 4: [94.4, 168.5],
|
21 | 5: [54.5, 208.4],
|
22 | 6: [0, 223],
|
23 | 7: [-54.5, 208.4],
|
24 | 8: [-94.4, 168.5],
|
25 | 9: [-109, 114],
|
26 | 10: [-94.4, 59.5],
|
27 | 11: [-54.5, 19.6],
|
28 | 12: [0, 5],
|
29 | 13: [36.9, 49.9],
|
30 | 14: [64, 77],
|
31 | 15: [74, 114],
|
32 | 16: [64, 151],
|
33 | 17: [37, 178],
|
34 | 18: [0, 188],
|
35 | 19: [-37, 178],
|
36 | 20: [-64, 151],
|
37 | 21: [-74, 114],
|
38 | 22: [-64, 77],
|
39 | 23: [-37, 50]
|
40 | };
|
41 | var useStyles = makeStyles(function (theme) {
|
42 | var size = theme.spacing(4);
|
43 | return {
|
44 | clockNumber: {
|
45 | width: size,
|
46 | height: 32,
|
47 | userSelect: 'none',
|
48 | position: 'absolute',
|
49 | left: "calc((100% - ".concat(typeof size === 'number' ? "".concat(size, "px") : size, ") / 2)"),
|
50 | display: 'inline-flex',
|
51 | justifyContent: 'center',
|
52 | alignItems: 'center',
|
53 | borderRadius: '50%',
|
54 | color: theme.palette.type === 'light' ? theme.palette.text.primary : theme.palette.text.hint
|
55 | },
|
56 | clockNumberSelected: {
|
57 | color: theme.palette.primary.contrastText
|
58 | }
|
59 | };
|
60 | }, {
|
61 | name: 'MuiPickersClockNumber'
|
62 | });
|
63 | var ClockNumber = function ClockNumber(_ref) {
|
64 | var selected = _ref.selected,
|
65 | label = _ref.label,
|
66 | index = _ref.index,
|
67 | isInner = _ref.isInner;
|
68 | var classes = useStyles();
|
69 | var className = clsx(classes.clockNumber, selected && classes.clockNumberSelected);
|
70 | var transformStyle = useMemo(function () {
|
71 | var position = positions[index];
|
72 | return {
|
73 | transform: "translate(".concat(position[0], "px, ").concat(position[1], "px")
|
74 | };
|
75 | }, [index]);
|
76 | return createElement(Typography, {
|
77 | component: "span",
|
78 | className: className,
|
79 | variant: isInner ? 'body2' : 'body1',
|
80 | style: transformStyle,
|
81 | children: label
|
82 | });
|
83 | };
|
84 |
|
85 | var getHourNumbers = function getHourNumbers(_ref) {
|
86 | var ampm = _ref.ampm,
|
87 | utils = _ref.utils,
|
88 | date = _ref.date;
|
89 | var currentHours = utils.getHours(date);
|
90 | var hourNumbers = [];
|
91 | var startHour = ampm ? 1 : 0;
|
92 | var endHour = ampm ? 12 : 23;
|
93 |
|
94 | var isSelected = function isSelected(hour) {
|
95 | if (ampm) {
|
96 | if (hour === 12) {
|
97 | return currentHours === 12 || currentHours === 0;
|
98 | }
|
99 |
|
100 | return currentHours === hour || currentHours - 12 === hour;
|
101 | }
|
102 |
|
103 | return currentHours === hour;
|
104 | };
|
105 |
|
106 | for (var hour = startHour; hour <= endHour; hour += 1) {
|
107 | var label = hour.toString();
|
108 |
|
109 | if (hour === 0) {
|
110 | label = '00';
|
111 | }
|
112 |
|
113 | var props = {
|
114 | index: hour,
|
115 | label: utils.formatNumber(label),
|
116 | selected: isSelected(hour),
|
117 | isInner: !ampm && (hour === 0 || hour > 12)
|
118 | };
|
119 | hourNumbers.push(createElement(ClockNumber, _extends({
|
120 | key: hour
|
121 | }, props)));
|
122 | }
|
123 |
|
124 | return hourNumbers;
|
125 | };
|
126 | var getMinutesNumbers = function getMinutesNumbers(_ref2) {
|
127 | var value = _ref2.value,
|
128 | utils = _ref2.utils;
|
129 | var f = utils.formatNumber;
|
130 | return [createElement(ClockNumber, {
|
131 | label: f('00'),
|
132 | selected: value === 0,
|
133 | index: 12,
|
134 | key: 12
|
135 | }), createElement(ClockNumber, {
|
136 | label: f('05'),
|
137 | selected: value === 5,
|
138 | index: 1,
|
139 | key: 1
|
140 | }), createElement(ClockNumber, {
|
141 | label: f('10'),
|
142 | selected: value === 10,
|
143 | index: 2,
|
144 | key: 2
|
145 | }), createElement(ClockNumber, {
|
146 | label: f('15'),
|
147 | selected: value === 15,
|
148 | index: 3,
|
149 | key: 3
|
150 | }), createElement(ClockNumber, {
|
151 | label: f('20'),
|
152 | selected: value === 20,
|
153 | index: 4,
|
154 | key: 4
|
155 | }), createElement(ClockNumber, {
|
156 | label: f('25'),
|
157 | selected: value === 25,
|
158 | index: 5,
|
159 | key: 5
|
160 | }), createElement(ClockNumber, {
|
161 | label: f('30'),
|
162 | selected: value === 30,
|
163 | index: 6,
|
164 | key: 6
|
165 | }), createElement(ClockNumber, {
|
166 | label: f('35'),
|
167 | selected: value === 35,
|
168 | index: 7,
|
169 | key: 7
|
170 | }), createElement(ClockNumber, {
|
171 | label: f('40'),
|
172 | selected: value === 40,
|
173 | index: 8,
|
174 | key: 8
|
175 | }), createElement(ClockNumber, {
|
176 | label: f('45'),
|
177 | selected: value === 45,
|
178 | index: 9,
|
179 | key: 9
|
180 | }), createElement(ClockNumber, {
|
181 | label: f('50'),
|
182 | selected: value === 50,
|
183 | index: 10,
|
184 | key: 10
|
185 | }), createElement(ClockNumber, {
|
186 | label: f('55'),
|
187 | selected: value === 55,
|
188 | index: 11,
|
189 | key: 11
|
190 | })];
|
191 | };
|
192 |
|
193 | var ClockView = function ClockView(_ref) {
|
194 | var type = _ref.type,
|
195 | onHourChange = _ref.onHourChange,
|
196 | onMinutesChange = _ref.onMinutesChange,
|
197 | onSecondsChange = _ref.onSecondsChange,
|
198 | ampm = _ref.ampm,
|
199 | date = _ref.date,
|
200 | minutesStep = _ref.minutesStep;
|
201 | var utils = useUtils();
|
202 | var viewProps = useMemo(function () {
|
203 | switch (type) {
|
204 | case ClockType.HOURS:
|
205 | return {
|
206 | value: utils.getHours(date),
|
207 | children: getHourNumbers({
|
208 | date: date,
|
209 | utils: utils,
|
210 | ampm: Boolean(ampm)
|
211 | }),
|
212 | onChange: function onChange(value, isFinish) {
|
213 | var currentMeridiem = getMeridiem(date, utils);
|
214 | var updatedTimeWithMeridiem = convertToMeridiem(utils.setHours(date, value), currentMeridiem, Boolean(ampm), utils);
|
215 | onHourChange(updatedTimeWithMeridiem, isFinish);
|
216 | }
|
217 | };
|
218 |
|
219 | case ClockType.MINUTES:
|
220 | var minutesValue = utils.getMinutes(date);
|
221 | return {
|
222 | value: minutesValue,
|
223 | children: getMinutesNumbers({
|
224 | value: minutesValue,
|
225 | utils: utils
|
226 | }),
|
227 | onChange: function onChange(value, isFinish) {
|
228 | var updatedTime = utils.setMinutes(date, value);
|
229 | onMinutesChange(updatedTime, isFinish);
|
230 | }
|
231 | };
|
232 |
|
233 | case ClockType.SECONDS:
|
234 | var secondsValue = utils.getSeconds(date);
|
235 | return {
|
236 | value: secondsValue,
|
237 | children: getMinutesNumbers({
|
238 | value: secondsValue,
|
239 | utils: utils
|
240 | }),
|
241 | onChange: function onChange(value, isFinish) {
|
242 | var updatedTime = utils.setSeconds(date, value);
|
243 | onSecondsChange(updatedTime, isFinish);
|
244 | }
|
245 | };
|
246 |
|
247 | default:
|
248 | throw new Error('You must provide the type for TimePickerView');
|
249 | }
|
250 | }, [ampm, date, onHourChange, onMinutesChange, onSecondsChange, type, utils]);
|
251 | return createElement(Clock, _extends({
|
252 | type: type,
|
253 | ampm: ampm,
|
254 | minutesStep: minutesStep
|
255 | }, viewProps));
|
256 | };
|
257 | ClockView.displayName = 'TimePickerView';
|
258 | process.env.NODE_ENV !== "production" ? ClockView.propTypes = {
|
259 | date: object.isRequired,
|
260 | onHourChange: func.isRequired,
|
261 | onMinutesChange: func.isRequired,
|
262 | onSecondsChange: func.isRequired,
|
263 | ampm: bool,
|
264 | minutesStep: number,
|
265 | type: oneOf(Object.keys(ClockType).map(function (key) {
|
266 | return ClockType[key];
|
267 | })).isRequired
|
268 | } : void 0;
|
269 | ClockView.defaultProps = {
|
270 | ampm: true,
|
271 | minutesStep: 1
|
272 | };
|
273 | var ClockView$1 = memo(ClockView);
|
274 |
|
275 | export default ClockView$1;
|
276 | export { ClockView };
|
277 |
|