Skip to content

Commit 15e0523

Browse files
fix: add type guards for SearchTeamSandboxFragment missing properties
1 parent d3cddef commit 15e0523

File tree

1 file changed

+92
-36
lines changed
  • packages/app/src/app/overmind/namespaces/dashboard

1 file changed

+92
-36
lines changed

packages/app/src/app/overmind/namespaces/dashboard/actions.ts

Lines changed: 92 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { uniq } from 'lodash-es';
66
import {
77
TemplateFragmentDashboardFragment,
88
SandboxFragmentDashboardFragment,
9+
SandboxByPathFragment,
910
DraftSandboxFragment,
1011
RepoFragmentDashboardFragment,
1112
ProjectFragment,
@@ -30,6 +31,19 @@ import {
3031
import { OrderBy, PageTypes, sandboxesTypes } from './types';
3132
import * as internalActions from './internalActions';
3233

34+
// Type guards to check if sandbox has specific properties
35+
function hasIsFrozen(
36+
sandbox: SandboxFragmentDashboardFragment | SandboxByPathFragment | DraftSandboxFragment | SearchTeamSandboxFragment
37+
): sandbox is SandboxFragmentDashboardFragment | SandboxByPathFragment | DraftSandboxFragment {
38+
return 'isFrozen' in sandbox;
39+
}
40+
41+
function hasPermissions(
42+
sandbox: SandboxFragmentDashboardFragment | SandboxByPathFragment | DraftSandboxFragment | SearchTeamSandboxFragment
43+
): sandbox is SandboxFragmentDashboardFragment | SandboxByPathFragment | DraftSandboxFragment {
44+
return 'permissions' in sandbox;
45+
}
46+
3347
export const internal = internalActions;
3448

3549
export const dashboardMounted = withLoadApp();
@@ -981,21 +995,35 @@ export const changeSandboxesFrozen = async (
981995
changedSandboxes,
982996
} = actions.dashboard.internal.changeSandboxesInState({
983997
sandboxIds,
984-
sandboxMutation: sandbox => ({ ...sandbox, isFrozen }),
998+
sandboxMutation: sandbox => {
999+
// Only update isFrozen if the property exists on the sandbox type
1000+
if (hasIsFrozen(sandbox)) {
1001+
return { ...sandbox, isFrozen };
1002+
}
1003+
return sandbox;
1004+
},
9851005
});
9861006

9871007
try {
9881008
await effects.gql.mutations.changeFrozen({ sandboxIds, isFrozen });
9891009
} catch (error) {
990-
changedSandboxes.forEach(oldSandbox =>
991-
actions.dashboard.internal.changeSandboxesInState({
992-
sandboxIds: [oldSandbox.id],
993-
sandboxMutation: sandbox => ({
994-
...sandbox,
995-
isFrozen: oldSandbox.isFrozen,
996-
}),
997-
})
998-
);
1010+
changedSandboxes.forEach(oldSandbox => {
1011+
// Only rollback if the sandbox has isFrozen property
1012+
if (hasIsFrozen(oldSandbox)) {
1013+
actions.dashboard.internal.changeSandboxesInState({
1014+
sandboxIds: [oldSandbox.id],
1015+
sandboxMutation: sandbox => {
1016+
if (hasIsFrozen(sandbox)) {
1017+
return {
1018+
...sandbox,
1019+
isFrozen: oldSandbox.isFrozen,
1020+
};
1021+
}
1022+
return sandbox;
1023+
},
1024+
});
1025+
}
1026+
});
9991027

10001028
actions.internal.handleError({
10011029
message:
@@ -1129,10 +1157,16 @@ export const setPreventSandboxesLeavingWorkspace = async (
11291157
changedSandboxes,
11301158
} = actions.dashboard.internal.changeSandboxesInState({
11311159
sandboxIds,
1132-
sandboxMutation: sandbox => ({
1133-
...sandbox,
1134-
permissions: { ...sandbox.permissions, preventSandboxLeaving },
1135-
}),
1160+
sandboxMutation: sandbox => {
1161+
// Only update permissions if the property exists on the sandbox type
1162+
if (hasPermissions(sandbox) && sandbox.permissions) {
1163+
return {
1164+
...sandbox,
1165+
permissions: { ...sandbox.permissions, preventSandboxLeaving },
1166+
};
1167+
}
1168+
return sandbox;
1169+
},
11361170
});
11371171

11381172
effects.analytics.track(`Dashboard - Change sandbox permissions`, {
@@ -1147,15 +1181,23 @@ export const setPreventSandboxesLeavingWorkspace = async (
11471181

11481182
effects.notificationToast.success('Sandbox permissions updated.');
11491183
} catch (error) {
1150-
changedSandboxes.forEach(oldSandbox =>
1151-
actions.dashboard.internal.changeSandboxesInState({
1152-
sandboxIds: [oldSandbox.id],
1153-
sandboxMutation: sandbox => ({
1154-
...sandbox,
1155-
permissions: { ...oldSandbox.permissions },
1156-
}),
1157-
})
1158-
);
1184+
changedSandboxes.forEach(oldSandbox => {
1185+
// Only rollback if the sandbox has permissions property
1186+
if (hasPermissions(oldSandbox) && oldSandbox.permissions) {
1187+
actions.dashboard.internal.changeSandboxesInState({
1188+
sandboxIds: [oldSandbox.id],
1189+
sandboxMutation: sandbox => {
1190+
if (hasPermissions(sandbox) && sandbox.permissions) {
1191+
return {
1192+
...sandbox,
1193+
permissions: { ...oldSandbox.permissions },
1194+
};
1195+
}
1196+
return sandbox;
1197+
},
1198+
});
1199+
}
1200+
});
11591201
effects.notificationToast.error(
11601202
'There was a problem updating your sandbox permissions'
11611203
);
@@ -1177,10 +1219,16 @@ export const setPreventSandboxesExport = async (
11771219
changedSandboxes,
11781220
} = actions.dashboard.internal.changeSandboxesInState({
11791221
sandboxIds,
1180-
sandboxMutation: sandbox => ({
1181-
...sandbox,
1182-
permissions: { ...sandbox.permissions, preventSandboxExport },
1183-
}),
1222+
sandboxMutation: sandbox => {
1223+
// Only update permissions if the property exists on the sandbox type
1224+
if (hasPermissions(sandbox) && sandbox.permissions) {
1225+
return {
1226+
...sandbox,
1227+
permissions: { ...sandbox.permissions, preventSandboxExport },
1228+
};
1229+
}
1230+
return sandbox;
1231+
},
11841232
});
11851233

11861234
effects.analytics.track(`Dashboard - Change sandbox permissions`, {
@@ -1195,15 +1243,23 @@ export const setPreventSandboxesExport = async (
11951243

11961244
effects.notificationToast.success('Sandbox permissions updated.');
11971245
} catch (error) {
1198-
changedSandboxes.forEach(oldSandbox =>
1199-
actions.dashboard.internal.changeSandboxesInState({
1200-
sandboxIds: [oldSandbox.id],
1201-
sandboxMutation: sandbox => ({
1202-
...sandbox,
1203-
permissions: { ...oldSandbox.permissions },
1204-
}),
1205-
})
1206-
);
1246+
changedSandboxes.forEach(oldSandbox => {
1247+
// Only rollback if the sandbox has permissions property
1248+
if (hasPermissions(oldSandbox) && oldSandbox.permissions) {
1249+
actions.dashboard.internal.changeSandboxesInState({
1250+
sandboxIds: [oldSandbox.id],
1251+
sandboxMutation: sandbox => {
1252+
if (hasPermissions(sandbox) && sandbox.permissions) {
1253+
return {
1254+
...sandbox,
1255+
permissions: { ...oldSandbox.permissions },
1256+
};
1257+
}
1258+
return sandbox;
1259+
},
1260+
});
1261+
}
1262+
});
12071263
effects.notificationToast.error(
12081264
'There was a problem updating your sandbox permissions'
12091265
);

0 commit comments

Comments
 (0)