Spaces:
Paused
Paused
import Link from "next/link"; | |
import Parser from "html-react-parser"; | |
import PaginationButtons from "./PaginationButtons"; | |
import { MemoizedReactMarkdown } from './MemoizedReactMarkdown'; | |
export default function WebSearchResults({ aiResponse, results }) { | |
return ( | |
<div className="w-full mx-auto px-3 pb-40 sm:pb-24 sm:pl-[5%] md:pl-[14%] lg:pl-52"> | |
<div className="w-1/4"> | |
<div className="flex flex-row"> | |
<MemoizedReactMarkdown | |
className="prose dark:prose-invert flex-1" | |
components={{ | |
code({ node, inline, className, children, ...props }) { | |
if (children.length) { | |
if (children[0] == 'β') { | |
return <span className="animate-pulse cursor-default mt-1">β</span> | |
} | |
children[0] = (children[0]).replace("`β`", "β") | |
} | |
const match = /language-(\w+)/.exec(className || ''); | |
return !inline ? ( | |
<CodeBlock | |
key={Math.random()} | |
language={(match && match[1]) || ''} | |
value={String(children).replace(/\n$/, '')} | |
{...props} | |
/> | |
) : ( | |
<code className={className} {...props}> | |
{children} | |
</code> | |
); | |
}, | |
table({ children }) { | |
return ( | |
<table className="border-collapse border border-black px-3 py-1 dark:border-white"> | |
{children} | |
</table> | |
); | |
}, | |
th({ children }) { | |
return ( | |
<th className="break-words border border-black bg-gray-500 px-3 py-1 text-white dark:border-white"> | |
{children} | |
</th> | |
); | |
}, | |
td({ children }) { | |
return ( | |
<td className="break-words border border-black px-3 py-1 dark:border-white"> | |
{children} | |
</td> | |
); | |
}, | |
}} | |
> | |
{`${aiResponse}`} | |
</MemoizedReactMarkdown> | |
</div> | |
</div> | |
<div className="flex-grow"> | |
<p className="text-gray-600 text-sm mb-5 mt-3"> | |
About {results.searchInformation?.formattedTotalResults} results ( | |
{results.searchInformation?.formattedSearchTime} seconds) | |
</p> | |
{results.items?.map((result) => ( | |
<div className="mb-8 max-w-xl" key={result.link}> | |
<div className="group flex flex-col"> | |
<Link rel="noopener noreferrer" target="_blank" className="text-sm truncate" href={result.link}> | |
{result.formattedUrl} | |
</Link> | |
<Link | |
rel="noopener noreferrer" target="_blank" | |
className="group-hover:underline decoration-blue-800 text-xl truncate font-medium text-blue-800" | |
href={result.link} | |
> | |
{result.title} | |
</Link> | |
</div> | |
<p className="text-gray-600">{Parser(result.htmlSnippet)}</p> | |
</div> | |
))} | |
<PaginationButtons /> | |
</div> | |
</div> | |
); | |
} | |