overleaf/services/web/frontend/js/features/ide-react/context/review-panel/review-panel-context.tsx
ilkin-overleaf 0c403bf8e3 Merge pull request #15397 from overleaf/ii-ide-page-prototype-review-panel
Init review panel for React IDE page

GitOrigin-RevId: fc23201055ae892c5c1d5cb88e472a0bb0cd6c25
2023-11-03 09:00:02 +00:00

43 lines
1.5 KiB
TypeScript

import { useContext, createContext } from 'react'
import useReviewPanelState from '@/features/ide-react/context/review-panel/hooks/use-review-panel-state'
import { ReviewPanelStateReactIde } from '@/features/ide-react/context/review-panel/types/review-panel-state'
export const ReviewPanelReactIdeValueContext = createContext<
ReviewPanelStateReactIde['values'] | undefined
>(undefined)
export const ReviewPanelReactIdeUpdaterFnsContext = createContext<
ReviewPanelStateReactIde['updaterFns'] | undefined
>(undefined)
export const ReviewPanelReactIdeProvider: React.FC = ({ children }) => {
const { values, updaterFns } = useReviewPanelState()
return (
<ReviewPanelReactIdeValueContext.Provider value={values}>
<ReviewPanelReactIdeUpdaterFnsContext.Provider value={updaterFns}>
{children}
</ReviewPanelReactIdeUpdaterFnsContext.Provider>
</ReviewPanelReactIdeValueContext.Provider>
)
}
export function useReviewPanelReactIdeValueContext() {
const context = useContext(ReviewPanelReactIdeValueContext)
if (!context) {
throw new Error(
'ReviewPanelReactIdeValueContext is only available inside ReviewPanelReactIdeProvider'
)
}
return context
}
export function useReviewPanelReactIdeUpdaterFnsContext() {
const context = useContext(ReviewPanelReactIdeUpdaterFnsContext)
if (!context) {
throw new Error(
'ReviewPanelReactIdeUpdaterFnsContext is only available inside ReviewPanelReactIdeProvider'
)
}
return context
}