feat(auth): add error field to store and remove unused actions

This commit is contained in:
Ilia Mashkov
2026-03-17 13:41:55 +03:00
parent 98146a7996
commit 11b84ddc5d
2 changed files with 30 additions and 16 deletions

View File

@@ -2,12 +2,12 @@ import { create } from "zustand";
import type { AuthStore } from "../../types/store";
import { login, logout, register } from "../../../api";
import { callApi } from "shared/utils";
import { UNEXPECTED_ERROR_MESSAGE } from "shared/config";
export const useAuthStore = create<AuthStore>()((set) => ({
user: undefined,
status: "idle",
setUser: (user) => set({ user }),
setStatus: (status) => set({ status }),
error: null,
login: async (loginData) => {
set({ status: "loading" });
@@ -15,17 +15,21 @@ export const useAuthStore = create<AuthStore>()((set) => ({
const [responseData, loginError] = await callApi(() => login(loginData));
if (loginError) {
set({ status: "unauthenticated" });
set({ status: "unauthenticated", error: loginError });
return;
}
set({
status: "authenticated",
user: responseData?.user,
error: null,
});
} catch (err) {
console.warn(err);
set({ status: "idle" });
console.error(err);
set({
status: "unauthenticated",
error: new Error(UNEXPECTED_ERROR_MESSAGE),
});
}
},
register: async (registerData) => {
@@ -35,17 +39,21 @@ export const useAuthStore = create<AuthStore>()((set) => ({
);
if (registerError) {
set({ status: "unauthenticated" });
set({ status: "unauthenticated", error: registerError });
return;
}
set({
status: "authenticated",
user: responseData?.user,
error: null,
});
} catch (err) {
console.warn(err);
set({ status: "idle" });
console.error(err);
set({
status: "unauthenticated",
error: new Error(UNEXPECTED_ERROR_MESSAGE),
});
}
},
logout: async () => {
@@ -54,13 +62,18 @@ export const useAuthStore = create<AuthStore>()((set) => ({
const [, logoutError] = await callApi(() => logout());
if (logoutError) {
set({ status: "authenticated" });
set({ error: logoutError });
return;
}
set({ status: "unauthenticated", user: undefined });
set({
status: "unauthenticated",
user: undefined,
error: null,
});
} catch (err) {
console.warn(err);
set({ status: "idle" });
console.error(err);
set({ error: new Error(UNEXPECTED_ERROR_MESSAGE) });
}
},
}));

View File

@@ -1,8 +1,8 @@
import type { User } from "entities/User";
import type { AuthData, AuthStatus } from "./service";
import type { ApiError } from "shared/utils";
export interface AuthStoreState {
/**
* User's credentials
*/
@@ -11,6 +11,10 @@ export interface AuthStoreState {
* Authentication status
*/
status: AuthStatus;
/**
* Error data
*/
error: ApiError | Error | null;
}
export type LoginAction = (data: AuthData) => void;
@@ -18,9 +22,6 @@ export type RegisterAction = (data: AuthData) => void;
export type LogoutAction = () => void;
export interface AuthStoreActions {
setUser: (user: AuthStoreState["user"] | undefined) => void;
setStatus: (status: AuthStoreState["status"]) => void;
// Async actions
login: LoginAction;
register: RegisterAction;