review-panel-context.tsx 1.9 KB

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