1import type { EnvironmentId } from "@t3tools/contracts";
2
3/** Null follows all environments, including ones connected after the menu opened. */
4export function toggleUsageEnvironment(
5 selected: ReadonlySet<EnvironmentId> | null,
6 environments: readonly { readonly environmentId: EnvironmentId }[],
7 toggledId: EnvironmentId,
8): ReadonlySet<EnvironmentId> | null {
9 const ids = environments.map(({ environmentId }) => environmentId);
10 const next = new Set(ids.filter((id) => selected === null || selected.has(id)));
11 if (ids.includes(toggledId)) {
12 if (next.has(toggledId)) next.delete(toggledId);
13 else next.add(toggledId);
14 }
15 return ids.every((id) => next.has(id)) ? null : next;
16}