Skip to content

Commit 37e3893

Browse files
authored
refactor: fetch autocomplete data in parent component (#75)
1 parent 010f87a commit 37e3893

File tree

1 file changed

+26
-10
lines changed

1 file changed

+26
-10
lines changed

apps/dashboard/app/(main)/websites/[id]/_components/utils/add-filters.tsx

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,10 @@ import {
3131
SelectTrigger,
3232
SelectValue,
3333
} from '@/components/ui/select';
34-
import { useAutocompleteData } from '@/hooks/use-funnels';
34+
import {
35+
type AutocompleteData,
36+
useAutocompleteData,
37+
} from '@/hooks/use-funnels';
3538
import { operatorOptions } from '@/hooks/use-filters';
3639
import { Skeleton } from '@/components/ui/skeleton';
3740

@@ -198,19 +201,19 @@ function FilterSelectionForm({
198201
function FilterForm({
199202
addFilter,
200203
setIsDropdownOpen,
204+
autocompleteData,
205+
isAutocompleteDataLoading,
206+
isAutocompleteDataError,
201207
}: {
202208
addFilter: (filter: DynamicQueryFilter) => void;
203209
setIsDropdownOpen: (isOpen: boolean) => void;
210+
autocompleteData: AutocompleteData | undefined;
211+
isAutocompleteDataLoading: boolean;
212+
isAutocompleteDataError: boolean;
204213
}) {
205214
const [filterBeingEdited, setFilterBeingEdited] =
206215
useState<FilterOption | null>(null);
207216

208-
const { id } = useParams();
209-
const websiteId = id as string;
210-
211-
// TODO: Refactor this to a "useSuggestions" hook
212-
const autocompleteQuery = useAutocompleteData(websiteId);
213-
const autocompleteData = autocompleteQuery.data;
214217
const getSuggestions = useCallback(
215218
(field: string): string[] => {
216219
if (!autocompleteData) {
@@ -239,15 +242,15 @@ function FilterForm({
239242
[autocompleteData]
240243
);
241244

242-
if (autocompleteQuery.isError) {
245+
if (isAutocompleteDataError) {
243246
return (
244247
<div className="p-4 text-destructive text-sm">
245248
Failed to load filter suggestions. Please try again.
246249
</div>
247250
);
248251
}
249252

250-
if (autocompleteQuery.isLoading) {
253+
if (isAutocompleteDataLoading) {
251254
const numberOfFilters = filterOptions.length;
252255
return (
253256
<div className="flex flex-col gap-2">
@@ -288,6 +291,13 @@ export function AddFilterForm({
288291
buttonText?: string;
289292
}) {
290293
const [isOpen, setIsOpen] = useState(false);
294+
295+
const { id } = useParams();
296+
const websiteId = id as string;
297+
298+
const autocompleteQuery = useAutocompleteData(websiteId);
299+
const autocompleteData = autocompleteQuery.data;
300+
291301
return (
292302
<DropdownMenu onOpenChange={setIsOpen} open={isOpen}>
293303
<DropdownMenuTrigger asChild>
@@ -305,7 +315,13 @@ export function AddFilterForm({
305315
</DropdownMenuTrigger>
306316
<DropdownMenuContent align="end" className="w-[300px]" side="bottom">
307317
<Suspense fallback={<div>Loading...</div>}>
308-
<FilterForm addFilter={addFilter} setIsDropdownOpen={setIsOpen} />
318+
<FilterForm
319+
addFilter={addFilter}
320+
autocompleteData={autocompleteData}
321+
isAutocompleteDataError={autocompleteQuery.isError}
322+
isAutocompleteDataLoading={autocompleteQuery.isLoading}
323+
setIsDropdownOpen={setIsOpen}
324+
/>
309325
</Suspense>
310326
</DropdownMenuContent>
311327
</DropdownMenu>

0 commit comments

Comments
 (0)