UNPKG

@replyke/core

Version:

Replyke: Build interactive apps with social features like comments, votes, feeds, user lists, notifications, and more.

43 lines 2.16 kB
import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime"; import { useEffect, useState } from "react"; import { Provider } from "react-redux"; import { replykeStore } from "../store"; import { useReplykeDispatch, useReplykeSelector } from "../store/hooks"; import { initializeAuthThunk } from "../store/slices/authThunks"; import { selectAccountsReady, selectAccountManagerRegistered, } from "../store/slices/accountsSlice"; /** * Component that initializes auth state in Redux * Must be inside the Redux Provider to dispatch actions */ const AuthInitializer = ({ children, projectId, signedToken }) => { const dispatch = useReplykeDispatch(); const accountsReady = useReplykeSelector(selectAccountsReady); const accountManagerRegistered = useReplykeSelector(selectAccountManagerRegistered); const [hasWaitedForManager, setHasWaitedForManager] = useState(false); // Give AccountManager one microtask to register itself useEffect(() => { Promise.resolve().then(() => setHasWaitedForManager(true)); }, []); useEffect(() => { // Still waiting for the microtask check if (!hasWaitedForManager) return; // If an AccountManager registered, wait until it signals ready if (accountManagerRegistered && !accountsReady) return; // Either: no AccountManager (core-only user) OR AccountManager is ready dispatch(initializeAuthThunk({ projectId, signedToken })); }, [dispatch, projectId, signedToken, hasWaitedForManager, accountManagerRegistered, accountsReady]); return _jsx(_Fragment, { children: children }); }; /** * Redux store provider for Replyke * This component provides the Redux store and initializes auth state */ export const ReplykeStoreProvider = ({ children, projectId, signedToken }) => { return (_jsx(Provider, { store: replykeStore, children: _jsx(AuthInitializer, { projectId: projectId, signedToken: signedToken, children: children }) })); }; // Clean Redux-only architecture // Always integrated with ReplykeProvider export default ReplykeStoreProvider; //# sourceMappingURL=replyke-store-context.js.map