feat: refactor frontend hooks and store (#76)

This commit is contained in:
Carlos Florêncio
2026-01-22 21:30:26 +00:00
committed by GitHub
parent 290359f7f0
commit 8525cc0d87
110 changed files with 3929 additions and 2032 deletions
@@ -0,0 +1,75 @@
import { useEffect } from 'react';
import { useAppStore } from '@/components/state-provider';
import { listAgents, listEnvironments, listExecutors } from '@/lib/api';
export function useSettingsData(enabled = true) {
const executors = useAppStore((state) => state.executors.items);
const environments = useAppStore((state) => state.environments.items);
const settingsAgents = useAppStore((state) => state.settingsAgents.items);
const settingsData = useAppStore((state) => state.settingsData);
const setExecutors = useAppStore((state) => state.setExecutors);
const setEnvironments = useAppStore((state) => state.setEnvironments);
const setSettingsAgents = useAppStore((state) => state.setSettingsAgents);
const setAgentProfiles = useAppStore((state) => state.setAgentProfiles);
const setSettingsData = useAppStore((state) => state.setSettingsData);
useEffect(() => {
if (!enabled) return;
if (settingsData.executorsLoaded) return;
if (executors.length === 0) {
listExecutors({ cache: 'no-store' })
.then((response) => setExecutors(response.executors))
.catch(() => setExecutors([]))
.finally(() => setSettingsData({ executorsLoaded: true }));
} else {
setSettingsData({ executorsLoaded: true });
}
}, [enabled, executors.length, setExecutors, setSettingsData, settingsData.executorsLoaded]);
useEffect(() => {
if (!enabled) return;
if (settingsData.environmentsLoaded) return;
if (environments.length === 0) {
listEnvironments({ cache: 'no-store' })
.then((response) => setEnvironments(response.environments))
.catch(() => setEnvironments([]))
.finally(() => setSettingsData({ environmentsLoaded: true }));
} else {
setSettingsData({ environmentsLoaded: true });
}
}, [enabled, environments.length, setEnvironments, setSettingsData, settingsData.environmentsLoaded]);
useEffect(() => {
if (!enabled) return;
if (settingsData.agentsLoaded) return;
if (settingsAgents.length === 0) {
listAgents({ cache: 'no-store' })
.then((response) => {
setSettingsAgents(response.agents);
setAgentProfiles(
response.agents.flatMap((agent) =>
agent.profiles.map((profile) => ({
id: profile.id,
label: `${profile.agent_display_name} • ${profile.name}`,
agent_id: agent.id,
}))
)
);
})
.catch(() => {
setSettingsAgents([]);
setAgentProfiles([]);
})
.finally(() => setSettingsData({ agentsLoaded: true }));
} else {
setSettingsData({ agentsLoaded: true });
}
}, [
enabled,
setAgentProfiles,
setSettingsAgents,
setSettingsData,
settingsAgents.length,
settingsData.agentsLoaded,
]);
}