on ba09d4e help sign in
bridge/src/store/pointCursor.js
37 lines 989 B history raw
1import React, { createContext, forwardRef, useContext, useState } from 'react';
2import { Nothing } from 'folktale/maybe';
4export const PointCursorContext = createContext(null);
6// pointCursor is Maybe<number>
7function _usePointCursor(initialPointCursor = Nothing()) {
8 const [pointCursor, setPointCursor] = useState(initialPointCursor);
10 return {
11 pointCursor,
12 setPointCursor,
13 };
16export function PointCursorProvider({ initialPointCursor, children }) {
17 const pointCursor = _usePointCursor(initialPointCursor);
19 return (
20 <PointCursorContext.Provider value={pointCursor}>
21 {children}
22 </PointCursorContext.Provider>
23 );
26// Hook version
27export function usePointCursor() {
28 return useContext(PointCursorContext);
31// HOC version
32export const withPointCursor = Component =>
33 forwardRef((props, ref) => (
34 <PointCursorContext.Consumer>
35 {pointCursor => <Component ref={ref} {...pointCursor} {...props} />}
36 </PointCursorContext.Consumer>
37 ));