Skip to content

Commit 0362660

Browse files
committed
Add client-side import and implement modal select component
1 parent 98e73c0 commit 0362660

File tree

2 files changed

+128
-11
lines changed

2 files changed

+128
-11
lines changed

apps/nextjs/src/app/dashboard/page.tsx

+117-7
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
"use client";
2+
3+
import { useEffect, useState } from "react";
14
import { Metadata } from "next";
25
import Image from "next/image";
36
import { Button } from "@/components/ui/button";
@@ -8,17 +11,34 @@ import {
811
CardHeader,
912
CardTitle,
1013
} from "@/components/ui/card";
14+
import {
15+
Dialog,
16+
DialogContent,
17+
DialogDescription,
18+
DialogHeader,
19+
DialogTitle,
20+
DialogTrigger,
21+
} from "@/components/ui/dialog";
1122
import {
1223
ResizableHandle,
1324
ResizablePanel,
1425
ResizablePanelGroup,
1526
} from "@/components/ui/resizable";
1627
import { ScrollArea } from "@/components/ui/scroll-area";
28+
import {
29+
Select,
30+
SelectContent,
31+
SelectItem,
32+
SelectTrigger,
33+
SelectValue,
34+
} from "@/components/ui/select";
1735
import { Separator } from "@/components/ui/separator";
1836
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
37+
import { trpc } from "@/lib/utils/trpc";
1938

2039
// import { allEvents } from "../matches/getEvents";
2140
import { allEvents } from "../matches/getEvents";
41+
import { addEvents } from "./actions";
2242
import Assignments from "./Assignments";
2343
import { CalendarDateRangePicker } from "./components/date-range-picker";
2444
import { MainNav } from "./components/main-nav";
@@ -28,19 +48,107 @@ import { Search } from "./components/search";
2848
import TeamSwitcher from "./components/team-switcher";
2949
import { UserNav } from "./components/user-nav";
3050

