Skip to content

Commit 9171eff

Browse files
committed
Automatically open repo connection modal after app installation
1 parent 86506d9 commit 9171eff

File tree

2 files changed

+49
-8
lines changed
  • apps/webapp/app/routes
    • _app.github.callback
    • _app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.settings

2 files changed

+49
-8
lines changed

apps/webapp/app/routes/_app.github.callback/route.tsx

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
1-
import { type LoaderFunctionArgs } from "@remix-run/node";
1+
import { type LoaderFunctionArgs, redirect } from "@remix-run/node";
22
import { z } from "zod";
33
import { validateGitHubAppInstallSession } from "~/services/gitHubSession.server";
44
import { linkGitHubAppInstallation, updateGitHubAppInstallation } from "~/services/gitHub.server";
55
import { logger } from "~/services/logger.server";
6-
import { redirectWithErrorMessage, redirectWithSuccessMessage } from "~/models/message.server";
6+
import {
7+
redirectWithErrorMessage,
8+
setRequestSuccessMessage,
9+
commitSession,
10+
} from "~/models/message.server";
711
import { tryCatch } from "@trigger.dev/core";
812
import { $replica } from "~/db.server";
913
import { requireUser } from "~/services/session.server";
@@ -88,7 +92,14 @@ export async function loader({ request }: LoaderFunctionArgs) {
8892
return redirectWithErrorMessage(redirectTo, request, "Failed to install GitHub App");
8993
}
9094

91-
return redirectWithSuccessMessage(redirectTo, request, "GitHub App installed successfully");
95+
const session = await setRequestSuccessMessage(request, "GitHub App installed successfully");
96+
session.flash("gitHubAppInstalled", true);
97+
98+
return redirect(redirectTo, {
99+
headers: {
100+
"Set-Cookie": await commitSession(session),
101+
},
102+
});
92103
}
93104

94105
case "update": {
@@ -101,7 +112,14 @@ export async function loader({ request }: LoaderFunctionArgs) {
101112
return redirectWithErrorMessage(redirectTo, request, "Failed to update GitHub App");
102113
}
103114

104-
return redirectWithSuccessMessage(redirectTo, request, "GitHub App updated successfully");
115+
const session = await setRequestSuccessMessage(request, "GitHub App updated successfully");
116+
session.flash("gitHubAppInstalled", true);
117+
118+
return redirect(redirectTo, {
119+
headers: {
120+
"Set-Cookie": await commitSession(session),
121+
},
122+
});
105123
}
106124

107125
case "request": {
@@ -111,7 +129,13 @@ export async function loader({ request }: LoaderFunctionArgs) {
111129
callbackData,
112130
});
113131

114-
return redirectWithSuccessMessage(redirectTo, request, "GitHub App installation requested");
132+
const session = await setRequestSuccessMessage(request, "GitHub App installation requested");
133+
134+
return redirect(redirectTo, {
135+
headers: {
136+
"Set-Cookie": await commitSession(session),
137+
},
138+
});
115139
}
116140

117141
default:

apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.settings/route.tsx

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ import {
5151
redirectBackWithSuccessMessage,
5252
redirectWithErrorMessage,
5353
redirectWithSuccessMessage,
54+
getSession,
5455
} from "~/models/message.server";
5556
import { findProjectBySlug } from "~/models/project.server";
5657
import { DeleteProjectService } from "~/services/deleteProject.server";
@@ -92,11 +93,15 @@ export const meta: MetaFunction = () => {
9293
export const loader = async ({ request, params }: LoaderFunctionArgs) => {
9394
const githubAppEnabled = env.GITHUB_APP_ENABLED === "1";
9495

96+
const session = await getSession(request.headers.get("Cookie"));
97+
const openGitHubRepoConnectionModal = session.get("gitHubAppInstalled") === true;
98+
9599
if (!githubAppEnabled) {
96100
return typedjson({
97101
githubAppEnabled,
98102
githubAppInstallations: undefined,
99103
connectedGithubRepository: undefined,
104+
openGitHubRepoConnectionModal,
100105
});
101106
}
102107

@@ -143,6 +148,7 @@ export const loader = async ({ request, params }: LoaderFunctionArgs) => {
143148
branchTracking: branchTrackingOrFailure.success ? branchTrackingOrFailure.data : undefined,
144149
},
145150
githubAppInstallations: undefined,
151+
openGitHubRepoConnectionModal,
146152
});
147153
}
148154

@@ -181,6 +187,7 @@ export const loader = async ({ request, params }: LoaderFunctionArgs) => {
181187
githubAppEnabled,
182188
githubAppInstallations,
183189
connectedGithubRepository: undefined,
190+
openGitHubRepoConnectionModal,
184191
});
185192
};
186193

@@ -466,8 +473,12 @@ export const action: ActionFunction = async ({ request, params }) => {
466473
};
467474

468475
export default function Page() {
469-
const { githubAppInstallations, connectedGithubRepository, githubAppEnabled } =
470-
useTypedLoaderData<typeof loader>();
476+
const {
477+
githubAppInstallations,
478+
connectedGithubRepository,
479+
githubAppEnabled,
480+
openGitHubRepoConnectionModal,
481+
} = useTypedLoaderData<typeof loader>();
471482
const project = useProject();
472483
const organization = useOrganization();
473484
const environment = useEnvironment();
@@ -600,6 +611,7 @@ export default function Page() {
600611
organizationSlug={organization.slug}
601612
projectSlug={project.slug}
602613
environmentSlug={environment.slug}
614+
openGitHubRepoConnectionModal={openGitHubRepoConnectionModal}
603615
/>
604616
)}
605617
</div>
@@ -674,13 +686,15 @@ function ConnectGitHubRepoModal({
674686
organizationSlug,
675687
projectSlug,
676688
environmentSlug,
689+
open = false,
677690
}: {
678691
gitHubAppInstallations: GitHubAppInstallation[];
679692
organizationSlug: string;
680693
projectSlug: string;
681694
environmentSlug: string;
695+
open?: boolean;
682696
}) {
683-
const [isModalOpen, setIsModalOpen] = useState(false);
697+
const [isModalOpen, setIsModalOpen] = useState(open);
684698
const lastSubmission = useActionData() as any;
685699
const navigate = useNavigate();
686700

@@ -861,11 +875,13 @@ function GitHubConnectionPrompt({
861875
organizationSlug,
862876
projectSlug,
863877
environmentSlug,
878+
openGitHubRepoConnectionModal = false,
864879
}: {
865880
gitHubAppInstallations: GitHubAppInstallation[];
866881
organizationSlug: string;
867882
projectSlug: string;
868883
environmentSlug: string;
884+
openGitHubRepoConnectionModal?: boolean;
869885
}) {
870886
return (
871887
<Fieldset>
@@ -893,6 +909,7 @@ function GitHubConnectionPrompt({
893909
organizationSlug={organizationSlug}
894910
projectSlug={projectSlug}
895911
environmentSlug={environmentSlug}
912+
open={openGitHubRepoConnectionModal}
896913
/>
897914
<span className="flex items-center gap-1 text-xs text-text-dimmed">
898915
<CheckCircleIcon className="size-4 text-success" /> GitHub app is installed

0 commit comments

Comments
 (0)