@semapps/date-components 0.6.0-alpha.0 → 0.6.0-alpha.2
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 +74 -100
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +59 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.es.js +72 -98
- package/dist/index.es.js.map +1 -1
- package/package.json +15 -6
package/dist/index.cjs.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
var $
|
|
2
|
-
var $
|
|
3
|
-
var $
|
|
4
|
-
var $
|
|
5
|
-
var $
|
|
6
|
-
var $
|
|
7
|
-
var $
|
|
8
|
-
var $
|
|
9
|
-
var $
|
|
10
|
-
var $
|
|
11
|
-
var $
|
|
12
|
-
var $
|
|
13
|
-
var $
|
|
14
|
-
var $
|
|
1
|
+
var $3RhHq$reactjsxruntime = require("react/jsx-runtime");
|
|
2
|
+
var $3RhHq$muixdatepickersDatePicker = require("@mui/x-date-pickers/DatePicker");
|
|
3
|
+
var $3RhHq$muixdatepickersTimePicker = require("@mui/x-date-pickers/TimePicker");
|
|
4
|
+
var $3RhHq$muixdatepickersDateTimePicker = require("@mui/x-date-pickers/DateTimePicker");
|
|
5
|
+
var $3RhHq$react = require("react");
|
|
6
|
+
var $3RhHq$reactadmin = require("react-admin");
|
|
7
|
+
var $3RhHq$muixdatepickersLocalizationProvider = require("@mui/x-date-pickers/LocalizationProvider");
|
|
8
|
+
var $3RhHq$muixdatepickersAdapterDateFns = require("@mui/x-date-pickers/AdapterDateFns");
|
|
9
|
+
var $3RhHq$fullcalendarreact = require("@fullcalendar/react");
|
|
10
|
+
var $3RhHq$fullcalendardaygrid = require("@fullcalendar/daygrid");
|
|
11
|
+
var $3RhHq$muimaterial = require("@mui/material");
|
|
12
|
+
var $3RhHq$muistylesmakeStyles = require("@mui/styles/makeStyles");
|
|
13
|
+
var $3RhHq$reactrouterdom = require("react-router-dom");
|
|
14
|
+
var $3RhHq$fullcalendarlist = require("@fullcalendar/list");
|
|
15
15
|
|
|
16
16
|
function $parcel$export(e, n, v, s) {
|
|
17
17
|
Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
|
|
@@ -20,102 +20,76 @@ function $parcel$interopDefault(a) {
|
|
|
20
20
|
return a && a.__esModule ? a.default : a;
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
$parcel$export(module.exports, "DateInput", () => $
|
|
24
|
-
$parcel$export(module.exports, "TimeInput", () => $
|
|
25
|
-
$parcel$export(module.exports, "DateTimeInput", () => $
|
|
23
|
+
$parcel$export(module.exports, "DateInput", () => $0ec82123656742c1$export$7edc06cf1783b30f);
|
|
24
|
+
$parcel$export(module.exports, "TimeInput", () => $0ec82123656742c1$export$a1af6f79df847fac);
|
|
25
|
+
$parcel$export(module.exports, "DateTimeInput", () => $0ec82123656742c1$export$183478aa40b5df1);
|
|
26
26
|
$parcel$export(module.exports, "CalendarList", () => $563c84827e91e322$export$2e2bcd8739ae039);
|
|
27
27
|
$parcel$export(module.exports, "DaysList", () => $5379d12b87e743a4$export$2e2bcd8739ae039);
|
|
28
28
|
$parcel$export(module.exports, "useFullCalendarProps", () => $c8dbd8ec3b8f34cc$export$2e2bcd8739ae039);
|
|
29
|
+
/* eslint-disable react/react-in-jsx-scope */ /* eslint-disable react/jsx-props-no-spreading */
|
|
29
30
|
|
|
30
31
|
|
|
31
32
|
|
|
33
|
+
/* eslint-disable react/react-in-jsx-scope */ /* eslint-disable react/require-default-props */
|
|
32
34
|
|
|
33
35
|
|
|
34
36
|
|
|
35
37
|
|
|
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)({
|
|
38
|
+
const $c332daa71b957685$var$Picker = ({ PickerComponent: PickerComponent, label: label, source: source, helperText: helperText, fullWidth: fullWidth, onBlur: onBlur, onChange: onChange, format: format, parse: parse, validate: validate, defaultValue: defaultValue, locale: locale, translations: translations, stringFormat: stringFormat = "ISO", ...rest })=>{
|
|
39
|
+
const { field: field, isRequired: isRequired, fieldState: { error: error, isTouched: isTouched, invalid: invalid }, formState: { isSubmitted: isSubmitted } } = (0, $3RhHq$reactadmin.useInput)({
|
|
70
40
|
format: format,
|
|
71
41
|
onBlur: onBlur,
|
|
72
42
|
onChange: onChange,
|
|
73
|
-
onFocus: onFocus,
|
|
74
43
|
parse: parse,
|
|
75
44
|
source: source,
|
|
76
45
|
validate: validate,
|
|
77
|
-
|
|
46
|
+
defaultValue: defaultValue
|
|
78
47
|
});
|
|
79
|
-
const handleChange = (0, $
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
48
|
+
const handleChange = (0, $3RhHq$react.useCallback)((value)=>{
|
|
49
|
+
if (value instanceof Date) field.onChange(stringFormat === "ISO" ? value.toISOString() : value.toString());
|
|
50
|
+
else field.onChange(null);
|
|
51
|
+
}, [
|
|
52
|
+
field,
|
|
53
|
+
stringFormat
|
|
54
|
+
]);
|
|
55
|
+
const translateLabel = (0, $3RhHq$reactadmin.useTranslateLabel)();
|
|
56
|
+
const translatedLabel = /*#__PURE__*/ (0, $3RhHq$reactjsxruntime.jsxs)("span", {
|
|
57
|
+
children: [
|
|
58
|
+
translateLabel({
|
|
87
59
|
label: label,
|
|
88
|
-
source: source
|
|
89
|
-
isRequired: isRequired
|
|
60
|
+
source: source
|
|
90
61
|
}),
|
|
91
|
-
|
|
62
|
+
isRequired && /*#__PURE__*/ (0, $3RhHq$reactjsxruntime.jsx)("span", {
|
|
63
|
+
"aria-hidden": "true",
|
|
64
|
+
children: " *"
|
|
65
|
+
})
|
|
66
|
+
]
|
|
67
|
+
});
|
|
68
|
+
return /*#__PURE__*/ (0, $3RhHq$reactjsxruntime.jsx)((0, $3RhHq$muixdatepickersLocalizationProvider.LocalizationProvider), {
|
|
69
|
+
dateAdapter: (0, $3RhHq$muixdatepickersAdapterDateFns.AdapterDateFns),
|
|
70
|
+
adapterLocale: locale,
|
|
71
|
+
localeText: translations?.components.MuiLocalizationProvider.defaultProps.localeText,
|
|
72
|
+
children: /*#__PURE__*/ (0, $3RhHq$reactjsxruntime.jsx)(PickerComponent, {
|
|
73
|
+
label: translatedLabel,
|
|
92
74
|
slotProps: {
|
|
93
75
|
textField: {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
76
|
+
error: (isTouched || isSubmitted) && invalid,
|
|
77
|
+
size: "small",
|
|
78
|
+
fullWidth: fullWidth,
|
|
79
|
+
helperText: /*#__PURE__*/ (0, $3RhHq$reactjsxruntime.jsx)((0, $3RhHq$reactadmin.InputHelperText), {
|
|
80
|
+
touched: isTouched || isSubmitted,
|
|
81
|
+
error: error?.message,
|
|
97
82
|
helperText: helperText
|
|
98
83
|
})
|
|
99
84
|
}
|
|
100
85
|
},
|
|
101
|
-
...$68a2d690bd37b19a$var$sanitizeRestProps(rest),
|
|
102
86
|
value: field.value ? new Date(field.value) : null,
|
|
103
87
|
onChange: handleChange,
|
|
104
|
-
|
|
88
|
+
...rest
|
|
105
89
|
})
|
|
106
90
|
});
|
|
107
91
|
};
|
|
108
|
-
$
|
|
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;
|
|
92
|
+
var $c332daa71b957685$export$2e2bcd8739ae039 = $c332daa71b957685$var$Picker;
|
|
119
93
|
|
|
120
94
|
|
|
121
95
|
|
|
@@ -128,18 +102,18 @@ var $68a2d690bd37b19a$export$2e2bcd8739ae039 = $68a2d690bd37b19a$var$Picker;
|
|
|
128
102
|
|
|
129
103
|
|
|
130
104
|
const $c8dbd8ec3b8f34cc$var$useFullCalendarProps = ({ label: label, startDate: startDate, endDate: endDate, linkType: linkType })=>{
|
|
131
|
-
const { data: data, isLoading: isLoading, resource: resource } = (0, $
|
|
132
|
-
const [searchParams, setSearchParams] = (0, $
|
|
133
|
-
const navigate = (0, $
|
|
134
|
-
const createPath = (0, $
|
|
105
|
+
const { data: data, isLoading: isLoading, resource: resource } = (0, $3RhHq$reactadmin.useListContext)();
|
|
106
|
+
const [searchParams, setSearchParams] = (0, $3RhHq$reactrouterdom.useSearchParams)();
|
|
107
|
+
const navigate = (0, $3RhHq$reactrouterdom.useNavigate)();
|
|
108
|
+
const createPath = (0, $3RhHq$reactadmin.useCreatePath)();
|
|
135
109
|
const query = new URLSearchParams(location.search);
|
|
136
110
|
// Bypass the link in order to use React-Router
|
|
137
|
-
const eventClick = (0, $
|
|
111
|
+
const eventClick = (0, $3RhHq$react.useCallback)(({ event: event, jsEvent: jsEvent })=>{
|
|
138
112
|
jsEvent.preventDefault();
|
|
139
113
|
navigate(event.url);
|
|
140
114
|
}, []);
|
|
141
115
|
// Change the query string when month change
|
|
142
|
-
const datesSet = (0, $
|
|
116
|
+
const datesSet = (0, $3RhHq$react.useCallback)(({ view: view })=>{
|
|
143
117
|
setSearchParams((params)=>({
|
|
144
118
|
...params,
|
|
145
119
|
month: view.currentStart.getMonth() + 1,
|
|
@@ -148,7 +122,7 @@ const $c8dbd8ec3b8f34cc$var$useFullCalendarProps = ({ label: label, startDate: s
|
|
|
148
122
|
}, [
|
|
149
123
|
setSearchParams
|
|
150
124
|
]);
|
|
151
|
-
const events = (0, $
|
|
125
|
+
const events = (0, $3RhHq$react.useMemo)(()=>!isLoading && data.filter((record)=>record).map((record)=>({
|
|
152
126
|
id: record.id,
|
|
153
127
|
title: typeof label === "string" ? record[label] : label(record),
|
|
154
128
|
start: typeof startDate === "string" ? record[startDate] : startDate(record),
|
|
@@ -174,7 +148,7 @@ const $c8dbd8ec3b8f34cc$var$useFullCalendarProps = ({ label: label, startDate: s
|
|
|
174
148
|
var $c8dbd8ec3b8f34cc$export$2e2bcd8739ae039 = $c8dbd8ec3b8f34cc$var$useFullCalendarProps;
|
|
175
149
|
|
|
176
150
|
|
|
177
|
-
const $563c84827e91e322$var$useGlobalStyles = (0, ($parcel$interopDefault($
|
|
151
|
+
const $563c84827e91e322$var$useGlobalStyles = (0, ($parcel$interopDefault($3RhHq$muistylesmakeStyles)))((theme)=>({
|
|
178
152
|
"@global": {
|
|
179
153
|
".fc-button": {
|
|
180
154
|
backgroundColor: `${theme.palette.primary.main} !important`,
|
|
@@ -191,12 +165,12 @@ const $563c84827e91e322$var$useGlobalStyles = (0, ($parcel$interopDefault($g9yvC
|
|
|
191
165
|
}
|
|
192
166
|
}));
|
|
193
167
|
const $563c84827e91e322$var$CalendarList = (props)=>{
|
|
194
|
-
const theme = (0, $
|
|
168
|
+
const theme = (0, $3RhHq$muimaterial.useTheme)();
|
|
195
169
|
const fullCalendarProps = (0, $c8dbd8ec3b8f34cc$export$2e2bcd8739ae039)(props);
|
|
196
170
|
$563c84827e91e322$var$useGlobalStyles();
|
|
197
|
-
return /*#__PURE__*/ (0, $
|
|
171
|
+
return /*#__PURE__*/ (0, $3RhHq$reactjsxruntime.jsx)((0, ($parcel$interopDefault($3RhHq$fullcalendarreact))), {
|
|
198
172
|
plugins: [
|
|
199
|
-
(0, ($parcel$interopDefault($
|
|
173
|
+
(0, ($parcel$interopDefault($3RhHq$fullcalendardaygrid)))
|
|
200
174
|
],
|
|
201
175
|
locale: props.locale,
|
|
202
176
|
initialView: "dayGridMonth",
|
|
@@ -216,7 +190,7 @@ var $563c84827e91e322$export$2e2bcd8739ae039 = $563c84827e91e322$var$CalendarLis
|
|
|
216
190
|
|
|
217
191
|
|
|
218
192
|
|
|
219
|
-
const $5379d12b87e743a4$var$useGlobalStyles = (0, ($parcel$interopDefault($
|
|
193
|
+
const $5379d12b87e743a4$var$useGlobalStyles = (0, ($parcel$interopDefault($3RhHq$muistylesmakeStyles)))((theme)=>({
|
|
220
194
|
"@global": {
|
|
221
195
|
".fc-button": {
|
|
222
196
|
backgroundColor: `${theme.palette.primary.main} !important`,
|
|
@@ -228,9 +202,9 @@ const $5379d12b87e743a4$var$useGlobalStyles = (0, ($parcel$interopDefault($g9yvC
|
|
|
228
202
|
const $5379d12b87e743a4$var$DaysList = (props)=>{
|
|
229
203
|
const fullCalendarProps = (0, $c8dbd8ec3b8f34cc$export$2e2bcd8739ae039)(props);
|
|
230
204
|
$5379d12b87e743a4$var$useGlobalStyles();
|
|
231
|
-
return /*#__PURE__*/ (0, $
|
|
205
|
+
return /*#__PURE__*/ (0, $3RhHq$reactjsxruntime.jsx)((0, ($parcel$interopDefault($3RhHq$fullcalendarreact))), {
|
|
232
206
|
plugins: [
|
|
233
|
-
(0, ($parcel$interopDefault($
|
|
207
|
+
(0, ($parcel$interopDefault($3RhHq$fullcalendarlist)))
|
|
234
208
|
],
|
|
235
209
|
locale: props.locale,
|
|
236
210
|
initialView: "listMonth",
|
|
@@ -244,16 +218,16 @@ var $5379d12b87e743a4$export$2e2bcd8739ae039 = $5379d12b87e743a4$var$DaysList;
|
|
|
244
218
|
|
|
245
219
|
|
|
246
220
|
|
|
247
|
-
const $
|
|
248
|
-
PickerComponent: (0, $
|
|
221
|
+
const $0ec82123656742c1$export$7edc06cf1783b30f = (props)=>/*#__PURE__*/ (0, $3RhHq$reactjsxruntime.jsx)((0, $c332daa71b957685$export$2e2bcd8739ae039), {
|
|
222
|
+
PickerComponent: (0, $3RhHq$muixdatepickersDatePicker.DatePicker),
|
|
249
223
|
...props
|
|
250
224
|
});
|
|
251
|
-
const $
|
|
252
|
-
PickerComponent: (0, $
|
|
225
|
+
const $0ec82123656742c1$export$a1af6f79df847fac = (props)=>/*#__PURE__*/ (0, $3RhHq$reactjsxruntime.jsx)((0, $c332daa71b957685$export$2e2bcd8739ae039), {
|
|
226
|
+
PickerComponent: (0, $3RhHq$muixdatepickersTimePicker.TimePicker),
|
|
253
227
|
...props
|
|
254
228
|
});
|
|
255
|
-
const $
|
|
256
|
-
PickerComponent: (0, $
|
|
229
|
+
const $0ec82123656742c1$export$183478aa40b5df1 = (props)=>/*#__PURE__*/ (0, $3RhHq$reactjsxruntime.jsx)((0, $c332daa71b957685$export$2e2bcd8739ae039), {
|
|
230
|
+
PickerComponent: (0, $3RhHq$muixdatepickersDateTimePicker.DateTimePicker),
|
|
257
231
|
...props
|
|
258
232
|
});
|
|
259
233
|
|
package/dist/index.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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"}
|
|
1
|
+
{"mappings":"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","sources":["packages/date-components/src/index.tsx","packages/date-components/src/Picker.tsx","packages/date-components/src/CalendarList.js","packages/date-components/src/useFullCalendarProps.js","packages/date-components/src/DaysList.js"],"sourcesContent":["/* eslint-disable react/react-in-jsx-scope */\n/* eslint-disable react/jsx-props-no-spreading */\nimport { DatePicker, DatePickerProps } from '@mui/x-date-pickers/DatePicker';\nimport { TimePicker, TimePickerProps } from '@mui/x-date-pickers/TimePicker';\nimport { DateTimePicker, DateTimePickerProps } from '@mui/x-date-pickers/DateTimePicker';\nimport Picker, { Props as PickerProps } from './Picker';\n\nconst DateInput = <TDate,>(props: Omit<PickerProps<DatePickerProps<TDate>>, 'PickerComponent'>) => (\n <Picker PickerComponent={DatePicker} {...props} />\n);\nconst TimeInput = <TDate,>(props: Omit<PickerProps<TimePickerProps<TDate>>, 'PickerComponent'>) => (\n <Picker PickerComponent={TimePicker} {...props} />\n);\nconst DateTimeInput = <TDate,>(props: Omit<PickerProps<DateTimePickerProps<TDate>>, 'PickerComponent'>) => (\n <Picker PickerComponent={DateTimePicker} {...props} />\n);\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","/* eslint-disable react/react-in-jsx-scope */\n/* eslint-disable react/require-default-props */\nimport { useCallback, ComponentType } from 'react';\nimport { useInput, InputHelperText, TextInputProps, useTranslateLabel } from 'react-admin';\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';\nimport { getPickersLocalization } from '@mui/x-date-pickers/locales/utils/getPickersLocalization';\nimport { Locale } from 'date-fns';\n\nexport type Props<PickerProps> = TextInputProps &\n Omit<PickerProps, 'format'> & {\n PickerComponent: ComponentType;\n locale?: Locale;\n translations?: ReturnType<typeof getPickersLocalization>;\n stringFormat?: string;\n };\n\nconst Picker = <PickerProps,>({\n PickerComponent,\n label,\n source,\n helperText,\n fullWidth,\n onBlur,\n onChange,\n format,\n parse,\n validate,\n defaultValue,\n locale,\n translations,\n stringFormat = 'ISO',\n ...rest\n}: Props<PickerProps>) => {\n const {\n field,\n isRequired,\n fieldState: { error, isTouched, invalid },\n formState: { isSubmitted }\n } = useInput({\n format,\n onBlur,\n onChange,\n parse,\n source,\n validate,\n defaultValue\n });\n\n const handleChange = useCallback(\n (value: Date) => {\n if (value instanceof Date) {\n field.onChange(stringFormat === 'ISO' ? value.toISOString() : value.toString());\n } else {\n field.onChange(null);\n }\n },\n [field, stringFormat]\n );\n\n const translateLabel = useTranslateLabel();\n const translatedLabel = (\n <span>\n {translateLabel({\n label,\n source\n })}\n {isRequired && <span aria-hidden=\"true\"> *</span>}\n </span>\n );\n\n return (\n <LocalizationProvider\n dateAdapter={AdapterDateFns}\n adapterLocale={locale}\n localeText={translations?.components.MuiLocalizationProvider.defaultProps.localeText}\n >\n <PickerComponent\n label={translatedLabel}\n slotProps={{\n textField: {\n error: (isTouched || isSubmitted) && invalid,\n size: 'small',\n fullWidth,\n helperText: (\n <InputHelperText touched={isTouched || isSubmitted} error={error?.message} helperText={helperText} />\n )\n }\n }}\n value={field.value ? new Date(field.value) : null}\n onChange={handleChange}\n /* eslint-disable-next-line react/jsx-props-no-spreading */\n {...rest}\n />\n </LocalizationProvider>\n );\n};\n\nexport default Picker;\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.d.ts
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { ComponentType } from 'react';
|
|
2
|
+
import { TextInputProps } from 'react-admin';
|
|
3
|
+
import { getPickersLocalization } from '@mui/x-date-pickers/locales/utils/getPickersLocalization';
|
|
4
|
+
import { Locale } from 'date-fns';
|
|
5
|
+
import { DatePickerProps } from '@mui/x-date-pickers/DatePicker';
|
|
6
|
+
import { TimePickerProps } from '@mui/x-date-pickers/TimePicker';
|
|
7
|
+
import { DateTimePickerProps } from '@mui/x-date-pickers/DateTimePicker';
|
|
8
|
+
type Props<PickerProps> = TextInputProps &
|
|
9
|
+
Omit<PickerProps, 'format'> & {
|
|
10
|
+
PickerComponent: ComponentType;
|
|
11
|
+
locale?: Locale;
|
|
12
|
+
translations?: ReturnType<typeof getPickersLocalization>;
|
|
13
|
+
stringFormat?: string;
|
|
14
|
+
};
|
|
15
|
+
export function useFullCalendarProps({
|
|
16
|
+
label,
|
|
17
|
+
startDate,
|
|
18
|
+
endDate,
|
|
19
|
+
linkType
|
|
20
|
+
}: {
|
|
21
|
+
label: any;
|
|
22
|
+
startDate: any;
|
|
23
|
+
endDate: any;
|
|
24
|
+
linkType: any;
|
|
25
|
+
}): {
|
|
26
|
+
initialDate: Date;
|
|
27
|
+
events:
|
|
28
|
+
| false
|
|
29
|
+
| {
|
|
30
|
+
id: any;
|
|
31
|
+
title: any;
|
|
32
|
+
start: any;
|
|
33
|
+
end: any;
|
|
34
|
+
url: string;
|
|
35
|
+
}[];
|
|
36
|
+
datesSet: ({ view }: { view: any }) => void;
|
|
37
|
+
eventClick: ({ event, jsEvent }: { event: any; jsEvent: any }) => void;
|
|
38
|
+
};
|
|
39
|
+
declare namespace CalendarList {
|
|
40
|
+
namespace defaultProps {
|
|
41
|
+
let linkType: string;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
declare namespace DaysList {
|
|
45
|
+
namespace defaultProps {
|
|
46
|
+
let linkType: string;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
export const DateInput: <TDate>(
|
|
50
|
+
props: Omit<Props<DatePickerProps<TDate>>, 'PickerComponent'>
|
|
51
|
+
) => import('react/jsx-runtime').JSX.Element;
|
|
52
|
+
export const TimeInput: <TDate>(
|
|
53
|
+
props: Omit<Props<TimePickerProps<TDate>>, 'PickerComponent'>
|
|
54
|
+
) => import('react/jsx-runtime').JSX.Element;
|
|
55
|
+
export const DateTimeInput: <TDate>(
|
|
56
|
+
props: Omit<Props<DateTimePickerProps<TDate>>, 'PickerComponent'>
|
|
57
|
+
) => import('react/jsx-runtime').JSX.Element;
|
|
58
|
+
|
|
59
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":";;;;;;;AASA,WAAkB,WAAW,IAAI,cAAc,GAC7C,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,GAAG;IAC5B,eAAe,EAAE,aAAa,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,UAAU,CAAC,6BAA6B,CAAC,CAAC;IACzD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;ACXJ;;;;;;;;;;;;;;;;;;;;;EA+CC;;;;;;;;;;;AG5CD,OAAA,MAAM,4HAEL,CAAC;AACF,OAAA,MAAM,4HAEL,CAAC;AACF,OAAA,MAAM,oIAEL,CAAC","sources":["packages/date-components/src/src/Picker.tsx","packages/date-components/src/src/useFullCalendarProps.js","packages/date-components/src/src/CalendarList.js","packages/date-components/src/src/DaysList.js","packages/date-components/src/src/index.tsx","packages/date-components/src/index.tsx"],"sourcesContent":[null,null,null,null,null,"/* eslint-disable react/react-in-jsx-scope */\n/* eslint-disable react/jsx-props-no-spreading */\nimport { DatePicker, DatePickerProps } from '@mui/x-date-pickers/DatePicker';\nimport { TimePicker, TimePickerProps } from '@mui/x-date-pickers/TimePicker';\nimport { DateTimePicker, DateTimePickerProps } from '@mui/x-date-pickers/DateTimePicker';\nimport Picker, { Props as PickerProps } from './Picker';\n\nconst DateInput = <TDate,>(props: Omit<PickerProps<DatePickerProps<TDate>>, 'PickerComponent'>) => (\n <Picker PickerComponent={DatePicker} {...props} />\n);\nconst TimeInput = <TDate,>(props: Omit<PickerProps<TimePickerProps<TDate>>, 'PickerComponent'>) => (\n <Picker PickerComponent={TimePicker} {...props} />\n);\nconst DateTimeInput = <TDate,>(props: Omit<PickerProps<DateTimePickerProps<TDate>>, 'PickerComponent'>) => (\n <Picker PickerComponent={DateTimePicker} {...props} />\n);\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":[],"version":3,"file":"index.d.ts.map"}
|
package/dist/index.es.js
CHANGED
|
@@ -1,108 +1,82 @@
|
|
|
1
|
-
import {jsx as $
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {useInput as $
|
|
7
|
-
import {LocalizationProvider as $
|
|
8
|
-
import {AdapterDateFns as $
|
|
9
|
-
import $
|
|
10
|
-
import $
|
|
11
|
-
import {useTheme as $
|
|
12
|
-
import $
|
|
13
|
-
import {useSearchParams as $
|
|
14
|
-
import $
|
|
1
|
+
import {jsx as $5Ihaz$jsx, jsxs as $5Ihaz$jsxs} from "react/jsx-runtime";
|
|
2
|
+
import {DatePicker as $5Ihaz$DatePicker} from "@mui/x-date-pickers/DatePicker";
|
|
3
|
+
import {TimePicker as $5Ihaz$TimePicker} from "@mui/x-date-pickers/TimePicker";
|
|
4
|
+
import {DateTimePicker as $5Ihaz$DateTimePicker} from "@mui/x-date-pickers/DateTimePicker";
|
|
5
|
+
import {useCallback as $5Ihaz$useCallback, useMemo as $5Ihaz$useMemo} from "react";
|
|
6
|
+
import {useInput as $5Ihaz$useInput, useTranslateLabel as $5Ihaz$useTranslateLabel, InputHelperText as $5Ihaz$InputHelperText, useListContext as $5Ihaz$useListContext, useCreatePath as $5Ihaz$useCreatePath} from "react-admin";
|
|
7
|
+
import {LocalizationProvider as $5Ihaz$LocalizationProvider} from "@mui/x-date-pickers/LocalizationProvider";
|
|
8
|
+
import {AdapterDateFns as $5Ihaz$AdapterDateFns} from "@mui/x-date-pickers/AdapterDateFns";
|
|
9
|
+
import $5Ihaz$fullcalendarreact from "@fullcalendar/react";
|
|
10
|
+
import $5Ihaz$fullcalendardaygrid from "@fullcalendar/daygrid";
|
|
11
|
+
import {useTheme as $5Ihaz$useTheme} from "@mui/material";
|
|
12
|
+
import $5Ihaz$muistylesmakeStyles from "@mui/styles/makeStyles";
|
|
13
|
+
import {useSearchParams as $5Ihaz$useSearchParams, useNavigate as $5Ihaz$useNavigate} from "react-router-dom";
|
|
14
|
+
import $5Ihaz$fullcalendarlist from "@fullcalendar/list";
|
|
15
15
|
|
|
16
|
+
/* eslint-disable react/react-in-jsx-scope */ /* eslint-disable react/jsx-props-no-spreading */
|
|
16
17
|
|
|
17
18
|
|
|
18
19
|
|
|
20
|
+
/* eslint-disable react/react-in-jsx-scope */ /* eslint-disable react/require-default-props */
|
|
19
21
|
|
|
20
22
|
|
|
21
23
|
|
|
22
24
|
|
|
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)({
|
|
25
|
+
const $610808f89222f9cc$var$Picker = ({ PickerComponent: PickerComponent, label: label, source: source, helperText: helperText, fullWidth: fullWidth, onBlur: onBlur, onChange: onChange, format: format, parse: parse, validate: validate, defaultValue: defaultValue, locale: locale, translations: translations, stringFormat: stringFormat = "ISO", ...rest })=>{
|
|
26
|
+
const { field: field, isRequired: isRequired, fieldState: { error: error, isTouched: isTouched, invalid: invalid }, formState: { isSubmitted: isSubmitted } } = (0, $5Ihaz$useInput)({
|
|
57
27
|
format: format,
|
|
58
28
|
onBlur: onBlur,
|
|
59
29
|
onChange: onChange,
|
|
60
|
-
onFocus: onFocus,
|
|
61
30
|
parse: parse,
|
|
62
31
|
source: source,
|
|
63
32
|
validate: validate,
|
|
64
|
-
|
|
33
|
+
defaultValue: defaultValue
|
|
65
34
|
});
|
|
66
|
-
const handleChange = (0, $
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
35
|
+
const handleChange = (0, $5Ihaz$useCallback)((value)=>{
|
|
36
|
+
if (value instanceof Date) field.onChange(stringFormat === "ISO" ? value.toISOString() : value.toString());
|
|
37
|
+
else field.onChange(null);
|
|
38
|
+
}, [
|
|
39
|
+
field,
|
|
40
|
+
stringFormat
|
|
41
|
+
]);
|
|
42
|
+
const translateLabel = (0, $5Ihaz$useTranslateLabel)();
|
|
43
|
+
const translatedLabel = /*#__PURE__*/ (0, $5Ihaz$jsxs)("span", {
|
|
44
|
+
children: [
|
|
45
|
+
translateLabel({
|
|
74
46
|
label: label,
|
|
75
|
-
source: source
|
|
76
|
-
isRequired: isRequired
|
|
47
|
+
source: source
|
|
77
48
|
}),
|
|
78
|
-
|
|
49
|
+
isRequired && /*#__PURE__*/ (0, $5Ihaz$jsx)("span", {
|
|
50
|
+
"aria-hidden": "true",
|
|
51
|
+
children: " *"
|
|
52
|
+
})
|
|
53
|
+
]
|
|
54
|
+
});
|
|
55
|
+
return /*#__PURE__*/ (0, $5Ihaz$jsx)((0, $5Ihaz$LocalizationProvider), {
|
|
56
|
+
dateAdapter: (0, $5Ihaz$AdapterDateFns),
|
|
57
|
+
adapterLocale: locale,
|
|
58
|
+
localeText: translations?.components.MuiLocalizationProvider.defaultProps.localeText,
|
|
59
|
+
children: /*#__PURE__*/ (0, $5Ihaz$jsx)(PickerComponent, {
|
|
60
|
+
label: translatedLabel,
|
|
79
61
|
slotProps: {
|
|
80
62
|
textField: {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
63
|
+
error: (isTouched || isSubmitted) && invalid,
|
|
64
|
+
size: "small",
|
|
65
|
+
fullWidth: fullWidth,
|
|
66
|
+
helperText: /*#__PURE__*/ (0, $5Ihaz$jsx)((0, $5Ihaz$InputHelperText), {
|
|
67
|
+
touched: isTouched || isSubmitted,
|
|
68
|
+
error: error?.message,
|
|
84
69
|
helperText: helperText
|
|
85
70
|
})
|
|
86
71
|
}
|
|
87
72
|
},
|
|
88
|
-
...$23b8ae46df88f164$var$sanitizeRestProps(rest),
|
|
89
73
|
value: field.value ? new Date(field.value) : null,
|
|
90
74
|
onChange: handleChange,
|
|
91
|
-
|
|
75
|
+
...rest
|
|
92
76
|
})
|
|
93
77
|
});
|
|
94
78
|
};
|
|
95
|
-
$
|
|
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;
|
|
79
|
+
var $610808f89222f9cc$export$2e2bcd8739ae039 = $610808f89222f9cc$var$Picker;
|
|
106
80
|
|
|
107
81
|
|
|
108
82
|
|
|
@@ -115,18 +89,18 @@ var $23b8ae46df88f164$export$2e2bcd8739ae039 = $23b8ae46df88f164$var$Picker;
|
|
|
115
89
|
|
|
116
90
|
|
|
117
91
|
const $37245c02f9b1b006$var$useFullCalendarProps = ({ label: label, startDate: startDate, endDate: endDate, linkType: linkType })=>{
|
|
118
|
-
const { data: data, isLoading: isLoading, resource: resource } = (0, $
|
|
119
|
-
const [searchParams, setSearchParams] = (0, $
|
|
120
|
-
const navigate = (0, $
|
|
121
|
-
const createPath = (0, $
|
|
92
|
+
const { data: data, isLoading: isLoading, resource: resource } = (0, $5Ihaz$useListContext)();
|
|
93
|
+
const [searchParams, setSearchParams] = (0, $5Ihaz$useSearchParams)();
|
|
94
|
+
const navigate = (0, $5Ihaz$useNavigate)();
|
|
95
|
+
const createPath = (0, $5Ihaz$useCreatePath)();
|
|
122
96
|
const query = new URLSearchParams(location.search);
|
|
123
97
|
// Bypass the link in order to use React-Router
|
|
124
|
-
const eventClick = (0, $
|
|
98
|
+
const eventClick = (0, $5Ihaz$useCallback)(({ event: event, jsEvent: jsEvent })=>{
|
|
125
99
|
jsEvent.preventDefault();
|
|
126
100
|
navigate(event.url);
|
|
127
101
|
}, []);
|
|
128
102
|
// Change the query string when month change
|
|
129
|
-
const datesSet = (0, $
|
|
103
|
+
const datesSet = (0, $5Ihaz$useCallback)(({ view: view })=>{
|
|
130
104
|
setSearchParams((params)=>({
|
|
131
105
|
...params,
|
|
132
106
|
month: view.currentStart.getMonth() + 1,
|
|
@@ -135,7 +109,7 @@ const $37245c02f9b1b006$var$useFullCalendarProps = ({ label: label, startDate: s
|
|
|
135
109
|
}, [
|
|
136
110
|
setSearchParams
|
|
137
111
|
]);
|
|
138
|
-
const events = (0, $
|
|
112
|
+
const events = (0, $5Ihaz$useMemo)(()=>!isLoading && data.filter((record)=>record).map((record)=>({
|
|
139
113
|
id: record.id,
|
|
140
114
|
title: typeof label === "string" ? record[label] : label(record),
|
|
141
115
|
start: typeof startDate === "string" ? record[startDate] : startDate(record),
|
|
@@ -161,7 +135,7 @@ const $37245c02f9b1b006$var$useFullCalendarProps = ({ label: label, startDate: s
|
|
|
161
135
|
var $37245c02f9b1b006$export$2e2bcd8739ae039 = $37245c02f9b1b006$var$useFullCalendarProps;
|
|
162
136
|
|
|
163
137
|
|
|
164
|
-
const $abbcc02f55461290$var$useGlobalStyles = (0, $
|
|
138
|
+
const $abbcc02f55461290$var$useGlobalStyles = (0, $5Ihaz$muistylesmakeStyles)((theme)=>({
|
|
165
139
|
"@global": {
|
|
166
140
|
".fc-button": {
|
|
167
141
|
backgroundColor: `${theme.palette.primary.main} !important`,
|
|
@@ -178,12 +152,12 @@ const $abbcc02f55461290$var$useGlobalStyles = (0, $1h8NM$muistylesmakeStyles)((t
|
|
|
178
152
|
}
|
|
179
153
|
}));
|
|
180
154
|
const $abbcc02f55461290$var$CalendarList = (props)=>{
|
|
181
|
-
const theme = (0, $
|
|
155
|
+
const theme = (0, $5Ihaz$useTheme)();
|
|
182
156
|
const fullCalendarProps = (0, $37245c02f9b1b006$export$2e2bcd8739ae039)(props);
|
|
183
157
|
$abbcc02f55461290$var$useGlobalStyles();
|
|
184
|
-
return /*#__PURE__*/ (0, $
|
|
158
|
+
return /*#__PURE__*/ (0, $5Ihaz$jsx)((0, $5Ihaz$fullcalendarreact), {
|
|
185
159
|
plugins: [
|
|
186
|
-
(0, $
|
|
160
|
+
(0, $5Ihaz$fullcalendardaygrid)
|
|
187
161
|
],
|
|
188
162
|
locale: props.locale,
|
|
189
163
|
initialView: "dayGridMonth",
|
|
@@ -203,7 +177,7 @@ var $abbcc02f55461290$export$2e2bcd8739ae039 = $abbcc02f55461290$var$CalendarLis
|
|
|
203
177
|
|
|
204
178
|
|
|
205
179
|
|
|
206
|
-
const $69d9f850452774a2$var$useGlobalStyles = (0, $
|
|
180
|
+
const $69d9f850452774a2$var$useGlobalStyles = (0, $5Ihaz$muistylesmakeStyles)((theme)=>({
|
|
207
181
|
"@global": {
|
|
208
182
|
".fc-button": {
|
|
209
183
|
backgroundColor: `${theme.palette.primary.main} !important`,
|
|
@@ -215,9 +189,9 @@ const $69d9f850452774a2$var$useGlobalStyles = (0, $1h8NM$muistylesmakeStyles)((t
|
|
|
215
189
|
const $69d9f850452774a2$var$DaysList = (props)=>{
|
|
216
190
|
const fullCalendarProps = (0, $37245c02f9b1b006$export$2e2bcd8739ae039)(props);
|
|
217
191
|
$69d9f850452774a2$var$useGlobalStyles();
|
|
218
|
-
return /*#__PURE__*/ (0, $
|
|
192
|
+
return /*#__PURE__*/ (0, $5Ihaz$jsx)((0, $5Ihaz$fullcalendarreact), {
|
|
219
193
|
plugins: [
|
|
220
|
-
(0, $
|
|
194
|
+
(0, $5Ihaz$fullcalendarlist)
|
|
221
195
|
],
|
|
222
196
|
locale: props.locale,
|
|
223
197
|
initialView: "listMonth",
|
|
@@ -231,19 +205,19 @@ var $69d9f850452774a2$export$2e2bcd8739ae039 = $69d9f850452774a2$var$DaysList;
|
|
|
231
205
|
|
|
232
206
|
|
|
233
207
|
|
|
234
|
-
const $
|
|
235
|
-
PickerComponent: (0, $
|
|
208
|
+
const $582746363a8b71b9$export$7edc06cf1783b30f = (props)=>/*#__PURE__*/ (0, $5Ihaz$jsx)((0, $610808f89222f9cc$export$2e2bcd8739ae039), {
|
|
209
|
+
PickerComponent: (0, $5Ihaz$DatePicker),
|
|
236
210
|
...props
|
|
237
211
|
});
|
|
238
|
-
const $
|
|
239
|
-
PickerComponent: (0, $
|
|
212
|
+
const $582746363a8b71b9$export$a1af6f79df847fac = (props)=>/*#__PURE__*/ (0, $5Ihaz$jsx)((0, $610808f89222f9cc$export$2e2bcd8739ae039), {
|
|
213
|
+
PickerComponent: (0, $5Ihaz$TimePicker),
|
|
240
214
|
...props
|
|
241
215
|
});
|
|
242
|
-
const $
|
|
243
|
-
PickerComponent: (0, $
|
|
216
|
+
const $582746363a8b71b9$export$183478aa40b5df1 = (props)=>/*#__PURE__*/ (0, $5Ihaz$jsx)((0, $610808f89222f9cc$export$2e2bcd8739ae039), {
|
|
217
|
+
PickerComponent: (0, $5Ihaz$DateTimePicker),
|
|
244
218
|
...props
|
|
245
219
|
});
|
|
246
220
|
|
|
247
221
|
|
|
248
|
-
export {$
|
|
222
|
+
export {$582746363a8b71b9$export$7edc06cf1783b30f as DateInput, $582746363a8b71b9$export$a1af6f79df847fac as TimeInput, $582746363a8b71b9$export$183478aa40b5df1 as DateTimeInput, $abbcc02f55461290$export$2e2bcd8739ae039 as CalendarList, $69d9f850452774a2$export$2e2bcd8739ae039 as DaysList, $37245c02f9b1b006$export$2e2bcd8739ae039 as useFullCalendarProps};
|
|
249
223
|
//# sourceMappingURL=index.es.js.map
|
package/dist/index.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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"}
|
|
1
|
+
{"mappings":"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","sources":["packages/date-components/src/index.tsx","packages/date-components/src/Picker.tsx","packages/date-components/src/CalendarList.js","packages/date-components/src/useFullCalendarProps.js","packages/date-components/src/DaysList.js"],"sourcesContent":["/* eslint-disable react/react-in-jsx-scope */\n/* eslint-disable react/jsx-props-no-spreading */\nimport { DatePicker, DatePickerProps } from '@mui/x-date-pickers/DatePicker';\nimport { TimePicker, TimePickerProps } from '@mui/x-date-pickers/TimePicker';\nimport { DateTimePicker, DateTimePickerProps } from '@mui/x-date-pickers/DateTimePicker';\nimport Picker, { Props as PickerProps } from './Picker';\n\nconst DateInput = <TDate,>(props: Omit<PickerProps<DatePickerProps<TDate>>, 'PickerComponent'>) => (\n <Picker PickerComponent={DatePicker} {...props} />\n);\nconst TimeInput = <TDate,>(props: Omit<PickerProps<TimePickerProps<TDate>>, 'PickerComponent'>) => (\n <Picker PickerComponent={TimePicker} {...props} />\n);\nconst DateTimeInput = <TDate,>(props: Omit<PickerProps<DateTimePickerProps<TDate>>, 'PickerComponent'>) => (\n <Picker PickerComponent={DateTimePicker} {...props} />\n);\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","/* eslint-disable react/react-in-jsx-scope */\n/* eslint-disable react/require-default-props */\nimport { useCallback, ComponentType } from 'react';\nimport { useInput, InputHelperText, TextInputProps, useTranslateLabel } from 'react-admin';\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';\nimport { getPickersLocalization } from '@mui/x-date-pickers/locales/utils/getPickersLocalization';\nimport { Locale } from 'date-fns';\n\nexport type Props<PickerProps> = TextInputProps &\n Omit<PickerProps, 'format'> & {\n PickerComponent: ComponentType;\n locale?: Locale;\n translations?: ReturnType<typeof getPickersLocalization>;\n stringFormat?: string;\n };\n\nconst Picker = <PickerProps,>({\n PickerComponent,\n label,\n source,\n helperText,\n fullWidth,\n onBlur,\n onChange,\n format,\n parse,\n validate,\n defaultValue,\n locale,\n translations,\n stringFormat = 'ISO',\n ...rest\n}: Props<PickerProps>) => {\n const {\n field,\n isRequired,\n fieldState: { error, isTouched, invalid },\n formState: { isSubmitted }\n } = useInput({\n format,\n onBlur,\n onChange,\n parse,\n source,\n validate,\n defaultValue\n });\n\n const handleChange = useCallback(\n (value: Date) => {\n if (value instanceof Date) {\n field.onChange(stringFormat === 'ISO' ? value.toISOString() : value.toString());\n } else {\n field.onChange(null);\n }\n },\n [field, stringFormat]\n );\n\n const translateLabel = useTranslateLabel();\n const translatedLabel = (\n <span>\n {translateLabel({\n label,\n source\n })}\n {isRequired && <span aria-hidden=\"true\"> *</span>}\n </span>\n );\n\n return (\n <LocalizationProvider\n dateAdapter={AdapterDateFns}\n adapterLocale={locale}\n localeText={translations?.components.MuiLocalizationProvider.defaultProps.localeText}\n >\n <PickerComponent\n label={translatedLabel}\n slotProps={{\n textField: {\n error: (isTouched || isSubmitted) && invalid,\n size: 'small',\n fullWidth,\n helperText: (\n <InputHelperText touched={isTouched || isSubmitted} error={error?.message} helperText={helperText} />\n )\n }\n }}\n value={field.value ? new Date(field.value) : null}\n onChange={handleChange}\n /* eslint-disable-next-line react/jsx-props-no-spreading */\n {...rest}\n />\n </LocalizationProvider>\n );\n};\n\nexport default Picker;\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,18 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@semapps/date-components",
|
|
3
|
-
"version": "0.6.0-alpha.
|
|
3
|
+
"version": "0.6.0-alpha.2",
|
|
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.
|
|
7
|
+
"source": "src/index.tsx",
|
|
8
8
|
"main": "dist/index.cjs.js",
|
|
9
9
|
"module": "dist/index.es.js",
|
|
10
|
+
"types": "dist/index.d.ts",
|
|
10
11
|
"files": [
|
|
11
12
|
"dist"
|
|
12
13
|
],
|
|
13
14
|
"scripts": {
|
|
14
|
-
"build": "parcel build",
|
|
15
|
-
"watch": "parcel watch"
|
|
15
|
+
"build": "yarn typecheck && parcel build",
|
|
16
|
+
"watch": "parcel watch",
|
|
17
|
+
"typecheck": "tsc --noEmit"
|
|
16
18
|
},
|
|
17
19
|
"dependencies": {
|
|
18
20
|
"@fullcalendar/core": "^5.7.2",
|
|
@@ -33,7 +35,14 @@
|
|
|
33
35
|
"access": "public"
|
|
34
36
|
},
|
|
35
37
|
"devDependencies": {
|
|
36
|
-
"
|
|
38
|
+
"@mui/material": "^5.13.1",
|
|
39
|
+
"@mui/styles": "^5.13.1",
|
|
40
|
+
"@parcel/packager-ts": "^2.9.3",
|
|
41
|
+
"@parcel/transformer-typescript-types": "^2.9.3",
|
|
42
|
+
"parcel": "^2.9.3",
|
|
43
|
+
"react": "^18.2.0",
|
|
44
|
+
"react-admin": "^4.11.0",
|
|
45
|
+
"react-router-dom": "^6.1.0"
|
|
37
46
|
},
|
|
38
|
-
"gitHead": "
|
|
47
|
+
"gitHead": "b47a57527565608ba691bfef1602779097aaf9f5"
|
|
39
48
|
}
|