|
|
@@ -21,7 +21,7 @@ import "dayjs/locale/zh-hk"; |
|
|
|
import { DatePicker } from "@mui/x-date-pickers/DatePicker"; |
|
|
|
import { LocalizationProvider } from "@mui/x-date-pickers/LocalizationProvider"; |
|
|
|
import { AdapterDayjs } from "@mui/x-date-pickers/AdapterDayjs"; |
|
|
|
import { Box } from "@mui/material"; |
|
|
|
import { Box, FormHelperText } from "@mui/material"; |
|
|
|
import { DateCalendar } from "@mui/x-date-pickers"; |
|
|
|
|
|
|
|
interface BaseCriterion<T extends string> { |
|
|
@@ -43,6 +43,7 @@ interface SelectCriterion<T extends string> extends BaseCriterion<T> { |
|
|
|
|
|
|
|
interface DateRangeCriterion<T extends string> extends BaseCriterion<T> { |
|
|
|
type: "dateRange"; |
|
|
|
needMonth?: boolean; |
|
|
|
} |
|
|
|
|
|
|
|
interface MonthYearCriterion<T extends string> extends BaseCriterion<T> { |
|
|
@@ -102,9 +103,14 @@ function SearchBox<T extends string>({ |
|
|
|
}; |
|
|
|
}, []); |
|
|
|
|
|
|
|
const makeDateChangeHandler = useCallback((paramName: T) => { |
|
|
|
const makeDateChangeHandler = useCallback((paramName: T, needMonth?: boolean) => { |
|
|
|
return (e: any) => { |
|
|
|
setInputs((i) => ({ ...i, [paramName]: dayjs(e).format("YYYY-MM-DD") })); |
|
|
|
if(needMonth){ |
|
|
|
setInputs((i) => ({ ...i, [paramName]: dayjs(e).format("YYYY-MM") })); |
|
|
|
}else{ |
|
|
|
setInputs((i) => ({ ...i, [paramName]: dayjs(e).format("YYYY-MM-DD") })); |
|
|
|
} |
|
|
|
|
|
|
|
}; |
|
|
|
}, []); |
|
|
|
|
|
|
@@ -115,12 +121,19 @@ function SearchBox<T extends string>({ |
|
|
|
}; |
|
|
|
}, []); |
|
|
|
|
|
|
|
const makeDateToChangeHandler = useCallback((paramName: T) => { |
|
|
|
const makeDateToChangeHandler = useCallback((paramName: T, needMonth?: boolean) => { |
|
|
|
return (e: any) => { |
|
|
|
if(needMonth){ |
|
|
|
setInputs((i) => ({ |
|
|
|
...i, |
|
|
|
[paramName + "To"]: dayjs(e).format("YYYY-MM"), |
|
|
|
})); |
|
|
|
}else{ |
|
|
|
setInputs((i) => ({ |
|
|
|
...i, |
|
|
|
[paramName + "To"]: dayjs(e).format("YYYY-MM-DD"), |
|
|
|
})); |
|
|
|
} |
|
|
|
}; |
|
|
|
}, []); |
|
|
|
|
|
|
@@ -175,6 +188,9 @@ function SearchBox<T extends string>({ |
|
|
|
adapterLocale="zh-hk" |
|
|
|
> |
|
|
|
<Box display="flex"> |
|
|
|
<InputLabel> |
|
|
|
{c.label} |
|
|
|
</InputLabel> |
|
|
|
<DateCalendar |
|
|
|
views={["month", "year"]} |
|
|
|
openTo="month" |
|
|
@@ -198,12 +214,13 @@ function SearchBox<T extends string>({ |
|
|
|
<FormControl fullWidth> |
|
|
|
<DatePicker |
|
|
|
label={c.label} |
|
|
|
onChange={makeDateChangeHandler(c.paramName)} |
|
|
|
onChange={makeDateChangeHandler(c.paramName, c.needMonth)} |
|
|
|
value={ |
|
|
|
inputs[c.paramName] |
|
|
|
? dayjs(inputs[c.paramName]) |
|
|
|
: null |
|
|
|
} |
|
|
|
views={c.needMonth ? ["month", "year"] : ["day", "month", "year"]} |
|
|
|
/> |
|
|
|
</FormControl> |
|
|
|
<Box |
|
|
@@ -217,12 +234,13 @@ function SearchBox<T extends string>({ |
|
|
|
<FormControl fullWidth> |
|
|
|
<DatePicker |
|
|
|
label={c.label2} |
|
|
|
onChange={makeDateToChangeHandler(c.paramName)} |
|
|
|
onChange={makeDateToChangeHandler(c.paramName, c.needMonth)} |
|
|
|
value={ |
|
|
|
inputs[c.paramName.concat("To") as T] |
|
|
|
? dayjs(inputs[c.paramName.concat("To") as T]) |
|
|
|
: null |
|
|
|
} |
|
|
|
views={c.needMonth ? ["month", "year"] : ["day", "month", "year"]} |
|
|
|
/> |
|
|
|
</FormControl> |
|
|
|
</Box> |
|
|
|