mirror of
https://github.com/rowyio/rowy.git
synced 2025-12-16 11:47:50 +01:00
65 lines
1.7 KiB
TypeScript
65 lines
1.7 KiB
TypeScript
import { ISideDrawerFieldProps } from "@src/components/fields/types";
|
|
|
|
import { DatePicker } from "@mui/x-date-pickers";
|
|
import { TextField } from "@mui/material";
|
|
import { ChevronDown } from "@src/assets/icons";
|
|
|
|
import { getFieldId } from "@src/components/SideDrawer/utils";
|
|
import { transformValue, sanitizeValue } from "./utils";
|
|
import { DATE_FORMAT } from "@src/constants/dates";
|
|
|
|
export interface IDateProps extends ISideDrawerFieldProps {}
|
|
|
|
export default function Date_({
|
|
column,
|
|
value,
|
|
onChange,
|
|
onSubmit,
|
|
disabled,
|
|
}: IDateProps) {
|
|
const format = column.config?.format ?? DATE_FORMAT;
|
|
|
|
const transformedValue = transformValue(value);
|
|
|
|
const handleChange = (date: Date | null) => {
|
|
const sanitized = sanitizeValue(date);
|
|
if (sanitized === undefined) return;
|
|
onChange(sanitized);
|
|
};
|
|
|
|
return (
|
|
<DatePicker
|
|
renderInput={(props) => (
|
|
<TextField
|
|
{...props}
|
|
fullWidth
|
|
label=""
|
|
hiddenLabel
|
|
aria-label={column.name as string}
|
|
sx={{
|
|
"& .MuiInputBase-input": { fontVariantNumeric: "tabular-nums" },
|
|
"& .MuiInputAdornment-root": { m: 0 },
|
|
}}
|
|
// Touch mode: make the whole field clickable
|
|
onClick={props.inputProps?.onClick as any}
|
|
onBlur={onSubmit}
|
|
id={getFieldId(column.key)}
|
|
/>
|
|
)}
|
|
label={column.name}
|
|
value={transformedValue}
|
|
onChange={handleChange}
|
|
onAccept={onSubmit}
|
|
inputFormat={format}
|
|
mask={format.replace(/[A-Za-z]/g, "_")}
|
|
OpenPickerButtonProps={{
|
|
size: "small",
|
|
sx: { width: 32, height: 32 },
|
|
}}
|
|
components={{ OpenPickerIcon: ChevronDown }}
|
|
disableOpenPicker={false}
|
|
disabled={disabled}
|
|
/>
|
|
);
|
|
}
|