feat: add bw themes
ci-front / build (push) Successful in 2m26s

This commit is contained in:
2026-04-03 21:49:39 +03:00
parent cc23cc2a1e
commit 88fb7a1888
9 changed files with 642 additions and 235 deletions
@@ -0,0 +1,97 @@
import { create } from "zustand";
import { persist } from "zustand/middleware";
import type {
AuthState,
LoginCredentials,
RegisterData,
User,
} from "../types/auth.types";
// Mock API functions - замените на реальные запросы
const mockLogin = async (
credentials: LoginCredentials,
): Promise<{ user: User; token: string }> => {
// Имитация API запроса
await new Promise((resolve) => setTimeout(resolve, 1000));
if (credentials.login === "admin" && credentials.password === "admin") {
return {
user: {
id: "1",
login: credentials.login,
firstName: "Admin",
lastName: "User",
},
token: "mock-jwt-token",
};
}
throw new Error("Invalid credentials");
};
const mockRegister = async (
data: RegisterData,
): Promise<{ user: User; token: string }> => {
await new Promise((resolve) => setTimeout(resolve, 1000));
return {
user: {
id: Date.now().toString(),
login: data.login,
firstName: data.firstName,
lastName: data.lastName,
},
token: "mock-jwt-token",
};
};
export const useAuthStore = create<AuthState>()(
persist(
(set) => ({
user: null,
token: null,
isLoading: false,
error: null,
login: async (credentials: LoginCredentials) => {
set({ isLoading: true, error: null });
try {
const { user, token } = await mockLogin(credentials);
set({ user, token, isLoading: false });
} catch (error) {
set({
error: error instanceof Error ? error.message : "Login failed",
isLoading: false,
});
throw error;
}
},
register: async (data: RegisterData) => {
set({ isLoading: true, error: null });
try {
const { user, token } = await mockRegister(data);
set({ user, token, isLoading: false });
} catch (error) {
set({
error:
error instanceof Error ? error.message : "Registration failed",
isLoading: false,
});
throw error;
}
},
logout: () => {
set({ user: null, token: null, error: null });
},
clearError: () => {
set({ error: null });
},
}),
{
name: "auth-storage",
partialize: (state) => ({ token: state.token, user: state.user }),
},
),
);