UNPKG

@replyke/core

Version:

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

78 lines 2.92 kB
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