Skip to content

Commit a01c7cc

Browse files
committed
refactor: enhance event type parsing in useSandboxEventFilters
- Introduced useMemo for optimized parsing of event types, ensuring efficient updates based on filter changes. - Added useEffect to reset filters when parsing fails, improving error handling and robustness. - This change enhances the maintainability and reliability of the useSandboxEventFilters hook.
1 parent 891ad0a commit a01c7cc

1 file changed

Lines changed: 13 additions & 13 deletions

File tree

src/features/dashboard/sandbox/events/use-sandbox-event-filters.ts

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use client'
22

33
import { useQueryStates } from 'nuqs'
4-
import { useCallback } from 'react'
4+
import { useCallback, useEffect, useMemo } from 'react'
55
import {
66
type SandboxLifecycleEventType,
77
SandboxLifecycleEventTypeSchema,
@@ -17,25 +17,25 @@ const DEFAULT_SANDBOX_EVENTS_ORDER: SandboxEventsOrder = 'desc'
1717
const toUrlValue = (type: SandboxLifecycleEventType) =>
1818
type.split('.').slice(2).join('.')
1919

20-
// Re-adds the "sandbox.lifecycle." prefix from a URL value, e.g. "created" -> "sandbox.lifecycle.created"
21-
const fromUrlValue = (
22-
value: string | null
23-
): SandboxLifecycleEventType | null => {
24-
if (!value) return null
25-
const parsed = SandboxLifecycleEventTypeSchema.safeParse(
26-
`sandbox.lifecycle.${value}`
27-
)
28-
return parsed.success ? parsed.data : null
29-
}
30-
3120
export const useSandboxEventFilters = () => {
3221
const [filters, setFilters] = useQueryStates(sandboxEventsFilterParams, {
3322
shallow: true,
3423
})
3524

36-
const type = fromUrlValue(filters.type)
25+
const parsedType = useMemo(() => {
26+
if (!filters.type) return null
27+
28+
return SandboxLifecycleEventTypeSchema.safeParse(
29+
`sandbox.lifecycle.${filters.type}`
30+
)
31+
}, [filters.type])
32+
const type = parsedType?.success ? parsedType.data : null
3733
const order = filters.order ?? DEFAULT_SANDBOX_EVENTS_ORDER
3834

35+
useEffect(() => {
36+
if (parsedType && !parsedType.success) setFilters({ type: null })
37+
}, [parsedType, setFilters])
38+
3939
const setType = useCallback(
4040
(type: SandboxLifecycleEventType | null) => {
4141
setFilters({ type: type ? toUrlValue(type) : null })

0 commit comments

Comments
 (0)