Add time picker to events page

This commit is contained in:
Nick Mowen 2022-06-30 09:36:33 -06:00
parent e13715b83a
commit f56ae55cc4

View File

@ -20,10 +20,12 @@ import { Download } from '../icons/Download';
import Menu, { MenuItem } from '../components/Menu'; import Menu, { MenuItem } from '../components/Menu';
import CalendarIcon from '../icons/Calendar'; import CalendarIcon from '../icons/Calendar';
import Calendar from '../components/Calendar'; import Calendar from '../components/Calendar';
import ClockIcon from '../icons/Clock';
import Button from '../components/Button'; import Button from '../components/Button';
import Dialog from '../components/Dialog'; import Dialog from '../components/Dialog';
import { fromUnixTime, intervalToDuration, formatDuration } from 'date-fns';
import MultiSelect from '../components/MultiSelect'; import MultiSelect from '../components/MultiSelect';
import TimePicker from '../components/TimePicker';
import { fromUnixTime, intervalToDuration, formatDuration } from 'date-fns';
const API_LIMIT = 25; const API_LIMIT = 25;
@ -58,12 +60,14 @@ export default function Events({ path, ...props }) {
labels: props.labels ?? 'all', labels: props.labels ?? 'all',
zones: props.zones ?? 'all', zones: props.zones ?? 'all',
sub_labels: props.sub_labels ?? 'all', sub_labels: props.sub_labels ?? 'all',
time_range: '00:00,24:00',
}); });
const [state, setState] = useState({ const [state, setState] = useState({
showDownloadMenu: false, showDownloadMenu: false,
showDatePicker: false, showDatePicker: false,
showCalendar: false, showCalendar: false,
showPlusConfig: false, showPlusConfig: false,
showTimePicker: false,
}); });
const [uploading, setUploading] = useState([]); const [uploading, setUploading] = useState([]);
const [viewEvent, setViewEvent] = useState(); const [viewEvent, setViewEvent] = useState();
@ -185,6 +189,8 @@ export default function Events({ path, ...props }) {
const datePicker = useRef(); const datePicker = useRef();
const timePicker = useRef();
const downloadButton = useRef(); const downloadButton = useRef();
const onDownloadClick = (e, event) => { const onDownloadClick = (e, event) => {
@ -207,6 +213,13 @@ export default function Events({ path, ...props }) {
[searchParams, setSearchParams, state, setState] [searchParams, setSearchParams, state, setState]
); );
const handleSelectTimeRange = useCallback(
(timeRange) => {
setSearchParams({ ...searchParams, time_range: timeRange})
},
[searchParams, setSearchParams]
);
const onFilter = useCallback( const onFilter = useCallback(
(name, value) => { (name, value) => {
const updatedParams = { ...searchParams, [name]: value }; const updatedParams = { ...searchParams, [name]: value };
@ -340,6 +353,12 @@ export default function Events({ path, ...props }) {
onClick={() => setState({ ...state, showDatePicker: true })} onClick={() => setState({ ...state, showDatePicker: true })}
/> />
</div> </div>
<div ref={timePicker} className="">
<ClockIcon
className="h-8 w-8 cursor-pointer"
onClick={() => setState({ ...state, showTimePicker: true })}
/>
</div>
</div> </div>
{state.showDownloadMenu && ( {state.showDownloadMenu && (
<Menu onDismiss={() => setState({ ...state, showDownloadMenu: false })} relativeTo={downloadButton}> <Menu onDismiss={() => setState({ ...state, showDownloadMenu: false })} relativeTo={downloadButton}>
@ -421,6 +440,19 @@ export default function Events({ path, ...props }) {
/> />
</Menu> </Menu>
)} )}
{state.showTimePicker && (
<Menu
className="rounded-t-none"
onDismiss={() => setState({ ...state, showTimePicker: false })}
relativeTo={timePicker}>
<div>
<TimePicker
onChange={handleSelectTimeRange}
timeRange={{ after: searchParams.time_range.split(",")[0], before: searchParams.time_range.split(",")[1] }}
/>
</div>
</Menu>
)}
{state.showPlusConfig && ( {state.showPlusConfig && (
<Dialog> <Dialog>
<div className="p-4"> <div className="p-4">