Fixed [FD-39640]: preserve sort order when generating asset labels

This commit is contained in:
Brady Wetherington 2024-01-09 16:37:33 +00:00
parent eaf6d56253
commit 4b90f85372
3 changed files with 37 additions and 2 deletions

View file

@ -55,7 +55,9 @@ class BulkAssetsController extends Controller
$asset_ids = $request->input('ids');
$assets = Asset::with('assignedTo', 'location', 'model')->find($asset_ids);
// Using the 'short-ternary' A/K/A "Elvis operator" '?:' here because ->input() might return an empty string
list($sortname,$sortdir) = explode(" ",$request->input('sort') ?: 'id ASC');
$assets = Asset::with('assignedTo', 'location', 'model')->whereIn('id', $asset_ids)->orderBy($sortname, $sortdir)->get();
$models = $assets->unique('model_id');
$modelNames = [];

View file

@ -6,7 +6,8 @@
'id' => (isset($id_formname)) ? $id_formname : 'assetsBulkForm',
]) }}
{{-- The 'id ASC' will only be used if the cookie is actually empty (like on first-use) --}}
<input name="sort" type="hidden" value="id ASC">
<label for="bulk_actions">
<span class="sr-only">
{{ trans('button.bulk_actions') }}

View file

@ -161,6 +161,38 @@
});
// Initialize sort-order for bulk actions (label-generation) for snipe-tables
$('.snipe-table').each(function (i, table) {
table_cookie_segment = $(table).data('cookie-id-table');
name = '';
direction = '';
cookies = document.cookie.split(";");
for(i in cookies) {
cookiedef = cookies[i].split("=", 2);
cookiedef[0] = cookiedef[0].trim();
if (cookiedef[0] == table_cookie_segment + ".bs.table.sortOrder") {
direction = cookiedef[1];
}
if (cookiedef[0] == table_cookie_segment + ".bs.table.sortName") {
name = cookiedef[1];
}
}
if (name && direction) {
domnode = $($(this).data('bulk-form-id')).get(0);
if ( domnode && domnode.elements && domnode.elements.sort ) {
domnode.elements.sort.value = name + " " + direction;
}
}
});
// If sort order changes, update the sort-order for bulk-actions (for label-generation)
$('.snipe-table').on('sort.bs.table', function (event, name, order) {
domnode = $($(this).data('bulk-form-id')).get(0);
// make safe in case there isn't a bulk-form-id, or it's not found, or has no 'sort' element
if ( domnode && domnode.elements && domnode.elements.sort ) {
domnode.elements.sort.value = name + " " + order;
}
});