@replyke/core
Version:
Replyke: Build interactive apps with social features like comments, votes, feeds, user lists, notifications, and more.
78 lines • 2.92 kB
JavaScript
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var _a;
import { createSlice } from '@reduxjs/toolkit';
var initialState = {
user: null,
loading: false,
updating: false,
currentProjectId: undefined,
error: null,
};
var userSlice = createSlice({
name: 'user',
initialState: initialState,
reducers: {
// User data management
setUser: function (state, action) {
state.user = action.payload;
state.error = null;
},
clearUser: function (state) {
state.user = null;
state.error = null;
},
// Project context
setProjectContext: function (state, action) {
if (state.currentProjectId !== action.payload) {
state.currentProjectId = action.payload;
}
},
// Loading states
setLoading: function (state, action) {
state.loading = action.payload;
},
setUpdating: function (state, action) {
state.updating = action.payload;
},
// Error handling
setError: function (state, action) {
state.error = action.payload;
},
clearError: function (state) {
state.error = null;
},
// Optimistic updates (will be used by RTK Query)
updateUserOptimistic: function (state, action) {
if (state.user) {
state.user = __assign(__assign({}, state.user), action.payload);
}
},
},
});
// Actions
export var setUser = (_a = userSlice.actions, _a.setUser), clearUser = _a.clearUser, setProjectContext = _a.setProjectContext, setLoading = _a.setLoading, setUpdating = _a.setUpdating, setError = _a.setError, clearError = _a.clearError, updateUserOptimistic = _a.updateUserOptimistic;
// Selectors
export var selectUser = function (state) { return state.user.user; };
export var selectUserLoading = function (state) { return state.user.loading; };
export var selectUserUpdating = function (state) { return state.user.updating; };
export var selectCurrentProjectId = function (state) { return state.user.currentProjectId; };
export var selectUserError = function (state) { return state.user.error; };
// Complex selectors
export var selectUserById = function (userId) { return function (state) {
var user = selectUser(state);
return (user === null || user === void 0 ? void 0 : user.id) === userId ? user : null;
}; };
// Reducer
export var userReducer = userSlice.reducer;
export default userSlice;
//# sourceMappingURL=userSlice.js.map