-
Notifications
You must be signed in to change notification settings - Fork 100
Expand file tree
/
Copy pathTimepicker.tsx
More file actions
93 lines (89 loc) · 2.45 KB
/
Copy pathTimepicker.tsx
File metadata and controls
93 lines (89 loc) · 2.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
import { TimePicker } from "@mui/x-date-pickers";
import { useTranslation } from "i18n";
import { getMuiTimeFormat } from "i18n/dates";
import { GLOBAL } from "i18n/namespaces";
import React, { useMemo } from "react";
import { Control, Controller, UseControllerProps } from "react-hook-form";
import { Dayjs } from "utils/dayjs";
interface TimepickerProps {
className?: string;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
control: Control<any>;
defaultValue?: Dayjs | null;
error: boolean;
helperText: React.ReactNode;
id: string;
rules?: UseControllerProps["rules"];
label?: string;
name: string;
onPostChange?(time: Dayjs | null): void;
testId?: string;
}
const Timepicker = ({
className,
control,
defaultValue,
error,
helperText,
id,
rules,
label,
name,
onPostChange,
testId,
}: TimepickerProps) => {
const { t, i18n } = useTranslation([GLOBAL]);
const format = useMemo(
() => getMuiTimeFormat(i18n.language),
[i18n.language],
);
return (
<Controller
control={control}
defaultValue={defaultValue}
name={name}
rules={rules}
render={({ field }) => (
<TimePicker
data-testid={testId}
{...field}
label={label}
value={field.value}
onChange={(time: Dayjs | null) => {
field.onChange(time);
onPostChange?.(time);
}}
format={format}
ampm={format.includes("a")} // Clock picker uses am/pm iff format also uses it
slotProps={{
textField: {
fullWidth: true,
id,
error,
helperText: (
<span data-testid={`${name}-helper-text`}>{helperText}</span>
),
variant: "standard",
InputProps: {
className,
"aria-label": t("global:change_time"),
},
slotProps: { inputLabel: { shrink: true } },
sx: {
"& .MuiOutlinedInput-root": {
backgroundColor: "var(--mui-palette-primary-main)",
color: "var(--mui-palette-text-primary)",
},
"& .MuiPaper-root": {
backgroundColor: "var(--mui-palette-primary-main)",
color: "var(--mui-palette-text-primary)",
},
},
},
}}
/>
)}
/>
);
};
export default Timepicker;