31-
export const metadata: Metadata = {
32-
title: "Dashboard",
33-
description: "Example dashboard app built using the components.",
51+
// export const metadata: Metadata = {
52+
// title: "Dashboard",
53+
// description: "Example dashboard app built using the components.",
54+
// };
55+
56+
const ModalSelectComponent = ({ events, selectedEvent, setSelectedEvent }) => {
57+
const handleValueChange = (value) => {
58+
setSelectedEvent(value);
59+
};
60+
61+
return (
62+
<div>
63+
<Dialog>
64+
<DialogTrigger asChild>
65+
<Button>{selectedEvent}</Button>
66+
</DialogTrigger>
67+
<DialogContent>
68+
<DialogHeader>
69+
<DialogTitle>Select an Option</DialogTitle>
70+
</DialogHeader>
71+
<Select onValueChange={handleValueChange}>
72+
<SelectTrigger className="w-[180px]">
73+
<SelectValue placeholder="Choose One" />
74+
</SelectTrigger>
75+
{/* <SelectTrigger className="w-[180px]">
76+
<SelectValue>
77+
{selectedEvent ? selectedEvent : "Choose one"}
78+
</SelectValue>
79+
</SelectTrigger> */}
80+
<SelectContent>
81+
{events.map((event) => (
82+
<SelectItem
83+
key={event.name}
84+
value={event.key}
85+
onSelect={() => console.log(event)}
86+
>
87+
{event.name}
88+
</SelectItem>
89+
))}
90+
</SelectContent>
91+
<Button onClick={() => console.log("PLEASE: ", selectedEvent)}>
92+
test
93+
</Button>
94+
</Select>
95+
</DialogContent>
96+
</Dialog>
97+
</div>
98+
);
3499
};
35100

36-
export default function DashboardPage() {
101+
function DashboardPage() {
102+
const [events, setEvents] = useState([]);
103+
// const [keys, setKeys] = useState([]);
104+
const [selectedEvent, setSelectedEvent] = useState("Choose one");
105+
106+
useEffect(() => {
107+
handleSubmit();
108+
}, []);
109+
110+
const { data, refetch } = trpc.tba.teamEvents.useQuery(
111+
{
112+
teamKey: "frc3256",
113+
year: 2023,
114+
},
115+
{ enabled: false },
116+
);
117+
118+
const handleSubmit = async () => {
119+
try {
120+
refetch();
121+
setEvents(data.map((event) => ({ name: event.name, key: event.key })));
122+
123+
// setKeys(data.map((event) => event.key));
124+
console.log("I AM RIGH THERE: ", selectedEvent);
125+
// addEvents({ events: { name: "test", key: "test" } });
126+
for (let i = 0; i < events.length; i++) {
127+
console.log("EVENTS: ", events[i]);
128+
addEvents({ event: events[i] });
129+
}
130+
} catch (error) {
131+
console.error("Error fetching events:", error);
132+
}
133+
};
37134
return (
38135
<div className="flex-1 space-y-4 p-8 pt-6">
39136
<div className="flex items-center justify-between space-y-2">
40137
<h2 className="text-3xl font-bold tracking-tight">Dashboard</h2>
41138
<div className="flex items-center space-x-2">
42-
<CalendarDateRangePicker />
43-
<Button>Download</Button>
139+
<ModalSelectComponent
140+
events={events}
141+
selectedEvent={selectedEvent}
142+
setSelectedEvent={setSelectedEvent}
143+
/>
144+
{/* <CalendarDateRangePicker /> */}
145+
{/* <Button>Download</Button> */}
146+
{/* <button type="button" onClick={handleSubmit}>
147+
hello
148+
</button> */}
149+
<Button type="button" onClick={handleSubmit}>
150+
Fetch Events
151+
</Button>
44152
{/* <p>DATA: </p> */}
45153
{/* {allEvents("frc3256", 2024)} */}
46154
{/* <allEvents team="frc3256" y={2024} /> */}
@@ -60,7 +168,7 @@ export default function DashboardPage() {
60168
</TabsTrigger>
61169
</TabsList>
62170
<TabsContent value="assignments" className="h-[75vh] space-y-4">
63-
<Assignments />
171+
<Assignments selectedEvent={selectedEvent} />
64172
</TabsContent>
65173
{/* <TabsContent value="overview" className="space-y-4">
66174
<div className="grid gap-4 md:grid-cols-2 lg:grid-cols-4">
@@ -192,3 +300,5 @@ export default function DashboardPage() {
192300
</div>
193301
);
194302
}
303+
304+
export default trpc.withTRPC(DashboardPage);

packages/api/src/router/tba.ts

+11-4
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@ import { createTRPCRouter, protectedProcedure, publicProcedure } from "../trpc";
66

77
export const tbaRouter = createTRPCRouter({
88
teamEvents: publicProcedure
9-
.input(z.object({ teamKey: z.string(), year: z.number() }))
9+
.input(z.object({ teamKey: z.string() }))
10+
.input(z.object({ year: z.number() }))
1011
.query(async ({ input }) => {
1112
const response = await axios.get(
1213
`https://www.thebluealliance.com/api/v3/team/${input.teamKey}/events/${input.year}`,
14+
// `https://www.thebluealliance.com/api/v3/team/${input.teamKey}/events/`,
1315
{
1416
headers: {
1517
"X-TBA-Auth-Key":
@@ -19,13 +21,18 @@ export const tbaRouter = createTRPCRouter({
1921
);
2022

2123
const extractedData = (
22-
response.data as { event_code: string; key: string }[]
23-
).map((event: { event_code: string; key: string }) => ({
24+
response.data as { event_code: string; key: string; name: string }[]
25+
).map((event: { event_code: string; name: string }) => ({
2426
event_code: event.event_code,
2527
key: event.key,
28+
name: event.name,
2629
}));
2730

28-
return extractedData as { event_code: string; key: string }[];
31+
return extractedData as {
32+
event_code: string;
33+
key: string;
34+
name: string;
35+
}[];
2936
}),
3037
eventMatches: publicProcedure
3138
.input(z.object({ teamKey: z.string() }))

0 commit comments

Comments
 (0)