Skip to content

Commit 13dfd0c

Browse files
committed
fix(settings): report failed writes and preflight machine availability
1 parent 767464a commit 13dfd0c

2 files changed

Lines changed: 27 additions & 12 deletions

File tree

‎apps/web/src/components/settings/ProjectDefaultsSettings.tsx‎

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,11 +137,19 @@ export function ProjectDefaultsSettings({
137137
savingRef.current = true;
138138
setSaving(true);
139139
try {
140-
await Promise.all(
140+
const results = await Promise.all(
141141
targets.map((target) =>
142142
updateSettings({ environmentId: target.environmentId, input: { patch } }),
143143
),
144144
);
145+
const failedTargets = targets.filter((_, index) => results[index]?._tag === "Failure");
146+
if (failedTargets.length > 0) {
147+
toastManager.add({
148+
type: "error",
149+
title: "Project defaults not saved on every machine",
150+
description: `Could not update ${failedTargets.map((target) => target.label).join(", ")}. Other machines may have saved the change.`,
151+
});
152+
}
145153
} finally {
146154
savingRef.current = false;
147155
setSaving(false);

‎apps/web/src/components/settings/ProjectSettingsPanel.tsx‎

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -289,16 +289,8 @@ function ProjectDetail({
289289
savingBrowserAccessRef.current = true;
290290
setSavingBrowserAccess(true);
291291
try {
292-
if (key === "projectAutoPullOverrides" && enabled === undefined) {
293-
const result = await updateAllMembers(
294-
{ autoPull: false },
295-
"Failed to reset automatic pull",
296-
);
297-
if (result._tag === "Failure") return;
298-
}
299-
for (const environmentId of new Set(
300-
group.memberProjects.map((member) => member.environmentId),
301-
)) {
292+
const environmentIds = new Set(group.memberProjects.map((member) => member.environmentId));
293+
for (const environmentId of environmentIds) {
302294
const environment = environmentById.get(environmentId);
303295
if (!environment?.serverConfig || environment.connection.phase !== "connected") {
304296
toastManager.add({
@@ -308,6 +300,15 @@ function ProjectDetail({
308300
});
309301
return;
310302
}
303+
}
304+
if (key === "projectAutoPullOverrides" && enabled === undefined) {
305+
const result = await updateAllMembers(
306+
{ autoPull: false },
307+
"Failed to reset automatic pull",
308+
);
309+
if (result._tag === "Failure") return;
310+
}
311+
for (const environmentId of environmentIds) {
311312
const overrides = Object.fromEntries(
312313
group.memberProjects
313314
.filter((member) => member.environmentId === environmentId)
@@ -317,7 +318,13 @@ function ProjectDetail({
317318
environmentId,
318319
input: { patch: { [key]: overrides } },
319320
});
320-
if (result._tag === "Failure") return;
321+
if (result._tag === "Failure") {
322+
reportFailure(
323+
`Failed to save project setting on ${environmentById.get(environmentId)?.label ?? "this machine"}`,
324+
mapAtomCommandResult(result, () => undefined),
325+
);
326+
return;
327+
}
321328
}
322329
} finally {
323330
savingBrowserAccessRef.current = false;

0 commit comments

Comments
 (0)