in tools/awps-tunnel/client/src/panels/RequestHistory.tsx [29:99]
export function RequestHistory(props: RequestHistoryProps) {
const [items, setItems] = useState<HttpHistoryItem[]>([]);
const [openDialog, setOpenDialog] = useState<boolean>(false);
const [selectedItem, setSelectedItem] = useState<HttpHistoryItem | undefined>(undefined);
const [searchParams] = useSearchParams();
const detailId = parseInt(searchParams.get("detailId") ?? "-1");
const { data, dataFetcher } = useDataContext();
useEffect(() => {
setItems(data.trafficHistory);
props.onUnreadChange(data.trafficHistory.filter((s) => s.unread).length);
}, [props, data.trafficHistory]);
useEffect(() => {
if (selectedItem) {
return;
}
if (detailId !== undefined && detailId >= 0) {
var selected = items.find((s) => s.id === detailId);
if (selected) {
setSelectedItem(selected);
}
}
}, [items, selectedItem, detailId]);
function clearRequestHistory() {
dataFetcher.invoke("clearTrafficHistory");
setSelectedItem(undefined);
}
const overviewPanel = (
<table className="table table-hover" aria-labelledby="tabelLabel">
<thead>
<tr>
<th>Time</th>
<th>Method</th>
<th>URL</th>
<th>Status</th>
</tr>
</thead>
<tbody>
{items.map((item) => (
<tr
key={(item.id ?? 0) + (item.code ?? 0) * 1000}
className={item.unread ? "unread" : item === selectedItem ? "active" : ""}
onClick={() => {
item.unread = false;
props.onUnreadChange(data.trafficHistory.filter((s) => s.unread).length);
setSelectedItem(item);
}}
>
<td>{moment(item.requestAtOffset).fromNow()}</td>
<td className={(item?.code ?? 500) < 300 ? "text-success" : "text-warning"}>
<b>{item.methodName}</b>
</td>
<td>{item.url}</td>
<td>{item.code ?? "(Waiting for response)"}</td>
</tr>
))}
</tbody>
</table>
);
const detailPanel = <Details item={selectedItem}></Details>;
return (
<div className="d-flex flex-row server-container overflow-auto flex-fill">
<div className="table-container flex-fill d-flex flex-column">
<div className="d-flex flex-row">
<h5 className="m-2">All requests</h5>
<div className="flex-fill"></div>
<div className="flex-right">
<Dialog open={openDialog} onOpenChange={(event, data) => setOpenDialog(data.open)}>