From bccf304a9893aa8e1f412ed044cfefdb2cfe0c57 Mon Sep 17 00:00:00 2001 From: Martin Krulis Date: Thu, 7 Oct 2021 13:01:57 +0200 Subject: [PATCH] Fixing several issues where safeGet should have returned empty array as fallback. --- src/components/helpers/group.js | 2 +- .../ShadowAssignmentPointsContainer.js | 2 +- .../SisSupervisorGroupsContainer.js | 6 ++++-- .../StudentsListContainer/StudentsListContainer.js | 2 +- src/helpers/exercise/configAdvanced.js | 2 +- src/helpers/exercise/environments.js | 2 +- src/pages/AssignmentStats/AssignmentStats.js | 2 +- src/pages/GroupDetail/GroupDetail.js | 2 +- src/pages/GroupInfo/GroupInfo.js | 12 ++++++------ 9 files changed, 17 insertions(+), 15 deletions(-) diff --git a/src/components/helpers/group.js b/src/components/helpers/group.js index 4db2b2bc9..db9a11a02 100644 --- a/src/components/helpers/group.js +++ b/src/components/helpers/group.js @@ -4,7 +4,7 @@ const computeMap = (groups, filter) => { const res = {}; groups.filter(filter).forEach((group, id) => { res[id] = true; - group.getIn(['data', 'parentGroupsIds'], []).forEach(parentId => { + (group.getIn(['data', 'parentGroupsIds'], []) || []).forEach(parentId => { res[parentId] = true; }); }); diff --git a/src/containers/ShadowAssignmentPointsContainer/ShadowAssignmentPointsContainer.js b/src/containers/ShadowAssignmentPointsContainer/ShadowAssignmentPointsContainer.js index e42ec0f05..4aa520230 100644 --- a/src/containers/ShadowAssignmentPointsContainer/ShadowAssignmentPointsContainer.js +++ b/src/containers/ShadowAssignmentPointsContainer/ShadowAssignmentPointsContainer.js @@ -54,7 +54,7 @@ export default connect( (dispatch, { groupId, id }) => ({ loadAsync: () => dispatch(fetchGroupIfNeeded(groupId)).then(({ value: group }) => - dispatch(fetchByIds(safeGet(group, ['privateData', 'students'], []))) + dispatch(fetchByIds(safeGet(group, ['privateData', 'students']) || [])) ), setPoints: ({ awardeeId, pointsId, points, note, awardedAt }) => dispatch(setShadowAssignmentPoints(groupId, id, awardeeId, pointsId, points, note, awardedAt)), diff --git a/src/containers/SisSupervisorGroupsContainer/SisSupervisorGroupsContainer.js b/src/containers/SisSupervisorGroupsContainer/SisSupervisorGroupsContainer.js index 0f8b5cef2..d39daa69e 100644 --- a/src/containers/SisSupervisorGroupsContainer/SisSupervisorGroupsContainer.js +++ b/src/containers/SisSupervisorGroupsContainer/SisSupervisorGroupsContainer.js @@ -282,8 +282,10 @@ class SisSupervisorGroupsContainer extends Component { groupsAccessor, locale )} - {safeGet(group, ['privateData', 'bindings', 'sis'], []) - .length > 1 && ( + {( + safeGet(group, ['privateData', 'bindings', 'sis']) || + [] + ).length > 1 && ( - dispatch(fetchByIds(safeGet(group, ['privateData', 'students'], []))) + dispatch(fetchByIds(safeGet(group, ['privateData', 'students']) || [])) ), ]), }) diff --git a/src/helpers/exercise/configAdvanced.js b/src/helpers/exercise/configAdvanced.js index cb7103097..38de1c793 100644 --- a/src/helpers/exercise/configAdvanced.js +++ b/src/helpers/exercise/configAdvanced.js @@ -7,7 +7,7 @@ import { safeGet, arrayToObject, encodeNumId, encodeId } from '../common'; */ export const getPipelines = defaultMemoize(config => // There should be only one environment and all tests have the same pipelines (hence we take first and first) - safeGet(config, [0, 'tests', 0, 'pipelines'], []).map(({ name }) => name) + (safeGet(config, [0, 'tests', 0, 'pipelines']) || []).map(({ name }) => name) ); /** diff --git a/src/helpers/exercise/environments.js b/src/helpers/exercise/environments.js index 637687027..b232a4b2a 100644 --- a/src/helpers/exercise/environments.js +++ b/src/helpers/exercise/environments.js @@ -87,7 +87,7 @@ export const getFirstEnvironmentId = environmentConfigs => */ export const getEnvironmentInitValues = environmentConfigs => { const environmentId = getFirstEnvironmentId(environmentConfigs); - const variables = safeGet(environmentConfigs, [0, 'variablesTable'], []); + const variables = safeGet(environmentConfigs, [0, 'variablesTable']) || []; return { environmentId, variables }; }; diff --git a/src/pages/AssignmentStats/AssignmentStats.js b/src/pages/AssignmentStats/AssignmentStats.js index d53562d71..40dd851af 100644 --- a/src/pages/AssignmentStats/AssignmentStats.js +++ b/src/pages/AssignmentStats/AssignmentStats.js @@ -238,7 +238,7 @@ class AssignmentStats extends Component { .then(res => res.value) .then(assignment => dispatch(fetchGroupIfNeeded(assignment.groupId)).then(({ value: group }) => - dispatch(fetchByIds(safeGet(group, ['privateData', 'students'], []))) + dispatch(fetchByIds(safeGet(group, ['privateData', 'students']) || [])) ) ), dispatch(fetchRuntimeEnvironments()), diff --git a/src/pages/GroupDetail/GroupDetail.js b/src/pages/GroupDetail/GroupDetail.js index 57cf1002f..0f1a2fda9 100644 --- a/src/pages/GroupDetail/GroupDetail.js +++ b/src/pages/GroupDetail/GroupDetail.js @@ -74,7 +74,7 @@ class GroupDetail extends Component { ]) : Promise.resolve(), hasPermissions(group, 'viewStudents') - ? dispatch(fetchByIds(safeGet(group, ['privateData', 'students'], []))) + ? dispatch(fetchByIds(safeGet(group, ['privateData', 'students']) || [])) : Promise.resolve(), dispatch(fetchGroupStats(groupId)), ]) diff --git a/src/pages/GroupInfo/GroupInfo.js b/src/pages/GroupInfo/GroupInfo.js index e4515e4fa..6d31b94a6 100644 --- a/src/pages/GroupInfo/GroupInfo.js +++ b/src/pages/GroupInfo/GroupInfo.js @@ -54,9 +54,9 @@ class GroupInfo extends Component { .then(res => res.value) .then(group => Promise.all([ - dispatch(fetchByIds(safeGet(group, ['primaryAdminsIds'], []))), - dispatch(fetchByIds(safeGet(group, ['privateData', 'supervisors'], []))), - dispatch(fetchByIds(safeGet(group, ['privateData', 'observers'], []))), + dispatch(fetchByIds(safeGet(group, ['primaryAdminsIds']) || [])), + dispatch(fetchByIds(safeGet(group, ['privateData', 'supervisors']) || [])), + dispatch(fetchByIds(safeGet(group, ['privateData', 'observers']) || [])), ]) ); @@ -73,13 +73,13 @@ class GroupInfo extends Component { const prevData = prevProps.group.toJS().data.privateData; const groupJs = this.props.group.toJS(); if (safeGet(prevData, ['primaryAdmins', 'length'], -1) !== safeGet(newData, ['primaryAdmins', 'length'], -1)) { - this.props.refetchUsers(safeGet(groupJs, ['data', 'primaryAdminsIds'], [])); + this.props.refetchUsers(safeGet(groupJs, ['data', 'primaryAdminsIds']) || []); } if (safeGet(prevData, ['supervisors', 'length'], -1) !== safeGet(newData, ['supervisors', 'length'], -1)) { - this.props.refetchUsers(safeGet(groupJs, ['data', 'privateData', 'supervisors'], [])); + this.props.refetchUsers(safeGet(groupJs, ['data', 'privateData', 'supervisors']) || []); } if (safeGet(prevData, ['observers', 'length'], -1) !== safeGet(newData, ['observers', 'length'], -1)) { - this.props.refetchUsers(safeGet(groupJs, ['data', 'privateData', 'observers'], [])); + this.props.refetchUsers(safeGet(groupJs, ['data', 'privateData', 'observers']) || []); } } }