@@ -6,6 +6,7 @@ import { uniq } from 'lodash-es';
66import {
77 TemplateFragmentDashboardFragment ,
88 SandboxFragmentDashboardFragment ,
9+ SandboxByPathFragment ,
910 DraftSandboxFragment ,
1011 RepoFragmentDashboardFragment ,
1112 ProjectFragment ,
@@ -30,6 +31,19 @@ import {
3031import { OrderBy , PageTypes , sandboxesTypes } from './types' ;
3132import * 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+
3347export const internal = internalActions ;
3448
3549export 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