| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- import {
- createContext,
- useContext,
- FC,
- useCallback,
- useMemo,
- useState,
- } from 'react'
- import GenericMessageModal, {
- GenericMessageModalOwnProps,
- } from '@/features/ide-react/components/modals/generic-message-modal'
- type ModalsContextValue = {
- genericModalVisible: boolean
- showGenericMessageModal: (
- title: GenericMessageModalOwnProps['title'],
- message: GenericMessageModalOwnProps['message']
- ) => void
- }
- const ModalsContext = createContext<ModalsContextValue | undefined>(undefined)
- export const ModalsContextProvider: FC = ({ children }) => {
- const [showGenericModal, setShowGenericModal] = useState(false)
- const [genericMessageModalData, setGenericMessageModalData] =
- useState<GenericMessageModalOwnProps>({ title: '', message: '' })
- const handleHideGenericModal = useCallback(() => {
- setShowGenericModal(false)
- }, [])
- const showGenericMessageModal = useCallback(
- (
- title: GenericMessageModalOwnProps['title'],
- message: GenericMessageModalOwnProps['message']
- ) => {
- setGenericMessageModalData({ title, message })
- setShowGenericModal(true)
- },
- []
- )
- const value = useMemo<ModalsContextValue>(
- () => ({
- showGenericMessageModal,
- genericModalVisible: showGenericModal,
- }),
- [showGenericMessageModal, showGenericModal]
- )
- return (
- <ModalsContext.Provider value={value}>
- {children}
- <GenericMessageModal
- show={showGenericModal}
- onHide={handleHideGenericModal}
- {...genericMessageModalData}
- />
- </ModalsContext.Provider>
- )
- }
- export function useModalsContext(): ModalsContextValue {
- const context = useContext(ModalsContext)
- if (!context) {
- throw new Error(
- 'useModalsContext is only available inside ModalsContextProvider'
- )
- }
- return context
- }
|