axonhub / frontend /src /context /search-context.tsx
llzai's picture
Upload 1793 files
9853396 verified
import React from 'react';
interface SearchContextType {
open: boolean;
setOpen: React.Dispatch<React.SetStateAction<boolean>>;
}
const SearchContext = React.createContext<SearchContextType | null>(null);
interface Props {
children: React.ReactNode;
}
export function SearchProvider({ children }: Props) {
const [open, setOpen] = React.useState(false);
React.useEffect(() => {
const down = (e: KeyboardEvent) => {
if (e.key === 'k' && (e.metaKey || e.ctrlKey)) {
e.preventDefault();
setOpen((open) => !open);
}
};
document.addEventListener('keydown', down);
return () => document.removeEventListener('keydown', down);
}, []);
return <SearchContext.Provider value={{ open, setOpen }}>{children}</SearchContext.Provider>;
}
// eslint-disable-next-line react-refresh/only-export-components
export const useSearch = () => {
const searchContext = React.useContext(SearchContext);
if (!searchContext) {
return {
open: false,
setOpen: () => {},
};
}
return searchContext;
};