Skip to content
Source
Sign inSign up

environmentSections.ts

43 lines1.6 KB

1import type { EnvironmentId } from "@t3tools/contracts";
2import type { RelayClientEnvironmentRecord } from "@t3tools/contracts/relay";
3import type { ConnectedEnvironmentSummary } from "../../state/remote-runtime-types";
4​
5export interface EnvironmentSectionsInput {
6 readonly connectedEnvironments: ReadonlyArray<ConnectedEnvironmentSummary>;
7 readonly cloudEnvironments: ReadonlyArray<RelayClientEnvironmentRecord> | null;
8}
9​
10export interface EnvironmentSections {
11 readonly localEnvironments: ReadonlyArray<ConnectedEnvironmentSummary>;
12 readonly connectedCloudEnvironments: ReadonlyArray<ConnectedEnvironmentSummary>;
13 readonly availableCloudEnvironments: ReadonlyArray<RelayClientEnvironmentRecord>;
15​
16export function relayManagedEnvironmentIds(
17 environments: ReadonlyArray<{
18 readonly environmentId: EnvironmentId;
19 readonly isRelayManaged: boolean;
20 }>,
21): ReadonlySet<EnvironmentId> {
22 return new Set(
23 environments
24 .filter((environment) => environment.isRelayManaged)
25 .map((environment) => environment.environmentId),
26 );
28​
29export function splitEnvironmentSections(input: EnvironmentSectionsInput): EnvironmentSections {
30 const savedEnvironmentIds = relayManagedEnvironmentIds(input.connectedEnvironments);
31​
32 return {
33 localEnvironments: input.connectedEnvironments.filter(
34 (environment) => !environment.isRelayManaged,
35 ),
36 connectedCloudEnvironments: input.connectedEnvironments.filter(
37 (environment) => environment.isRelayManaged,
38 ),
39 availableCloudEnvironments: (input.cloudEnvironments ?? []).filter(
40 (environment) => !savedEnvironmentIds.has(environment.environmentId),
41 ),
42 };