fix: handle empty stays in query
This commit is contained in:
@@ -27,19 +27,20 @@ export default function PreviousStays({
|
|||||||
)
|
)
|
||||||
|
|
||||||
function loadMoreData() {
|
function loadMoreData() {
|
||||||
|
if (hasNextPage) {
|
||||||
fetchNextPage()
|
fetchNextPage()
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const stays = data?.pages.flatMap((page) => page.data) ?? []
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Container>
|
<Container>
|
||||||
<Header title={title} subtitle={subtitle} link={link} />
|
<Header title={title} subtitle={subtitle} link={link} />
|
||||||
|
|
||||||
{data?.pages.length ? (
|
{stays.length ? (
|
||||||
<ListContainer>
|
<ListContainer>
|
||||||
<StayList
|
<StayList lang={lang} stays={stays} />
|
||||||
lang={lang}
|
|
||||||
stays={data?.pages.flatMap((page) => page.data) ?? []}
|
|
||||||
/>
|
|
||||||
{hasNextPage ? (
|
{hasNextPage ? (
|
||||||
<ShowMoreButton disabled={isFetching} loadMoreData={loadMoreData} />
|
<ShowMoreButton disabled={isFetching} loadMoreData={loadMoreData} />
|
||||||
) : null}
|
) : null}
|
||||||
|
|||||||
@@ -33,16 +33,15 @@ export default function UpcomingStays({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const stays = data?.pages.flatMap((page) => page.data) ?? []
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Container>
|
<Container>
|
||||||
<Header title={title} subtitle={subtitle} link={link} />
|
<Header title={title} subtitle={subtitle} link={link} />
|
||||||
|
|
||||||
{data?.pages.length ? (
|
{stays.length ? (
|
||||||
<ListContainer>
|
<ListContainer>
|
||||||
<StayList
|
<StayList lang={lang} stays={stays} />
|
||||||
lang={lang}
|
|
||||||
stays={data?.pages.flatMap((page) => page.data) ?? []}
|
|
||||||
/>
|
|
||||||
{hasNextPage ? (
|
{hasNextPage ? (
|
||||||
<ShowMoreButton disabled={isFetching} loadMoreData={loadMoreData} />
|
<ShowMoreButton disabled={isFetching} loadMoreData={loadMoreData} />
|
||||||
) : null}
|
) : null}
|
||||||
|
|||||||
@@ -78,14 +78,16 @@ export const getStaysSchema = z.object({
|
|||||||
}),
|
}),
|
||||||
})
|
})
|
||||||
),
|
),
|
||||||
links: z.object({
|
links: z
|
||||||
|
.object({
|
||||||
self: z.string(),
|
self: z.string(),
|
||||||
offset: z.number(),
|
offset: z.number(),
|
||||||
limit: z.number(),
|
limit: z.number(),
|
||||||
totalCount: z.number(),
|
totalCount: z.number(),
|
||||||
}),
|
})
|
||||||
|
.nullable(),
|
||||||
})
|
})
|
||||||
|
|
||||||
type GetStaysData = z.infer<typeof getStaysSchema>
|
export type GetStaysData = z.infer<typeof getStaysSchema>
|
||||||
|
|
||||||
export type Stay = GetStaysData["data"][number]
|
export type Stay = GetStaysData["data"][0]
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
import { z } from "zod"
|
|
||||||
|
|
||||||
import * as api from "@/lib/api"
|
import * as api from "@/lib/api"
|
||||||
import {
|
import {
|
||||||
badRequestError,
|
badRequestError,
|
||||||
@@ -43,6 +41,7 @@ export const userQueryRouter = router({
|
|||||||
}
|
}
|
||||||
|
|
||||||
const apiJson = await apiResponse.json()
|
const apiJson = await apiResponse.json()
|
||||||
|
|
||||||
if (!apiJson.data?.length) {
|
if (!apiJson.data?.length) {
|
||||||
throw internalServerError()
|
throw internalServerError()
|
||||||
}
|
}
|
||||||
@@ -113,7 +112,7 @@ export const userQueryRouter = router({
|
|||||||
}
|
}
|
||||||
|
|
||||||
const apiJson = await apiResponse.json()
|
const apiJson = await apiResponse.json()
|
||||||
if (!apiJson.data?.length) {
|
if (!apiJson.data) {
|
||||||
console.error(`Get Previous Stays - No data found from api call`)
|
console.error(`Get Previous Stays - No data found from api call`)
|
||||||
throw internalServerError()
|
throw internalServerError()
|
||||||
}
|
}
|
||||||
@@ -127,6 +126,7 @@ export const userQueryRouter = router({
|
|||||||
}
|
}
|
||||||
|
|
||||||
const nextCursor =
|
const nextCursor =
|
||||||
|
verifiedData.data.links &&
|
||||||
verifiedData.data.links.offset < verifiedData.data.links.totalCount
|
verifiedData.data.links.offset < verifiedData.data.links.totalCount
|
||||||
? verifiedData.data.links.offset
|
? verifiedData.data.links.offset
|
||||||
: undefined
|
: undefined
|
||||||
@@ -177,7 +177,7 @@ export const userQueryRouter = router({
|
|||||||
}
|
}
|
||||||
|
|
||||||
const apiJson = await apiResponse.json()
|
const apiJson = await apiResponse.json()
|
||||||
if (!apiJson.data?.length) {
|
if (!apiJson.data) {
|
||||||
console.error(`Get Upcoming Stays - No data found from api call`)
|
console.error(`Get Upcoming Stays - No data found from api call`)
|
||||||
throw internalServerError()
|
throw internalServerError()
|
||||||
}
|
}
|
||||||
@@ -191,6 +191,7 @@ export const userQueryRouter = router({
|
|||||||
}
|
}
|
||||||
|
|
||||||
const nextCursor =
|
const nextCursor =
|
||||||
|
verifiedData.data.links &&
|
||||||
verifiedData.data.links.offset < verifiedData.data.links.totalCount
|
verifiedData.data.links.offset < verifiedData.data.links.totalCount
|
||||||
? verifiedData.data.links.offset
|
? verifiedData.data.links.offset
|
||||||
: undefined
|
: undefined
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
import { randomUUID } from "crypto"
|
|
||||||
|
|
||||||
export const benefits = [
|
export const benefits = [
|
||||||
{
|
{
|
||||||
id: 1,
|
id: 1,
|
||||||
@@ -71,6 +69,10 @@ export const nextLevelPerks = {
|
|||||||
id: 3,
|
id: 3,
|
||||||
explanation: "25% extra bonus points on each stay",
|
explanation: "25% extra bonus points on each stay",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
id: 4,
|
||||||
|
explanation: "25% extra bonus points on each stay",
|
||||||
|
},
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -113,180 +115,6 @@ export const shortcuts = [
|
|||||||
// },
|
// },
|
||||||
]
|
]
|
||||||
|
|
||||||
export const previousStays = [
|
|
||||||
{
|
|
||||||
uid: randomUUID(),
|
|
||||||
dateArrive: new Date("04 27 2024"),
|
|
||||||
dateDepart: new Date("04 28 2024"),
|
|
||||||
guests: 2,
|
|
||||||
hotel: "Scandic Helsinki Hub",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
uid: randomUUID(),
|
|
||||||
dateArrive: new Date("05 27 2024"),
|
|
||||||
dateDepart: new Date("05 28 2024"),
|
|
||||||
guests: 2,
|
|
||||||
hotel: "Scandic Örebro Central",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
uid: randomUUID(),
|
|
||||||
dateArrive: new Date("06 27 2024"),
|
|
||||||
dateDepart: new Date("06 28 2024"),
|
|
||||||
guests: 2,
|
|
||||||
hotel: "Scandic Oslo City",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
uid: randomUUID(),
|
|
||||||
dateArrive: new Date("04 27 2024"),
|
|
||||||
dateDepart: new Date("04 28 2024"),
|
|
||||||
guests: 2,
|
|
||||||
hotel: "Scandic Lorem",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
uid: randomUUID(),
|
|
||||||
dateArrive: new Date("05 27 2024"),
|
|
||||||
dateDepart: new Date("05 28 2024"),
|
|
||||||
guests: 2,
|
|
||||||
hotel: "Scandic Ipsum",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
uid: randomUUID(),
|
|
||||||
dateArrive: new Date("06 27 2024"),
|
|
||||||
dateDepart: new Date("06 28 2024"),
|
|
||||||
guests: 2,
|
|
||||||
hotel: "Scandic Dolor Sin Amet",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
uid: randomUUID(),
|
|
||||||
dateArrive: new Date("06 27 2024"),
|
|
||||||
dateDepart: new Date("06 28 2024"),
|
|
||||||
guests: 2,
|
|
||||||
hotel: "Scandic Anglais",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
uid: randomUUID(),
|
|
||||||
dateArrive: new Date("06 27 2024"),
|
|
||||||
dateDepart: new Date("06 28 2024"),
|
|
||||||
guests: 2,
|
|
||||||
hotel: "Scandic Park",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
uid: randomUUID(),
|
|
||||||
dateArrive: new Date("06 27 2024"),
|
|
||||||
dateDepart: new Date("06 28 2024"),
|
|
||||||
guests: 2,
|
|
||||||
hotel: "Scandic Klara",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
uid: randomUUID(),
|
|
||||||
dateArrive: new Date("06 27 2024"),
|
|
||||||
dateDepart: new Date("06 28 2024"),
|
|
||||||
guests: 2,
|
|
||||||
hotel: "Scandic Järva Krog",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
uid: randomUUID(),
|
|
||||||
dateArrive: new Date("06 27 2024"),
|
|
||||||
dateDepart: new Date("06 28 2024"),
|
|
||||||
guests: 2,
|
|
||||||
hotel: "Scandic Kiruna",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
uid: randomUUID(),
|
|
||||||
dateArrive: new Date("06 27 2024"),
|
|
||||||
dateDepart: new Date("06 28 2024"),
|
|
||||||
guests: 2,
|
|
||||||
hotel: "Scandic Umeå",
|
|
||||||
},
|
|
||||||
]
|
|
||||||
|
|
||||||
export const upcomingStays = [
|
|
||||||
{
|
|
||||||
uid: randomUUID(),
|
|
||||||
dateArrive: new Date("04 27 2024"),
|
|
||||||
dateDepart: new Date("04 28 2024"),
|
|
||||||
guests: 2,
|
|
||||||
hotel: "Scandic Helsinki Hub",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
uid: randomUUID(),
|
|
||||||
dateArrive: new Date("05 27 2024"),
|
|
||||||
dateDepart: new Date("05 28 2024"),
|
|
||||||
guests: 2,
|
|
||||||
hotel: "Scandic Örebro Central",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
uid: randomUUID(),
|
|
||||||
dateArrive: new Date("06 27 2024"),
|
|
||||||
dateDepart: new Date("06 28 2024"),
|
|
||||||
guests: 2,
|
|
||||||
hotel: "Scandic Oslo City",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
uid: randomUUID(),
|
|
||||||
dateArrive: new Date("04 27 2024"),
|
|
||||||
dateDepart: new Date("04 28 2024"),
|
|
||||||
guests: 2,
|
|
||||||
hotel: "Scandic Lorem",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
uid: randomUUID(),
|
|
||||||
dateArrive: new Date("05 27 2024"),
|
|
||||||
dateDepart: new Date("05 28 2024"),
|
|
||||||
guests: 2,
|
|
||||||
hotel: "Scandic Ipsum",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
uid: randomUUID(),
|
|
||||||
dateArrive: new Date("06 27 2024"),
|
|
||||||
dateDepart: new Date("06 28 2024"),
|
|
||||||
guests: 2,
|
|
||||||
hotel: "Scandic Dolor Sin Amet",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
uid: randomUUID(),
|
|
||||||
dateArrive: new Date("06 27 2024"),
|
|
||||||
dateDepart: new Date("06 28 2024"),
|
|
||||||
guests: 2,
|
|
||||||
hotel: "Scandic Anglais",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
uid: randomUUID(),
|
|
||||||
dateArrive: new Date("06 27 2024"),
|
|
||||||
dateDepart: new Date("06 28 2024"),
|
|
||||||
guests: 2,
|
|
||||||
hotel: "Scandic Park",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
uid: randomUUID(),
|
|
||||||
dateArrive: new Date("06 27 2024"),
|
|
||||||
dateDepart: new Date("06 28 2024"),
|
|
||||||
guests: 2,
|
|
||||||
hotel: "Scandic Klara",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
uid: randomUUID(),
|
|
||||||
dateArrive: new Date("06 27 2024"),
|
|
||||||
dateDepart: new Date("06 28 2024"),
|
|
||||||
guests: 2,
|
|
||||||
hotel: "Scandic Järva Krog",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
uid: randomUUID(),
|
|
||||||
dateArrive: new Date("06 27 2024"),
|
|
||||||
dateDepart: new Date("06 28 2024"),
|
|
||||||
guests: 2,
|
|
||||||
hotel: "Scandic Kiruna",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
uid: randomUUID(),
|
|
||||||
dateArrive: new Date("06 27 2024"),
|
|
||||||
dateDepart: new Date("06 28 2024"),
|
|
||||||
guests: 2,
|
|
||||||
hotel: "Scandic Umeå",
|
|
||||||
},
|
|
||||||
]
|
|
||||||
|
|
||||||
export const extendedUser = {
|
export const extendedUser = {
|
||||||
journeys: challenges.journeys,
|
journeys: challenges.journeys,
|
||||||
nights: 14,
|
nights: 14,
|
||||||
|
|||||||
Reference in New Issue
Block a user