From 0e545dfee0243070e81428af7a5e641e3ecc965d Mon Sep 17 00:00:00 2001 From: Oleksii Kriuchykhin Date: Mon, 22 Mar 2021 13:40:25 +0100 Subject: [PATCH] Fix sorting by status in team members table [SCI-4179] --- app/datatables/team_users_datatable.rb | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/app/datatables/team_users_datatable.rb b/app/datatables/team_users_datatable.rb index 632e05a00..56250789b 100644 --- a/app/datatables/team_users_datatable.rb +++ b/app/datatables/team_users_datatable.rb @@ -18,7 +18,7 @@ class TeamUsersDatatable < CustomDatatable 'User.email', 'UserTeam.role', 'UserTeam.created_at', - 'User.confirmed_at', + 'User.status' ] end @@ -82,6 +82,16 @@ class TeamUsersDatatable < CustomDatatable end end + # Overwrite default pagination method as here + # we need to be able work also with arrays + def paginate_records(records) + records.to_a.drop(offset).first(per_page) + end + + def load_paginator + self + end + # Query database for records (this will be later paginated and filtered) # after that "data" function will return json def get_raw_records @@ -91,4 +101,16 @@ class TeamUsersDatatable < CustomDatatable .where(team: @team) .distinct end + + def sort_records(records) + if sort_column(order_params) == 'users.status' + records = records.sort_by { |record| record.user.active_status_str } + order_params['dir'] == 'asc' ? records : records.reverse + elsif sort_column(order_params) == 'user_teams.role' + records = records.sort_by(&:role_str) + order_params['dir'] == 'asc' ? records : records.reverse + else + super(records) + end + end end