Skip to content

Commit 2861a7a

Browse files
committed
search for new players
1 parent e159967 commit 2861a7a

File tree

4 files changed

+88
-1
lines changed

4 files changed

+88
-1
lines changed

src/components/homePage.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,12 @@ export default function HomePage(): React.ReactElement {
4545
>
4646
Whitelist Menu
4747
</Link>
48+
<Link
49+
to={"/new_players"}
50+
className="border border-[#555555] rounded p-3 cursor-pointer grow clicky"
51+
>
52+
New Players
53+
</Link>
4854

4955
<RoundData />
5056
</div>

src/components/newPlayers.tsx

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
import React, { useEffect, useState } from "react";
2+
import { Player } from "./userLookup";
3+
import { callApi } from "../helpers/api";
4+
import { NameExpand } from "./nameExpand";
5+
import { DetailedCid } from "./detailedCid";
6+
import { DetailedIp } from "./detailedIp";
7+
8+
export const NewPlayers: React.FC = () => {
9+
const [newPlayers, setNewPlayers] = useState<Player[]>();
10+
const [searchedTime, setSearchedTime] = useState<number | undefined>();
11+
12+
const [timeAgo, setTimeAgo] = useState(240);
13+
14+
useEffect(() => {
15+
if (newPlayers && searchedTime === timeAgo) return;
16+
17+
callApi(`/NewPlayers/${timeAgo}`).then((value) => {
18+
value.json().then((json: Player[]) => {
19+
setNewPlayers(json);
20+
setSearchedTime(timeAgo);
21+
});
22+
});
23+
}, [newPlayers, timeAgo, searchedTime]);
24+
25+
if (!newPlayers) {
26+
return "Loading...";
27+
}
28+
29+
return (
30+
<div className="flex flex-col gap-3">
31+
<div className="flex flex-row gap-3 justify-end">
32+
<label>Joins since (minutes ago):</label>
33+
<input
34+
onKeyDown={(ev) => {
35+
if (ev.key === "Enter") {
36+
console.log("doing it");
37+
setTimeAgo(Number.parseInt(ev.currentTarget.value));
38+
}
39+
}}
40+
defaultValue={240}
41+
type="number"
42+
/>
43+
</div>
44+
<table>
45+
<thead>
46+
<tr>
47+
<th>CKEY</th>
48+
<th>Time Connected</th>
49+
<th>CID</th>
50+
<th>IP</th>
51+
</tr>
52+
</thead>
53+
<tbody>
54+
{newPlayers.map((player) => (
55+
<tr key={player.ckey}>
56+
<td>
57+
<NameExpand name={player.ckey} />
58+
</td>
59+
<td>
60+
{new Date(
61+
Date.parse(player.firstJoinDate!.replace(" ", "T"))
62+
).toLocaleString()}
63+
</td>
64+
<td>
65+
<DetailedCid cid={player.lastKnownCid} />
66+
</td>
67+
<td>
68+
<DetailedIp ip={player.lastKnownIp} />{" "}
69+
</td>
70+
</tr>
71+
))}
72+
</tbody>
73+
</table>
74+
</div>
75+
);
76+
};

src/components/userLookup.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ export const LookupMenu: React.FC<LookupMenuProps> = (
134134
);
135135
};
136136

137-
interface Player {
137+
export interface Player {
138138
id: number;
139139
ckey: string;
140140
lastLogin: string;

src/main.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { Tickets } from "./components/tickets";
88
import HomePage from "./components/homePage";
99
import { createHashRouter, RouterProvider } from "react-router-dom";
1010
import { WhitelistMenu } from "./components/whitelistPanel";
11+
import { NewPlayers } from "./components/newPlayers";
1112

1213
const router = createHashRouter([
1314
{
@@ -43,6 +44,10 @@ const router = createHashRouter([
4344
path: "/whitelists",
4445
element: <WhitelistMenu />,
4546
},
47+
{
48+
path: "/new_players",
49+
element: <NewPlayers />,
50+
},
4651
],
4752
},
4853
]);

0 commit comments

Comments
 (0)