pdf-preview-provider.tsx 820 B

123456789101112131415161718192021222324252627282930313233343536
  1. import { createContext, FC, useContext, useMemo, useState } from 'react'
  2. const PdfPreviewContext = createContext<
  3. | {
  4. loadingError: boolean
  5. setLoadingError: (value: boolean) => void
  6. }
  7. | undefined
  8. >(undefined)
  9. export const usePdfPreviewContext = () => {
  10. const context = useContext(PdfPreviewContext)
  11. if (!context) {
  12. throw new Error(
  13. 'usePdfPreviewContext is only avalable inside PdfPreviewProvider'
  14. )
  15. }
  16. return context
  17. }
  18. export const PdfPreviewProvider: FC<React.PropsWithChildren> = ({
  19. children,
  20. }) => {
  21. const [loadingError, setLoadingError] = useState(false)
  22. const value = useMemo(
  23. () => ({ loadingError, setLoadingError }),
  24. [loadingError]
  25. )
  26. return (
  27. <PdfPreviewContext.Provider value={value}>
  28. {children}
  29. </PdfPreviewContext.Provider>
  30. )
  31. }