diff options
| author | 2024-08-30 15:47:20 +0200 | |
|---|---|---|
| committer | 2024-08-30 15:47:20 +0200 | |
| commit | fe61544bafafc8b4de78cc71cb641af2dfb7b72d (patch) | |
| tree | 7edff48c1638fcc26915dc1f40982ec2563cf3bf /src/components/RequestList/RequestList.tsx | |
| parent | f183536067dc694f37445148c15821f1621f5034 (diff) | |
| parent | 2f2048160fac06e94703bb03eea43185fc01f76c (diff) | |
| download | client-2.1.0.tar.gz client-2.1.0.tar.bz2 client-2.1.0.zip | |
Merge pull request #15 from tomvanderlee/feature/websocketsv2.1.0
Feature/websockets
Diffstat (limited to 'src/components/RequestList/RequestList.tsx')
| -rw-r--r-- | src/components/RequestList/RequestList.tsx | 48 |
1 files changed, 24 insertions, 24 deletions
diff --git a/src/components/RequestList/RequestList.tsx b/src/components/RequestList/RequestList.tsx index acef47a..82a6b21 100644 --- a/src/components/RequestList/RequestList.tsx +++ b/src/components/RequestList/RequestList.tsx | |||
| @@ -11,27 +11,24 @@ import classNames from "classnames"; | |||
| 11 | import styles from "~/components/RequestList/RequestList.module.scss"; | 11 | import styles from "~/components/RequestList/RequestList.module.scss"; |
| 12 | import RequestSummary from "~/components/RequestSummary/RequestSummary"; | 12 | import RequestSummary from "~/components/RequestSummary/RequestSummary"; |
| 13 | import * as React from "react"; | 13 | import * as React from "react"; |
| 14 | import { useCallback, useContext, useMemo, useState } from "react"; | 14 | import { useCallback, useContext, useEffect, useMemo, useState } from "react"; |
| 15 | import { Method, RequestResponse } from "~/hooks/useRequests"; | ||
| 16 | import { DarkModeContext } from "~/contexts/DarkMode"; | 15 | import { DarkModeContext } from "~/contexts/DarkMode"; |
| 17 | import Filter from "~/components/Icons/Filter"; | 16 | import Filter from "~/components/Icons/Filter"; |
| 18 | 17 | import { Call, Method } from "~/types"; | |
| 19 | interface ListProps { | 18 | import { ConnectionContext } from "~/contexts/Connection"; |
| 20 | requests: RequestResponse[]; | ||
| 21 | selectedRequestIndex: number | null; | ||
| 22 | setSelectedRequestIndex: (index: number) => void; | ||
| 23 | } | ||
| 24 | 19 | ||
| 25 | type EnabledMethods = { | 20 | type EnabledMethods = { |
| 26 | [method in Method]: boolean; | 21 | [method in Method]: boolean; |
| 27 | }; | 22 | }; |
| 28 | 23 | ||
| 29 | export default function RequestList({ | 24 | export default function RequestList() { |
| 30 | requests, | ||
| 31 | selectedRequestIndex, | ||
| 32 | setSelectedRequestIndex, | ||
| 33 | }: ListProps) { | ||
| 34 | const { darkMode } = useContext(DarkModeContext); | 25 | const { darkMode } = useContext(DarkModeContext); |
| 26 | const { | ||
| 27 | calls: requests, | ||
| 28 | selectedCall, | ||
| 29 | setSelectedCall, | ||
| 30 | } = useContext(ConnectionContext); | ||
| 31 | |||
| 35 | const [showFilterOptions, setShowFilterOptions] = useState(false); | 32 | const [showFilterOptions, setShowFilterOptions] = useState(false); |
| 36 | const [search, setSearch] = useState(""); | 33 | const [search, setSearch] = useState(""); |
| 37 | const [enableRegex, setEnableRegex] = useState(false); | 34 | const [enableRegex, setEnableRegex] = useState(false); |
| @@ -73,7 +70,7 @@ export default function RequestList({ | |||
| 73 | () => | 70 | () => |
| 74 | Object.entries(methods) | 71 | Object.entries(methods) |
| 75 | .filter(([method, enabled]) => enabled) | 72 | .filter(([method, enabled]) => enabled) |
| 76 | .map(([method]) => method), | 73 | .map(([method]) => method) as Method[], |
| 77 | [methods] | 74 | [methods] |
| 78 | ); | 75 | ); |
| 79 | 76 | ||
| @@ -97,16 +94,14 @@ export default function RequestList({ | |||
| 97 | } catch {} | 94 | } catch {} |
| 98 | 95 | ||
| 99 | return requests | 96 | return requests |
| 100 | .map<[number, RequestResponse]>((request, index) => [index, request]) | ||
| 101 | .reverse() | 97 | .reverse() |
| 102 | .filter( | 98 | .filter( |
| 103 | ([index, request]) => | 99 | (request) => |
| 104 | enabledMethods.length > 0 === null || | 100 | enabledMethods.length === 0 || |
| 105 | enabledMethods.includes(request.request.method) | 101 | enabledMethods.includes(request.request.method) |
| 106 | ) | 102 | ) |
| 107 | .filter( | 103 | .filter( |
| 108 | ([index, request]) => | 104 | (request) => search === "" || searchRegex.test(request.request.path) |
| 109 | search === "" || searchRegex.test(request.request.path) | ||
| 110 | ); | 105 | ); |
| 111 | }, [requests, search, enabledMethods, enableRegex]); | 106 | }, [requests, search, enabledMethods, enableRegex]); |
| 112 | 107 | ||
| @@ -124,7 +119,10 @@ export default function RequestList({ | |||
| 124 | </Dropdown.Item> | 119 | </Dropdown.Item> |
| 125 | <Dropdown.Divider /> | 120 | <Dropdown.Divider /> |
| 126 | {Object.entries(methods).map(([method, enabled]) => ( | 121 | {Object.entries(methods).map(([method, enabled]) => ( |
| 127 | <Dropdown.Item onClick={() => toggleMethods(method as Method)}> | 122 | <Dropdown.Item |
| 123 | onClick={() => toggleMethods(method as Method)} | ||
| 124 | key={method} | ||
| 125 | > | ||
| 128 | {method} | 126 | {method} |
| 129 | </Dropdown.Item> | 127 | </Dropdown.Item> |
| 130 | ))} | 128 | ))} |
| @@ -151,13 +149,14 @@ export default function RequestList({ | |||
| 151 | className={classNames(styles.list, "flex-grow-1")} | 149 | className={classNames(styles.list, "flex-grow-1")} |
| 152 | > | 150 | > |
| 153 | {filteredRequests.length > 0 ? ( | 151 | {filteredRequests.length > 0 ? ( |
| 154 | filteredRequests.map(([index, requestResponse]) => { | 152 | filteredRequests.map((requestResponse) => { |
| 155 | const selected = selectedRequestIndex === index; | 153 | const selected = |
| 154 | selectedCall?.request.id === requestResponse.request.id; | ||
| 156 | return ( | 155 | return ( |
| 157 | <ListGroup.Item | 156 | <ListGroup.Item |
| 158 | as="li" | 157 | as="li" |
| 159 | onClick={() => setSelectedRequestIndex(index)} | 158 | onClick={() => setSelectedCall?.(requestResponse)} |
| 160 | key={`request-${index}`} | 159 | key={requestResponse.request.id} |
| 161 | className={classNames({ | 160 | className={classNames({ |
| 162 | "bg-primary": selected, | 161 | "bg-primary": selected, |
| 163 | "text-light": selected, | 162 | "text-light": selected, |
| @@ -209,6 +208,7 @@ export default function RequestList({ | |||
| 209 | <Form.Label className="fw-bold">Method</Form.Label> | 208 | <Form.Label className="fw-bold">Method</Form.Label> |
| 210 | {Object.entries(methods).map(([method, enabled]) => ( | 209 | {Object.entries(methods).map(([method, enabled]) => ( |
| 211 | <Form.Check | 210 | <Form.Check |
| 211 | key={method} | ||
| 212 | type="switch" | 212 | type="switch" |
| 213 | label={method} | 213 | label={method} |
| 214 | checked={enabled} | 214 | checked={enabled} |
