diff --git a/src-web/components/SidebarItem.tsx b/src-web/components/SidebarItem.tsx index 4a148e91..d1417451 100644 --- a/src-web/components/SidebarItem.tsx +++ b/src-web/components/SidebarItem.tsx @@ -226,11 +226,13 @@ export const SidebarItem = memo(function SidebarItem({ return (
  • - + {showContextMenu && ( + + )} + )}
    ); }); @@ -607,12 +619,15 @@ function FileActionsDropdown({ ); } -function ensureValidPair(initialPair?: Pair): Pair { +function emptyPair(): Pair { return { - name: initialPair?.name ?? '', - value: initialPair?.value ?? '', - enabled: initialPair?.enabled ?? true, - isFile: initialPair?.isFile ?? false, - id: initialPair?.id || generateId(), + enabled: true, + name: '', + value: '', + id: generateId(), }; } + +function isPairEmpty(pair: Pair): boolean { + return !pair.name && !pair.value; +} diff --git a/src-web/hooks/useActiveEnvironmentVariables.ts b/src-web/hooks/useActiveEnvironmentVariables.ts index 84c27b3d..cf6d45ac 100644 --- a/src-web/hooks/useActiveEnvironmentVariables.ts +++ b/src-web/hooks/useActiveEnvironmentVariables.ts @@ -1,24 +1,26 @@ import type { EnvironmentVariable } from '@yaakapp-internal/models'; -import { useMemo } from 'react'; -import { useActiveEnvironment } from './useActiveEnvironment'; -import { useEnvironments } from './useEnvironments'; +import { atom, useAtomValue } from 'jotai'; +import { activeEnvironmentAtom } from './useActiveEnvironment'; +import { environmentsBreakdownAtom } from './useEnvironments'; + +const activeEnvironmentVariablesAtom = atom((get) => { + const { baseEnvironment } = get(environmentsBreakdownAtom); + const activeEnvironment = get(activeEnvironmentAtom); + + const varMap: Record = {}; + const allVariables = [ + ...(baseEnvironment?.variables ?? []), + ...(activeEnvironment?.variables ?? []), + ]; + + for (const v of allVariables) { + if (!v.enabled || !v.name) continue; + varMap[v.name] = v; + } + + return Object.values(varMap); +}); export function useActiveEnvironmentVariables() { - const { baseEnvironment } = useEnvironments(); - const [environment] = useActiveEnvironment(); - - const variables = useMemo(() => { - const varMap: Record = {}; - - const allVariables = [...(baseEnvironment?.variables ?? []), ...(environment?.variables ?? [])]; - - for (const v of allVariables) { - if (!v.enabled || !v.name) continue; - varMap[v.name] = v; - } - - return Object.values(varMap); - }, [baseEnvironment?.variables, environment?.variables]); - - return variables; + return useAtomValue(activeEnvironmentVariablesAtom); } diff --git a/src-web/hooks/useEnvironments.ts b/src-web/hooks/useEnvironments.ts index afcb7eb2..395288e6 100644 --- a/src-web/hooks/useEnvironments.ts +++ b/src-web/hooks/useEnvironments.ts @@ -4,11 +4,18 @@ import { atom } from 'jotai/index'; export const environmentsAtom = atom([]); -export function useEnvironments() { - const allEnvironments = useAtomValue(environmentsAtom); +export const environmentsBreakdownAtom = atom<{ + baseEnvironment: Environment | null; + allEnvironments: Environment[]; + subEnvironments: Environment[]; +}>((get) => { + const allEnvironments = get(environmentsAtom); const baseEnvironment = allEnvironments.find((e) => e.environmentId == null) ?? null; const subEnvironments = allEnvironments.filter((e) => e.environmentId === (baseEnvironment?.id ?? 'n/a')) ?? []; - return { baseEnvironment, subEnvironments, allEnvironments } as const; +}); + +export function useEnvironments() { + return useAtomValue(environmentsBreakdownAtom); }