diff --git a/.oxlintrc.json b/.oxlintrc.json
index 8d8de0274f2..ee5c80fb16f 100644
--- a/.oxlintrc.json
+++ b/.oxlintrc.json
@@ -115,6 +115,7 @@
{
"files": ["apps/webapp/app/**/*.ts", "apps/webapp/app/**/*.tsx"],
"rules": {
+ "react/jsx-no-useless-fragment": "error",
"react/no-unstable-nested-components": "error",
"react/rules-of-hooks": "error",
"trigger-runops/no-control-plane-run-graph-access": "error",
diff --git a/apps/webapp/app/components/ErrorDisplay.tsx b/apps/webapp/app/components/ErrorDisplay.tsx
index d40fce0957b..d0f60840f35 100644
--- a/apps/webapp/app/components/ErrorDisplay.tsx
+++ b/apps/webapp/app/components/ErrorDisplay.tsx
@@ -34,22 +34,16 @@ export function RouteErrorDisplay(options?: ErrorDisplayOptions) {
);
}
- return (
- <>
- {isRouteErrorResponse(error) ? (
-
- ) : error instanceof Error ? (
-
- ) : (
-
- )}
- >
+ return isRouteErrorResponse(error) ? (
+
+ ) : error instanceof Error ? (
+
+ ) : (
+
);
}
diff --git a/apps/webapp/app/components/dashboard-agent/AskAgentButton.tsx b/apps/webapp/app/components/dashboard-agent/AskAgentButton.tsx
index f5acc37bb38..602a96e123b 100644
--- a/apps/webapp/app/components/dashboard-agent/AskAgentButton.tsx
+++ b/apps/webapp/app/components/dashboard-agent/AskAgentButton.tsx
@@ -21,7 +21,7 @@ export function AskAgentButton({
fallback?: React.ReactNode;
}) {
const available = useDashboardAgentAvailable();
- if (!available) return <>{fallback}>;
+ if (!available) return fallback;
const button = (
);
}
diff --git a/apps/webapp/app/components/runs/v3/TaskRunsTable.tsx b/apps/webapp/app/components/runs/v3/TaskRunsTable.tsx
index ddb7220213c..4f134a14b68 100644
--- a/apps/webapp/app/components/runs/v3/TaskRunsTable.tsx
+++ b/apps/webapp/app/components/runs/v3/TaskRunsTable.tsx
@@ -253,11 +253,7 @@ export function TaskRunsTable({
>
Duration
- {showCompute && (
- <>
- Compute
- >
- )}
+ {showCompute && Compute}
}>
Machine
diff --git a/apps/webapp/app/root.tsx b/apps/webapp/app/root.tsx
index 1e550155fde..43812d5653d 100644
--- a/apps/webapp/app/root.tsx
+++ b/apps/webapp/app/root.tsx
@@ -146,27 +146,25 @@ export const shouldRevalidate: ShouldRevalidateFunction = (options) => {
export function ErrorBoundary() {
return (
- <>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
);
}
@@ -180,39 +178,37 @@ export default function App() {
const resolvedTheme = themePreference === "system" ? "dark" : themePreference;
return (
- <>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
);
}
diff --git a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam._index/route.tsx b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam._index/route.tsx
index cee7e34f444..00cdeb58a1c 100644
--- a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam._index/route.tsx
+++ b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam._index/route.tsx
@@ -563,7 +563,7 @@ function RunningCell({ state }: { state: UnifiedRunningState | undefined }) {
if (!state) {
return –;
}
- return <>{state.running ?? 0}>;
+ return state.running ?? 0;
}
function TaskTypeFilter() {
diff --git a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.alerts.new/route.tsx b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.alerts.new/route.tsx
index aaf50f69d2f..a1c8e2c9801 100644
--- a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.alerts.new/route.tsx
+++ b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.alerts.new/route.tsx
@@ -352,15 +352,13 @@ export default function Page() {
}
text={(value) => renderSlackChannel(slack.channels, value)}
>
- {(matches) => (
- <>
- {matches?.map((channel) => (
-
-
-
- ))}
- >
- )}
+ {(matches) =>
+ matches?.map((channel) => (
+
+
+
+ ))
+ }
{selectedSlackChannel && selectedSlackChannel.is_private && (
- ) : (
- <>>
- )}
+ ) : null}
diff --git a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.regions/route.tsx b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.regions/route.tsx
index ed39ddac4ed..c30c2e1f815 100644
--- a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.regions/route.tsx
+++ b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.regions/route.tsx
@@ -193,184 +193,182 @@ export default function Page() {
) : (
- <>
-
-
-
-
- Region
- Cloud Provider
-
-
- Location
-
-
-
- Static IPs
- {isAdmin && Admin}
-
-
- When you trigger a run it will execute in your default region, unless
- you override the region when triggering.
-
-
- Read docs
-
-
- }
- >
- Default region
-
-
-
-
- {regions.length === 0 ? (
-
- There are no regions for this project
-
- ) : (
- regions.map((region) => {
- return (
-
-
-
-
- {region.workloadType === "MICROVM" && (
- MicroVM
- )}
-
-
-
- {region.cloudProvider ? (
-
-
- {cloudProviderTitle(region.cloudProvider)}
-
- ) : (
- "–"
+
+
+
+
+ Region
+ Cloud Provider
+
+
+ Location
+
+
+
+ Static IPs
+ {isAdmin && Admin}
+
+
+ When you trigger a run it will execute in your default region, unless
+ you override the region when triggering.
+
+
+ Read docs
+
+
+ }
+ >
+ Default region
+
+
+
+
+ {regions.length === 0 ? (
+
+ There are no regions for this project
+
+ ) : (
+ regions.map((region) => {
+ return (
+
+
+
+
+ {region.workloadType === "MICROVM" && (
+ MicroVM
)}
-
-
+
+
+
+ {region.cloudProvider ? (
- {region.location ? (
-
- ) : null}
- {region.description ?? "–"}
-
-
-
- {region.staticIPs === null ? (
-
- Unlock static IPs
-
- ) : region.staticIPs !== undefined ? (
-
- ) : (
- "Not available"
- )}
-
- {isAdmin && (
- {region.isHidden ? "Hidden" : "Visible"}
- )}
- {region.isDefault ? (
-
-
- Default
-
-
+ {cloudProviderTitle(region.cloudProvider)}
+
) : (
-
- }
- />
+ "–"
)}
-
- );
- })
- )}
-
-
-
- Suggest a new region
-
-
+
+
+ {region.location ? (
+
+ ) : null}
+ {region.description ?? "–"}
+
+
+
+ {region.staticIPs === null ? (
+
- Suggest a region…
-
- }
- defaultValue="region"
- />
- }
- />
-
-
-
- {isManagedCloud && (
-
-
- Trigger.dev is fully{" "}
-
- GDPR compliant
-
- . Learn more in our{" "}
- security portal or{" "}
-
- get in touch
-
- }
- defaultValue="feedback"
- />
- .
-
-
- )}
-
- >
+ Unlock static IPs
+
+ ) : region.staticIPs !== undefined ? (
+
+ ) : (
+ "Not available"
+ )}
+
+ {isAdmin && (
+ {region.isHidden ? "Hidden" : "Visible"}
+ )}
+ {region.isDefault ? (
+
+
+ Default
+
+
+ ) : (
+
+ }
+ />
+ )}
+
+ );
+ })
+ )}
+
+
+
+ Suggest a new region
+
+
+ Suggest a region…
+
+ }
+ defaultValue="region"
+ />
+ }
+ />
+
+
+
+ {isManagedCloud && (
+
+
+ Trigger.dev is fully{" "}
+
+ GDPR compliant
+
+ . Learn more in our{" "}
+ security portal or{" "}
+
+ get in touch
+
+ }
+ defaultValue="feedback"
+ />
+ .
+
+
+ )}
+
)}
diff --git a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs.$runParam/route.tsx b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs.$runParam/route.tsx
index c50511f7ad6..53ba28b800b 100644
--- a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs.$runParam/route.tsx
+++ b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs.$runParam/route.tsx
@@ -1051,79 +1051,77 @@ function TasksTreeView({
getTreeProps={getTreeProps}
parentClassName="pl-3"
renderNode={({ node, state, index }) => (
- <>
- {
- selectNode(node.id);
- }}
- >
-
- {Array.from({ length: node.level }).map((_, index) => (
-
- ))}
-
{
- e.stopPropagation();
- if (e.altKey) {
- if (state.expanded) {
- collapseAllBelowDepth(node.level);
- } else {
- expandAllBelowDepth(node.level);
- }
+
{
+ selectNode(node.id);
+ }}
+ >
+
+ {Array.from({ length: node.level }).map((_, index) => (
+
+ ))}
+
{
+ e.stopPropagation();
+ if (e.altKey) {
+ if (state.expanded) {
+ collapseAllBelowDepth(node.level);
} else {
- toggleExpandNode(node.id);
+ expandAllBelowDepth(node.level);
}
- scrollToNode(node.id);
- }}
- >
- {node.hasChildren ? (
- state.expanded ? (
-
- ) : (
-
- )
+ } else {
+ toggleExpandNode(node.id);
+ }
+ scrollToNode(node.id);
+ }}
+ >
+ {node.hasChildren ? (
+ state.expanded ? (
+
) : (
-
- )}
-
+
+ )
+ ) : (
+
+ )}
+
-
-
-
-
- {node.data.isRoot && !rootRun && Root}
-
-
-
-
+
+
+
+
+ {node.data.isRoot && !rootRun && Root}
+
+
+
- >
+
)}
onScroll={(scrollTop) => {
//sync the scroll to the tree
@@ -1698,29 +1696,25 @@ function LiveReloadingStatus({
}) {
if (rootSpanCompleted) return null;
- return (
- <>
- {isLiveReloading ? (
+ return isLiveReloading ? (
+
+ ) : (
+
-
-
- Live reloading
+
+
+ Live reloading disabled
- ) : (
-
-
-
- Live reloading disabled
-
-
- }
- />
- )}
- >
+ }
+ />
);
}
@@ -1815,7 +1809,7 @@ function CurrentTimeIndicator({
rootStartedAt.getTime() + ms + nanosecondsToMilliseconds(queuedDurationNs ?? 0)
)
: undefined;
- const currentTimeComponent = currentTime ?
: <>>;
+ const currentTimeComponent = currentTime ?
: null;
return (
diff --git a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs._index/route.tsx b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs._index/route.tsx
index 50bfb36a583..cf3bef30c5c 100644
--- a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs._index/route.tsx
+++ b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs._index/route.tsx
@@ -324,103 +324,101 @@ function RunsList({
selectedItems.size === 0 ? "grid-rows-1" : "grid-rows-[1fr_auto]"
)}
>
- <>
- {list.runs.length === 0 && !list.hasAnyRuns ? (
- list.possibleTasks.length === 0 ? (
-
- ) : (
-
t.slug === list.filters.tasks[0])
- : undefined
- }
- />
- )
+ {list.runs.length === 0 && !list.hasAnyRuns ? (
+ list.possibleTasks.length === 0 ? (
+
) : (
-
-
-
-
- {showNewRunsBanner && (
-
- }
- tooltip="Refresh to see new runs"
- aria-label="New runs created. Refresh to see new runs."
- >
- {newRunsCount >= 100
- ? "99+ new runs"
- : `${newRunsCount} new ${newRunsCount === 1 ? "run" : "runs"}`}
-
-
- )}
- {/* Stay mounted while the inspector is open to avoid toolbar layout shift. */}
-
-
-
-
-
-
t.slug === list.filters.tasks[0])
+ : undefined
+ }
+ />
+ )
+ ) : (
+
+
+
+
+ {showNewRunsBanner && (
+
+ }
+ tooltip="Refresh to see new runs"
+ aria-label="New runs created. Refresh to see new runs."
+ >
+ {newRunsCount >= 100
+ ? "99+ new runs"
+ : `${newRunsCount} new ${newRunsCount === 1 ? "run" : "runs"}`}
+
+
+ )}
+ {/* Stay mounted while the inspector is open to avoid toolbar layout shift. */}
+
+
+
- )}
- >
+
+
+
+ )}
-
>} />
+
diff --git a/apps/webapp/app/routes/_app/route.tsx b/apps/webapp/app/routes/_app/route.tsx
index 7b59fd5fa3e..ac91c037cd9 100644
--- a/apps/webapp/app/routes/_app/route.tsx
+++ b/apps/webapp/app/routes/_app/route.tsx
@@ -42,12 +42,10 @@ export default function App() {
export function ErrorBoundary() {
return (
- <>
-
-
-
-
-
- >
+
+
+
+
+
);
}
diff --git a/apps/webapp/app/routes/admin.notifications.tsx b/apps/webapp/app/routes/admin.notifications.tsx
index dbffc75dfbb..291d1ed5523 100644
--- a/apps/webapp/app/routes/admin.notifications.tsx
+++ b/apps/webapp/app/routes/admin.notifications.tsx
@@ -1383,7 +1383,7 @@ function CliColorMarkup({ text, fallbackClass }: { text: string; fallbackClass?:
pos = closeIdx + 1;
}
- return <>{parts}>;
+ return parts;
}
function Badge({
diff --git a/apps/webapp/app/routes/confirm-basic-details.tsx b/apps/webapp/app/routes/confirm-basic-details.tsx
index 37c54d4ea0b..53d3f05804e 100644
--- a/apps/webapp/app/routes/confirm-basic-details.tsx
+++ b/apps/webapp/app/routes/confirm-basic-details.tsx
@@ -322,9 +322,7 @@ export default function Page() {
{confirmEmail.errors}
) : (
- <>
-
- >
+
)}
{isManagedCloud && (
diff --git a/apps/webapp/app/routes/resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.schedules.new/route.tsx b/apps/webapp/app/routes/resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.schedules.new/route.tsx
index 74b1a1f295d..3a5c12175e9 100644
--- a/apps/webapp/app/routes/resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.schedules.new/route.tsx
+++ b/apps/webapp/app/routes/resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.schedules.new/route.tsx
@@ -304,15 +304,13 @@ export function UpsertScheduleForm({
dropdownIcon
variant="tertiary/medium"
>
- {(matches) => (
- <>
- {matches?.map((task) => (
-
- {task}
-
- ))}
- >
- )}
+ {(matches) =>
+ matches?.map((task) => (
+
+ {task}
+
+ ))
+ }
{taskIdentifier.errors}
diff --git a/apps/webapp/app/routes/resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.waitpoints.$waitpointFriendlyId.complete/route.tsx b/apps/webapp/app/routes/resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.waitpoints.$waitpointFriendlyId.complete/route.tsx
index e1ed1b2cc70..c202e2d897f 100644
--- a/apps/webapp/app/routes/resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.waitpoints.$waitpointFriendlyId.complete/route.tsx
+++ b/apps/webapp/app/routes/resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.waitpoints.$waitpointFriendlyId.complete/route.tsx
@@ -342,63 +342,61 @@ function CompleteManualWaitpointForm({ waitpoint }: { waitpoint: { id: string }
);
return (
- <>
-