@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 CHANGED
@@ -1,17 +1,17 @@
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");
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", () => $2d95977354f78fa4$export$7edc06cf1783b30f);
24
- $parcel$export(module.exports, "TimeInput", () => $2d95977354f78fa4$export$a1af6f79df847fac);
25
- $parcel$export(module.exports, "DateTimeInput", () => $2d95977354f78fa4$export$183478aa40b5df1);
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
- ...rest
46
+ defaultValue: defaultValue
78
47
  });
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), {
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
- error: !!(isTouched && error),
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
- helperText: /*#__PURE__*/ (0, $g9yvC$reactjsxruntime.jsx)((0, $g9yvC$reactadmin.InputHelperText), {
95
- touched: isTouched,
96
- error: error,
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
- onBlur: ()=>field.onBlur(field.value ? stringFormat === "ISO" ? new Date(field.value).toISOString() : new Date(field.value).toString() : null)
88
+ ...rest
105
89
  })
106
90
  });
107
91
  };
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;
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, $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)();
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, $g9yvC$react.useCallback)(({ event: event, jsEvent: jsEvent })=>{
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, $g9yvC$react.useCallback)(({ view: view })=>{
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, $g9yvC$react.useMemo)(()=>!isLoading && data.filter((record)=>record).map((record)=>({
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($g9yvC$muistylesmakeStyles)))((theme)=>({
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, $g9yvC$muimaterial.useTheme)();
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, $g9yvC$reactjsxruntime.jsx)((0, ($parcel$interopDefault($g9yvC$fullcalendarreact))), {
171
+ return /*#__PURE__*/ (0, $3RhHq$reactjsxruntime.jsx)((0, ($parcel$interopDefault($3RhHq$fullcalendarreact))), {
198
172
  plugins: [
199
- (0, ($parcel$interopDefault($g9yvC$fullcalendardaygrid)))
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($g9yvC$muistylesmakeStyles)))((theme)=>({
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, $g9yvC$reactjsxruntime.jsx)((0, ($parcel$interopDefault($g9yvC$fullcalendarreact))), {
205
+ return /*#__PURE__*/ (0, $3RhHq$reactjsxruntime.jsx)((0, ($parcel$interopDefault($3RhHq$fullcalendarreact))), {
232
206
  plugins: [
233
- (0, ($parcel$interopDefault($g9yvC$fullcalendarlist)))
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 $2d95977354f78fa4$export$7edc06cf1783b30f = (props)=>/*#__PURE__*/ (0, $g9yvC$reactjsxruntime.jsx)((0, $68a2d690bd37b19a$export$2e2bcd8739ae039), {
248
- PickerComponent: (0, $g9yvC$muixdatepickersDatePicker.DatePicker),
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 $2d95977354f78fa4$export$a1af6f79df847fac = (props)=>/*#__PURE__*/ (0, $g9yvC$reactjsxruntime.jsx)((0, $68a2d690bd37b19a$export$2e2bcd8739ae039), {
252
- PickerComponent: (0, $g9yvC$muixdatepickersTimePicker.TimePicker),
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 $2d95977354f78fa4$export$183478aa40b5df1 = (props)=>/*#__PURE__*/ (0, $g9yvC$reactjsxruntime.jsx)((0, $68a2d690bd37b19a$export$2e2bcd8739ae039), {
256
- PickerComponent: (0, $g9yvC$muixdatepickersDateTimePicker.DateTimePicker),
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
 
@@ -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\">&thinsp;*</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"}
@@ -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 $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";
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
- ...rest
33
+ defaultValue: defaultValue
65
34
  });
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), {
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
- error: !!(isTouched && error),
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
- helperText: /*#__PURE__*/ (0, $1h8NM$jsx)((0, $1h8NM$InputHelperText), {
82
- touched: isTouched,
83
- error: error,
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
- onBlur: ()=>field.onBlur(field.value ? stringFormat === "ISO" ? new Date(field.value).toISOString() : new Date(field.value).toString() : null)
75
+ ...rest
92
76
  })
93
77
  });
94
78
  };
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;
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, $1h8NM$useListContext)();
119
- const [searchParams, setSearchParams] = (0, $1h8NM$useSearchParams)();
120
- const navigate = (0, $1h8NM$useNavigate)();
121
- const createPath = (0, $1h8NM$useCreatePath)();
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, $1h8NM$useCallback)(({ event: event, jsEvent: jsEvent })=>{
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, $1h8NM$useCallback)(({ view: view })=>{
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, $1h8NM$useMemo)(()=>!isLoading && data.filter((record)=>record).map((record)=>({
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, $1h8NM$muistylesmakeStyles)((theme)=>({
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, $1h8NM$useTheme)();
155
+ const theme = (0, $5Ihaz$useTheme)();
182
156
  const fullCalendarProps = (0, $37245c02f9b1b006$export$2e2bcd8739ae039)(props);
183
157
  $abbcc02f55461290$var$useGlobalStyles();
184
- return /*#__PURE__*/ (0, $1h8NM$jsx)((0, $1h8NM$fullcalendarreact), {
158
+ return /*#__PURE__*/ (0, $5Ihaz$jsx)((0, $5Ihaz$fullcalendarreact), {
185
159
  plugins: [
186
- (0, $1h8NM$fullcalendardaygrid)
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, $1h8NM$muistylesmakeStyles)((theme)=>({
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, $1h8NM$jsx)((0, $1h8NM$fullcalendarreact), {
192
+ return /*#__PURE__*/ (0, $5Ihaz$jsx)((0, $5Ihaz$fullcalendarreact), {
219
193
  plugins: [
220
- (0, $1h8NM$fullcalendarlist)
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 $92007338c717b459$export$7edc06cf1783b30f = (props)=>/*#__PURE__*/ (0, $1h8NM$jsx)((0, $23b8ae46df88f164$export$2e2bcd8739ae039), {
235
- PickerComponent: (0, $1h8NM$DatePicker),
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 $92007338c717b459$export$a1af6f79df847fac = (props)=>/*#__PURE__*/ (0, $1h8NM$jsx)((0, $23b8ae46df88f164$export$2e2bcd8739ae039), {
239
- PickerComponent: (0, $1h8NM$TimePicker),
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 $92007338c717b459$export$183478aa40b5df1 = (props)=>/*#__PURE__*/ (0, $1h8NM$jsx)((0, $23b8ae46df88f164$export$2e2bcd8739ae039), {
243
- PickerComponent: (0, $1h8NM$DateTimePicker),
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 {$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};
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
@@ -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\">&thinsp;*</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.0",
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.js",
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
- "parcel": "^2.9.3"
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": "237f139526a181db8b95bf1801e46168277094f3"
47
+ "gitHead": "b47a57527565608ba691bfef1602779097aaf9f5"
39
48
  }