feat: refactor frontend hooks and store (#76)
This commit is contained in:
@@ -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,
|
||||
]);
|
||||
}
|
||||
Reference in New Issue
Block a user