diff --git a/app/assets/javascripts/single_page/dynamic_table.js.erb b/app/assets/javascripts/single_page/dynamic_table.js.erb index fa7075626a..ef7ac4badd 100644 --- a/app/assets/javascripts/single_page/dynamic_table.js.erb +++ b/app/assets/javascripts/single_page/dynamic_table.js.erb @@ -21,8 +21,8 @@ const defaultCols = [{ }]; const objectInputTemp = '' + - ''; const typeaheadUrl = "<%= typeahead_samples_path(linked_sample_type_id: '_LINKED_') %>"; @@ -57,10 +57,26 @@ const handleSelect = (e) => { const url = typeaheadUrl.replace("_LINKED_", c.linked_sample_type); const objectInputName = data.map((e) => e.id).join('-') + '-' + crypto.randomUUID(); setTimeout(ObjectsInput.init); + + const linkedSamples = retrieveLinkedSamples(url); + const linkedSampleIds = linkedSamples.map((ls) => ls.id); + const unLinkedSamples = data.reduce(function(filtered, sample) { + if(!linkedSampleIds.includes(parseInt(sample.id))){ + filtered.push(sample); + } + return filtered; + }, []); + const hasUnlinkedSamples = unLinkedSamples.length > 0 ? true : false; + + const extraClass = hasUnlinkedSamples ? 'select2__error' : ''; + const titleText = hasUnlinkedSamples ? `Sample(s) '${unLinkedSamples.map(uls => uls.title).join(', ')}' not recognised as sources. Please correct this issue!` : ''; + return objectInputTemp - .replace(/_NAME_/g, objectInputName) - .replace('_URL_', url) - .replace('_OPTIONS_', existingOptions); + .replace(/_NAME_/g, objectInputName) + .replace('_URL_', url) + .replace('_OPTIONS_', existingOptions) + .replace('_EXTRACLASS_', extraClass) + .replace('_TITLE_', titleText); } } else if (data === "#HIDDEN") { return "Hidden";