@replyke/core
Version:
Replyke: Build interactive apps with social features like comments, votes, feeds, user lists, notifications, and more.
63 lines • 2.37 kB
JavaScript
import { createSlice } from '@reduxjs/toolkit';
const initialState = {
accessToken: null,
refreshToken: null,
user: null,
isAuthenticating: false,
initialized: false,
signedToken: null,
};
const authSlice = createSlice({
name: 'auth',
initialState,
reducers: {
// Token management
setTokens: (state, action) => {
state.accessToken = action.payload.accessToken;
if (action.payload.refreshToken !== undefined) {
state.refreshToken = action.payload.refreshToken;
}
},
clearTokens: (state) => {
state.accessToken = null;
state.refreshToken = null;
},
// User management
setUser: (state, action) => {
state.user = action.payload;
},
// Loading states
setAuthenticating: (state, action) => {
state.isAuthenticating = action.payload;
},
// Initialization
setInitialized: (state, action) => {
state.initialized = action.payload;
},
setSignedToken: (state, action) => {
state.signedToken = action.payload;
},
// Complete auth reset (for signout)
resetAuth: (state) => {
state.accessToken = null;
state.refreshToken = null;
state.user = null;
state.isAuthenticating = false;
// Keep initialized as it is
},
// Individual token setter for compatibility
setRefreshToken: (state, action) => {
state.refreshToken = action.payload;
},
},
});
export const { setTokens, clearTokens, setUser, setAuthenticating, setInitialized, setSignedToken, resetAuth, setRefreshToken } = authSlice.actions;
// Selectors - use namespaced state for dual-mode support
export const selectAccessToken = (state) => state.replyke.auth.accessToken;
export const selectRefreshToken = (state) => state.replyke.auth.refreshToken;
export const selectUser = (state) => state.replyke.auth.user;
export const selectIsAuthenticating = (state) => state.replyke.auth.isAuthenticating;
export const selectInitialized = (state) => state.replyke.auth.initialized;
export const selectSignedToken = (state) => state.replyke.auth.signedToken;
export default authSlice.reducer;
//# sourceMappingURL=authSlice.js.map