From ffdcbdd5dc6d608acd51e5fccb957848dc948ea6 Mon Sep 17 00:00:00 2001 From: Ad Schellevis Date: Mon, 25 Mar 2019 13:39:51 +0100 Subject: [PATCH] mvc, bootgrid, add useRequestHandlerOnGet option to bootstrap options into get call so you can send parameters when constructing new items. for https://github.com/opnsense/plugins/pull/1274 --- src/opnsense/www/js/opnsense_bootgrid_plugin.js | 14 +++++++++++++- src/opnsense/www/js/opnsense_ui.js | 9 +++++++-- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/opnsense/www/js/opnsense_bootgrid_plugin.js b/src/opnsense/www/js/opnsense_bootgrid_plugin.js index e56d80c34..04c1d57f0 100644 --- a/src/opnsense/www/js/opnsense_bootgrid_plugin.js +++ b/src/opnsense/www/js/opnsense_bootgrid_plugin.js @@ -110,6 +110,7 @@ $.fn.UIBootgrid = function (params) { multiSelect: true, rowCount:[7,14,20,50,100,-1], url: params['search'], + useRequestHandlerOnGet: false, formatters: { "commands": function (column, row) { return " " + @@ -146,6 +147,12 @@ $.fn.UIBootgrid = function (params) { }); } + if (gridopt.useRequestHandlerOnGet) { + this_grid.requestHandler = gridopt.requestHandler; + } else { + this_grid.requestHandler = null; + } + if ($(this_grid).data('store-selection') === true && window.localStorage) { // fetch last selected rowcount, sort on top so it will be the current active selection let grid_id = window.location.pathname + '#' + this_grid.attr('id'); @@ -188,8 +195,13 @@ $.fn.UIBootgrid = function (params) { let editDlg = this_grid.attr('data-editDialog'); if (editDlg !== undefined) { let urlMap = {}; + let server_params = undefined; urlMap['frm_' + editDlg] = params['get']; - mapDataToFormUI(urlMap).done(function(){ + if (this_grid.requestHandler !== null) { + // our requestHandler returns a JSON object, convert it back first + server_params = this_grid.requestHandler({}); + } + mapDataToFormUI(urlMap, server_params).done(function(){ // update selectors formatTokenizersUI(); $('.selectpicker').selectpicker('refresh'); diff --git a/src/opnsense/www/js/opnsense_ui.js b/src/opnsense/www/js/opnsense_ui.js index f5de6be89..d929573d3 100644 --- a/src/opnsense/www/js/opnsense_ui.js +++ b/src/opnsense/www/js/opnsense_ui.js @@ -100,9 +100,10 @@ function saveFormToEndpoint(url,formid,callback_ok, disable_dialog) { /** * standard data mapper to map json request data to forms on this page * @param data_get_map named array containing form names and source url's to get data from {'frm_example':"/api/example/settings/get"}; + * @param server_params parameters to send to server * @return promise object, resolves when all are loaded */ -function mapDataToFormUI(data_get_map) { +function mapDataToFormUI(data_get_map, server_params) { const dfObj = new $.Deferred(); // calculate number of items for deferred object to resolve @@ -112,9 +113,13 @@ function mapDataToFormUI(data_get_map) { data_map_count += 1; }); + if (server_params === undefined) { + server_params = {}; + } + const collected_data = {}; $.each(data_get_map, function(data_index, data_url) { - ajaxGet(data_url,{}, function(data, status) { + ajaxGet(data_url,server_params , function(data, status) { if (status === "success") { $("form").each(function() { if ( $(this).attr('id') && $(this).attr('id').split('-')[0] === data_index) {