1import { useNavigation } from "@react-navigation/native";
2import { useEffect, useMemo } from "react";
3
4import { useProjects } from "../../state/entities";
5import { useWorkspaceEnvironments } from "../../state/workspace";
6import {
7 pullRequestFallbackEnvironment,
8 type PullRequestEnvironmentTarget,
9} from "./pullRequestEnvironmentFallback";
10
11/** Move a pull request route to a connected copy of its repository when its own is down. */
12export function usePullRequestEnvironmentFallback(params: PullRequestEnvironmentTarget) {
13 const navigation = useNavigation();
14 const projects = useProjects();
15 const connected = useWorkspaceEnvironments()
16 .filter((environment) => environment.connectionState === "connected")
17 .map((environment) => String(environment.environmentId))
18 .join("\n");
19 const fallback = useMemo(
20 () => pullRequestFallbackEnvironment(params, projects, new Set(connected.split("\n"))),
21 [params, projects, connected],
22 );
23 useEffect(() => {
24 if (fallback) navigation.setParams(fallback);
25 }, [fallback, navigation]);
26}