| 1 | import { useNavigation } from "@react-navigation/native"; |
| 2 | import { useEffect, useMemo } from "react"; |
| 3 | |
| 4 | import { useProjects } from "../../state/entities"; |
| 5 | import { useWorkspaceEnvironments } from "../../state/workspace"; |
| 6 | import { |
| 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. */ |
| 12 | export 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 | } |