From 3eb318ac27bfce32ff5be4d77f698d848e585aee Mon Sep 17 00:00:00 2001 From: Coleman Watts Date: Sun, 19 Jan 2014 17:14:59 -0800 Subject: [PATCH] CRM-14093 - prefetch searchBuilder options in bulk using CRM.api3 --- templates/CRM/Contact/Form/Search/Builder.js | 21 +++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/templates/CRM/Contact/Form/Search/Builder.js b/templates/CRM/Contact/Form/Search/Builder.js index d5d19e9771..5f641ce0d9 100644 --- a/templates/CRM/Contact/Form/Search/Builder.js +++ b/templates/CRM/Contact/Form/Search/Builder.js @@ -238,5 +238,24 @@ ; $().crmAccordions(); - $('select[id^=mapper][id$="_1"]', '#Builder').each(handleUserInputField); + + // Fetch initial options during page refresh - it's more efficient to bundle them in a single ajax request + var initialFields = {}, fetchFields = false; + $('select[id^=mapper][id$="_1"] option:selected', '#Builder').each(function() { + var field = $(this).attr('value'); + if (typeof(CRM.searchBuilder.fieldOptions[field]) == 'string') { + initialFields[field] = [CRM.searchBuilder.fieldOptions[field], 'getoptions', {field: field, sequential: 1}]; + fetchFields = true; + } + }); + if (fetchFields) { + CRM.api3(initialFields).done(function(data) { + $.each(data, function(field, result) { + CRM.searchBuilder.fieldOptions[field] = result.values; + }); + $('select[id^=mapper][id$="_1"]', '#Builder').each(handleUserInputField); + }); + } else { + $('select[id^=mapper][id$="_1"]', '#Builder').each(handleUserInputField); + } })(cj, CRM); -- 2.25.1