61 lines
1.3 KiB
TypeScript
61 lines
1.3 KiB
TypeScript
import {
|
|
searchInput,
|
|
searchDialog,
|
|
rememberSearchOpener,
|
|
focusLastSearchOpener,
|
|
setLastQuery,
|
|
getActiveRequestController,
|
|
setActiveRequestController,
|
|
} from "./state";
|
|
import { setSearchState, setClearButtonState, clearResults } from "./render";
|
|
import { cancelScheduledFetch, fetchSearchItems } from "./fetch";
|
|
|
|
export const openSearch = (): void => {
|
|
if (!searchInput) {
|
|
window.location.href = "/search";
|
|
return;
|
|
}
|
|
|
|
rememberSearchOpener();
|
|
if (searchDialog) {
|
|
setSearchState(true);
|
|
searchInput.value = "";
|
|
setLastQuery("");
|
|
cancelScheduledFetch();
|
|
setClearButtonState(false);
|
|
clearResults();
|
|
}
|
|
searchInput.focus();
|
|
};
|
|
|
|
export const closeSearch = (): void => {
|
|
if (!searchDialog || !searchInput) {
|
|
return;
|
|
}
|
|
|
|
setSearchState(false);
|
|
cancelScheduledFetch();
|
|
const activeRequestController = getActiveRequestController();
|
|
if (activeRequestController) {
|
|
activeRequestController.abort();
|
|
setActiveRequestController(undefined);
|
|
}
|
|
searchInput.value = "";
|
|
setLastQuery("");
|
|
setClearButtonState(false);
|
|
clearResults();
|
|
focusLastSearchOpener();
|
|
};
|
|
|
|
export const clearSearchInput = (): void => {
|
|
if (!searchInput) {
|
|
return;
|
|
}
|
|
|
|
searchInput.value = "";
|
|
searchInput.focus();
|
|
cancelScheduledFetch();
|
|
setClearButtonState(false);
|
|
fetchSearchItems("");
|
|
};
|