Skip to content

Commit d4ff3a9

Browse files
committed
chore(heureka): handles initialFilter store status in services route component
1 parent 959c8ca commit d4ff3a9

2 files changed

Lines changed: 42 additions & 33 deletions

File tree

apps/heureka/src/components/Services/ServicesFilters.tsx

Lines changed: 4 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -3,44 +3,17 @@
33
* SPDX-License-Identifier: Apache-2.0
44
*/
55

6-
import React, { useCallback, useLayoutEffect } from "react"
7-
import { useLoaderData, useNavigate, useRouteContext, useSearch } from "@tanstack/react-router"
6+
import React, { useCallback } from "react"
7+
import { useLoaderData, useNavigate } from "@tanstack/react-router"
88
import { Filters } from "../common/Filters"
99
import { FilterSettings } from "../common/Filters/types"
10-
import { getFiltersForUrl, getInitialFilters } from "./utils"
10+
import { getFiltersForUrl } from "./utils"
1111
import { SELECTED_FILTER_PREFIX } from "../../constants"
12-
import { useStore } from "../../store/StoreProvider"
12+
1313

1414
export const ServicesFilters = () => {
1515
const navigate = useNavigate()
1616
const { filters, filterSettings } = useLoaderData({ from: "/services/" })
17-
const { appProps } = useRouteContext({ from: "/services/" })
18-
const search = useSearch({ from: "/services/" })
19-
const { hasAppliedInitialFilters, markInitialFiltersApplied } = useStore()
20-
21-
// Use store to track initial filters across tab navigation - prevents re-application when switching between services/vulnerabilities tabs
22-
useLayoutEffect(() => {
23-
if (hasAppliedInitialFilters) return
24-
25-
// Use parsed search params from TanStack Router instead of window.location.search
26-
const hasUrlFilters = Object.keys(search).some((key) => key.startsWith(SELECTED_FILTER_PREFIX))
27-
28-
if (!hasUrlFilters && appProps?.initialFilters?.support_group?.length) {
29-
const initialFilters = getInitialFilters(appProps.initialFilters)
30-
31-
if (initialFilters.length > 0) {
32-
navigate({
33-
to: "/services",
34-
search: getFiltersForUrl({
35-
searchTerm: "",
36-
selectedFilters: initialFilters,
37-
}),
38-
replace: true,
39-
})
40-
markInitialFiltersApplied()
41-
}
42-
}
43-
}, [navigate, appProps, hasAppliedInitialFilters, markInitialFiltersApplied, search])
4417

4518
const handleFilterChange = useCallback(
4619
(updatedFilterSettings: FilterSettings) => {

apps/heureka/src/routes/services/index.tsx

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22
* SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Juno contributors
33
* SPDX-License-Identifier: Apache-2.0
44
*/
5-
5+
import React, { useLayoutEffect } from "react"
6+
import { useNavigate, useRouteContext, useSearch } from "@tanstack/react-router"
7+
import { getFiltersForUrl, getInitialFilters } from "../../components/Services/utils"
8+
import { useStore } from "../../store/StoreProvider"
69
import { createFileRoute } from "@tanstack/react-router"
710
import { z } from "zod"
811
import { Services } from "../../components/Services"
@@ -71,5 +74,38 @@ export const Route = createFileRoute("/services/")({
7174
filterSettings: sanitizeFilterSettings(filters, filterSettings), // we need to only apply filters that backend supports hence this sanitization
7275
}
7376
},
74-
component: Services,
77+
component: RouteComponent,
7578
})
79+
80+
function RouteComponent() {
81+
const navigate = useNavigate()
82+
const { appProps } = useRouteContext({ from: "/services/" })
83+
const search = useSearch({ from: "/services/" })
84+
const { hasAppliedInitialFilters, markInitialFiltersApplied } = useStore()
85+
86+
// Use store to track initial filters across tab navigation - prevents re-application when switching between services/vulnerabilities tabs
87+
useLayoutEffect(() => {
88+
if (hasAppliedInitialFilters) return
89+
90+
// Use parsed search params from TanStack Router instead of window.location.search
91+
const hasUrlFilters = Object.keys(search).some((key) => key.startsWith(SELECTED_FILTER_PREFIX))
92+
93+
if (!hasUrlFilters && appProps?.initialFilters?.support_group?.length) {
94+
const initialFilters = getInitialFilters(appProps.initialFilters)
95+
96+
if (initialFilters.length > 0) {
97+
navigate({
98+
to: "/services",
99+
search: getFiltersForUrl({
100+
searchTerm: "",
101+
selectedFilters: initialFilters,
102+
}),
103+
replace: true,
104+
})
105+
markInitialFiltersApplied()
106+
}
107+
}
108+
}, [navigate, appProps, hasAppliedInitialFilters, markInitialFiltersApplied, search])
109+
110+
return <Services />
111+
}

0 commit comments

Comments
 (0)