@wener/console
Version:
Base console UI toolkit
71 lines (70 loc) • 2.31 kB
JavaScript
function _define_property(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
}
function _object_spread(target) {
for(var i = 1; i < arguments.length; i++){
var source = arguments[i] != null ? arguments[i] : {};
var ownKeys = Object.keys(source);
if (typeof Object.getOwnPropertySymbols === "function") {
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
}));
}
ownKeys.forEach(function(key) {
_define_property(target, key, source[key]);
});
}
return target;
}
import { createElement, createContext as reactCreateContext, useContext, useMemo, useRef } from 'react';
import { useStore } from 'zustand';
/**
* v4 移除
*
* @see https://github.com/pmndrs/zustand/discussions/1180
*/ export function createStoreContext() {
var ZustandContext = reactCreateContext(undefined);
var Provider = function(param) {
var createStore = param.createStore, children = param.children;
var storeRef = useRef(undefined);
if (!storeRef.current) {
storeRef.current = createStore();
}
return createElement(ZustandContext.Provider, {
value: storeRef.current
}, children);
};
var useContextStore = function(selector, equalityFn) {
var store = useContext(ZustandContext);
if (!store) {
throw new Error('Seems like you have not used zustand provider as an ancestor.');
}
return useStore(store, selector);
};
var useStoreApi = function() {
var store = useContext(ZustandContext);
if (!store) {
throw new Error('Seems like you have not used zustand provider as an ancestor.');
}
return useMemo(function() {
return _object_spread({}, store);
}, [
store
]);
};
return {
Provider: Provider,
useStore: useContextStore,
useStoreApi: useStoreApi
};
}