diff --git a/contentcuration/contentcuration/frontend/channelEdit/vuex/contentNode/getters.js b/contentcuration/contentcuration/frontend/channelEdit/vuex/contentNode/getters.js index 2927514b80..3e31ce6ed3 100644 --- a/contentcuration/contentcuration/frontend/channelEdit/vuex/contentNode/getters.js +++ b/contentcuration/contentcuration/frontend/channelEdit/vuex/contentNode/getters.js @@ -7,7 +7,7 @@ import messages from '../../translator'; import { parseNode } from './utils'; import { getNodeDetailsErrors, getNodeFilesErrors } from 'shared/utils/validation'; import { ContentKindsNames } from 'shared/leUtils/ContentKinds'; -import { NEW_OBJECT } from 'shared/constants'; +import { NEW_OBJECT, ValidationErrors } from 'shared/constants'; import { COPYING_STATUS, COPYING_STATUS_VALUES } from 'shared/data/constants'; function sorted(nodes) { @@ -158,14 +158,22 @@ export function getContentNodeIsValid(state, getters, rootState, rootGetters) { export function getContentNodeDetailsAreValid(state) { return function (contentNodeId) { - const contentNode = state.contentNodesMap[contentNodeId]; - return contentNode && (contentNode[NEW_OBJECT] || !getNodeDetailsErrors(contentNode).length); + return !getNodeDetailsErrorsList(state)(contentNodeId).length; }; } export function getNodeDetailsErrorsList(state) { return function (contentNodeId) { const contentNode = state.contentNodesMap[contentNodeId]; + + if (!contentNode) { + return [ValidationErrors.MISSING_NODE]; + } + + if (contentNode[NEW_OBJECT]) { + return []; + } + return getNodeDetailsErrors(contentNode); }; } diff --git a/contentcuration/contentcuration/frontend/shared/constants.js b/contentcuration/contentcuration/frontend/shared/constants.js index 77ddaa9b90..f17081da03 100644 --- a/contentcuration/contentcuration/frontend/shared/constants.js +++ b/contentcuration/contentcuration/frontend/shared/constants.js @@ -190,6 +190,7 @@ export const ValidationErrors = { ACTIVITY_DURATION_MAX_FOR_LONG_ACTIVITY: 'ACTIVITY_DURATION_MAX_FOR_LONG_ACTIVITY', ACTIVITY_DURATION_MIN_REQUIREMENT: 'ACTIVITY_DURATION_MIN_REQUIREMENT', ACTIVITY_DURATION_TOO_LONG: 'ACTIVITY_DURATION_TOO_LONG', + MISSING_NODE: 'MISSING_NODE', ...fileErrors, };