🚸 (results) Improve time filter so that it takes into account user timezone

This commit is contained in:
Baptiste Arnaud
2024-03-15 10:13:46 +01:00
parent 001e696bf6
commit f6d2b15a16
10 changed files with 291 additions and 153 deletions

View File

@@ -8,7 +8,10 @@ import {
timeFilterValues,
defaultTimeFilter,
} from '@/features/analytics/constants'
import { parseDateFromTimeFilter } from '@/features/analytics/helpers/parseDateFromTimeFilter'
import {
parseFromDateFromTimeFilter,
parseToDateFromTimeFilter,
} from '@/features/analytics/helpers/parseDateFromTimeFilter'
const maxLimit = 100
@@ -32,6 +35,7 @@ export const getResults = authenticatedProcedure
limit: z.coerce.number().min(1).max(maxLimit).default(50),
cursor: z.string().optional(),
timeFilter: z.enum(timeFilterValues).default(defaultTimeFilter),
timeZone: z.string().optional(),
})
)
.output(
@@ -77,7 +81,11 @@ export const getResults = authenticatedProcedure
if (!typebot || (await isReadTypebotForbidden(typebot, user)))
throw new TRPCError({ code: 'NOT_FOUND', message: 'Typebot not found' })
const date = parseDateFromTimeFilter(input.timeFilter)
const fromDate = parseFromDateFromTimeFilter(
input.timeFilter,
input.timeZone
)
const toDate = parseToDateFromTimeFilter(input.timeFilter, input.timeZone)
const results = await prisma.result.findMany({
take: limit + 1,
@@ -86,9 +94,10 @@ export const getResults = authenticatedProcedure
typebotId: typebot.id,
hasStarted: true,
isArchived: false,
createdAt: date
createdAt: fromDate
? {
gte: date,
gte: fromDate,
lte: toDate ?? undefined,
}
: undefined,
},

View File

@@ -24,6 +24,8 @@ import {
timeFilterValues,
} from '@/features/analytics/constants'
const timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone
export const ResultsPage = () => {
const router = useRouter()
const { workspace } = useWorkspace()
@@ -45,6 +47,7 @@ export const ResultsPage = () => {
{
typebotId: publishedTypebot?.typebotId as string,
timeFilter,
timeZone,
},
{
enabled: !!publishedTypebot,

View File

@@ -7,10 +7,13 @@ type Params = {
onError?: (error: string) => void
}
const timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone
export const useResultsQuery = ({ timeFilter, typebotId, onError }: Params) => {
const { data, error, fetchNextPage, hasNextPage, refetch } =
trpc.results.getResults.useInfiniteQuery(
{
timeZone,
timeFilter,
typebotId,
},