refactor: update fetch module to use search API endpoint and types

This commit is contained in:
2026-06-21 00:37:28 +02:00
committed by Milas Holsting
parent 9a961d9815
commit 9d8b09a9a7

View File

@@ -1,4 +1,4 @@
import type { CommandPaletteItem, CommandPaletteResponse } from "./state"; import type { SearchItem, SearchResponse } from "./state";
import { import {
searchInput, searchInput,
searchResults, searchResults,
@@ -24,17 +24,13 @@ import {
appendItems, appendItems,
} from "./render"; } from "./render";
const parseCommandPaletteResponse = (payload: unknown): CommandPaletteResponse => { const parseSearchResponse = (payload: unknown): SearchResponse => {
if (Array.isArray(payload)) { if (Array.isArray(payload)) {
return { items: payload as CommandPaletteItem[], hasNextPage: false }; return { items: payload as SearchItem[], hasNextPage: false };
} }
if ( if (payload && typeof payload === "object" && Array.isArray((payload as SearchResponse).items)) {
payload && const response = payload as SearchResponse;
typeof payload === "object" &&
Array.isArray((payload as CommandPaletteResponse).items)
) {
const response = payload as CommandPaletteResponse;
return { return {
items: response.items, items: response.items,
hasNextPage: response.hasNextPage, hasNextPage: response.hasNextPage,
@@ -45,7 +41,7 @@ const parseCommandPaletteResponse = (payload: unknown): CommandPaletteResponse =
return { items: [], hasNextPage: false }; return { items: [], hasNextPage: false };
}; };
const visibleSearchItems = (items: CommandPaletteItem[], query: string): CommandPaletteItem[] => { const visibleSearchItems = (items: SearchItem[], query: string): SearchItem[] => {
if (query === "") { if (query === "") {
return []; return [];
} }
@@ -99,7 +95,7 @@ export const fetchSearchItems = (query: string): void => {
const controller = new AbortController(); const controller = new AbortController();
setActiveRequestController(controller); setActiveRequestController(controller);
fetch("/api/command-palette?q=" + encodeURIComponent(query), { signal: controller.signal }) fetch("/api/search?q=" + encodeURIComponent(query), { signal: controller.signal })
.then((res: Response) => { .then((res: Response) => {
if (!res.ok) { if (!res.ok) {
return { items: [], hasNextPage: false }; return { items: [], hasNextPage: false };
@@ -111,7 +107,7 @@ export const fetchSearchItems = (query: string): void => {
return; return;
} }
const response = parseCommandPaletteResponse(payload); const response = parseSearchResponse(payload);
const visibleItems = visibleSearchItems(response.items, query); const visibleItems = visibleSearchItems(response.items, query);
setActiveRequestController(undefined); setActiveRequestController(undefined);
setSearchPagination(response.nextPage, response.hasNextPage); setSearchPagination(response.nextPage, response.hasNextPage);
@@ -139,12 +135,7 @@ export const fetchNextSearchPage = (): void => {
setFetchingNextPage(true); setFetchingNextPage(true);
fetch( fetch("/api/search?q=" + encodeURIComponent(query) + "&page=" + encodeURIComponent(String(page)))
"/api/command-palette?q=" +
encodeURIComponent(query) +
"&page=" +
encodeURIComponent(String(page)),
)
.then((res: Response) => { .then((res: Response) => {
if (!res.ok) { if (!res.ok) {
return { items: [], hasNextPage: false }; return { items: [], hasNextPage: false };
@@ -156,7 +147,7 @@ export const fetchNextSearchPage = (): void => {
return; return;
} }
const response = parseCommandPaletteResponse(payload); const response = parseSearchResponse(payload);
const visibleItems = visibleSearchItems(response.items, query); const visibleItems = visibleSearchItems(response.items, query);
const cached = responseCache.get(query); const cached = responseCache.get(query);
if (cached) { if (cached) {