From 0757bd2b556996b9c434ac43e3e4a3b042ef5802 Mon Sep 17 00:00:00 2001 From: Nate Sesti Date: Fri, 25 Aug 2023 16:59:02 -0700 Subject: feat: :sparkles: filter history by workspace --- extension/react-app/src/components/CheckDiv.tsx | 46 +++++++++++++++++++++++++ extension/react-app/src/pages/history.tsx | 21 +++++++++++ 2 files changed, 67 insertions(+) create mode 100644 extension/react-app/src/components/CheckDiv.tsx (limited to 'extension/react-app/src') diff --git a/extension/react-app/src/components/CheckDiv.tsx b/extension/react-app/src/components/CheckDiv.tsx new file mode 100644 index 00000000..e595d70b --- /dev/null +++ b/extension/react-app/src/components/CheckDiv.tsx @@ -0,0 +1,46 @@ +import { useState } from "react"; +import styled from "styled-components"; +import { defaultBorderRadius, vscBackground, vscForeground } from "."; +import { CheckIcon } from "@heroicons/react/24/outline"; + +interface CheckDivProps { + title: string; + checked: boolean; + onClick: () => void; +} + +const StyledDiv = styled.div<{ checked: boolean }>` + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; + padding: 0.5rem; + border-radius: ${defaultBorderRadius}; + cursor: pointer; + border: 1px solid ${vscForeground}; + + color: ${vscForeground}; + background-color: ${vscBackground}; + + &:hover { + background-color: ${vscForeground}; + color: ${vscBackground}; + } + width: fit-content; + + margin: 0.5rem; + height: 1.4em; +`; + +function CheckDiv(props: CheckDivProps) { + const { title, checked, onClick } = props; + + return ( + + {checked && } + {title} + + ); +} + +export default CheckDiv; diff --git a/extension/react-app/src/pages/history.tsx b/extension/react-app/src/pages/history.tsx index 2eb895b1..2a3070e6 100644 --- a/extension/react-app/src/pages/history.tsx +++ b/extension/react-app/src/pages/history.tsx @@ -7,6 +7,7 @@ import { useNavigate } from "react-router-dom"; import { secondaryDark, vscBackground } from "../components"; import styled from "styled-components"; import { ArrowLeftIcon } from "@heroicons/react/24/outline"; +import CheckDiv from "../components/CheckDiv"; const Tr = styled.tr` &:hover { @@ -36,6 +37,11 @@ function History() { const [sessions, setSessions] = useState([]); const client = useContext(GUIClientContext); const apiUrl = useSelector((state: RootStore) => state.config.apiUrl); + const workspacePaths = useSelector( + (state: RootStore) => state.config.workspacePaths + ); + + const [filteringByWorkspace, setFilteringByWorkspace] = useState(false); useEffect(() => { const fetchSessions = async () => { @@ -67,9 +73,24 @@ function History() { />

History

+ setFilteringByWorkspace((prev) => !prev)} + title="Filter by workspace" + /> {sessions + .filter((session) => { + if ( + !filteringByWorkspace || + typeof workspacePaths === "undefined" || + typeof session.workspace_directory === "undefined" + ) { + return true; + } + return workspacePaths.includes(session.workspace_directory); + }) .sort( (a, b) => parseDate(b.date_created).getTime() - -- cgit v1.2.3-70-g09d2