@replyke/core
Version:
Replyke: Build interactive apps with social features like comments, votes, feeds, user lists, notifications, and more.
87 lines • 3.67 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;
Object.defineProperty(exports, "__esModule", { value: true });
exports.userReducer = exports.selectUserById = exports.selectUserError = exports.selectCurrentProjectId = exports.selectUserUpdating = exports.selectUserLoading = exports.selectUser = exports.updateUserOptimistic = exports.clearError = exports.setError = exports.setUpdating = exports.setLoading = exports.setProjectContext = exports.clearUser = exports.setUser = void 0;
var toolkit_1 = require("@reduxjs/toolkit");
var initialState = {
user: null,
loading: false,
updating: false,
currentProjectId: undefined,
error: null,
};
var userSlice = (0, toolkit_1.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
exports.setUser = (_a = userSlice.actions, _a.setUser), exports.clearUser = _a.clearUser, exports.setProjectContext = _a.setProjectContext, exports.setLoading = _a.setLoading, exports.setUpdating = _a.setUpdating, exports.setError = _a.setError, exports.clearError = _a.clearError, exports.updateUserOptimistic = _a.updateUserOptimistic;
// Selectors
var selectUser = function (state) { return state.user.user; };
exports.selectUser = selectUser;
var selectUserLoading = function (state) { return state.user.loading; };
exports.selectUserLoading = selectUserLoading;
var selectUserUpdating = function (state) { return state.user.updating; };
exports.selectUserUpdating = selectUserUpdating;
var selectCurrentProjectId = function (state) { return state.user.currentProjectId; };
exports.selectCurrentProjectId = selectCurrentProjectId;
var selectUserError = function (state) { return state.user.error; };
exports.selectUserError = selectUserError;
// Complex selectors
var selectUserById = function (userId) { return function (state) {
var user = (0, exports.selectUser)(state);
return (user === null || user === void 0 ? void 0 : user.id) === userId ? user : null;
}; };
exports.selectUserById = selectUserById;
// Reducer
exports.userReducer = userSlice.reducer;
exports.default = userSlice;
//# sourceMappingURL=userSlice.js.map