Skip to content

Commit 9453f45

Browse files
committed
feat: tables
1 parent a749b6f commit 9453f45

16 files changed

+138
-114
lines changed

app/assets/stylesheets/admin/gentelella-custom.scss

+4
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,7 @@ form.form-horizontal .checkbox > label {
2424
color: #E74C3C;
2525
padding-left: 0;
2626
}
27+
28+
.table {
29+
margin-bottom: 5px;
30+
}

app/controllers/admin/users_controller.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ def index
66
@admin_page_title = 'Users'
77
add_crumb @admin_page_title, '#'
88
@q = Admin::User.ransack(params[:q])
9-
@users = @q.result.order('id DESC').page(params[:page]).per(30)
9+
@users = @q.result.order('id DESC').page(params[:page]).per(1)
1010
respond_with @users
1111
end
1212

app/helpers/admin_helper.rb

+20
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,11 @@ def menu_link(link)
5252
def admin_stylesheet_links
5353
[
5454
'https://colorlib.com/polygon/vendors/bootstrap/dist/css/bootstrap.min.css',
55+
'https://colorlib.com/polygon/vendors/datatables.net-bs/css/dataTables.bootstrap.min.css',
56+
'https://colorlib.com/polygon/vendors/datatables.net-buttons-bs/css/buttons.bootstrap.min.css',
57+
'https://colorlib.com/polygon/vendors/datatables.net-fixedheader-bs/css/fixedHeader.bootstrap.min.css',
58+
'https://colorlib.com/polygon/vendors/datatables.net-responsive-bs/css/responsive.bootstrap.min.css',
59+
'https://colorlib.com/polygon/vendors/datatables.net-scroller-bs/css/scroller.bootstrap.min.css',
5560
'https://colorlib.com/polygon/vendors/font-awesome/css/font-awesome.min.css',
5661
'https://colorlib.com/polygon/vendors/nprogress/nprogress.css',
5762
'https://colorlib.com/polygon/vendors/bootstrap-daterangepicker/daterangepicker.css',
@@ -96,4 +101,19 @@ def admin_form_for(obj, options, &block)
96101
options.deep_merge!(builder: AdminFormBuilder, html: { class: 'form-horizontal' }, wrapper: :admin, defaults: { required: false })
97102
simple_form_for(obj, options, &block)
98103
end
104+
105+
def render_admin_pagination(collection)
106+
render partial: 'admin/base/pagination', as: :collection, object: collection
107+
end
108+
109+
def render_admin_data_table(data: nil, bordered: true, striped: true, hover: true, &block)
110+
locals = {
111+
body: capture(&block),
112+
data: data,
113+
bordered: bordered,
114+
striped: striped,
115+
hover: hover
116+
}
117+
render partial: 'admin/base/data_table', locals: locals
118+
end
99119
end
+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
.dataTables_wrapper
2+
= render_admin_pagination data if data
3+
.table-responsive
4+
- bordered = bordered ? 'table-bordered' : ''
5+
- striped = striped ? 'table-striped' : ''
6+
- hover = hover ? 'table-hover' : ''
7+
- jambo = data ? 'jambo_table' : ''
8+
table.table class="#{bordered} #{striped} #{hover} #{jambo}"
9+
== body
10+
= render_admin_pagination data if data
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
.row
2+
.col-sm-4
3+
.dataTables_info
4+
= "Total: #{collection.total_count}"
5+
.col-sm-8
6+
.dataTables_paginate.paging_simple_numbers
7+
= paginate collection, theme: :admin
+26-25
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,26 @@
1-
.col-md-12.col-sm-12.col-xs-12
2-
.x_panel
3-
.x_title
4-
h2= title
5-
ul.nav.navbar-right.panel_toolbox
6-
li
7-
a.collapse-link
8-
i.fa.fa-chevron-up
9-
/ li.dropdown
10-
a.dropdown-toggle[href="#" data-toggle="dropdown" role="button" aria-expanded="false"]
11-
i.fa.fa-wrench
12-
ul.dropdown-menu[role="menu"]
13-
li
14-
a[href="#"]
15-
| Settings 1
16-
li
17-
a[href="#"]
18-
| Settings 2
19-
/ li
20-
a.close-link
21-
i.fa.fa-close
22-
.clearfix
23-
.x_content
24-
br
25-
= body
1+
.row
2+
.col-md-12.col-sm-12.col-xs-12
3+
.x_panel
4+
.x_title
5+
h2= title
6+
ul.nav.navbar-right.panel_toolbox
7+
li
8+
a.collapse-link
9+
i.fa.fa-chevron-up
10+
/ li.dropdown
11+
a.dropdown-toggle[href="#" data-toggle="dropdown" role="button" aria-expanded="false"]
12+
i.fa.fa-wrench
13+
ul.dropdown-menu[role="menu"]
14+
li
15+
a[href="#"]
16+
| Settings 1
17+
li
18+
a[href="#"]
19+
| Settings 2
20+
/ li
21+
a.close-link
22+
i.fa.fa-close
23+
.clearfix
24+
.x_content
25+
br
26+
= body

app/views/admin/users/_btns.html.slim

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
= link_to "Show", admin_user_path(user), class: "btn btn-large"
2-
= link_to "Edit", edit_admin_user_path(user, redirect_to: url_for(request.params)), class: "btn btn-large btn-success"
3-
= link_to "Delete", admin_user_path(user, redirect_to: ENV['HTTP_REFERER'] || admin_users_path), class: "btn btn-large btn-danger", method: :delete, "data-confirm" => "Delete?"
1+
- append_page_button "Show", admin_user_path(user)
2+
- append_page_button "Edit", edit_admin_user_path(user, redirect_to: url_for(request.params)), class: 'btn-success'
3+
- append_page_button "Delete", admin_user_path(user, redirect_to: ENV['HTTP_REFERER'] || admin_users_path), class: 'btn-danger', method: :delete, 'data-confirm' => 'Delete?'

app/views/admin/users/edit.html.slim

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
- content_for :btns do
2-
= render partial: "btns", object: @user, as: :user
1+
= render partial: 'btns', object: @user, as: :user
32

43
= admin_widget_box "Edit User" do
54
= admin_form_for @user, as: :user, wrapper: :admin do |f|

app/views/admin/users/index.html.slim

+26-33
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,29 @@
11
- append_page_button('Export', url_for(request.params.merge(format: :csv)))
2+
- append_page_button('New User', new_admin_user_path)
23

3-
.row
4-
= admin_widget_box "Filtering" do
5-
= render partial: "filtering", as: :q, object: @q
4+
= admin_widget_box "Filtering" do
5+
= render partial: "filtering", as: :q, object: @q
66

7-
.row
8-
= admin_widget_box "Users" do
9-
.dataTables_wrapper
10-
div
11-
.dataTables_length
12-
= link_to "New User", new_admin_user_path, class: "btn btn-primary btn-mini"
13-
table.table.table-bordered.table-striped.table-hover
14-
thead
15-
tr
16-
th= "#"
17-
th= "Name"
18-
th= "Email"
19-
th= "Confirmed"
20-
th= "actions"
21-
tbody
22-
- @users.each do |user|
23-
tr
24-
td= user.id
25-
td= user.name
26-
td= user.email
27-
td
28-
= "Y" if user.try(:confirmed?)
29-
td
30-
= link_to "show", admin_user_path(user), class: "btn btn-mini"
31-
|  
32-
= link_to "edit", edit_admin_user_path(user), class: "btn btn-mini btn-success"
33-
|  
34-
= link_to "delete", admin_user_path(user), class: "btn btn-mini btn-danger", method: :delete, "data-confirm" => "Delete?"
35-
.ui-toolbar.ui-widget-header
36-
= paginate @users, theme: :admin
7+
= admin_widget_box "Users" do
8+
= render_admin_data_table(data: @users) do
9+
thead
10+
tr
11+
th= "#"
12+
th= "Name"
13+
th= "Email"
14+
th= "Confirmed"
15+
th= "actions"
16+
tbody
17+
- @users.each do |user|
18+
tr class="pointer #{cycle('odd', 'even')}"
19+
td= user.id
20+
td= user.name
21+
td= user.email
22+
td
23+
= "Y" if user.try(:confirmed?)
24+
td
25+
= link_to 'Show', admin_user_path(user)
26+
|   |  
27+
= link_to 'Edit', edit_admin_user_path(user)
28+
|   |  
29+
= link_to 'Delete', admin_user_path(user), method: :delete, 'data-confirm' => 'Delete?'

app/views/admin/users/show.html.slim

+23-25
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,25 @@
1-
- content_for :btns do
2-
= render partial: "btns", object: @user, as: :user
1+
= render partial: 'btns', object: @user, as: :user
32

43
= admin_widget_box "User ##{@user.id}" do
5-
table.table.table-bordered.table-striped.table-hover
6-
tbody
7-
tr
8-
td= "ID"
9-
td= @user.id
10-
tr
11-
td= "Name"
12-
td= @user.name
13-
tr
14-
td= "Email"
15-
td= @user.email
16-
tr
17-
td= "Admin"
18-
td= "Y" if @user.admin?
19-
tr
20-
td= "Confirmed"
21-
td= "Y" if @user.confirmed?
22-
tr
23-
td= "last_sign_in_at"
24-
td= @user.last_sign_in_at
25-
tr
26-
td= "last_sign_in_ip"
27-
td= @user.last_sign_in_ip
4+
= render_admin_data_table(bordered: false) do
5+
tr
6+
th width="20%" ID
7+
td= @user.id
8+
tr
9+
th Name
10+
td= @user.name
11+
tr
12+
th Email
13+
td= @user.email
14+
tr
15+
th Is Admin
16+
td= "Y" if @user.admin?
17+
tr
18+
th Is Confirmed
19+
td= "Y" if @user.confirmed?
20+
tr
21+
th Last Sign In
22+
td= @user.last_sign_in_at
23+
tr
24+
th Last IP
25+
td= @user.last_sign_in_ip

app/views/kaminari/admin/_first_page.html.slim

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,5 @@
55
/ total_pages : total number of pages
66
/ per_page : number of items to fetch per page
77
/ remote : data-remote
8-
== link_to t('views.pagination.first').html_safe, url, remote: remote, class: "first ui-corner-tl ui-corner-bl fg-button ui-button ui-state-default #{'ui-state-disabled' if current_page.first?}"
8+
li.paginate_button.first class="#{'disabled' if current_page.first?}"
9+
== link_to t('views.pagination.first').html_safe, url, remote: remote

app/views/kaminari/admin/_last_page.html.slim

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,5 @@
55
total_pages : total number of pages
66
per_page : number of items to fetch per page
77
remote : data-remote
8-
== link_to t('views.pagination.last').html_safe, url, remote: remote, class: "first ui-corner-tl ui-corner-bl fg-button ui-button ui-state-default #{'ui-state-disabled' if current_page.last?}"
9-
'
8+
li.paginate_button.last class="#{'disabled' if current_page.last?}"
9+
== link_to t('views.pagination.last').html_safe, url, remote: remote

app/views/kaminari/admin/_next_page.html.slim

+2-5
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,5 @@
55
/ total_pages : total number of pages
66
/ per_page : number of items to fetch per page
77
/ remote : data-remote
8-
- if current_page.last?
9-
a.next.ui-state-disabled.fg-button.ui-button.ui-state-default
10-
== t 'views.pagination.next'
11-
- else
12-
== link_to t('views.pagination.next').html_safe, url, rel: 'next', remote: remote, class: "next fg-button ui-button ui-state-default"
8+
li.paginate_button.next class="#{'disabled' if current_page.last?}"
9+
== link_to t('views.pagination.next').html_safe, url, rel: 'next', remote: remote

app/views/kaminari/admin/_page.html.slim

+2-4
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,5 @@
66
/ - total_pages: total number of pages
77
/ - per_page: number of items to fetch per page
88
/ - remote: data-remote
9-
- if page.current?
10-
= link_to page, url, class: "fg-button ui-button ui-state-default ui-state-disabled"
11-
- else
12-
= link_to page, url, { remote: remote, rel: page.next? ? 'next' : page.prev? ? 'prev' : nil, class: "fg-button ui-button ui-state-default"}
9+
li.paginate_button.page_num class="#{'active' if page.current?}"
10+
= link_to page, url, { remote: remote, rel: page.next? ? 'next' : page.prev? ? 'prev' : nil }
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
== paginator.render do
2-
.dataTables_paginate
2+
ul.pagination
33
== first_page_tag
44
== prev_page_tag
5-
span
6-
- each_page do |page|
7-
- if page.left_outer? || page.right_outer? || page.inside_window?
8-
== page_tag page
9-
- elsif !page.was_truncated?
10-
== gap_tag
5+
- each_page do |page|
6+
- if page.left_outer? || page.right_outer? || page.inside_window?
7+
== page_tag page
8+
- elsif !page.was_truncated?
9+
== gap_tag
1110
== next_page_tag
12-
== last_page_tag
11+
== last_page_tag

app/views/kaminari/admin/_prev_page.html.slim

+2-5
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,5 @@
55
/ total_pages : total number of pages
66
/ per_page : number of items to fetch per page
77
/ remote : data-remote
8-
- if current_page.first?
9-
a.previous.ui-state-disabled.fg-button.ui-button.ui-state-default
10-
== t 'views.pagination.previous'
11-
- else
12-
== link_to t('views.pagination.previous'), url, rel: 'prev', remote: remote, class: "previous #{'ui-state-disabled' if current_page.first?} fg-button ui-button ui-state-default"
8+
li.paginate_button.prev class="#{'disabled' if current_page.first?}"
9+
== link_to t('views.pagination.previous').html_safe, url, rel: 'prev', remote: remote

0 commit comments

Comments
 (0)