"use client" import { useIntl } from "react-intl" import { dt } from "@/lib/dt" import { trpc } from "@/lib/trpc/client" import Header from "@/components/MyPages/Blocks/Header" import styles from "./earnAndBurn.module.css" import { AccountPageComponentProps } from "@/types/components/myPages/myPage/accountPage" import { Page, RowProps } from "@/types/components/myPages/myPage/earnAndBurn" const tableHeadings = [ "Arrival date", "Description", "Booking number", "Transaction date", "Points", ] function EarnAndBurn({ lang, title, subtitle, link, }: AccountPageComponentProps) { const intl = useIntl() const { data, hasNextPage, fetchNextPage } = trpc.user.transaction.friendTransactions.useInfiniteQuery( { limit: 5 }, { getNextPageParam: (lastPage: Page) => lastPage.nextCursor, } ) function loadMoreData() { if (hasNextPage) { fetchNextPage() } } const transactions = data?.pages.flatMap((page) => page.data) ?? [] return (
{transactions.length ? ( transactions.map((transaction) => ( )) ) : ( )}
{intl.formatMessage({ id: "Transactions" })} {intl.formatMessage({ id: "Points" })}
{dt(transaction.checkinDate) .locale(lang) .format("DD MMM YYYY")} {transaction.hotelName && transaction.city ? ( {`${transaction.hotelName}, ${transaction.city}`} ) : null} {`${transaction.nights} ${intl.formatMessage({ id: transaction.nights === 1 ? "night" : "nights" })}`} {`${transaction.awardPoints} P`}
{intl.formatMessage({ id: "Empty" })}
{transactions.length ? ( {tableHeadings.map((heading) => ( ))} {transactions.map((transaction) => ( ))}
{intl.formatMessage({ id: heading })}
) : ( // TODO: add once pagination is available through API // {tableHeadings.map((heading) => ( ))}
{heading}
{intl.formatMessage({ id: "No transactions available" })}
)}
) } function Row({ transaction, lang }: RowProps) { const intl = useIntl() const description = transaction.hotelName && transaction.city ? `${intl.formatMessage({ id: transaction.hotelName })}, ${transaction.city} ${transaction.nights} ${intl.formatMessage({ id: "nights" })}` : `${transaction.nights} ${intl.formatMessage({ id: "nights" })}` const arrival = dt(transaction.checkinDate).locale(lang).format("DD MMM YYYY") const departure = dt(transaction.checkoutDate) .locale(lang) .format("DD MMM YYYY") const values = [ arrival, description, transaction.confirmationNumber, departure, transaction.awardPoints, ] return ( {values.map((value, idx) => ( {value} ))} ) } export default EarnAndBurn