import { Combobox, Dialog, Transition } from '@headlessui/react'; import MagnifyingGlassIcon from '@heroicons/react/24/solid/MagnifyingGlassIcon'; import XMarkIcon from '@heroicons/react/24/solid/XMarkIcon'; import React, { ReactNode, useState, useEffect, Fragment } from 'react'; import { rdsOverlay } from '../../utils/tailwindClasses'; export interface SearchProps { sourceData: any; searchOn?: string; children?: ReactNode; } function classNames(...classes: (string | boolean)[]) { return classes.filter(Boolean).join(' '); } export const Search = ({ searchOn = 'title', sourceData, children, }: SearchProps) => { const [query, setQuery] = useState(''); const [open, setOpen] = useState(false); const filteredDatabase = query === '' ? [] : sourceData.filter((sourceData: { [x: string]: string }) => { return sourceData[searchOn] .toLowerCase() .includes(query.toLowerCase()); }); const searchAvatar = children ? ( children ) : ( ); useEffect(() => { function onKeydown(event: any) { if (event.key === 'k' && (event.metaKey || event.ctrlKey)) { setOpen(!open); } else { } } window.addEventListener('keydown', onKeydown); return () => { window.removeEventListener('keydown', onKeydown); }; }, [open]); // Validations just checking on first , not in all if (sourceData[0] && !sourceData[0].hasOwnProperty('url')) { return (
Url Does not exisit on Passed Database Please pass appropriate data
); } if (sourceData[0] && !sourceData[0].hasOwnProperty(searchOn)) { return (Passed search key does not exisit on passed Database
); } return ( <>