Skip to content

Commit 9432179

Browse files
committed
Improves the region switch modal with more info
1 parent 80b984a commit 9432179

File tree

1 file changed

+99
-8
lines changed
  • apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.regions

1 file changed

+99
-8
lines changed

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

Lines changed: 99 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { ArrowRightIcon } from "@heroicons/react/20/solid";
12
import { Form } from "@remix-run/react";
23
import { type ActionFunctionArgs, type LoaderFunctionArgs } from "@remix-run/server-runtime";
34
import { tryCatch } from "@trigger.dev/core";
@@ -225,7 +226,7 @@ export default function Page() {
225226
Default
226227
</Badge>
227228
) : (
228-
<SetDefaultDialog region={region} />
229+
<SetDefaultDialog regions={regions} newDefaultRegion={region} />
229230
)
230231
}
231232
/>
@@ -244,8 +245,15 @@ export default function Page() {
244245
);
245246
}
246247

247-
function SetDefaultDialog({ region }: { region: Region }) {
248+
function SetDefaultDialog({
249+
regions,
250+
newDefaultRegion,
251+
}: {
252+
regions: Region[];
253+
newDefaultRegion: Region;
254+
}) {
248255
const [isOpen, setIsOpen] = useState(false);
256+
const currentDefaultRegion = regions.find((r) => r.isDefault);
249257

250258
return (
251259
<Dialog open={isOpen} onOpenChange={setIsOpen}>
@@ -254,21 +262,104 @@ function SetDefaultDialog({ region }: { region: Region }) {
254262
</DialogTrigger>
255263
<DialogContent>
256264
<DialogHeader>
257-
<DialogTitle>Set as default</DialogTitle>
265+
<DialogTitle>Set as default region</DialogTitle>
258266
</DialogHeader>
259267
<DialogDescription>
260268
<Paragraph>
261-
When you trigger a run it will execute in your default region, unless you{" "}
262-
<TextLink to={docsPath("triggering#region")}>specify a region when triggering</TextLink>
263-
.
269+
Are you sure you want to set {newDefaultRegion.name} as your default region?
270+
</Paragraph>
271+
272+
<div className="my-4 flex">
273+
<div className="flex flex-1 flex-col rounded-md border border-grid-dimmed">
274+
<div className="border-b border-grid-dimmed bg-charcoal-800 p-3 font-medium">
275+
<Paragraph variant="small/bright">Current default</Paragraph>
276+
</div>
277+
<div className="border-b border-grid-dimmed p-3">
278+
<Paragraph variant="small">{currentDefaultRegion?.name ?? "–"}</Paragraph>
279+
</div>
280+
<div className="border-b border-grid-dimmed p-3">
281+
<Paragraph variant="small" className="flex items-center gap-2">
282+
{currentDefaultRegion?.cloudProvider ? (
283+
<>
284+
<CloudProviderIcon
285+
provider={currentDefaultRegion.cloudProvider}
286+
className="size-6"
287+
/>
288+
{cloudProviderTitle(currentDefaultRegion.cloudProvider)}
289+
</>
290+
) : (
291+
"–"
292+
)}
293+
</Paragraph>
294+
</div>
295+
<div className="p-3">
296+
<Paragraph variant="small" className="flex items-center gap-2">
297+
{currentDefaultRegion?.location ? (
298+
<FlagIcon region={currentDefaultRegion.location} className="size-5" />
299+
) : null}
300+
{currentDefaultRegion?.description ?? "–"}
301+
</Paragraph>
302+
</div>
303+
</div>
304+
305+
{/* Middle column with arrow */}
306+
<div className="flex items-center justify-center px-3">
307+
<div className="flex size-10 items-center justify-center rounded-full border border-grid-dimmed bg-charcoal-800 p-2">
308+
<ArrowRightIcon className="size-4 text-text-dimmed" />
309+
</div>
310+
</div>
311+
312+
{/* Right column */}
313+
<div className="flex flex-1 flex-col rounded-md border border-grid-dimmed">
314+
<div className="border-b border-grid-dimmed bg-charcoal-800 p-3 font-medium">
315+
<Paragraph variant="small/bright">New default</Paragraph>
316+
</div>
317+
<div className="border-b border-grid-dimmed p-3">
318+
<Paragraph variant="small">{newDefaultRegion.name}</Paragraph>
319+
</div>
320+
<div className="border-b border-grid-dimmed p-3">
321+
<Paragraph variant="small" className="flex items-center gap-2">
322+
{newDefaultRegion.cloudProvider ? (
323+
<>
324+
<CloudProviderIcon
325+
provider={newDefaultRegion.cloudProvider}
326+
className="size-6"
327+
/>
328+
{cloudProviderTitle(newDefaultRegion.cloudProvider)}
329+
</>
330+
) : (
331+
"–"
332+
)}
333+
</Paragraph>
334+
</div>
335+
<div className="p-3">
336+
<Paragraph variant="small" className="flex items-center gap-2">
337+
{newDefaultRegion.location ? (
338+
<FlagIcon region={newDefaultRegion.location} className="size-5" />
339+
) : null}
340+
{newDefaultRegion.description ?? "–"}
341+
</Paragraph>
342+
</div>
343+
</div>
344+
</div>
345+
346+
<Paragraph>
347+
Runs triggered from now on will execute in "{newDefaultRegion.name}", unless you{" "}
348+
<TextLink to={docsPath("triggering#region")}>override when triggering</TextLink>.
264349
</Paragraph>
265350
</DialogDescription>
266351
<DialogFooter>
267-
<Button variant="secondary/small" onClick={() => setIsOpen(false)}>
352+
<Button variant="secondary/medium" onClick={() => setIsOpen(false)}>
268353
Cancel
269354
</Button>
270355
<Form method="post">
271-
<Button variant="secondary/small" type="submit" name="regionId" value={region.id}>
356+
<Button
357+
variant="primary/medium"
358+
type="submit"
359+
name="regionId"
360+
shortcut={{ modifiers: ["mod"], key: "enter" }}
361+
value={newDefaultRegion.id}
362+
>
272363
Set as default
273364
</Button>
274365
</Form>

0 commit comments

Comments
 (0)