| 1 | import type { EnvironmentId } from "@t3tools/contracts"; |
| 2 | |
| 3 | /** Null follows all environments, including ones connected after the menu opened. */ |
| 4 | export 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 | } |