From 7bf91e063917ed1c68b22aeec214b3b29af7f77d Mon Sep 17 00:00:00 2001 From: arpanetus Date: Thu, 11 Aug 2022 22:54:17 +0600 Subject: [PATCH] CEC-2207 Add is-online filter for vehicles list (#187) * Add OptionsDropdown component * Add is-online filter --- .../App/__snapshots__/App.test.js.snap | 32 +++++++- .../List/__snapshots__/index.test.jsx.snap | 32 +++++++- src/components/Cars/List/index.jsx | 24 +++++- .../Controls/OptionsDropdown/index.jsx | 77 +++++++++++++++++++ 4 files changed, 160 insertions(+), 5 deletions(-) create mode 100644 src/components/Controls/OptionsDropdown/index.jsx diff --git a/src/components/App/__snapshots__/App.test.js.snap b/src/components/App/__snapshots__/App.test.js.snap index e96d66d..a004604 100644 --- a/src/components/App/__snapshots__/App.test.js.snap +++ b/src/components/App/__snapshots__/App.test.js.snap @@ -9056,7 +9056,37 @@ exports[`App Route /vehicles authenticated 1`] = `
+
+ +
+
+
+
+ +
+
+
{ const classes = useStyles(); const [search, setSearch] = useState(""); + const [online, setOnline] = useState(false); const { setTitle, setSitePath } = useStatusContext(); const { token: { @@ -25,6 +27,10 @@ const MainForm = () => { setSearch(query); }; + const handleOnline = (event) => { + setOnline(event.target.checked); + } + useEffect(() => { setTitle("Vehicles"); setSitePath([]); @@ -42,13 +48,25 @@ const MainForm = () => { - + + + + + } label="Only online" /> + + + +
); diff --git a/src/components/Controls/OptionsDropdown/index.jsx b/src/components/Controls/OptionsDropdown/index.jsx new file mode 100644 index 0000000..81a8403 --- /dev/null +++ b/src/components/Controls/OptionsDropdown/index.jsx @@ -0,0 +1,77 @@ +import React, {useEffect, useRef, useState} from "react"; +import {ClickAwayListener, Grow, IconButton, MenuList, Paper, Popper} from "@material-ui/core"; +import TuneIcon from "@material-ui/icons/Tune"; + + +const OptionsDropdown = ({listId, children}) => { + const [open, setOpen] = useState(false); + const anchorRef = useRef(null); + const prevOpen = useRef(open); + + const handleToggle = () => { + setOpen((pOpen) => !pOpen); + }; + + const handleClose = (event) => { + if (anchorRef.current && anchorRef.current.contains(event.target)) { + return; + } + + setOpen(false); + }; + + const handleListKeyDown = (event) => { + if (event.key === 'Tab') { + event.preventDefault(); + setOpen(false); + } + } + + useEffect(() => { + if (prevOpen.current === true && open === false) { + anchorRef.current.focus(); + } + + prevOpen.current = open; + }, [open]); + + return (
+ + + + + {({TransitionProps, placement}) => ( + + + + + {children} + + + + + )} + +
+ ); +} + +export default OptionsDropdown; \ No newline at end of file