UNPKG

mt-flowbite-react

Version:

Official React components built for Flowbite and Tailwind CSS

60 lines (59 loc) 2.24 kB
"use strict"; 'use client'; Object.defineProperty(exports, "__esModule", { value: true }); exports.useViewStore = exports.ViewProvider = exports.createViewStore = exports.createViewSlice = void 0; const jsx_runtime_1 = require("react/jsx-runtime"); const react_1 = require("react"); const zustand_1 = require("zustand"); const middleware_1 = require("zustand/middleware"); const createViewSlice = (set, get, store) => { return { ...store, }; }; exports.createViewSlice = createViewSlice; const createViewStore = (initProps) => { return (0, zustand_1.create)()((0, middleware_1.persist)((0, middleware_1.subscribeWithSelector)((...a) => ({ ...(0, exports.createViewSlice)(...a), ...initProps, })), { name: `view-${initProps?.slug || initProps?.view?.id || 'unknow-view'}`, version: 1, skipHydration: true, onRehydrateStorage(state) { }, migrate(persistedState, version) { // console.log("version", version, persistedState) return persistedState; }, })); }; exports.createViewStore = createViewStore; //------------------------------------------------------------------------------------------- // 一般情况下 的Context 及其 hook const Context = (0, react_1.createContext)(null); function ViewProvider({ children, ...props }) { const storeRef = (0, react_1.useRef)(); if (!storeRef.current) { // console.log("create store:", props.id) storeRef.current = (0, exports.createViewStore)(props); } return ((0, jsx_runtime_1.jsxs)(Context.Provider, { value: storeRef.current, children: [children, (0, jsx_runtime_1.jsx)(SubscriptionSetup, {})] })); } exports.ViewProvider = ViewProvider; function SubscriptionSetup() { const store = useViewStore(); return (0, jsx_runtime_1.jsx)("div", { className: "bg-blue-500" }); } function useViewStore(selector, equals) { const store = (0, react_1.useContext)(Context); if (!store) throw new Error('Missing ViewProvider'); if (selector) { // eslint-disable-next-line return (0, zustand_1.useStore)(store, selector, equals); } else { return store; } } exports.useViewStore = useViewStore;