UNPKG

7.58 kBJavaScriptView Raw
1import { useMemo, createElement, memo } from 'react';
2import { object, func, bool, number, oneOf } from 'prop-types';
3import { u as useUtils } from './useUtils-cfb96ac9.js';
4import clsx from 'clsx';
5import _extends from '@babel/runtime/helpers/esm/extends';
6import Typography from '@material-ui/core/Typography';
7import { makeStyles } from '@material-ui/core/styles';
8import '@babel/runtime/helpers/esm/classCallCheck';
9import '@babel/runtime/helpers/esm/createClass';
10import '@babel/runtime/helpers/esm/possibleConstructorReturn';
11import '@babel/runtime/helpers/esm/getPrototypeOf';
12import '@babel/runtime/helpers/esm/inherits';
13import { b as ClockType, g as getMeridiem, c as convertToMeridiem, a as Clock } from './Clock-48fde975.js';
14
15var 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};
41var 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});
63var 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
85var 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};
126var 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
193var 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};
257ClockView.displayName = 'TimePickerView';
258process.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;
269ClockView.defaultProps = {
270 ampm: true,
271 minutesStep: 1
272};
273var ClockView$1 = memo(ClockView);
274
275export default ClockView$1;
276export { ClockView };
277//# sourceMappingURL=ClockView.js.map