-
-
Notifications
You must be signed in to change notification settings - Fork 530
Expand file tree
/
Copy pathpropTypes.js
More file actions
135 lines (107 loc) · 3.68 KB
/
Copy pathpropTypes.js
File metadata and controls
135 lines (107 loc) · 3.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
import PropTypes from 'prop-types';
import { CALENDAR_TYPES } from './const';
const calendarTypes = Object.values(CALENDAR_TYPES);
const allViews = ['century', 'decade', 'year', 'month'];
export const isCalendarType = PropTypes.oneOf(calendarTypes);
export const isClassName = PropTypes.oneOfType([
PropTypes.string,
PropTypes.arrayOf(PropTypes.string),
]);
export function isMinDate(props, propName, componentName) {
const { [propName]: minDate } = props;
if (!minDate) {
return null;
}
if (!(minDate instanceof Date)) {
return new Error(
`Invalid prop \`${propName}\` of type \`${typeof minDate}\` supplied to \`${componentName}\`, expected instance of \`Date\`.`,
);
}
const { maxDate } = props;
if (maxDate && minDate > maxDate) {
return new Error(
`Invalid prop \`${propName}\` of type \`${typeof minDate}\` supplied to \`${componentName}\`, minDate cannot be larger than maxDate.`,
);
}
return null;
}
export function isMaxDate(props, propName, componentName) {
const { [propName]: maxDate } = props;
if (!maxDate) {
return null;
}
if (!(maxDate instanceof Date)) {
return new Error(
`Invalid prop \`${propName}\` of type \`${typeof maxDate}\` supplied to \`${componentName}\`, expected instance of \`Date\`.`,
);
}
const { minDate } = props;
if (minDate && maxDate < minDate) {
return new Error(
`Invalid prop \`${propName}\` of type \`${typeof maxDate}\` supplied to \`${componentName}\`, maxDate cannot be smaller than minDate.`,
);
}
return null;
}
export const isRef = PropTypes.oneOfType([
PropTypes.func,
PropTypes.shape({
current: PropTypes.any,
}),
]);
export const isValue = PropTypes.oneOfType([
PropTypes.instanceOf(Date),
PropTypes.arrayOf(PropTypes.instanceOf(Date)),
]);
export const isViews = PropTypes.arrayOf(PropTypes.oneOf(allViews));
export function isView(props, propName, componentName) {
const { [propName]: view } = props;
const { views } = props;
const allowedViews = views || allViews;
if (view !== undefined && allowedViews.indexOf(view) === -1) {
return new Error(
`Invalid prop \`${propName}\` of value \`${view}\` supplied to \`${componentName}\`, expected one of [${allowedViews
.map((a) => `"${a}"`)
.join(', ')}].`,
);
}
// Everything is fine
return null;
}
isView.isRequired = (props, propName, componentName) => {
const { [propName]: view } = props;
if (!view) {
return new Error(
`The prop \`${propName}\` is marked as required in \`${componentName}\`, but its value is \`${view}\`.`,
);
}
return isView(props, propName, componentName);
};
export const tileGroupProps = {
activeStartDate: PropTypes.instanceOf(Date).isRequired,
hover: PropTypes.instanceOf(Date),
locale: PropTypes.string,
maxDate: isMaxDate,
minDate: isMinDate,
onClick: PropTypes.func,
onMouseOver: PropTypes.func,
tileClassName: PropTypes.oneOfType([PropTypes.func, isClassName]),
tileContent: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),
value: isValue,
valueType: PropTypes.string,
};
export const tileProps = {
activeStartDate: PropTypes.instanceOf(Date).isRequired,
classes: PropTypes.arrayOf(PropTypes.string).isRequired,
date: PropTypes.instanceOf(Date).isRequired,
locale: PropTypes.string,
maxDate: isMaxDate,
minDate: isMinDate,
tileAriaLabelHandler: PropTypes.func,
onClick: PropTypes.func,
onMouseOver: PropTypes.func,
style: PropTypes.objectOf(PropTypes.oneOfType([PropTypes.string, PropTypes.number])),
tileClassName: PropTypes.oneOfType([PropTypes.func, isClassName]),
tileContent: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),
tileDisabled: PropTypes.func,
};