zustand-utils
Version:
some utils for zustand
46 lines (45 loc) • 1.59 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.createContext = void 0;
var _react = require("react");
var _shallow = require("zustand/shallow");
var _traditional = require("zustand/traditional");
/**
* create context for individual App
* mostly use for component
*/
var createContext = exports.createContext = function createContext() {
var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var defaultEqualityFn = params.equalityFn || _shallow.shallow;
var ZustandContext = /*#__PURE__*/(0, _react.createContext)(undefined);
var Provider = function Provider(_ref) {
var createStore = _ref.createStore,
children = _ref.children;
var storeRef = (0, _react.useRef)();
if (!storeRef.current) {
storeRef.current = createStore();
}
return /*#__PURE__*/(0, _react.createElement)(ZustandContext.Provider, {
value: storeRef.current
}, children);
};
var useStoreApi = function useStoreApi() {
var store = (0, _react.useContext)(ZustandContext);
if (!store) {
throw new Error('Seems like you have not used zustand provider as an ancestor.');
}
return store;
};
var useContextStore = function useContextStore(selector) {
var equalityFn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultEqualityFn;
var store = useStoreApi();
return (0, _traditional.useStoreWithEqualityFn)(store, selector, equalityFn);
};
return {
Provider: Provider,
useStore: useContextStore,
useStoreApi: useStoreApi
};
};
;