summaryrefslogtreecommitdiffstats
path: root/src/components/RequestList/RequestList.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/RequestList/RequestList.tsx')
-rw-r--r--src/components/RequestList/RequestList.tsx48
1 files changed, 24 insertions, 24 deletions
diff --git a/src/components/RequestList/RequestList.tsx b/src/components/RequestList/RequestList.tsx
index a4e9a0e..82a6b21 100644
--- a/src/components/RequestList/RequestList.tsx
+++ b/src/components/RequestList/RequestList.tsx
@@ -11,27 +11,24 @@ import classNames from "classnames";
11import styles from "~/components/RequestList/RequestList.module.scss"; 11import styles from "~/components/RequestList/RequestList.module.scss";
12import RequestSummary from "~/components/RequestSummary/RequestSummary"; 12import RequestSummary from "~/components/RequestSummary/RequestSummary";
13import * as React from "react"; 13import * as React from "react";
14import { useCallback, useContext, useMemo, useState } from "react"; 14import { useCallback, useContext, useEffect, useMemo, useState } from "react";
15import { DarkModeContext } from "~/contexts/DarkMode"; 15import { DarkModeContext } from "~/contexts/DarkMode";
16import Filter from "~/components/Icons/Filter"; 16import Filter from "~/components/Icons/Filter";
17import { Method, RequestResponse } from "~/types"; 17import { Call, Method } from "~/types";
18 18import { ConnectionContext } from "~/contexts/Connection";
19interface ListProps {
20 requests: RequestResponse[];
21 selectedRequestIndex: number | null;
22 setSelectedRequestIndex: (index: number) => void;
23}
24 19
25type EnabledMethods = { 20type EnabledMethods = {
26 [method in Method]: boolean; 21 [method in Method]: boolean;
27}; 22};
28 23
29export default function RequestList({ 24export 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}