From 1eebfd359cf79baefdf0a636910861380a5986ca Mon Sep 17 00:00:00 2001 From: Laszlo Fogas Date: Thu, 2 Nov 2023 14:38:53 +0100 Subject: [PATCH] Filter --- web/src/App.js | 79 ++++++++++++++++----------- web/src/FilterBar.jsx | 122 ++++++++++++++++++++++++++++++++++++++++++ web/src/Service.jsx | 4 ++ 3 files changed, 174 insertions(+), 31 deletions(-) create mode 100644 web/src/FilterBar.jsx diff --git a/web/src/App.js b/web/src/App.js index 16d888f..52fbcb0 100644 --- a/web/src/App.js +++ b/web/src/App.js @@ -5,6 +5,7 @@ import { createStore } from 'redux' import { rootReducer } from './redux'; import Footer from "./Footer"; import Service from "./Service"; +import FilterBar from "./FilterBar"; function App() { const capacitorClient = new CapacitorClient( @@ -19,37 +20,53 @@ function App() { <> -
- - +
+
+ +
+
+ + +
diff --git a/web/src/FilterBar.jsx b/web/src/FilterBar.jsx new file mode 100644 index 0000000..8f5e8b7 --- /dev/null +++ b/web/src/FilterBar.jsx @@ -0,0 +1,122 @@ +import React, { useState, useRef, useEffect } from 'react'; +import { FunnelIcon, XMarkIcon } from '@heroicons/react/24/outline' + +function FilterBar(props) { + return ( +
+
+
+
+
+   +
+
+
+ ) +} + +export default FilterBar; + +function Filter(props) { + const { filter } = props; + return ( + + ) +} + +function FilterInput(props) { + const [active, setActive] = useState(false) + const [property, setProperty] = useState("") + const [value, setValue] = useState("") + const properties=["Repository", "Service", "Namespace", "Owner", "Starred", "Domain"] + const { addFilter } = props; + const inputRef = useRef(null); + + const reset = () => { + setActive(false) + setProperty("") + setValue("") + } + + useEffect(() => { + if (property !== "") { + inputRef.current.focus(); + } + }); + + return ( + + + {property !== "" && + {property}: + } + setValue(e.target.value)} + onFocus={() => {setActive(true)}} + onBlur={() => { + setTimeout(() => { + setActive(false); + if (value !== "") { + if (property === "") { + addFilter({property: "Repository", value: value}) + } else { + addFilter({property, value}) + } + reset() + } else { + if (property !== "") { + reset() + } + } + }, 200);} + } + onKeyUp={(e) => { + if (e.keyCode === 13){ + setActive(false) + if (property === "") { + addFilter({property: "Repository", value: value}) + } else { + addFilter({property, value}) + } + reset() + } + if (e.keyCode === 27){ + reset() + // inputRef.current.blur(); + } + }} + type="search" + /> + + {active && property === "" && +
+
    + {properties.map(p => ( +
  • {setProperty(p); setActive(false); }}> + {p} +
  • + ))} +
+
+ } +
+ ) +} diff --git a/web/src/Service.jsx b/web/src/Service.jsx index 834899c..ee21bc1 100644 --- a/web/src/Service.jsx +++ b/web/src/Service.jsx @@ -41,6 +41,10 @@ function Service(props) { )) }
+
+

Dependencies

+ configmaps.. secrets.. (with view action) +

Links