app/datatables/registration_datatable.rb
# frozen_string_literal: true
class RegistrationDatatable < AjaxDatatablesRails::ActiveRecord
extend Forwardable
def_delegator :@view, :dom_id
def_delegator :@view, :edit_admin_conference_registration_path
def initialize(params, opts = {})
@view = opts[:view_context]
super
end
def view_columns
@view_columns ||= {
id: { source: 'Registration.id', cond: :eq },
name: { source: 'User.name' },
email: { source: 'User.email' },
accepted_code_of_conduct: { source: 'Registration.accepted_code_of_conduct', searchable: false },
actions: { source: 'Registration.id', searchable: false, orderable: false }
}
end
private
def conference
@conference ||= options[:conference]
end
def conference_role_titles(record)
record.roles.collect do |role|
role.name.titleize if role.resource == conference
end.compact
end
def data
records.map do |record|
{
id: record.id,
name: record.user.name,
roles: conference_role_titles(record.user),
email: record.email,
accepted_code_of_conduct: !!record.accepted_code_of_conduct, # rubocop:disable Style/DoubleNegation
edit_url: edit_admin_conference_registration_path(conference, record),
DT_RowId: dom_id(record)
}
end
end
def get_raw_records # rubocop:disable Naming/AccessorMethodName
conference.registrations.includes(user: :roles).references(:users, :roles).distinct
end
# override upstream santitation, which converts everything to strings
def sanitize_data(records)
records
end
end