review-panel-context.tsx 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import { createContext, useContext } from 'react'
  2. import useAngularReviewPanelState from './hooks/use-angular-review-panel-state'
  3. import { ReviewPanelState } from './types/review-panel-state'
  4. const ReviewPanelValueContext = createContext<
  5. ReviewPanelState['values'] | undefined
  6. >(undefined)
  7. const ReviewPanelUpdaterFnsContext = createContext<
  8. ReviewPanelState['updaterFns'] | undefined
  9. >(undefined)
  10. type ReviewPanelProviderProps = {
  11. children?: React.ReactNode
  12. }
  13. export function ReviewPanelProvider({ children }: ReviewPanelProviderProps) {
  14. const { values, updaterFns } = useAngularReviewPanelState()
  15. return (
  16. <ReviewPanelValueContext.Provider value={values}>
  17. <ReviewPanelUpdaterFnsContext.Provider value={updaterFns}>
  18. {children}
  19. </ReviewPanelUpdaterFnsContext.Provider>
  20. </ReviewPanelValueContext.Provider>
  21. )
  22. }
  23. export function useReviewPanelValueContext() {
  24. const context = useContext(ReviewPanelValueContext)
  25. if (!context) {
  26. throw new Error(
  27. 'ReviewPanelValueContext is only available inside ReviewPanelProvider'
  28. )
  29. }
  30. return context
  31. }
  32. export function useReviewPanelUpdaterFnsContext() {
  33. const context = useContext(ReviewPanelUpdaterFnsContext)
  34. if (!context) {
  35. throw new Error(
  36. 'ReviewPanelUpdaterFnsContext is only available inside ReviewPanelProvider'
  37. )
  38. }
  39. return context
  40. }