import type { EnvScope, EnvVariable } from '../form-state' import type { DraftFieldUpdate } from './utils' import { atom } from 'jotai' import { agentComposerDraftAtom } from '../store' import { resolveDraftFieldUpdate } from './utils' export const agentComposerEnvVariablesAtom = atom( (get) => get(agentComposerDraftAtom).envVariables, (get, set, envVariablesUpdate: DraftFieldUpdate) => { const draft = get(agentComposerDraftAtom) set(agentComposerDraftAtom, { ...draft, envVariables: resolveDraftFieldUpdate(draft.envVariables, envVariablesUpdate), }) }, ) const updateEnvVariable = ( envVariables: EnvVariable[], starterVariable: EnvVariable, id: string, updater: (variable: EnvVariable) => EnvVariable, ) => { const existingVariable = envVariables.find((variable) => variable.id === id) if (existingVariable) { return envVariables.map((variable) => (variable.id === id ? updater(variable) : variable)) } if (id === starterVariable.id) return [updater(starterVariable)] return envVariables } export const setEnvVariableKeyAtom = atom( null, ( _get, set, { id, key, starterVariable, }: { id: string key: string starterVariable: EnvVariable }, ) => { set(agentComposerEnvVariablesAtom, (envVariables) => updateEnvVariable(envVariables, starterVariable, id, (variable) => ({ ...variable, key })), ) }, ) export const setEnvVariableScopeAtom = atom( null, ( _get, set, { id, scope, starterVariable, }: { id: string scope: EnvScope starterVariable: EnvVariable }, ) => { set(agentComposerEnvVariablesAtom, (envVariables) => updateEnvVariable(envVariables, starterVariable, id, (variable) => ({ ...variable, scope })), ) }, ) export const setEnvVariableValueAtom = atom( null, ( _get, set, { id, starterVariable, value, }: { id: string starterVariable: EnvVariable value: string }, ) => { set(agentComposerEnvVariablesAtom, (envVariables) => updateEnvVariable(envVariables, starterVariable, id, (variable) => ({ ...variable, value })), ) }, ) export const addEnvVariableAtom = atom( null, ( _get, set, { starterVariable, variable, }: { starterVariable: EnvVariable variable: EnvVariable }, ) => { set(agentComposerEnvVariablesAtom, (envVariables) => [ ...(envVariables.length > 0 ? envVariables : [starterVariable]), variable, ]) }, ) export const importEnvVariablesAtom = atom(null, (_get, set, variables: EnvVariable[]) => { set(agentComposerEnvVariablesAtom, (envVariables) => [...envVariables, ...variables]) }) export const removeEnvVariableAtom = atom(null, (_get, set, id: string) => { set(agentComposerEnvVariablesAtom, (envVariables) => envVariables.filter((variable) => variable.id !== id), ) })