Compare commits

..

2 Commits

Author SHA1 Message Date
Ilia Mashkov
11b84ddc5d feat(auth): add error field to store and remove unused actions 2026-03-17 13:41:55 +03:00
Ilia Mashkov
98146a7996 chore: rename file 2026-03-17 13:39:32 +03:00
5 changed files with 34 additions and 18 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;

View File

@@ -1,2 +1,4 @@
export const BASE_URL =
import.meta.env.VITE_API_BASE_URL || "https://localhost:3001";
export const UNEXPECTED_ERROR_MESSAGE = "An unexpected error occured";

View File

@@ -1,5 +1,5 @@
import ky from "ky";
import { BASE_URL } from "./endpoint";
import { BASE_URL } from "./constants";
export const api = ky.create({
prefixUrl: BASE_URL,

View File

@@ -1,2 +1,2 @@
export * from "./api/endpoint";
export * from "./api/constants";
export * from "./api/httpClient";