diff --git a/contentcuration/contentcuration/frontend/channelEdit/components/ContentNodeEditListItem.vue b/contentcuration/contentcuration/frontend/channelEdit/components/ContentNodeEditListItem.vue
index 3e57f48587..cce6e4ca2c 100644
--- a/contentcuration/contentcuration/frontend/channelEdit/components/ContentNodeEditListItem.vue
+++ b/contentcuration/contentcuration/frontend/channelEdit/components/ContentNodeEditListItem.vue
@@ -47,6 +47,18 @@
+
+
+
+
+
diff --git a/contentcuration/contentcuration/frontend/shared/utils/validation.js b/contentcuration/contentcuration/frontend/shared/utils/validation.js
index 3c6676ece5..727d5d4a6e 100644
--- a/contentcuration/contentcuration/frontend/shared/utils/validation.js
+++ b/contentcuration/contentcuration/frontend/shared/utils/validation.js
@@ -244,6 +244,21 @@ export function getActivityDurationValidators() {
];
}
+/**
+ * Get invalid text for a given value using a list of validators.
+ * @param {Array} validators
+ * @param {*} value Value to validate.
+ * @returns {String} Translated error message of the first validator that returns an error.
+ Empty string if value is valid.
+ */
+export function getInvalidText(validators, value) {
+ return (
+ validators
+ .map(validator => translateValidator(validator)(value))
+ .find(validation => validation !== true) || ''
+ );
+}
+
// Node validation
// These functions return an array of error codes
export function getNodeTitleErrors(node) {