mirror of
				https://github.com/inventree/InvenTree.git
				synced 2025-10-30 20:55:42 +00:00 
			
		
		
		
	Fix for strange table filtering bug
- When a table was "refreshed" based on the selectable filters, table ordering was not observed - This was due to the original query parameter conversion not being observed - Refactored out the conversion function so it works correctly now - Also removed some cruft from generated query strings
This commit is contained in:
		| @@ -314,7 +314,7 @@ function setupFilterList(tableKey, table, target) { | ||||
|                 // Only add the new filter if it is not empty! | ||||
|                 if (tag && tag.length > 0) { | ||||
|                     var filters = addTableFilter(tableKey, tag, val); | ||||
|                     reloadTable(table, filters); | ||||
|                     reloadTableFilters(table, filters); | ||||
|  | ||||
|                     // Run this function again | ||||
|                     setupFilterList(tableKey, table, target); | ||||
| @@ -333,7 +333,7 @@ function setupFilterList(tableKey, table, target) { | ||||
|     element.find(`#${clear}`).click(function() { | ||||
|         var filters = clearTableFilters(tableKey); | ||||
|  | ||||
|         reloadTable(table, filters); | ||||
|         reloadTableFilters(table, filters); | ||||
|  | ||||
|         setupFilterList(tableKey, table, target); | ||||
|     }); | ||||
| @@ -346,7 +346,7 @@ function setupFilterList(tableKey, table, target) { | ||||
|  | ||||
|         var filters = removeTableFilter(tableKey, filter); | ||||
|  | ||||
|         reloadTable(table, filters); | ||||
|         reloadTableFilters(table, filters); | ||||
|  | ||||
|         // Run this function again! | ||||
|         setupFilterList(tableKey, table, target); | ||||
|   | ||||
| @@ -68,7 +68,7 @@ function isNumeric(n) { | ||||
|  * Reload a table which has already been made into a bootstrap table. | ||||
|  * New filters can be optionally provided, to change the query params. | ||||
|  */ | ||||
| function reloadTable(table, filters) { | ||||
| function reloadTableFilters(table, filters) { | ||||
|  | ||||
|     // Simply perform a refresh | ||||
|     if (filters == null) { | ||||
| @@ -94,16 +94,11 @@ function reloadTable(table, filters) { | ||||
|     } | ||||
|  | ||||
|     options.queryParams = function(tableParams) { | ||||
|  | ||||
|         for (key in params) { | ||||
|             tableParams[key] = params[key]; | ||||
|         } | ||||
|  | ||||
|         return tableParams; | ||||
|     } | ||||
|         return convertQueryParameters(tableParams, params); | ||||
|     }; | ||||
|  | ||||
|     table.bootstrapTable('refreshOptions', options); | ||||
|     table.bootstrapTable('refresh'); | ||||
|     table.bootstrapTable('refresh', filters); | ||||
| } | ||||
|  | ||||
|  | ||||
| @@ -122,6 +117,55 @@ function visibleColumnString(columns) { | ||||
| } | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * Convert bootstrap-table style parameters to "InvenTree" style | ||||
| */ | ||||
| function convertQueryParameters(params, filters) { | ||||
|  | ||||
|     // Override the way that we ask the server to sort results | ||||
|     // It seems bootstrap-table does not offer a "native" way to do this... | ||||
|     if ('sort' in params) { | ||||
|         var order = params['order']; | ||||
|  | ||||
|         var ordering = params['sort'] || null; | ||||
|  | ||||
|         if (ordering) { | ||||
|  | ||||
|             if (order == 'desc') { | ||||
|                 ordering = `-${ordering}`; | ||||
|             } | ||||
|  | ||||
|             params['ordering'] = ordering; | ||||
|         } | ||||
|  | ||||
|         delete params['sort']; | ||||
|         delete params['order']; | ||||
|  | ||||
|     } | ||||
|  | ||||
|     for (var key in filters) { | ||||
|         params[key] = filters[key]; | ||||
|     } | ||||
|  | ||||
|     // Add "order" back in (if it was originally specified by InvenTree) | ||||
|     // Annoyingly, "order" shadows some field names in InvenTree... | ||||
|     if ('order' in filters) { | ||||
|         params['order'] = filters['order']; | ||||
|     } | ||||
|  | ||||
|     // Remove searchable[] array (generated by bootstrap-table) | ||||
|     if ('searchable' in params) { | ||||
|         delete params['searchable']; | ||||
|     } | ||||
|  | ||||
|     if ('sortable' in params) { | ||||
|         delete params['sortable']; | ||||
|     } | ||||
|      | ||||
|     return params; | ||||
| } | ||||
|  | ||||
|  | ||||
| /* Wrapper function for bootstrapTable. | ||||
|  * Sets some useful defaults, and manage persistent settings. | ||||
|  */ | ||||
| @@ -147,39 +191,8 @@ $.fn.inventreeTable = function(options) { | ||||
|     var filters = options.queryParams || options.filters || {}; | ||||
|  | ||||
|     options.queryParams = function(params) { | ||||
|  | ||||
|         // Override the way that we ask the server to sort results | ||||
|         // It seems bootstrap-table does not offer a "native" way to do this... | ||||
|         if ('sort' in params) { | ||||
|             var order = params['order']; | ||||
|  | ||||
|             var ordering = params['sort'] || null; | ||||
|  | ||||
|             if (ordering) { | ||||
|  | ||||
|                 if (order == 'desc') { | ||||
|                     ordering = `-${ordering}`; | ||||
|                 } | ||||
|  | ||||
|                 params['ordering'] = ordering; | ||||
|             } | ||||
|  | ||||
|             delete params['sort']; | ||||
|             delete params['order']; | ||||
|  | ||||
|         } | ||||
|  | ||||
|         for (var key in filters) { | ||||
|             params[key] = filters[key]; | ||||
|         } | ||||
|  | ||||
|         // Add "order" back in (if it was originally specified by InvenTree) | ||||
|         // Annoyingly, "order" shadows some field names in InvenTree... | ||||
|         if ('order' in filters) { | ||||
|             params['order'] = filters['order']; | ||||
|         } | ||||
|         return params; | ||||
|     } | ||||
|         return convertQueryParameters(params, filters); | ||||
|     }; | ||||
|  | ||||
|     options.rememberOrder = true; | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user