Changeset View
Changeset View
Standalone View
Standalone View
native/markdown/markdown-context-provider.react.js
// @flow | // @flow | ||||
import * as React from 'react'; | import * as React from 'react'; | ||||
import { MarkdownContext } from './markdown-context.js'; | import { MarkdownContext } from './markdown-context.js'; | ||||
type Props = { | type Props = { | ||||
+children: React.Node, | +children: React.Node, | ||||
}; | }; | ||||
function MarkdownContextProvider(props: Props): React.Node { | function MarkdownContextProvider(props: Props): React.Node { | ||||
const [linkModalActive, setLinkModalActive] = React.useState<{ | const [linkModalActive, setLinkModalActive] = React.useState<{ | ||||
[key: string]: boolean, | [key: string]: boolean, | ||||
}>({}); | }>({}); | ||||
const [spoilerRevealed, setSpoilerRevealed] = React.useState<{ | |||||
[key: string]: { | |||||
[key: number]: boolean, | |||||
}, | |||||
}>({}); | |||||
const clearMarkdownContextData = React.useCallback(() => { | const clearMarkdownContextData = React.useCallback(() => { | ||||
setLinkModalActive({}); | setLinkModalActive({}); | ||||
setSpoilerRevealed({}); | |||||
}, []); | }, []); | ||||
const contextValue = React.useMemo( | const contextValue = React.useMemo( | ||||
() => ({ | () => ({ | ||||
setLinkModalActive, | setLinkModalActive, | ||||
linkModalActive, | linkModalActive, | ||||
setSpoilerRevealed, | |||||
spoilerRevealed, | |||||
clearMarkdownContextData, | clearMarkdownContextData, | ||||
}), | }), | ||||
[setLinkModalActive, linkModalActive, clearMarkdownContextData], | [ | ||||
setLinkModalActive, | |||||
linkModalActive, | |||||
setSpoilerRevealed, | |||||
spoilerRevealed, | |||||
clearMarkdownContextData, | |||||
], | |||||
); | ); | ||||
return ( | return ( | ||||
<MarkdownContext.Provider value={contextValue}> | <MarkdownContext.Provider value={contextValue}> | ||||
{props.children} | {props.children} | ||||
</MarkdownContext.Provider> | </MarkdownContext.Provider> | ||||
); | ); | ||||
} | } | ||||
export default MarkdownContextProvider; | export default MarkdownContextProvider; |