bananas-commerce-admin
Version:
What's this, an admin for apes?
48 lines • 2.57 kB
JavaScript
import React, { useCallback, useState } from "react";
import { FormHelperText, Stack } from "@mui/material";
import Grid from "@mui/material/Grid2";
import { DatePicker, LocalizationProvider } from "@mui/x-date-pickers";
import { AdapterLuxon } from "@mui/x-date-pickers/AdapterLuxon";
import { DateTime } from "luxon";
import { useCardContext } from "../../contexts/CardContext";
import LabeledValue from "../LabeledValue";
export const CardFieldDate = ({ dateFormatter = (date) => (date.isValid ? date.toISODate() : ""), fallback = "—", fallbackPredicate = (date) => !date?.isValid, formName, helperText, isDisabled = false, isEditable = true, isReadable = true, label, size = "grow", sx, adapterLocale, value: defaultValue, ...props }) => {
const { isCompact, isEditing } = useCardContext();
const [value, setValue] = useState(() => {
if (defaultValue instanceof Date) {
return DateTime.fromJSDate(defaultValue);
}
else if (defaultValue instanceof DateTime) {
return defaultValue;
}
else if (typeof defaultValue === "string") {
try {
const date = DateTime.fromISO(defaultValue);
if (date.isValid) {
return date;
}
else {
console.error(`[CARD_FIELD_DATE] Invalid date string: ${defaultValue}`);
return undefined;
}
}
catch (error) {
console.error(`[CARD_FIELD_DATE] ${error}`);
return undefined;
}
}
else {
return undefined;
}
});
const handleDateChange = useCallback((date) => {
if (date != null)
setValue(date);
}, [setValue]);
return (React.createElement(Grid, { size: size }, isEditing && isEditable ? (React.createElement(Stack, { direction: "column", py: 1 },
React.createElement(LocalizationProvider, { adapterLocale: adapterLocale, dateAdapter: AdapterLuxon },
React.createElement(DatePicker, { defaultValue: value, disabled: isDisabled, label: label, name: formName, sx: { width: "100%", ...sx }, onChange: handleDateChange, ...props })),
helperText != null && React.createElement(FormHelperText, { sx: { mb: 1 } }, helperText))) : (isReadable && (React.createElement(LabeledValue, { compact: isCompact, label: label, value: fallbackPredicate(value) ? fallback : dateFormatter(value) })))));
};
export default CardFieldDate;
//# sourceMappingURL=CardFieldDate.js.map