import type { Environment, EnvironmentVariable } from '@yaakapp-internal/models'; import { updateModel } from '@yaakapp-internal/models'; import { openFolderSettings } from '../commands/openFolderSettings'; import type { PairEditorHandle } from '../components/core/PairEditor'; import { ensurePairId } from '../components/core/PairEditor.util'; import { EnvironmentEditDialog } from '../components/EnvironmentEditDialog'; import { environmentsBreakdownAtom } from '../hooks/useEnvironmentsBreakdown'; import { toggleDialog } from './dialog'; import { jotaiStore } from './jotai'; interface Options { addOrFocusVariable?: EnvironmentVariable; } export async function editEnvironment( initialEnvironment: Environment | null, options: Options = {}, ) { if (initialEnvironment?.parentModel === 'folder' && initialEnvironment.parentId != null) { openFolderSettings(initialEnvironment.parentId, 'variables'); } else { const { addOrFocusVariable } = options; const { baseEnvironment } = jotaiStore.get(environmentsBreakdownAtom); let environment = initialEnvironment ?? baseEnvironment; let focusId: string | null = null; if (addOrFocusVariable && environment != null) { const existing = environment.variables.find( (v) => v.id === addOrFocusVariable.id || v.name === addOrFocusVariable.name, ); if (existing) { focusId = existing.id ?? null; } else { const newVar = ensurePairId(addOrFocusVariable); environment = { ...environment, variables: [...environment.variables, newVar] }; await updateModel(environment); environment.variables.push(newVar); focusId = newVar.id; } } let didFocusVariable = false; toggleDialog({ id: 'environment-editor', noPadding: true, size: 'lg', className: 'h-[90vh] max-h-[60rem]', render: () => ( { if (focusId && !didFocusVariable) { pairEditor?.focusValue(focusId); didFocusVariable = true; } }} /> ), }); } }