|
1 | 1 | import { BinaryOperator } from "@/src/server/clause"; |
2 | 2 | import { useInfiniteQuery, useQuery } from "@tanstack/react-query"; |
3 | 3 | import { useContext, useState } from "react"; |
| 4 | +import { Link } from "wouter"; |
4 | 5 | import { AppContext } from "../lib"; |
5 | 6 | import SearchResults from "./SearchResults"; |
6 | 7 | import SessionCard from "./SessionCard"; |
@@ -114,72 +115,81 @@ export default function SessionDetail({ |
114 | 115 | ) : sessionQuery.status === "error" ? ( |
115 | 116 | <div>Error loading visit: {sessionQuery.error.message}.</div> |
116 | 117 | ) : ( |
117 | | - <div>Visit not found.</div> |
| 118 | + <div className="flex flex-col gap-6"> |
| 119 | + <h1 className="text-xl font-semibold">Visit not found</h1> |
| 120 | + |
| 121 | + <Link className="underline" href="/"> |
| 122 | + Back to search |
| 123 | + </Link> |
| 124 | + </div> |
118 | 125 | )} |
119 | | - <Tabs |
120 | | - value={tabValue} |
121 | | - onValueChange={(value) => setTabValue([value, false])} |
122 | | - className="flex-grow overflow-hidden flex flex-col" |
123 | | - > |
124 | | - <TabsList> |
125 | | - <TabsTrigger value="parents"> |
126 | | - Navigated to this page from ( |
127 | | - {parentSessionsCount === null ? "..." : parentSessionsCount}) |
128 | | - </TabsTrigger> |
129 | | - <TabsTrigger value="visits"> |
130 | | - Visits to this page ( |
131 | | - {sessionsCount === null ? "..." : sessionsCount}) |
132 | | - </TabsTrigger> |
133 | | - </TabsList> |
134 | | - <TabsContent |
135 | | - value="parents" |
136 | | - className="flex-1 overflow-y-scroll overflow-x-hidden" |
137 | | - > |
138 | | - {parentSessions.status === "error" ? ( |
139 | | - <p> |
140 | | - An error occurred while loading pages that we navigated to this |
141 | | - one from. |
142 | | - </p> |
143 | | - ) : ( |
144 | | - <> |
145 | | - <SearchResults |
146 | | - showChildren="full" |
147 | | - showControls |
148 | | - aggregate |
149 | | - animate |
150 | | - isLoading={parentSessions.status === "pending"} |
151 | | - sessions={ |
152 | | - parentSessions.data?.pages.flatMap((page) => page.results) ?? |
153 | | - [] |
154 | | - } |
155 | | - onEndReached={() => parentSessions.fetchNextPage()} |
156 | | - /> |
157 | | - </> |
158 | | - )} |
159 | | - </TabsContent> |
160 | | - <TabsContent |
161 | | - value="visits" |
162 | | - className="flex-1 overflow-y-scroll overflow-x-hidden" |
| 126 | + {sessionQuery.status === "pending" || session ? ( |
| 127 | + <Tabs |
| 128 | + value={tabValue} |
| 129 | + onValueChange={(value) => setTabValue([value, false])} |
| 130 | + className="flex-grow overflow-hidden flex flex-col gap-4" |
163 | 131 | > |
164 | | - {sessionsQuery.status === "error" ? ( |
165 | | - <p>An error occurred while loading other visits to this page.</p> |
166 | | - ) : ( |
167 | | - <> |
168 | | - <SearchResults |
169 | | - showChildren="full" |
170 | | - showControls |
171 | | - animate |
172 | | - isLoading={sessionsQuery.status === "pending"} |
173 | | - sessions={ |
174 | | - sessionsQuery.data?.pages.flatMap((page) => page.results) ?? |
175 | | - [] |
176 | | - } |
177 | | - onEndReached={() => sessionsQuery.fetchNextPage()} |
178 | | - /> |
179 | | - </> |
180 | | - )} |
181 | | - </TabsContent> |
182 | | - </Tabs> |
| 132 | + <TabsList> |
| 133 | + <TabsTrigger value="parents"> |
| 134 | + Navigated to this page from ( |
| 135 | + {parentSessionsCount === null ? "..." : parentSessionsCount}) |
| 136 | + </TabsTrigger> |
| 137 | + <TabsTrigger value="visits"> |
| 138 | + Visits to this page ( |
| 139 | + {sessionsCount === null ? "..." : sessionsCount}) |
| 140 | + </TabsTrigger> |
| 141 | + </TabsList> |
| 142 | + <TabsContent |
| 143 | + value="parents" |
| 144 | + className="flex-1 overflow-y-scroll overflow-x-hidden" |
| 145 | + > |
| 146 | + {parentSessions.status === "error" ? ( |
| 147 | + <p> |
| 148 | + An error occurred while loading pages that we navigated to this |
| 149 | + one from. |
| 150 | + </p> |
| 151 | + ) : ( |
| 152 | + <> |
| 153 | + <SearchResults |
| 154 | + showChildren="full" |
| 155 | + showControls |
| 156 | + aggregate |
| 157 | + animate |
| 158 | + isLoading={parentSessions.status === "pending"} |
| 159 | + sessions={ |
| 160 | + parentSessions.data?.pages.flatMap( |
| 161 | + (page) => page.results, |
| 162 | + ) ?? [] |
| 163 | + } |
| 164 | + onEndReached={() => parentSessions.fetchNextPage()} |
| 165 | + /> |
| 166 | + </> |
| 167 | + )} |
| 168 | + </TabsContent> |
| 169 | + <TabsContent |
| 170 | + value="visits" |
| 171 | + className="flex-1 overflow-y-scroll overflow-x-hidden" |
| 172 | + > |
| 173 | + {sessionsQuery.status === "error" ? ( |
| 174 | + <p>An error occurred while loading other visits to this page.</p> |
| 175 | + ) : ( |
| 176 | + <> |
| 177 | + <SearchResults |
| 178 | + showChildren="full" |
| 179 | + showControls |
| 180 | + animate |
| 181 | + isLoading={sessionsQuery.status === "pending"} |
| 182 | + sessions={ |
| 183 | + sessionsQuery.data?.pages.flatMap((page) => page.results) ?? |
| 184 | + [] |
| 185 | + } |
| 186 | + onEndReached={() => sessionsQuery.fetchNextPage()} |
| 187 | + /> |
| 188 | + </> |
| 189 | + )} |
| 190 | + </TabsContent> |
| 191 | + </Tabs> |
| 192 | + ) : null} |
183 | 193 | </> |
184 | 194 | ); |
185 | 195 | } |
0 commit comments