chore: Initial commit of Opencord base state

This commit is contained in:
Jannis Braun
2026-02-18 02:49:21 +01:00
commit 4fd17084a5
124 changed files with 17955 additions and 0 deletions
+62
View File
@@ -0,0 +1,62 @@
import { create } from 'zustand';
import { api } from '../api/client';
export const useAuthStore = create((set, get) => ({
token: localStorage.getItem('opencord_token'),
user: null,
isLoading: false,
error: null,
login: async (username, password) => {
set({ isLoading: true, error: null });
try {
const response = await api.auth.login({ username, password });
localStorage.setItem('opencord_token', response.token);
set({ token: response.token, user: response.user, isLoading: false });
}
catch (err) {
set({ isLoading: false, error: err instanceof Error ? err.message : 'Login failed' });
throw err;
}
},
register: async (username, password, displayName) => {
set({ isLoading: true, error: null });
try {
const response = await api.auth.register({ username, password, displayName });
localStorage.setItem('opencord_token', response.token);
set({ token: response.token, user: response.user, isLoading: false });
}
catch (err) {
set({ isLoading: false, error: err instanceof Error ? err.message : 'Registration failed' });
throw err;
}
},
logout: () => {
localStorage.removeItem('opencord_token');
set({ token: null, user: null });
},
loadUser: async () => {
const token = get().token;
if (!token)
return;
set({ isLoading: true });
try {
const user = await api.users.me();
set({ user, isLoading: false });
}
catch {
localStorage.removeItem('opencord_token');
set({ token: null, user: null, isLoading: false });
}
},
updateProfile: async (data) => {
try {
const user = await api.users.update(data);
set({ user });
}
catch (err) {
set({ error: err instanceof Error ? err.message : 'Update failed' });
throw err;
}
},
setUser: (user) => set({ user }),
clearError: () => set({ error: null }),
}));