ResourcesExceededErrorRenderer.tsx 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import { useState } from 'react'
  2. import {
  3. Accordion,
  4. AccordionContent,
  5. AccordionItem,
  6. AccordionTrigger,
  7. copyToClipboard,
  8. InputGroup,
  9. InputGroupAddon,
  10. InputGroupButton,
  11. InputGroupTextarea,
  12. } from 'ui'
  13. import { ErrorRendererProps } from './DefaultErrorRenderer'
  14. const ResourcesExceededErrorRenderer: React.FC<ErrorRendererProps> = ({ error, isCustomQuery }) => {
  15. const errorAsJson = JSON.stringify(error, null, 2)
  16. const [copied, setCopied] = useState(false)
  17. return (
  18. <div className="flex flex-col gap-2 text-foreground-light">
  19. <div className="flex flex-col gap-1 text-sm">
  20. <p>This query requires too much memory to be executed.</p>
  21. <p>
  22. {isCustomQuery
  23. ? 'Avoid selecting entire objects and instead select specific keys using dot notation.'
  24. : 'Avoid querying across a large datetime range.'}
  25. </p>
  26. {!isCustomQuery && <p>Please contact support if this error persists.</p>}
  27. </div>
  28. <Accordion className="text-sm" type="single">
  29. <AccordionItem value="1">
  30. <AccordionTrigger>Full error message</AccordionTrigger>
  31. <AccordionContent>
  32. <InputGroup>
  33. <InputGroupTextarea value={errorAsJson} className="font-mono" rows={5} />
  34. <InputGroupAddon align="block-end">
  35. <InputGroupButton
  36. size="tiny"
  37. type="default"
  38. className="ml-auto"
  39. onClick={() => {
  40. copyToClipboard(errorAsJson)
  41. setCopied(true)
  42. setTimeout(() => {
  43. setCopied(false)
  44. }, 3000)
  45. }}
  46. >
  47. {copied ? 'Copied' : 'Copy'}
  48. </InputGroupButton>
  49. </InputGroupAddon>
  50. </InputGroup>
  51. </AccordionContent>
  52. </AccordionItem>
  53. </Accordion>
  54. </div>
  55. )
  56. }
  57. export default ResourcesExceededErrorRenderer