Files
mp-silma-ai-aide/src/store.ts
T

48 lines
1.2 KiB
TypeScript

import { createStore } from "zustand/vanilla";
import { getCurrentGiteaUser, giteaConfig, type GiteaUser } from "./api";
export type StatusTone = "neutral" | "success" | "error";
interface AppState {
config: typeof giteaConfig;
connectedUser: GiteaUser | null;
isTestingConnection: boolean;
statusMessage: string;
statusTone: StatusTone;
testConnection: () => Promise<void>;
}
export const appStore = createStore<AppState>()((set) => ({
config: giteaConfig,
connectedUser: null,
isTestingConnection: false,
statusMessage: "Ready.",
statusTone: "neutral",
testConnection: async () => {
set({
connectedUser: null,
isTestingConnection: true,
statusMessage: "Testing connection...",
statusTone: "neutral"
});
try {
const user = await getCurrentGiteaUser();
set({
connectedUser: user,
statusMessage: `Connected as ${user.full_name || user.login}.`,
statusTone: "success"
});
} catch (error) {
const message = error instanceof Error ? error.message : "Connection failed.";
set({
connectedUser: null,
statusMessage: message,
statusTone: "error"
});
} finally {
set({ isTestingConnection: false });
}
}
}));