@semapps/date-components 0.5.2 → 0.6.0-alpha.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/dist/index.cjs.js +260 -1
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.es.js +248 -1
- package/dist/index.es.js.map +1 -1
- package/package.json +10 -16
package/dist/index.cjs.js
CHANGED
|
@@ -1,2 +1,261 @@
|
|
|
1
|
-
|
|
1
|
+
var $g9yvC$reactjsxruntime = require("react/jsx-runtime");
|
|
2
|
+
var $g9yvC$react = require("react");
|
|
3
|
+
var $g9yvC$muixdatepickersDatePicker = require("@mui/x-date-pickers/DatePicker");
|
|
4
|
+
var $g9yvC$muixdatepickersTimePicker = require("@mui/x-date-pickers/TimePicker");
|
|
5
|
+
var $g9yvC$muixdatepickersDateTimePicker = require("@mui/x-date-pickers/DateTimePicker");
|
|
6
|
+
var $g9yvC$reactadmin = require("react-admin");
|
|
7
|
+
var $g9yvC$muixdatepickersLocalizationProvider = require("@mui/x-date-pickers/LocalizationProvider");
|
|
8
|
+
var $g9yvC$muixdatepickersAdapterDateFns = require("@mui/x-date-pickers/AdapterDateFns");
|
|
9
|
+
var $g9yvC$fullcalendarreact = require("@fullcalendar/react");
|
|
10
|
+
var $g9yvC$fullcalendardaygrid = require("@fullcalendar/daygrid");
|
|
11
|
+
var $g9yvC$muimaterial = require("@mui/material");
|
|
12
|
+
var $g9yvC$muistylesmakeStyles = require("@mui/styles/makeStyles");
|
|
13
|
+
var $g9yvC$reactrouterdom = require("react-router-dom");
|
|
14
|
+
var $g9yvC$fullcalendarlist = require("@fullcalendar/list");
|
|
15
|
+
|
|
16
|
+
function $parcel$export(e, n, v, s) {
|
|
17
|
+
Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
|
|
18
|
+
}
|
|
19
|
+
function $parcel$interopDefault(a) {
|
|
20
|
+
return a && a.__esModule ? a.default : a;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
$parcel$export(module.exports, "DateInput", () => $2d95977354f78fa4$export$7edc06cf1783b30f);
|
|
24
|
+
$parcel$export(module.exports, "TimeInput", () => $2d95977354f78fa4$export$a1af6f79df847fac);
|
|
25
|
+
$parcel$export(module.exports, "DateTimeInput", () => $2d95977354f78fa4$export$183478aa40b5df1);
|
|
26
|
+
$parcel$export(module.exports, "CalendarList", () => $563c84827e91e322$export$2e2bcd8739ae039);
|
|
27
|
+
$parcel$export(module.exports, "DaysList", () => $5379d12b87e743a4$export$2e2bcd8739ae039);
|
|
28
|
+
$parcel$export(module.exports, "useFullCalendarProps", () => $c8dbd8ec3b8f34cc$export$2e2bcd8739ae039);
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
const $0dc8df9925f5313b$var$leftPad = (nb = 2)=>(value)=>("0".repeat(nb) + value).slice(-nb);
|
|
40
|
+
const $0dc8df9925f5313b$var$leftPad4 = $0dc8df9925f5313b$var$leftPad(4);
|
|
41
|
+
const $0dc8df9925f5313b$var$leftPad2 = $0dc8df9925f5313b$var$leftPad(2);
|
|
42
|
+
// yyyy-MM-ddThh:mm
|
|
43
|
+
const $0dc8df9925f5313b$var$dateTimeRegex = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}$/;
|
|
44
|
+
/**
|
|
45
|
+
* @param {Date} value value to convert
|
|
46
|
+
* @returns {string} A standardized datetime (yyyy-MM-ddThh:mm), to be passed to an <input type="datetime-local" />
|
|
47
|
+
*/ const $0dc8df9925f5313b$var$convertDateToString = (value)=>{
|
|
48
|
+
if (!(value instanceof Date) || isNaN(value.getDate())) return "";
|
|
49
|
+
const yy = $0dc8df9925f5313b$var$leftPad4(value.getFullYear());
|
|
50
|
+
const MM = $0dc8df9925f5313b$var$leftPad2(value.getMonth() + 1);
|
|
51
|
+
const dd = $0dc8df9925f5313b$var$leftPad2(value.getDate());
|
|
52
|
+
const hh = $0dc8df9925f5313b$var$leftPad2(value.getHours());
|
|
53
|
+
const mm = $0dc8df9925f5313b$var$leftPad2(value.getMinutes());
|
|
54
|
+
return `${yy}-${MM}-${dd}T${hh}:${mm}`;
|
|
55
|
+
};
|
|
56
|
+
const $0dc8df9925f5313b$export$59113f23fb667b84 = (value)=>{
|
|
57
|
+
// null, undefined and empty string values should not go through convertDateToString
|
|
58
|
+
// otherwise, it returns undefined and will make the input an uncontrolled one.
|
|
59
|
+
if (value == null || value === "") return "";
|
|
60
|
+
if (value instanceof Date) return $0dc8df9925f5313b$var$convertDateToString(value);
|
|
61
|
+
// valid dates should not be converted
|
|
62
|
+
if ($0dc8df9925f5313b$var$dateTimeRegex.test(value)) return value;
|
|
63
|
+
return $0dc8df9925f5313b$var$convertDateToString(new Date(value));
|
|
64
|
+
};
|
|
65
|
+
const $0dc8df9925f5313b$export$9a692607b62bf94e = (value)=>value ? new Date(value) : "";
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
const $68a2d690bd37b19a$var$Picker = ({ PickerComponent: PickerComponent, format: format = (0, $0dc8df9925f5313b$export$59113f23fb667b84), label: label, source: source, helperText: helperText, onBlur: onBlur, onChange: onChange, onFocus: onFocus, parse: parse = (0, $0dc8df9925f5313b$export$9a692607b62bf94e), validate: validate, defaultValue: defaultValue, locale: locale, pickerVariant: pickerVariant = "dialog", stringFormat: stringFormat = "ISO", allowClear: allowClear, ...rest })=>{
|
|
69
|
+
const { field: field, isRequired: isRequired, fieldState: { error: error, isTouched: isTouched } } = (0, $g9yvC$reactadmin.useInput)({
|
|
70
|
+
format: format,
|
|
71
|
+
onBlur: onBlur,
|
|
72
|
+
onChange: onChange,
|
|
73
|
+
onFocus: onFocus,
|
|
74
|
+
parse: parse,
|
|
75
|
+
source: source,
|
|
76
|
+
validate: validate,
|
|
77
|
+
...rest
|
|
78
|
+
});
|
|
79
|
+
const handleChange = (0, $g9yvC$react.useCallback)((value)=>{
|
|
80
|
+
Date.parse(value) ? field.onChange(stringFormat === "ISO" ? value.toISOString() : value.toString()) : field.onChange(null);
|
|
81
|
+
}, []);
|
|
82
|
+
return /*#__PURE__*/ (0, $g9yvC$reactjsxruntime.jsx)((0, $g9yvC$muixdatepickersLocalizationProvider.LocalizationProvider), {
|
|
83
|
+
dateAdapter: (0, $g9yvC$muixdatepickersAdapterDateFns.AdapterDateFns),
|
|
84
|
+
adapterLocale: locale,
|
|
85
|
+
children: /*#__PURE__*/ (0, $g9yvC$reactjsxruntime.jsx)(PickerComponent, {
|
|
86
|
+
label: /*#__PURE__*/ (0, $g9yvC$reactjsxruntime.jsx)((0, $g9yvC$reactadmin.FieldTitle), {
|
|
87
|
+
label: label,
|
|
88
|
+
source: source,
|
|
89
|
+
isRequired: isRequired
|
|
90
|
+
}),
|
|
91
|
+
error: !!(isTouched && error),
|
|
92
|
+
slotProps: {
|
|
93
|
+
textField: {
|
|
94
|
+
helperText: /*#__PURE__*/ (0, $g9yvC$reactjsxruntime.jsx)((0, $g9yvC$reactadmin.InputHelperText), {
|
|
95
|
+
touched: isTouched,
|
|
96
|
+
error: error,
|
|
97
|
+
helperText: helperText
|
|
98
|
+
})
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
...$68a2d690bd37b19a$var$sanitizeRestProps(rest),
|
|
102
|
+
value: field.value ? new Date(field.value) : null,
|
|
103
|
+
onChange: handleChange,
|
|
104
|
+
onBlur: ()=>field.onBlur(field.value ? stringFormat === "ISO" ? new Date(field.value).toISOString() : new Date(field.value).toString() : null)
|
|
105
|
+
})
|
|
106
|
+
});
|
|
107
|
+
};
|
|
108
|
+
$68a2d690bd37b19a$var$Picker.defaultProps = {
|
|
109
|
+
isRequired: false,
|
|
110
|
+
meta: {
|
|
111
|
+
isTouched: false,
|
|
112
|
+
error: false
|
|
113
|
+
},
|
|
114
|
+
locale: undefined,
|
|
115
|
+
parse: (value)=>value === "" ? null : value // Avoid saving an empty string in the dataset
|
|
116
|
+
};
|
|
117
|
+
const $68a2d690bd37b19a$var$sanitizeRestProps = ({ allowEmpty: allowEmpty, alwaysOn: alwaysOn, component: component, defaultValue: defaultValue, format: format, formClassName: formClassName, initialValue: initialValue, initializeForm: initializeForm, input: input, isRequired: isRequired, label: label, limitChoicesToValue: limitChoicesToValue, locale: locale, meta: meta, options: options, optionText: optionText, optionValue: optionValue, parse: parse, source: source, textAlign: textAlign, translate: translate, translateChoice: translateChoice, labelTime: labelTime, ...rest })=>rest;
|
|
118
|
+
var $68a2d690bd37b19a$export$2e2bcd8739ae039 = $68a2d690bd37b19a$var$Picker;
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
const $c8dbd8ec3b8f34cc$var$useFullCalendarProps = ({ label: label, startDate: startDate, endDate: endDate, linkType: linkType })=>{
|
|
131
|
+
const { data: data, isLoading: isLoading, resource: resource } = (0, $g9yvC$reactadmin.useListContext)();
|
|
132
|
+
const [searchParams, setSearchParams] = (0, $g9yvC$reactrouterdom.useSearchParams)();
|
|
133
|
+
const navigate = (0, $g9yvC$reactrouterdom.useNavigate)();
|
|
134
|
+
const createPath = (0, $g9yvC$reactadmin.useCreatePath)();
|
|
135
|
+
const query = new URLSearchParams(location.search);
|
|
136
|
+
// Bypass the link in order to use React-Router
|
|
137
|
+
const eventClick = (0, $g9yvC$react.useCallback)(({ event: event, jsEvent: jsEvent })=>{
|
|
138
|
+
jsEvent.preventDefault();
|
|
139
|
+
navigate(event.url);
|
|
140
|
+
}, []);
|
|
141
|
+
// Change the query string when month change
|
|
142
|
+
const datesSet = (0, $g9yvC$react.useCallback)(({ view: view })=>{
|
|
143
|
+
setSearchParams((params)=>({
|
|
144
|
+
...params,
|
|
145
|
+
month: view.currentStart.getMonth() + 1,
|
|
146
|
+
year: view.currentStart.getFullYear()
|
|
147
|
+
}));
|
|
148
|
+
}, [
|
|
149
|
+
setSearchParams
|
|
150
|
+
]);
|
|
151
|
+
const events = (0, $g9yvC$react.useMemo)(()=>!isLoading && data.filter((record)=>record).map((record)=>({
|
|
152
|
+
id: record.id,
|
|
153
|
+
title: typeof label === "string" ? record[label] : label(record),
|
|
154
|
+
start: typeof startDate === "string" ? record[startDate] : startDate(record),
|
|
155
|
+
end: typeof endDate === "string" ? record[endDate] : endDate(record),
|
|
156
|
+
url: createPath({
|
|
157
|
+
resource: resource,
|
|
158
|
+
id: record.id,
|
|
159
|
+
type: linkType
|
|
160
|
+
})
|
|
161
|
+
})), [
|
|
162
|
+
isLoading,
|
|
163
|
+
data,
|
|
164
|
+
resource,
|
|
165
|
+
createPath
|
|
166
|
+
]);
|
|
167
|
+
return {
|
|
168
|
+
initialDate: query.has("month") ? new Date(query.get("year"), query.get("month") - 1) : new Date(),
|
|
169
|
+
events: events,
|
|
170
|
+
datesSet: datesSet,
|
|
171
|
+
eventClick: eventClick
|
|
172
|
+
};
|
|
173
|
+
};
|
|
174
|
+
var $c8dbd8ec3b8f34cc$export$2e2bcd8739ae039 = $c8dbd8ec3b8f34cc$var$useFullCalendarProps;
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
const $563c84827e91e322$var$useGlobalStyles = (0, ($parcel$interopDefault($g9yvC$muistylesmakeStyles)))((theme)=>({
|
|
178
|
+
"@global": {
|
|
179
|
+
".fc-button": {
|
|
180
|
+
backgroundColor: `${theme.palette.primary.main} !important`,
|
|
181
|
+
border: "none !important",
|
|
182
|
+
opacity: "1 !important"
|
|
183
|
+
},
|
|
184
|
+
".fc-day-today": {
|
|
185
|
+
backgroundColor: `${theme.palette.secondary.light} !important`
|
|
186
|
+
},
|
|
187
|
+
// Overwrite violet color of links
|
|
188
|
+
"a.fc-daygrid-dot-event": {
|
|
189
|
+
color: "black !important"
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}));
|
|
193
|
+
const $563c84827e91e322$var$CalendarList = (props)=>{
|
|
194
|
+
const theme = (0, $g9yvC$muimaterial.useTheme)();
|
|
195
|
+
const fullCalendarProps = (0, $c8dbd8ec3b8f34cc$export$2e2bcd8739ae039)(props);
|
|
196
|
+
$563c84827e91e322$var$useGlobalStyles();
|
|
197
|
+
return /*#__PURE__*/ (0, $g9yvC$reactjsxruntime.jsx)((0, ($parcel$interopDefault($g9yvC$fullcalendarreact))), {
|
|
198
|
+
plugins: [
|
|
199
|
+
(0, ($parcel$interopDefault($g9yvC$fullcalendardaygrid)))
|
|
200
|
+
],
|
|
201
|
+
locale: props.locale,
|
|
202
|
+
initialView: "dayGridMonth",
|
|
203
|
+
eventBackgroundColor: theme.palette.primary.main,
|
|
204
|
+
...fullCalendarProps
|
|
205
|
+
});
|
|
206
|
+
};
|
|
207
|
+
$563c84827e91e322$var$CalendarList.defaultProps = {
|
|
208
|
+
linkType: "edit"
|
|
209
|
+
};
|
|
210
|
+
var $563c84827e91e322$export$2e2bcd8739ae039 = $563c84827e91e322$var$CalendarList;
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
const $5379d12b87e743a4$var$useGlobalStyles = (0, ($parcel$interopDefault($g9yvC$muistylesmakeStyles)))((theme)=>({
|
|
220
|
+
"@global": {
|
|
221
|
+
".fc-button": {
|
|
222
|
+
backgroundColor: `${theme.palette.primary.main} !important`,
|
|
223
|
+
border: "none !important",
|
|
224
|
+
opacity: "1 !important"
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}));
|
|
228
|
+
const $5379d12b87e743a4$var$DaysList = (props)=>{
|
|
229
|
+
const fullCalendarProps = (0, $c8dbd8ec3b8f34cc$export$2e2bcd8739ae039)(props);
|
|
230
|
+
$5379d12b87e743a4$var$useGlobalStyles();
|
|
231
|
+
return /*#__PURE__*/ (0, $g9yvC$reactjsxruntime.jsx)((0, ($parcel$interopDefault($g9yvC$fullcalendarreact))), {
|
|
232
|
+
plugins: [
|
|
233
|
+
(0, ($parcel$interopDefault($g9yvC$fullcalendarlist)))
|
|
234
|
+
],
|
|
235
|
+
locale: props.locale,
|
|
236
|
+
initialView: "listMonth",
|
|
237
|
+
...fullCalendarProps
|
|
238
|
+
});
|
|
239
|
+
};
|
|
240
|
+
$5379d12b87e743a4$var$DaysList.defaultProps = {
|
|
241
|
+
linkType: "edit"
|
|
242
|
+
};
|
|
243
|
+
var $5379d12b87e743a4$export$2e2bcd8739ae039 = $5379d12b87e743a4$var$DaysList;
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
const $2d95977354f78fa4$export$7edc06cf1783b30f = (props)=>/*#__PURE__*/ (0, $g9yvC$reactjsxruntime.jsx)((0, $68a2d690bd37b19a$export$2e2bcd8739ae039), {
|
|
248
|
+
PickerComponent: (0, $g9yvC$muixdatepickersDatePicker.DatePicker),
|
|
249
|
+
...props
|
|
250
|
+
});
|
|
251
|
+
const $2d95977354f78fa4$export$a1af6f79df847fac = (props)=>/*#__PURE__*/ (0, $g9yvC$reactjsxruntime.jsx)((0, $68a2d690bd37b19a$export$2e2bcd8739ae039), {
|
|
252
|
+
PickerComponent: (0, $g9yvC$muixdatepickersTimePicker.TimePicker),
|
|
253
|
+
...props
|
|
254
|
+
});
|
|
255
|
+
const $2d95977354f78fa4$export$183478aa40b5df1 = (props)=>/*#__PURE__*/ (0, $g9yvC$reactjsxruntime.jsx)((0, $68a2d690bd37b19a$export$2e2bcd8739ae039), {
|
|
256
|
+
PickerComponent: (0, $g9yvC$muixdatepickersDateTimePicker.DateTimePicker),
|
|
257
|
+
...props
|
|
258
|
+
});
|
|
259
|
+
|
|
260
|
+
|
|
2
261
|
//# sourceMappingURL=index.cjs.js.map
|
package/dist/index.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../src/utils.js","../src/Picker.js","../src/useFullCalendarProps.js","../src/CalendarList.js","../src/DaysList.js","../src/index.js"],"sourcesContent":["const leftPad = (nb = 2) => value => ('0'.repeat(nb) + value).slice(-nb);\nconst leftPad4 = leftPad(4);\nconst leftPad2 = leftPad(2);\n\n// yyyy-MM-ddThh:mm\nconst dateTimeRegex = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}$/;\n\n/**\n * @param {Date} value value to convert\n * @returns {String} A standardized datetime (yyyy-MM-ddThh:mm), to be passed to an <input type=\"datetime-local\" />\n */\nconst convertDateToString = value => {\n if (!(value instanceof Date) || isNaN(value.getDate())) {\n return '';\n }\n\n const yy = leftPad4(value.getFullYear());\n const MM = leftPad2(value.getMonth() + 1);\n const dd = leftPad2(value.getDate());\n const hh = leftPad2(value.getHours());\n const mm = leftPad2(value.getMinutes());\n return `${yy}-${MM}-${dd}T${hh}:${mm}`;\n};\n\n/**\n * Converts a date from the Redux store, with timezone, to a date string\n * without timezone for use in an <input type=\"datetime-local\" />.\n *\n * @param {Date | String} value date string or object\n */\nexport const dateTimeFormatter = value => {\n // null, undefined and empty string values should not go through convertDateToString\n // otherwise, it returns undefined and will make the input an uncontrolled one.\n if (value == null || value === '') {\n return '';\n }\n\n if (value instanceof Date) {\n return convertDateToString(value);\n }\n\n // valid dates should not be converted\n if (dateTimeRegex.test(value)) {\n return value;\n }\n\n return convertDateToString(new Date(value));\n};\n\n/**\n * Converts a datetime string without timezone to a date object\n * with timezone, using the browser timezone.\n *\n * @param {String} value Date string, formatted as yyyy-MM-ddThh:mm\n * @return {Date}\n */\nexport const dateTimeParser = value => (value ? new Date(value) : '');\n","import React, { useCallback } from 'react';\nimport { useInput, FieldTitle, InputHelperText } from 'react-admin';\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';\nimport { dateTimeFormatter, dateTimeParser } from './utils';\n\nconst Picker = ({\n PickerComponent,\n format = dateTimeFormatter,\n label,\n source,\n helperText,\n onBlur,\n onChange,\n onFocus,\n parse = dateTimeParser,\n validate,\n defaultValue,\n locale,\n pickerVariant = 'dialog',\n stringFormat = 'ISO',\n allowClear,\n ...rest\n}) => {\n const {\n field,\n isRequired,\n fieldState: { error, isTouched }\n } = useInput({\n format,\n onBlur,\n onChange,\n onFocus,\n parse,\n source,\n validate,\n ...rest\n });\n\n const handleChange = useCallback(value => {\n Date.parse(value)\n ? field.onChange(stringFormat === 'ISO' ? value.toISOString() : value.toString())\n : field.onChange(null);\n }, []);\n\n return (\n <LocalizationProvider dateAdapter={AdapterDateFns} adapterLocale={locale}>\n <PickerComponent\n label={<FieldTitle label={label} source={source} isRequired={isRequired} />}\n error={!!(isTouched && error)}\n slotProps={{\n textField: {\n helperText: <InputHelperText touched={isTouched} error={error} helperText={helperText} />\n },\n }}\n {...sanitizeRestProps(rest)}\n value={field.value ? new Date(field.value) : null}\n onChange={handleChange}\n onBlur={() =>\n field.onBlur(\n field.value\n ? stringFormat === 'ISO'\n ? new Date(field.value).toISOString()\n : new Date(field.value).toString()\n : null\n )\n }\n />\n </LocalizationProvider>\n );\n};\n\nPicker.defaultProps = {\n isRequired: false,\n meta: { isTouched: false, error: false },\n locale: undefined, // Default to english\n parse: value => (value === '' ? null : value) // Avoid saving an empty string in the dataset\n};\n\nconst sanitizeRestProps = ({\n allowEmpty,\n alwaysOn,\n component,\n defaultValue,\n format,\n formClassName,\n initialValue,\n initializeForm,\n input,\n isRequired,\n label,\n limitChoicesToValue,\n locale,\n meta,\n options,\n optionText,\n optionValue,\n parse,\n source,\n textAlign,\n translate,\n translateChoice,\n labelTime,\n ...rest\n}) => rest;\n\n\nexport default Picker;\n","import React, { useMemo, useCallback } from 'react';\nimport { useSearchParams, useNavigate } from 'react-router-dom';\nimport { useListContext, useCreatePath } from 'react-admin';\n\nconst useFullCalendarProps = ({ label, startDate, endDate, linkType }) => {\n const { data, isLoading, resource } = useListContext();\n const [searchParams, setSearchParams] = useSearchParams();\n const navigate = useNavigate();\n const createPath = useCreatePath();\n\n let query = new URLSearchParams(location.search);\n\n // Bypass the link in order to use React-Router\n const eventClick = useCallback(({ event, jsEvent }) => {\n jsEvent.preventDefault();\n navigate(event.url);\n }, []);\n\n // Change the query string when month change\n const datesSet = useCallback(\n ({ view }) => {\n setSearchParams(params => ({ ...params, month: view.currentStart.getMonth() + 1, year: view.currentStart.getFullYear() }));\n },\n [setSearchParams]\n );\n\n const events = useMemo(\n () =>\n !isLoading &&\n data\n .filter(record => record)\n .map(record => ({\n id: record.id,\n title: typeof label === 'string' ? record[label] : label(record),\n start: typeof startDate === 'string' ? record[startDate] : startDate(record),\n end: typeof endDate === 'string' ? record[endDate] : endDate(record),\n url: createPath({ resource, id: record.id, type: linkType })\n })),\n [isLoading, data, resource, createPath]\n );\n\n return {\n initialDate: query.has('month') ? new Date(query.get('year'), query.get('month') - 1) : new Date(),\n events,\n datesSet,\n eventClick\n };\n};\n\nexport default useFullCalendarProps;\n","import React from 'react';\nimport FullCalendar from '@fullcalendar/react';\nimport dayGridPlugin from '@fullcalendar/daygrid';\nimport { useTheme } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport useFullCalendarProps from './useFullCalendarProps';\n\nconst useGlobalStyles = makeStyles(theme => ({\n '@global': {\n '.fc-button': {\n backgroundColor: theme.palette.primary.main + ' !important',\n border: 'none !important',\n opacity: '1 !important'\n },\n '.fc-day-today': {\n backgroundColor: theme.palette.secondary.light + ' !important'\n },\n // Overwrite violet color of links\n 'a.fc-daygrid-dot-event': {\n color: 'black !important'\n }\n }\n}));\n\nconst CalendarList = props => {\n const theme = useTheme();\n const fullCalendarProps = useFullCalendarProps(props);\n useGlobalStyles();\n\n return (\n <FullCalendar\n plugins={[dayGridPlugin]}\n locale={props.locale}\n initialView=\"dayGridMonth\"\n eventBackgroundColor={theme.palette.primary.main}\n {...fullCalendarProps}\n />\n );\n};\n\nCalendarList.defaultProps = {\n linkType: 'edit'\n};\n\nexport default CalendarList;\n","import React from 'react';\nimport FullCalendar from '@fullcalendar/react';\nimport listPlugin from '@fullcalendar/list';\nimport makeStyles from '@mui/styles/makeStyles';\nimport useFullCalendarProps from './useFullCalendarProps';\n\nconst useGlobalStyles = makeStyles(theme => ({\n '@global': {\n '.fc-button': {\n backgroundColor: theme.palette.primary.main + ' !important',\n border: 'none !important',\n opacity: '1 !important'\n }\n }\n}));\n\nconst DaysList = props => {\n const fullCalendarProps = useFullCalendarProps(props);\n useGlobalStyles();\n\n return <FullCalendar plugins={[listPlugin]} locale={props.locale} initialView=\"listMonth\" {...fullCalendarProps} />;\n};\n\nDaysList.defaultProps = {\n linkType: 'edit'\n};\n\nexport default DaysList;\n","import React from 'react';\nimport Picker from './Picker';\nimport { DatePicker } from '@mui/x-date-pickers/DatePicker';\nimport { TimePicker } from '@mui/x-date-pickers/TimePicker';\nimport { DateTimePicker } from '@mui/x-date-pickers/DateTimePicker';\n\nconst DateInput = props => <Picker PickerComponent={DatePicker} {...props} />;\nconst TimeInput = props => <Picker PickerComponent={TimePicker} {...props} />;\nconst DateTimeInput = props => <Picker PickerComponent={DateTimePicker} {...props} />;\n\nexport { DateInput, TimeInput, DateTimeInput };\n\nexport { default as CalendarList } from './CalendarList';\nexport { default as DaysList } from './DaysList';\nexport { default as useFullCalendarProps } from './useFullCalendarProps';\n"],"names":["leftPad","nb","value","repeat","slice","leftPad4","leftPad2","dateTimeRegex","convertDateToString","Date","isNaN","getDate","yy","getFullYear","MM","getMonth","dd","hh","getHours","mm","getMinutes","concat","dateTimeFormatter","test","dateTimeParser","Picker","_ref","PickerComponent","_ref$format","format","label","source","helperText","onBlur","onChange","onFocus","_ref$parse","parse","validate","defaultValue","locale","pickerVariant","_ref$stringFormat","stringFormat","allowClear","rest","_objectWithoutProperties","_excluded","_useInput","useInput","_objectSpread","field","isRequired","_useInput$fieldState","fieldState","error","isTouched","handleChange","useCallback","toISOString","toString","React","LocalizationProvider","dateAdapter","AdapterDateFns","adapterLocale","_extends","FieldTitle","slotProps","textField","InputHelperText","touched","sanitizeRestProps","defaultProps","meta","undefined","_ref2","allowEmpty","alwaysOn","component","formClassName","initialValue","initializeForm","input","limitChoicesToValue","options","optionText","optionValue","textAlign","translate","translateChoice","labelTime","_excluded2","useFullCalendarProps","startDate","endDate","linkType","_useListContext","useListContext","data","isLoading","resource","_useSearchParams2","_slicedToArray","useSearchParams","setSearchParams","navigate","useNavigate","createPath","useCreatePath","query","URLSearchParams","location","search","eventClick","event","jsEvent","preventDefault","url","datesSet","_ref3","view","params","month","currentStart","year","events","useMemo","filter","record","map","id","title","start","end","type","initialDate","has","get","useGlobalStyles","makeStyles","theme","@global",".fc-button","backgroundColor","palette","primary","main","border","opacity",".fc-day-today","secondary","light","a.fc-daygrid-dot-event","color","CalendarList","props","useTheme","fullCalendarProps","FullCalendar","plugins","dayGridPlugin","initialView","eventBackgroundColor","DaysList","listPlugin","DatePicker","DateTimePicker","TimePicker"],"mappings":"g3FAAA,IAAMA,EAAU,WAAA,IAACC,yDAAK,EAAN,OAAY,SAAAC,GAAK,OAAK,IAAIC,OAAOF,GAAMC,GAAOE,OAAOH,KAC/DI,EAAWL,EAAQ,GACnBM,EAAWN,EAAQ,GAGnBO,EAAgB,kCAMhBC,EAAsB,SAAAN,GAC1B,KAAMA,aAAiBO,OAASC,MAAMR,EAAMS,WAC1C,MAAO,GAGT,IAAMC,EAAKP,EAASH,EAAMW,eACpBC,EAAKR,EAASJ,EAAMa,WAAa,GACjCC,EAAKV,EAASJ,EAAMS,WACpBM,EAAKX,EAASJ,EAAMgB,YACpBC,EAAKb,EAASJ,EAAMkB,cAC1B,MAAUR,GAAAA,OAAAA,cAAME,EAAhB,KAAAO,OAAsBL,EAAMC,KAAAA,OAAAA,cAAME,IASvBG,EAAoB,SAAApB,GAG/B,OAAa,MAATA,GAA2B,KAAVA,EACZ,GAGLA,aAAiBO,KACZD,EAAoBN,GAIzBK,EAAcgB,KAAKrB,GACdA,EAGFM,EAAoB,IAAIC,KAAKP,KAUzBsB,EAAiB,SAAAtB,GAAK,OAAKA,EAAQ,IAAIO,KAAKP,GAAS,qdClD5DuB,EAAS,SAiBTC,GAhBJC,IAAAA,IAAAA,gBAgBIC,EAAAF,EAfJG,OAAAA,aAASP,EAeLM,EAdJE,IAAAA,MACAC,IAAAA,OACAC,IAAAA,WACAC,IAAAA,OACAC,IAAAA,SACAC,IAAAA,QASIC,EAAAV,EARJW,MAAAA,aAAQb,EAQJY,EAPJE,IAAAA,WACAC,iBACAC,IAAAA,OAKId,EAJJe,kBAIIC,EAAAhB,EAHJiB,aAAAA,aAAe,MAGXD,IAFJE,WAEI,IADDC,EACCC,EAAApB,EAAAqB,GACJC,EAIIC,EAAQA,SAAAC,EAAA,CACVrB,OAAAA,EACAI,OAAAA,EACAC,SAAAA,EACAC,QAAAA,EACAE,MAAAA,EACAN,OAAAA,EACAO,SAAAA,GACGO,IAXHM,IAAAA,MACAC,IAAAA,WAFFC,EAAAL,EAGEM,WAAcC,IAAAA,MAAOC,IAAAA,UAYjBC,EAAeC,eAAY,SAAAxD,GAC/BO,KAAK4B,MAAMnC,GACPiD,EAAMjB,SAA0B,QAAjBS,EAAyBzC,EAAMyD,cAAgBzD,EAAM0D,YACpET,EAAMjB,SAAS,QAClB,IAEH,OACE2B,wBAACC,uBAAD,CAAsBC,YAAaC,EAAnCA,eAAmDC,cAAezB,GAChEqB,wBAAClC,EAADuC,EAAA,CACEpC,MAAO+B,EAAAA,sBAACM,aAAD,CAAYrC,MAAOA,EAAOC,OAAQA,EAAQqB,WAAYA,IAC7DG,SAAUC,IAAaD,GACvBa,UAAW,CACTC,UAAW,CACTrC,WAAY6B,EAAAA,sBAACS,kBAAD,CAAiBC,QAASf,EAAWD,MAAOA,EAAOvB,WAAYA,OAG3EwC,EAAkB3B,GARxB,CASE3C,MAAOiD,EAAMjD,MAAQ,IAAIO,KAAK0C,EAAMjD,OAAS,KAC7CgC,SAAUuB,EACVxB,OAAQ,WAAA,OACNkB,EAAMlB,OACJkB,EAAMjD,MACe,QAAjByC,EACE,IAAIlC,KAAK0C,EAAMjD,OAAOyD,cACtB,IAAIlD,KAAK0C,EAAMjD,OAAO0D,WACxB,YAQhBnC,EAAOgD,aAAe,CACpBrB,YAAY,EACZsB,KAAM,CAAElB,WAAW,EAAOD,OAAO,GACjCf,YAAQmC,EACRtC,MAAO,SAAAnC,GAAK,MAAe,KAAVA,EAAe,KAAOA,IAGzC,IAAMsE,EAAoB,SAAAI,GAAA,SACxBC,aACAC,WACAC,YACAxC,eACAV,SACAmD,gBACAC,eACAC,iBACAC,QACA/B,aACAtB,QACAsD,sBACA5C,SACAkC,OACAW,UACAC,aACAC,cACAlD,QACAN,SACAyD,YACAC,YACAC,kBACAC,UAvBwB7C,EAAA8B,EAAAgB,IC3EpBC,EAAuB,SAA6CnE,GAAA,IAA1CI,IAAAA,MAAOgE,IAAAA,UAAWC,IAAAA,QAASC,IAAAA,SACzDC,EAAsCC,EAAAA,iBAA9BC,IAAAA,KAAMC,IAAAA,UAAWC,IAAAA,SACzBC,EAAAC,EAAwCC,EAAAA,kBAAxC,GAAAF,EAAA,GAAA,IAAqBG,EAArBH,EAAA,GACMI,EAAWC,EAAAA,cACXC,EAAaC,EAAAA,gBAEfC,EAAQ,IAAIC,gBAAgBC,SAASC,QAGnCC,EAAaxD,eAAY,SAAwBkB,GAAA,IAArBuC,IAAAA,QAAOC,QAC/BC,iBACRX,EAASS,EAAMG,OACd,IAGGC,EAAW7D,eACf,SAAc8D,GAAA,IAAXC,IAAAA,KACDhB,GAAgB,SAAAiB,GAAM,OAAAxE,EAAAA,EAAA,GAAUwE,GAAV,GAAA,CAAkBC,MAAOF,EAAKG,aAAa7G,WAAa,EAAG8G,KAAMJ,EAAKG,aAAa/G,qBAE3G,CAAC4F,IAGGqB,EAASC,EAAAA,SACb,WAAA,OACG3B,GACDD,EACG6B,QAAO,SAAAC,GAAM,OAAIA,KACjBC,KAAI,SAAAD,GAAM,MAAK,CACdE,GAAIF,EAAOE,GACXC,MAAwB,iBAAVtG,EAAqBmG,EAAOnG,GAASA,EAAMmG,GACzDI,MAA4B,iBAAdvC,EAAyBmC,EAAOnC,GAAaA,EAAUmC,GACrEK,IAAwB,iBAAZvC,EAAuBkC,EAAOlC,GAAWA,EAAQkC,GAC7DX,IAAKV,EAAW,CAAEP,SAAAA,EAAU8B,GAAIF,EAAOE,GAAII,KAAMvC,UAEvD,CAACI,EAAWD,EAAME,EAAUO,IAG9B,MAAO,CACL4B,YAAa1B,EAAM2B,IAAI,SAAW,IAAIhI,KAAKqG,EAAM4B,IAAI,QAAS5B,EAAM4B,IAAI,SAAW,GAAK,IAAIjI,KAC5FqH,OAAAA,EACAP,SAAAA,EACAL,WAAAA,ICtCEyB,EAAkBC,EAAAA,SAAW,SAAAC,GAAK,MAAK,CAC3CC,UAAW,CACTC,aAAc,CACZC,gBAAiBH,EAAMI,QAAQC,QAAQC,KAAO,cAC9CC,OAAQ,kBACRC,QAAS,gBAEXC,gBAAiB,CACfN,gBAAiBH,EAAMI,QAAQM,UAAUC,MAAQ,eAGnDC,yBAA0B,CACxBC,MAAO,yBAKPC,EAAe,SAAAC,GACnB,IAAMf,EAAQgB,EAAAA,WACRC,EAAoBjE,EAAqB+D,GAG/C,OAFAjB,IAGE9E,wBAACkG,EAAD,QAAA7F,EAAA,CACE8F,QAAS,CAACC,EAAAA,SACVzH,OAAQoH,EAAMpH,OACd0H,YAAY,eACZC,qBAAsBtB,EAAMI,QAAQC,QAAQC,MACxCW,KAKVH,EAAalF,aAAe,CAC1BuB,SAAU,QCnCZ,IAAM2C,EAAkBC,EAAAA,SAAW,SAAAC,GAAK,MAAK,CAC3CC,UAAW,CACTC,aAAc,CACZC,gBAAiBH,EAAMI,QAAQC,QAAQC,KAAO,cAC9CC,OAAQ,kBACRC,QAAS,qBAKTe,EAAW,SAAAR,GACf,IAAME,EAAoBjE,EAAqB+D,GAG/C,OAFAjB,IAEO9E,wBAACkG,EAAD,QAAA7F,EAAA,CAAc8F,QAAS,CAACK,EAAAA,SAAa7H,OAAQoH,EAAMpH,OAAQ0H,YAAY,aAAgBJ,KAGhGM,EAAS3F,aAAe,CACtBuB,SAAU,iDClBM,SAAA4D,GAAK,OAAI/F,wBAACpC,EAADyC,EAAA,CAAQvC,gBAAiB2I,EAAAA,YAAgBV,2BAE9C,SAAAA,GAAK,OAAI/F,wBAACpC,EAADyC,EAAA,CAAQvC,gBAAiB4I,EAAAA,gBAAoBX,0CAD1D,SAAAA,GAAK,OAAI/F,wBAACpC,EAADyC,EAAA,CAAQvC,gBAAiB6I,EAAAA,YAAgBZ"}
|
|
1
|
+
{"mappings":"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","sources":["packages/date-components/src/index.js","packages/date-components/src/Picker.js","packages/date-components/src/utils.js","packages/date-components/src/CalendarList.js","packages/date-components/src/useFullCalendarProps.js","packages/date-components/src/DaysList.js"],"sourcesContent":["import React from 'react';\nimport { DatePicker } from '@mui/x-date-pickers/DatePicker';\nimport { TimePicker } from '@mui/x-date-pickers/TimePicker';\nimport { DateTimePicker } from '@mui/x-date-pickers/DateTimePicker';\nimport Picker from './Picker';\n\nconst DateInput = props => <Picker PickerComponent={DatePicker} {...props} />;\nconst TimeInput = props => <Picker PickerComponent={TimePicker} {...props} />;\nconst DateTimeInput = props => <Picker PickerComponent={DateTimePicker} {...props} />;\n\nexport { DateInput, TimeInput, DateTimeInput };\n\nexport { default as CalendarList } from './CalendarList';\nexport { default as DaysList } from './DaysList';\nexport { default as useFullCalendarProps } from './useFullCalendarProps';\n","import React, { useCallback } from 'react';\nimport { useInput, FieldTitle, InputHelperText } from 'react-admin';\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';\nimport { dateTimeFormatter, dateTimeParser } from './utils';\n\nconst Picker = ({\n PickerComponent,\n format = dateTimeFormatter,\n label,\n source,\n helperText,\n onBlur,\n onChange,\n onFocus,\n parse = dateTimeParser,\n validate,\n defaultValue,\n locale,\n pickerVariant = 'dialog',\n stringFormat = 'ISO',\n allowClear,\n ...rest\n}) => {\n const {\n field,\n isRequired,\n fieldState: { error, isTouched }\n } = useInput({\n format,\n onBlur,\n onChange,\n onFocus,\n parse,\n source,\n validate,\n ...rest\n });\n\n const handleChange = useCallback(value => {\n Date.parse(value)\n ? field.onChange(stringFormat === 'ISO' ? value.toISOString() : value.toString())\n : field.onChange(null);\n }, []);\n\n return (\n <LocalizationProvider dateAdapter={AdapterDateFns} adapterLocale={locale}>\n <PickerComponent\n label={<FieldTitle label={label} source={source} isRequired={isRequired} />}\n error={!!(isTouched && error)}\n slotProps={{\n textField: {\n helperText: <InputHelperText touched={isTouched} error={error} helperText={helperText} />\n }\n }}\n {...sanitizeRestProps(rest)}\n value={field.value ? new Date(field.value) : null}\n onChange={handleChange}\n onBlur={() =>\n field.onBlur(\n field.value\n ? stringFormat === 'ISO'\n ? new Date(field.value).toISOString()\n : new Date(field.value).toString()\n : null\n )\n }\n />\n </LocalizationProvider>\n );\n};\n\nPicker.defaultProps = {\n isRequired: false,\n meta: { isTouched: false, error: false },\n locale: undefined, // Default to english\n parse: value => (value === '' ? null : value) // Avoid saving an empty string in the dataset\n};\n\nconst sanitizeRestProps = ({\n allowEmpty,\n alwaysOn,\n component,\n defaultValue,\n format,\n formClassName,\n initialValue,\n initializeForm,\n input,\n isRequired,\n label,\n limitChoicesToValue,\n locale,\n meta,\n options,\n optionText,\n optionValue,\n parse,\n source,\n textAlign,\n translate,\n translateChoice,\n labelTime,\n ...rest\n}) => rest;\n\nexport default Picker;\n","const leftPad =\n (nb = 2) =>\n value =>\n ('0'.repeat(nb) + value).slice(-nb);\nconst leftPad4 = leftPad(4);\nconst leftPad2 = leftPad(2);\n\n// yyyy-MM-ddThh:mm\nconst dateTimeRegex = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}$/;\n\n/**\n * @param {Date} value value to convert\n * @returns {string} A standardized datetime (yyyy-MM-ddThh:mm), to be passed to an <input type=\"datetime-local\" />\n */\nconst convertDateToString = value => {\n if (!(value instanceof Date) || isNaN(value.getDate())) {\n return '';\n }\n\n const yy = leftPad4(value.getFullYear());\n const MM = leftPad2(value.getMonth() + 1);\n const dd = leftPad2(value.getDate());\n const hh = leftPad2(value.getHours());\n const mm = leftPad2(value.getMinutes());\n return `${yy}-${MM}-${dd}T${hh}:${mm}`;\n};\n\n/**\n * Converts a date from the Redux store, with timezone, to a date string\n * without timezone for use in an <input type=\"datetime-local\" />.\n * @param {Date | string} value date string or object\n */\nexport const dateTimeFormatter = value => {\n // null, undefined and empty string values should not go through convertDateToString\n // otherwise, it returns undefined and will make the input an uncontrolled one.\n if (value == null || value === '') {\n return '';\n }\n\n if (value instanceof Date) {\n return convertDateToString(value);\n }\n\n // valid dates should not be converted\n if (dateTimeRegex.test(value)) {\n return value;\n }\n\n return convertDateToString(new Date(value));\n};\n\n/**\n * Converts a datetime string without timezone to a date object\n * with timezone, using the browser timezone.\n * @param {string} value Date string, formatted as yyyy-MM-ddThh:mm\n * @returns {Date}\n */\nexport const dateTimeParser = value => (value ? new Date(value) : '');\n","import React from 'react';\nimport FullCalendar from '@fullcalendar/react';\nimport dayGridPlugin from '@fullcalendar/daygrid';\nimport { useTheme } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport useFullCalendarProps from './useFullCalendarProps';\n\nconst useGlobalStyles = makeStyles(theme => ({\n '@global': {\n '.fc-button': {\n backgroundColor: `${theme.palette.primary.main} !important`,\n border: 'none !important',\n opacity: '1 !important'\n },\n '.fc-day-today': {\n backgroundColor: `${theme.palette.secondary.light} !important`\n },\n // Overwrite violet color of links\n 'a.fc-daygrid-dot-event': {\n color: 'black !important'\n }\n }\n}));\n\nconst CalendarList = props => {\n const theme = useTheme();\n const fullCalendarProps = useFullCalendarProps(props);\n useGlobalStyles();\n\n return (\n <FullCalendar\n plugins={[dayGridPlugin]}\n locale={props.locale}\n initialView=\"dayGridMonth\"\n eventBackgroundColor={theme.palette.primary.main}\n {...fullCalendarProps}\n />\n );\n};\n\nCalendarList.defaultProps = {\n linkType: 'edit'\n};\n\nexport default CalendarList;\n","import React, { useMemo, useCallback } from 'react';\nimport { useSearchParams, useNavigate } from 'react-router-dom';\nimport { useListContext, useCreatePath } from 'react-admin';\n\nconst useFullCalendarProps = ({ label, startDate, endDate, linkType }) => {\n const { data, isLoading, resource } = useListContext();\n const [searchParams, setSearchParams] = useSearchParams();\n const navigate = useNavigate();\n const createPath = useCreatePath();\n\n const query = new URLSearchParams(location.search);\n\n // Bypass the link in order to use React-Router\n const eventClick = useCallback(({ event, jsEvent }) => {\n jsEvent.preventDefault();\n navigate(event.url);\n }, []);\n\n // Change the query string when month change\n const datesSet = useCallback(\n ({ view }) => {\n setSearchParams(params => ({\n ...params,\n month: view.currentStart.getMonth() + 1,\n year: view.currentStart.getFullYear()\n }));\n },\n [setSearchParams]\n );\n\n const events = useMemo(\n () =>\n !isLoading &&\n data\n .filter(record => record)\n .map(record => ({\n id: record.id,\n title: typeof label === 'string' ? record[label] : label(record),\n start: typeof startDate === 'string' ? record[startDate] : startDate(record),\n end: typeof endDate === 'string' ? record[endDate] : endDate(record),\n url: createPath({ resource, id: record.id, type: linkType })\n })),\n [isLoading, data, resource, createPath]\n );\n\n return {\n initialDate: query.has('month') ? new Date(query.get('year'), query.get('month') - 1) : new Date(),\n events,\n datesSet,\n eventClick\n };\n};\n\nexport default useFullCalendarProps;\n","import React from 'react';\nimport FullCalendar from '@fullcalendar/react';\nimport listPlugin from '@fullcalendar/list';\nimport makeStyles from '@mui/styles/makeStyles';\nimport useFullCalendarProps from './useFullCalendarProps';\n\nconst useGlobalStyles = makeStyles(theme => ({\n '@global': {\n '.fc-button': {\n backgroundColor: `${theme.palette.primary.main} !important`,\n border: 'none !important',\n opacity: '1 !important'\n }\n }\n}));\n\nconst DaysList = props => {\n const fullCalendarProps = useFullCalendarProps(props);\n useGlobalStyles();\n\n return <FullCalendar plugins={[listPlugin]} locale={props.locale} initialView=\"listMonth\" {...fullCalendarProps} />;\n};\n\nDaysList.defaultProps = {\n linkType: 'edit'\n};\n\nexport default DaysList;\n"],"names":[],"version":3,"file":"index.cjs.js.map"}
|
package/dist/index.es.js
CHANGED
|
@@ -1,2 +1,249 @@
|
|
|
1
|
-
import
|
|
1
|
+
import {jsx as $1h8NM$jsx} from "react/jsx-runtime";
|
|
2
|
+
import {useCallback as $1h8NM$useCallback, useMemo as $1h8NM$useMemo} from "react";
|
|
3
|
+
import {DatePicker as $1h8NM$DatePicker} from "@mui/x-date-pickers/DatePicker";
|
|
4
|
+
import {TimePicker as $1h8NM$TimePicker} from "@mui/x-date-pickers/TimePicker";
|
|
5
|
+
import {DateTimePicker as $1h8NM$DateTimePicker} from "@mui/x-date-pickers/DateTimePicker";
|
|
6
|
+
import {useInput as $1h8NM$useInput, FieldTitle as $1h8NM$FieldTitle, InputHelperText as $1h8NM$InputHelperText, useListContext as $1h8NM$useListContext, useCreatePath as $1h8NM$useCreatePath} from "react-admin";
|
|
7
|
+
import {LocalizationProvider as $1h8NM$LocalizationProvider} from "@mui/x-date-pickers/LocalizationProvider";
|
|
8
|
+
import {AdapterDateFns as $1h8NM$AdapterDateFns} from "@mui/x-date-pickers/AdapterDateFns";
|
|
9
|
+
import $1h8NM$fullcalendarreact from "@fullcalendar/react";
|
|
10
|
+
import $1h8NM$fullcalendardaygrid from "@fullcalendar/daygrid";
|
|
11
|
+
import {useTheme as $1h8NM$useTheme} from "@mui/material";
|
|
12
|
+
import $1h8NM$muistylesmakeStyles from "@mui/styles/makeStyles";
|
|
13
|
+
import {useSearchParams as $1h8NM$useSearchParams, useNavigate as $1h8NM$useNavigate} from "react-router-dom";
|
|
14
|
+
import $1h8NM$fullcalendarlist from "@fullcalendar/list";
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
const $85cccff3a4734cfe$var$leftPad = (nb = 2)=>(value)=>("0".repeat(nb) + value).slice(-nb);
|
|
27
|
+
const $85cccff3a4734cfe$var$leftPad4 = $85cccff3a4734cfe$var$leftPad(4);
|
|
28
|
+
const $85cccff3a4734cfe$var$leftPad2 = $85cccff3a4734cfe$var$leftPad(2);
|
|
29
|
+
// yyyy-MM-ddThh:mm
|
|
30
|
+
const $85cccff3a4734cfe$var$dateTimeRegex = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}$/;
|
|
31
|
+
/**
|
|
32
|
+
* @param {Date} value value to convert
|
|
33
|
+
* @returns {string} A standardized datetime (yyyy-MM-ddThh:mm), to be passed to an <input type="datetime-local" />
|
|
34
|
+
*/ const $85cccff3a4734cfe$var$convertDateToString = (value)=>{
|
|
35
|
+
if (!(value instanceof Date) || isNaN(value.getDate())) return "";
|
|
36
|
+
const yy = $85cccff3a4734cfe$var$leftPad4(value.getFullYear());
|
|
37
|
+
const MM = $85cccff3a4734cfe$var$leftPad2(value.getMonth() + 1);
|
|
38
|
+
const dd = $85cccff3a4734cfe$var$leftPad2(value.getDate());
|
|
39
|
+
const hh = $85cccff3a4734cfe$var$leftPad2(value.getHours());
|
|
40
|
+
const mm = $85cccff3a4734cfe$var$leftPad2(value.getMinutes());
|
|
41
|
+
return `${yy}-${MM}-${dd}T${hh}:${mm}`;
|
|
42
|
+
};
|
|
43
|
+
const $85cccff3a4734cfe$export$59113f23fb667b84 = (value)=>{
|
|
44
|
+
// null, undefined and empty string values should not go through convertDateToString
|
|
45
|
+
// otherwise, it returns undefined and will make the input an uncontrolled one.
|
|
46
|
+
if (value == null || value === "") return "";
|
|
47
|
+
if (value instanceof Date) return $85cccff3a4734cfe$var$convertDateToString(value);
|
|
48
|
+
// valid dates should not be converted
|
|
49
|
+
if ($85cccff3a4734cfe$var$dateTimeRegex.test(value)) return value;
|
|
50
|
+
return $85cccff3a4734cfe$var$convertDateToString(new Date(value));
|
|
51
|
+
};
|
|
52
|
+
const $85cccff3a4734cfe$export$9a692607b62bf94e = (value)=>value ? new Date(value) : "";
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
const $23b8ae46df88f164$var$Picker = ({ PickerComponent: PickerComponent, format: format = (0, $85cccff3a4734cfe$export$59113f23fb667b84), label: label, source: source, helperText: helperText, onBlur: onBlur, onChange: onChange, onFocus: onFocus, parse: parse = (0, $85cccff3a4734cfe$export$9a692607b62bf94e), validate: validate, defaultValue: defaultValue, locale: locale, pickerVariant: pickerVariant = "dialog", stringFormat: stringFormat = "ISO", allowClear: allowClear, ...rest })=>{
|
|
56
|
+
const { field: field, isRequired: isRequired, fieldState: { error: error, isTouched: isTouched } } = (0, $1h8NM$useInput)({
|
|
57
|
+
format: format,
|
|
58
|
+
onBlur: onBlur,
|
|
59
|
+
onChange: onChange,
|
|
60
|
+
onFocus: onFocus,
|
|
61
|
+
parse: parse,
|
|
62
|
+
source: source,
|
|
63
|
+
validate: validate,
|
|
64
|
+
...rest
|
|
65
|
+
});
|
|
66
|
+
const handleChange = (0, $1h8NM$useCallback)((value)=>{
|
|
67
|
+
Date.parse(value) ? field.onChange(stringFormat === "ISO" ? value.toISOString() : value.toString()) : field.onChange(null);
|
|
68
|
+
}, []);
|
|
69
|
+
return /*#__PURE__*/ (0, $1h8NM$jsx)((0, $1h8NM$LocalizationProvider), {
|
|
70
|
+
dateAdapter: (0, $1h8NM$AdapterDateFns),
|
|
71
|
+
adapterLocale: locale,
|
|
72
|
+
children: /*#__PURE__*/ (0, $1h8NM$jsx)(PickerComponent, {
|
|
73
|
+
label: /*#__PURE__*/ (0, $1h8NM$jsx)((0, $1h8NM$FieldTitle), {
|
|
74
|
+
label: label,
|
|
75
|
+
source: source,
|
|
76
|
+
isRequired: isRequired
|
|
77
|
+
}),
|
|
78
|
+
error: !!(isTouched && error),
|
|
79
|
+
slotProps: {
|
|
80
|
+
textField: {
|
|
81
|
+
helperText: /*#__PURE__*/ (0, $1h8NM$jsx)((0, $1h8NM$InputHelperText), {
|
|
82
|
+
touched: isTouched,
|
|
83
|
+
error: error,
|
|
84
|
+
helperText: helperText
|
|
85
|
+
})
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
...$23b8ae46df88f164$var$sanitizeRestProps(rest),
|
|
89
|
+
value: field.value ? new Date(field.value) : null,
|
|
90
|
+
onChange: handleChange,
|
|
91
|
+
onBlur: ()=>field.onBlur(field.value ? stringFormat === "ISO" ? new Date(field.value).toISOString() : new Date(field.value).toString() : null)
|
|
92
|
+
})
|
|
93
|
+
});
|
|
94
|
+
};
|
|
95
|
+
$23b8ae46df88f164$var$Picker.defaultProps = {
|
|
96
|
+
isRequired: false,
|
|
97
|
+
meta: {
|
|
98
|
+
isTouched: false,
|
|
99
|
+
error: false
|
|
100
|
+
},
|
|
101
|
+
locale: undefined,
|
|
102
|
+
parse: (value)=>value === "" ? null : value // Avoid saving an empty string in the dataset
|
|
103
|
+
};
|
|
104
|
+
const $23b8ae46df88f164$var$sanitizeRestProps = ({ allowEmpty: allowEmpty, alwaysOn: alwaysOn, component: component, defaultValue: defaultValue, format: format, formClassName: formClassName, initialValue: initialValue, initializeForm: initializeForm, input: input, isRequired: isRequired, label: label, limitChoicesToValue: limitChoicesToValue, locale: locale, meta: meta, options: options, optionText: optionText, optionValue: optionValue, parse: parse, source: source, textAlign: textAlign, translate: translate, translateChoice: translateChoice, labelTime: labelTime, ...rest })=>rest;
|
|
105
|
+
var $23b8ae46df88f164$export$2e2bcd8739ae039 = $23b8ae46df88f164$var$Picker;
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
const $37245c02f9b1b006$var$useFullCalendarProps = ({ label: label, startDate: startDate, endDate: endDate, linkType: linkType })=>{
|
|
118
|
+
const { data: data, isLoading: isLoading, resource: resource } = (0, $1h8NM$useListContext)();
|
|
119
|
+
const [searchParams, setSearchParams] = (0, $1h8NM$useSearchParams)();
|
|
120
|
+
const navigate = (0, $1h8NM$useNavigate)();
|
|
121
|
+
const createPath = (0, $1h8NM$useCreatePath)();
|
|
122
|
+
const query = new URLSearchParams(location.search);
|
|
123
|
+
// Bypass the link in order to use React-Router
|
|
124
|
+
const eventClick = (0, $1h8NM$useCallback)(({ event: event, jsEvent: jsEvent })=>{
|
|
125
|
+
jsEvent.preventDefault();
|
|
126
|
+
navigate(event.url);
|
|
127
|
+
}, []);
|
|
128
|
+
// Change the query string when month change
|
|
129
|
+
const datesSet = (0, $1h8NM$useCallback)(({ view: view })=>{
|
|
130
|
+
setSearchParams((params)=>({
|
|
131
|
+
...params,
|
|
132
|
+
month: view.currentStart.getMonth() + 1,
|
|
133
|
+
year: view.currentStart.getFullYear()
|
|
134
|
+
}));
|
|
135
|
+
}, [
|
|
136
|
+
setSearchParams
|
|
137
|
+
]);
|
|
138
|
+
const events = (0, $1h8NM$useMemo)(()=>!isLoading && data.filter((record)=>record).map((record)=>({
|
|
139
|
+
id: record.id,
|
|
140
|
+
title: typeof label === "string" ? record[label] : label(record),
|
|
141
|
+
start: typeof startDate === "string" ? record[startDate] : startDate(record),
|
|
142
|
+
end: typeof endDate === "string" ? record[endDate] : endDate(record),
|
|
143
|
+
url: createPath({
|
|
144
|
+
resource: resource,
|
|
145
|
+
id: record.id,
|
|
146
|
+
type: linkType
|
|
147
|
+
})
|
|
148
|
+
})), [
|
|
149
|
+
isLoading,
|
|
150
|
+
data,
|
|
151
|
+
resource,
|
|
152
|
+
createPath
|
|
153
|
+
]);
|
|
154
|
+
return {
|
|
155
|
+
initialDate: query.has("month") ? new Date(query.get("year"), query.get("month") - 1) : new Date(),
|
|
156
|
+
events: events,
|
|
157
|
+
datesSet: datesSet,
|
|
158
|
+
eventClick: eventClick
|
|
159
|
+
};
|
|
160
|
+
};
|
|
161
|
+
var $37245c02f9b1b006$export$2e2bcd8739ae039 = $37245c02f9b1b006$var$useFullCalendarProps;
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
const $abbcc02f55461290$var$useGlobalStyles = (0, $1h8NM$muistylesmakeStyles)((theme)=>({
|
|
165
|
+
"@global": {
|
|
166
|
+
".fc-button": {
|
|
167
|
+
backgroundColor: `${theme.palette.primary.main} !important`,
|
|
168
|
+
border: "none !important",
|
|
169
|
+
opacity: "1 !important"
|
|
170
|
+
},
|
|
171
|
+
".fc-day-today": {
|
|
172
|
+
backgroundColor: `${theme.palette.secondary.light} !important`
|
|
173
|
+
},
|
|
174
|
+
// Overwrite violet color of links
|
|
175
|
+
"a.fc-daygrid-dot-event": {
|
|
176
|
+
color: "black !important"
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}));
|
|
180
|
+
const $abbcc02f55461290$var$CalendarList = (props)=>{
|
|
181
|
+
const theme = (0, $1h8NM$useTheme)();
|
|
182
|
+
const fullCalendarProps = (0, $37245c02f9b1b006$export$2e2bcd8739ae039)(props);
|
|
183
|
+
$abbcc02f55461290$var$useGlobalStyles();
|
|
184
|
+
return /*#__PURE__*/ (0, $1h8NM$jsx)((0, $1h8NM$fullcalendarreact), {
|
|
185
|
+
plugins: [
|
|
186
|
+
(0, $1h8NM$fullcalendardaygrid)
|
|
187
|
+
],
|
|
188
|
+
locale: props.locale,
|
|
189
|
+
initialView: "dayGridMonth",
|
|
190
|
+
eventBackgroundColor: theme.palette.primary.main,
|
|
191
|
+
...fullCalendarProps
|
|
192
|
+
});
|
|
193
|
+
};
|
|
194
|
+
$abbcc02f55461290$var$CalendarList.defaultProps = {
|
|
195
|
+
linkType: "edit"
|
|
196
|
+
};
|
|
197
|
+
var $abbcc02f55461290$export$2e2bcd8739ae039 = $abbcc02f55461290$var$CalendarList;
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
const $69d9f850452774a2$var$useGlobalStyles = (0, $1h8NM$muistylesmakeStyles)((theme)=>({
|
|
207
|
+
"@global": {
|
|
208
|
+
".fc-button": {
|
|
209
|
+
backgroundColor: `${theme.palette.primary.main} !important`,
|
|
210
|
+
border: "none !important",
|
|
211
|
+
opacity: "1 !important"
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}));
|
|
215
|
+
const $69d9f850452774a2$var$DaysList = (props)=>{
|
|
216
|
+
const fullCalendarProps = (0, $37245c02f9b1b006$export$2e2bcd8739ae039)(props);
|
|
217
|
+
$69d9f850452774a2$var$useGlobalStyles();
|
|
218
|
+
return /*#__PURE__*/ (0, $1h8NM$jsx)((0, $1h8NM$fullcalendarreact), {
|
|
219
|
+
plugins: [
|
|
220
|
+
(0, $1h8NM$fullcalendarlist)
|
|
221
|
+
],
|
|
222
|
+
locale: props.locale,
|
|
223
|
+
initialView: "listMonth",
|
|
224
|
+
...fullCalendarProps
|
|
225
|
+
});
|
|
226
|
+
};
|
|
227
|
+
$69d9f850452774a2$var$DaysList.defaultProps = {
|
|
228
|
+
linkType: "edit"
|
|
229
|
+
};
|
|
230
|
+
var $69d9f850452774a2$export$2e2bcd8739ae039 = $69d9f850452774a2$var$DaysList;
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
const $92007338c717b459$export$7edc06cf1783b30f = (props)=>/*#__PURE__*/ (0, $1h8NM$jsx)((0, $23b8ae46df88f164$export$2e2bcd8739ae039), {
|
|
235
|
+
PickerComponent: (0, $1h8NM$DatePicker),
|
|
236
|
+
...props
|
|
237
|
+
});
|
|
238
|
+
const $92007338c717b459$export$a1af6f79df847fac = (props)=>/*#__PURE__*/ (0, $1h8NM$jsx)((0, $23b8ae46df88f164$export$2e2bcd8739ae039), {
|
|
239
|
+
PickerComponent: (0, $1h8NM$TimePicker),
|
|
240
|
+
...props
|
|
241
|
+
});
|
|
242
|
+
const $92007338c717b459$export$183478aa40b5df1 = (props)=>/*#__PURE__*/ (0, $1h8NM$jsx)((0, $23b8ae46df88f164$export$2e2bcd8739ae039), {
|
|
243
|
+
PickerComponent: (0, $1h8NM$DateTimePicker),
|
|
244
|
+
...props
|
|
245
|
+
});
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
export {$92007338c717b459$export$7edc06cf1783b30f as DateInput, $92007338c717b459$export$a1af6f79df847fac as TimeInput, $92007338c717b459$export$183478aa40b5df1 as DateTimeInput, $abbcc02f55461290$export$2e2bcd8739ae039 as CalendarList, $69d9f850452774a2$export$2e2bcd8739ae039 as DaysList, $37245c02f9b1b006$export$2e2bcd8739ae039 as useFullCalendarProps};
|
|
2
249
|
//# sourceMappingURL=index.es.js.map
|
package/dist/index.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es.js","sources":["../src/utils.js","../src/Picker.js","../src/useFullCalendarProps.js","../src/CalendarList.js","../src/DaysList.js","../src/index.js"],"sourcesContent":["const leftPad = (nb = 2) => value => ('0'.repeat(nb) + value).slice(-nb);\nconst leftPad4 = leftPad(4);\nconst leftPad2 = leftPad(2);\n\n// yyyy-MM-ddThh:mm\nconst dateTimeRegex = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}$/;\n\n/**\n * @param {Date} value value to convert\n * @returns {String} A standardized datetime (yyyy-MM-ddThh:mm), to be passed to an <input type=\"datetime-local\" />\n */\nconst convertDateToString = value => {\n if (!(value instanceof Date) || isNaN(value.getDate())) {\n return '';\n }\n\n const yy = leftPad4(value.getFullYear());\n const MM = leftPad2(value.getMonth() + 1);\n const dd = leftPad2(value.getDate());\n const hh = leftPad2(value.getHours());\n const mm = leftPad2(value.getMinutes());\n return `${yy}-${MM}-${dd}T${hh}:${mm}`;\n};\n\n/**\n * Converts a date from the Redux store, with timezone, to a date string\n * without timezone for use in an <input type=\"datetime-local\" />.\n *\n * @param {Date | String} value date string or object\n */\nexport const dateTimeFormatter = value => {\n // null, undefined and empty string values should not go through convertDateToString\n // otherwise, it returns undefined and will make the input an uncontrolled one.\n if (value == null || value === '') {\n return '';\n }\n\n if (value instanceof Date) {\n return convertDateToString(value);\n }\n\n // valid dates should not be converted\n if (dateTimeRegex.test(value)) {\n return value;\n }\n\n return convertDateToString(new Date(value));\n};\n\n/**\n * Converts a datetime string without timezone to a date object\n * with timezone, using the browser timezone.\n *\n * @param {String} value Date string, formatted as yyyy-MM-ddThh:mm\n * @return {Date}\n */\nexport const dateTimeParser = value => (value ? new Date(value) : '');\n","import React, { useCallback } from 'react';\nimport { useInput, FieldTitle, InputHelperText } from 'react-admin';\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';\nimport { dateTimeFormatter, dateTimeParser } from './utils';\n\nconst Picker = ({\n PickerComponent,\n format = dateTimeFormatter,\n label,\n source,\n helperText,\n onBlur,\n onChange,\n onFocus,\n parse = dateTimeParser,\n validate,\n defaultValue,\n locale,\n pickerVariant = 'dialog',\n stringFormat = 'ISO',\n allowClear,\n ...rest\n}) => {\n const {\n field,\n isRequired,\n fieldState: { error, isTouched }\n } = useInput({\n format,\n onBlur,\n onChange,\n onFocus,\n parse,\n source,\n validate,\n ...rest\n });\n\n const handleChange = useCallback(value => {\n Date.parse(value)\n ? field.onChange(stringFormat === 'ISO' ? value.toISOString() : value.toString())\n : field.onChange(null);\n }, []);\n\n return (\n <LocalizationProvider dateAdapter={AdapterDateFns} adapterLocale={locale}>\n <PickerComponent\n label={<FieldTitle label={label} source={source} isRequired={isRequired} />}\n error={!!(isTouched && error)}\n slotProps={{\n textField: {\n helperText: <InputHelperText touched={isTouched} error={error} helperText={helperText} />\n },\n }}\n {...sanitizeRestProps(rest)}\n value={field.value ? new Date(field.value) : null}\n onChange={handleChange}\n onBlur={() =>\n field.onBlur(\n field.value\n ? stringFormat === 'ISO'\n ? new Date(field.value).toISOString()\n : new Date(field.value).toString()\n : null\n )\n }\n />\n </LocalizationProvider>\n );\n};\n\nPicker.defaultProps = {\n isRequired: false,\n meta: { isTouched: false, error: false },\n locale: undefined, // Default to english\n parse: value => (value === '' ? null : value) // Avoid saving an empty string in the dataset\n};\n\nconst sanitizeRestProps = ({\n allowEmpty,\n alwaysOn,\n component,\n defaultValue,\n format,\n formClassName,\n initialValue,\n initializeForm,\n input,\n isRequired,\n label,\n limitChoicesToValue,\n locale,\n meta,\n options,\n optionText,\n optionValue,\n parse,\n source,\n textAlign,\n translate,\n translateChoice,\n labelTime,\n ...rest\n}) => rest;\n\n\nexport default Picker;\n","import React, { useMemo, useCallback } from 'react';\nimport { useSearchParams, useNavigate } from 'react-router-dom';\nimport { useListContext, useCreatePath } from 'react-admin';\n\nconst useFullCalendarProps = ({ label, startDate, endDate, linkType }) => {\n const { data, isLoading, resource } = useListContext();\n const [searchParams, setSearchParams] = useSearchParams();\n const navigate = useNavigate();\n const createPath = useCreatePath();\n\n let query = new URLSearchParams(location.search);\n\n // Bypass the link in order to use React-Router\n const eventClick = useCallback(({ event, jsEvent }) => {\n jsEvent.preventDefault();\n navigate(event.url);\n }, []);\n\n // Change the query string when month change\n const datesSet = useCallback(\n ({ view }) => {\n setSearchParams(params => ({ ...params, month: view.currentStart.getMonth() + 1, year: view.currentStart.getFullYear() }));\n },\n [setSearchParams]\n );\n\n const events = useMemo(\n () =>\n !isLoading &&\n data\n .filter(record => record)\n .map(record => ({\n id: record.id,\n title: typeof label === 'string' ? record[label] : label(record),\n start: typeof startDate === 'string' ? record[startDate] : startDate(record),\n end: typeof endDate === 'string' ? record[endDate] : endDate(record),\n url: createPath({ resource, id: record.id, type: linkType })\n })),\n [isLoading, data, resource, createPath]\n );\n\n return {\n initialDate: query.has('month') ? new Date(query.get('year'), query.get('month') - 1) : new Date(),\n events,\n datesSet,\n eventClick\n };\n};\n\nexport default useFullCalendarProps;\n","import React from 'react';\nimport FullCalendar from '@fullcalendar/react';\nimport dayGridPlugin from '@fullcalendar/daygrid';\nimport { useTheme } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport useFullCalendarProps from './useFullCalendarProps';\n\nconst useGlobalStyles = makeStyles(theme => ({\n '@global': {\n '.fc-button': {\n backgroundColor: theme.palette.primary.main + ' !important',\n border: 'none !important',\n opacity: '1 !important'\n },\n '.fc-day-today': {\n backgroundColor: theme.palette.secondary.light + ' !important'\n },\n // Overwrite violet color of links\n 'a.fc-daygrid-dot-event': {\n color: 'black !important'\n }\n }\n}));\n\nconst CalendarList = props => {\n const theme = useTheme();\n const fullCalendarProps = useFullCalendarProps(props);\n useGlobalStyles();\n\n return (\n <FullCalendar\n plugins={[dayGridPlugin]}\n locale={props.locale}\n initialView=\"dayGridMonth\"\n eventBackgroundColor={theme.palette.primary.main}\n {...fullCalendarProps}\n />\n );\n};\n\nCalendarList.defaultProps = {\n linkType: 'edit'\n};\n\nexport default CalendarList;\n","import React from 'react';\nimport FullCalendar from '@fullcalendar/react';\nimport listPlugin from '@fullcalendar/list';\nimport makeStyles from '@mui/styles/makeStyles';\nimport useFullCalendarProps from './useFullCalendarProps';\n\nconst useGlobalStyles = makeStyles(theme => ({\n '@global': {\n '.fc-button': {\n backgroundColor: theme.palette.primary.main + ' !important',\n border: 'none !important',\n opacity: '1 !important'\n }\n }\n}));\n\nconst DaysList = props => {\n const fullCalendarProps = useFullCalendarProps(props);\n useGlobalStyles();\n\n return <FullCalendar plugins={[listPlugin]} locale={props.locale} initialView=\"listMonth\" {...fullCalendarProps} />;\n};\n\nDaysList.defaultProps = {\n linkType: 'edit'\n};\n\nexport default DaysList;\n","import React from 'react';\nimport Picker from './Picker';\nimport { DatePicker } from '@mui/x-date-pickers/DatePicker';\nimport { TimePicker } from '@mui/x-date-pickers/TimePicker';\nimport { DateTimePicker } from '@mui/x-date-pickers/DateTimePicker';\n\nconst DateInput = props => <Picker PickerComponent={DatePicker} {...props} />;\nconst TimeInput = props => <Picker PickerComponent={TimePicker} {...props} />;\nconst DateTimeInput = props => <Picker PickerComponent={DateTimePicker} {...props} />;\n\nexport { DateInput, TimeInput, DateTimeInput };\n\nexport { default as CalendarList } from './CalendarList';\nexport { default as DaysList } from './DaysList';\nexport { default as useFullCalendarProps } from './useFullCalendarProps';\n"],"names":["leftPad","nb","value","repeat","slice","leftPad4","leftPad2","dateTimeRegex","convertDateToString","Date","isNaN","getDate","yy","getFullYear","MM","getMonth","dd","hh","getHours","mm","getMinutes","concat","dateTimeFormatter","test","dateTimeParser","Picker","_ref","PickerComponent","_ref$format","format","label","source","helperText","onBlur","onChange","onFocus","_ref$parse","parse","validate","defaultValue","locale","pickerVariant","_ref$stringFormat","stringFormat","allowClear","rest","_objectWithoutProperties","_excluded","_useInput","useInput","_objectSpread","field","isRequired","_useInput$fieldState","fieldState","error","isTouched","handleChange","useCallback","toISOString","toString","React","LocalizationProvider","dateAdapter","AdapterDateFns","adapterLocale","_extends","FieldTitle","slotProps","textField","InputHelperText","touched","sanitizeRestProps","defaultProps","meta","undefined","_ref2","allowEmpty","alwaysOn","component","formClassName","initialValue","initializeForm","input","limitChoicesToValue","options","optionText","optionValue","textAlign","translate","translateChoice","labelTime","_excluded2","useFullCalendarProps","startDate","endDate","linkType","_useListContext","useListContext","data","isLoading","resource","_useSearchParams2","_slicedToArray","useSearchParams","setSearchParams","navigate","useNavigate","createPath","useCreatePath","query","URLSearchParams","location","search","eventClick","event","jsEvent","preventDefault","url","datesSet","_ref3","view","params","month","currentStart","year","events","useMemo","filter","record","map","id","title","start","end","type","initialDate","has","get","useGlobalStyles","makeStyles","theme","@global",".fc-button","backgroundColor","palette","primary","main","border","opacity",".fc-day-today","secondary","light","a.fc-daygrid-dot-event","color","CalendarList","props","useTheme","fullCalendarProps","FullCalendar","plugins","dayGridPlugin","initialView","eventBackgroundColor","DaysList","listPlugin","DateInput","DatePicker","TimeInput","TimePicker","DateTimeInput","DateTimePicker"],"mappings":"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"}
|
|
1
|
+
{"mappings":"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","sources":["packages/date-components/src/index.js","packages/date-components/src/Picker.js","packages/date-components/src/utils.js","packages/date-components/src/CalendarList.js","packages/date-components/src/useFullCalendarProps.js","packages/date-components/src/DaysList.js"],"sourcesContent":["import React from 'react';\nimport { DatePicker } from '@mui/x-date-pickers/DatePicker';\nimport { TimePicker } from '@mui/x-date-pickers/TimePicker';\nimport { DateTimePicker } from '@mui/x-date-pickers/DateTimePicker';\nimport Picker from './Picker';\n\nconst DateInput = props => <Picker PickerComponent={DatePicker} {...props} />;\nconst TimeInput = props => <Picker PickerComponent={TimePicker} {...props} />;\nconst DateTimeInput = props => <Picker PickerComponent={DateTimePicker} {...props} />;\n\nexport { DateInput, TimeInput, DateTimeInput };\n\nexport { default as CalendarList } from './CalendarList';\nexport { default as DaysList } from './DaysList';\nexport { default as useFullCalendarProps } from './useFullCalendarProps';\n","import React, { useCallback } from 'react';\nimport { useInput, FieldTitle, InputHelperText } from 'react-admin';\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';\nimport { dateTimeFormatter, dateTimeParser } from './utils';\n\nconst Picker = ({\n PickerComponent,\n format = dateTimeFormatter,\n label,\n source,\n helperText,\n onBlur,\n onChange,\n onFocus,\n parse = dateTimeParser,\n validate,\n defaultValue,\n locale,\n pickerVariant = 'dialog',\n stringFormat = 'ISO',\n allowClear,\n ...rest\n}) => {\n const {\n field,\n isRequired,\n fieldState: { error, isTouched }\n } = useInput({\n format,\n onBlur,\n onChange,\n onFocus,\n parse,\n source,\n validate,\n ...rest\n });\n\n const handleChange = useCallback(value => {\n Date.parse(value)\n ? field.onChange(stringFormat === 'ISO' ? value.toISOString() : value.toString())\n : field.onChange(null);\n }, []);\n\n return (\n <LocalizationProvider dateAdapter={AdapterDateFns} adapterLocale={locale}>\n <PickerComponent\n label={<FieldTitle label={label} source={source} isRequired={isRequired} />}\n error={!!(isTouched && error)}\n slotProps={{\n textField: {\n helperText: <InputHelperText touched={isTouched} error={error} helperText={helperText} />\n }\n }}\n {...sanitizeRestProps(rest)}\n value={field.value ? new Date(field.value) : null}\n onChange={handleChange}\n onBlur={() =>\n field.onBlur(\n field.value\n ? stringFormat === 'ISO'\n ? new Date(field.value).toISOString()\n : new Date(field.value).toString()\n : null\n )\n }\n />\n </LocalizationProvider>\n );\n};\n\nPicker.defaultProps = {\n isRequired: false,\n meta: { isTouched: false, error: false },\n locale: undefined, // Default to english\n parse: value => (value === '' ? null : value) // Avoid saving an empty string in the dataset\n};\n\nconst sanitizeRestProps = ({\n allowEmpty,\n alwaysOn,\n component,\n defaultValue,\n format,\n formClassName,\n initialValue,\n initializeForm,\n input,\n isRequired,\n label,\n limitChoicesToValue,\n locale,\n meta,\n options,\n optionText,\n optionValue,\n parse,\n source,\n textAlign,\n translate,\n translateChoice,\n labelTime,\n ...rest\n}) => rest;\n\nexport default Picker;\n","const leftPad =\n (nb = 2) =>\n value =>\n ('0'.repeat(nb) + value).slice(-nb);\nconst leftPad4 = leftPad(4);\nconst leftPad2 = leftPad(2);\n\n// yyyy-MM-ddThh:mm\nconst dateTimeRegex = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}$/;\n\n/**\n * @param {Date} value value to convert\n * @returns {string} A standardized datetime (yyyy-MM-ddThh:mm), to be passed to an <input type=\"datetime-local\" />\n */\nconst convertDateToString = value => {\n if (!(value instanceof Date) || isNaN(value.getDate())) {\n return '';\n }\n\n const yy = leftPad4(value.getFullYear());\n const MM = leftPad2(value.getMonth() + 1);\n const dd = leftPad2(value.getDate());\n const hh = leftPad2(value.getHours());\n const mm = leftPad2(value.getMinutes());\n return `${yy}-${MM}-${dd}T${hh}:${mm}`;\n};\n\n/**\n * Converts a date from the Redux store, with timezone, to a date string\n * without timezone for use in an <input type=\"datetime-local\" />.\n * @param {Date | string} value date string or object\n */\nexport const dateTimeFormatter = value => {\n // null, undefined and empty string values should not go through convertDateToString\n // otherwise, it returns undefined and will make the input an uncontrolled one.\n if (value == null || value === '') {\n return '';\n }\n\n if (value instanceof Date) {\n return convertDateToString(value);\n }\n\n // valid dates should not be converted\n if (dateTimeRegex.test(value)) {\n return value;\n }\n\n return convertDateToString(new Date(value));\n};\n\n/**\n * Converts a datetime string without timezone to a date object\n * with timezone, using the browser timezone.\n * @param {string} value Date string, formatted as yyyy-MM-ddThh:mm\n * @returns {Date}\n */\nexport const dateTimeParser = value => (value ? new Date(value) : '');\n","import React from 'react';\nimport FullCalendar from '@fullcalendar/react';\nimport dayGridPlugin from '@fullcalendar/daygrid';\nimport { useTheme } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport useFullCalendarProps from './useFullCalendarProps';\n\nconst useGlobalStyles = makeStyles(theme => ({\n '@global': {\n '.fc-button': {\n backgroundColor: `${theme.palette.primary.main} !important`,\n border: 'none !important',\n opacity: '1 !important'\n },\n '.fc-day-today': {\n backgroundColor: `${theme.palette.secondary.light} !important`\n },\n // Overwrite violet color of links\n 'a.fc-daygrid-dot-event': {\n color: 'black !important'\n }\n }\n}));\n\nconst CalendarList = props => {\n const theme = useTheme();\n const fullCalendarProps = useFullCalendarProps(props);\n useGlobalStyles();\n\n return (\n <FullCalendar\n plugins={[dayGridPlugin]}\n locale={props.locale}\n initialView=\"dayGridMonth\"\n eventBackgroundColor={theme.palette.primary.main}\n {...fullCalendarProps}\n />\n );\n};\n\nCalendarList.defaultProps = {\n linkType: 'edit'\n};\n\nexport default CalendarList;\n","import React, { useMemo, useCallback } from 'react';\nimport { useSearchParams, useNavigate } from 'react-router-dom';\nimport { useListContext, useCreatePath } from 'react-admin';\n\nconst useFullCalendarProps = ({ label, startDate, endDate, linkType }) => {\n const { data, isLoading, resource } = useListContext();\n const [searchParams, setSearchParams] = useSearchParams();\n const navigate = useNavigate();\n const createPath = useCreatePath();\n\n const query = new URLSearchParams(location.search);\n\n // Bypass the link in order to use React-Router\n const eventClick = useCallback(({ event, jsEvent }) => {\n jsEvent.preventDefault();\n navigate(event.url);\n }, []);\n\n // Change the query string when month change\n const datesSet = useCallback(\n ({ view }) => {\n setSearchParams(params => ({\n ...params,\n month: view.currentStart.getMonth() + 1,\n year: view.currentStart.getFullYear()\n }));\n },\n [setSearchParams]\n );\n\n const events = useMemo(\n () =>\n !isLoading &&\n data\n .filter(record => record)\n .map(record => ({\n id: record.id,\n title: typeof label === 'string' ? record[label] : label(record),\n start: typeof startDate === 'string' ? record[startDate] : startDate(record),\n end: typeof endDate === 'string' ? record[endDate] : endDate(record),\n url: createPath({ resource, id: record.id, type: linkType })\n })),\n [isLoading, data, resource, createPath]\n );\n\n return {\n initialDate: query.has('month') ? new Date(query.get('year'), query.get('month') - 1) : new Date(),\n events,\n datesSet,\n eventClick\n };\n};\n\nexport default useFullCalendarProps;\n","import React from 'react';\nimport FullCalendar from '@fullcalendar/react';\nimport listPlugin from '@fullcalendar/list';\nimport makeStyles from '@mui/styles/makeStyles';\nimport useFullCalendarProps from './useFullCalendarProps';\n\nconst useGlobalStyles = makeStyles(theme => ({\n '@global': {\n '.fc-button': {\n backgroundColor: `${theme.palette.primary.main} !important`,\n border: 'none !important',\n opacity: '1 !important'\n }\n }\n}));\n\nconst DaysList = props => {\n const fullCalendarProps = useFullCalendarProps(props);\n useGlobalStyles();\n\n return <FullCalendar plugins={[listPlugin]} locale={props.locale} initialView=\"listMonth\" {...fullCalendarProps} />;\n};\n\nDaysList.defaultProps = {\n linkType: 'edit'\n};\n\nexport default DaysList;\n"],"names":[],"version":3,"file":"index.es.js.map"}
|
package/package.json
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@semapps/date-components",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0-alpha.0",
|
|
4
4
|
"description": "React-Admin components for date display and input",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "Virtual Assembly",
|
|
7
|
+
"source": "src/index.js",
|
|
7
8
|
"main": "dist/index.cjs.js",
|
|
8
9
|
"module": "dist/index.es.js",
|
|
9
10
|
"files": [
|
|
10
11
|
"dist"
|
|
11
12
|
],
|
|
12
13
|
"scripts": {
|
|
13
|
-
"
|
|
14
|
-
"
|
|
14
|
+
"build": "parcel build",
|
|
15
|
+
"watch": "parcel watch"
|
|
15
16
|
},
|
|
16
17
|
"dependencies": {
|
|
17
18
|
"@fullcalendar/core": "^5.7.2",
|
|
@@ -22,24 +23,17 @@
|
|
|
22
23
|
"date-fns": "~2.8.1"
|
|
23
24
|
},
|
|
24
25
|
"peerDependencies": {
|
|
26
|
+
"@mui/material": "^5.13.1",
|
|
27
|
+
"@mui/styles": "^5.13.1",
|
|
25
28
|
"react": "^18.2.0",
|
|
26
|
-
"react-admin": "^4.11.0"
|
|
29
|
+
"react-admin": "^4.11.0",
|
|
30
|
+
"react-router-dom": "^6.1.0"
|
|
27
31
|
},
|
|
28
32
|
"publishConfig": {
|
|
29
33
|
"access": "public"
|
|
30
34
|
},
|
|
31
35
|
"devDependencies": {
|
|
32
|
-
"
|
|
33
|
-
"@babel/preset-env": "^7.9.6",
|
|
34
|
-
"@babel/preset-react": "^7.9.4",
|
|
35
|
-
"rollup": "^2.7.6",
|
|
36
|
-
"rollup-plugin-babel": "^4.4.0",
|
|
37
|
-
"rollup-plugin-commonjs": "^10.1.0",
|
|
38
|
-
"rollup-plugin-json": "^4.0.0",
|
|
39
|
-
"rollup-plugin-node-resolve": "^5.2.0",
|
|
40
|
-
"rollup-plugin-replace": "^2.2.0",
|
|
41
|
-
"rollup-plugin-terser": "^5.3.0",
|
|
42
|
-
"rollup-pluginutils": "^2.8.2"
|
|
36
|
+
"parcel": "^2.9.3"
|
|
43
37
|
},
|
|
44
|
-
"gitHead": "
|
|
38
|
+
"gitHead": "237f139526a181db8b95bf1801e46168277094f3"
|
|
45
39
|
}
|