Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 18 additions & 11 deletions admins/pageflow/user.rb
Original file line number Diff line number Diff line change
Expand Up @@ -61,27 +61,34 @@ module Pageflow
end

panel I18n.t('activerecord.models.entry.other') do
if user.memberships.any?
table_for user.memberships, :class => 'memberships', :i18n => Membership do
column :entry do |membership|
embedded_index_table(user.memberships.includes(:entry).references(:pageflow_entry),
blank_slate_text: I18n.t('pageflow.admin.users.empty')) do
table_for_collection sortable: true, class: 'memberships', i18n: Membership do
column :entry, sortable: 'pageflow_entries.title' do |membership|
link_to(membership.entry.title, admin_entry_path(membership.entry))
end
column :created_at, sortable: 'pageflow_memberships.created_at'
column do |membership|
if authorized?(:destroy, membership)
link_to(I18n.t('pageflow.admin.users.delete'), admin_user_membership_path(user, membership), :method => :delete, :data => {:confirm => I18n.t('active_admin.delete_confirmation'), :rel => 'delete_membership'})
link_to(I18n.t('pageflow.admin.users.delete'),
admin_user_membership_path(user, membership),
method: :delete,
data: {
confirm: I18n.t('active_admin.delete_confirmation'),
rel: 'delete_membership'
})
end
end
end
else
div :class => "blank_slate_container" do
span :class => "blank_slate" do
I18n.t('pageflow.admin.users.empty')
end
end
end

span do
link_to I18n.t('pageflow.admin.users.add_entry'), new_admin_user_membership_path(user), :class => 'button', :data => {:rel => 'add_membership'}
link_to(I18n.t('pageflow.admin.users.add_entry'),
new_admin_user_membership_path(user),
class: 'button',
data: {
rel: 'add_membership'
})
end
end
end
Expand Down
3 changes: 2 additions & 1 deletion app/assets/stylesheets/pageflow/admin.css.scss
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
@import "pageflow/mixins";

@import "pageflow/admin/columns";
@import "pageflow/admin/embedded_index_table";
@import "pageflow/admin/entries";
@import "pageflow/admin/forms";
@import "pageflow/admin/features";
Expand All @@ -27,4 +28,4 @@

.blank_slate_container {
margin: 10px 0;
}
}
14 changes: 14 additions & 0 deletions app/assets/stylesheets/pageflow/admin/embedded_index_table.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
.embedded_index_table {
.sortable a {
background: url(/assets/active_admin/orderable.png) no-repeat 100% 2px;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

URLs should be enclosed in quotes

padding-right: 13px;
}

.sorted-asc a {
background-position: 100% -29px;
}

.sorted-desc a {
background-position: 100% -58px;
}
}
1 change: 1 addition & 0 deletions app/assets/stylesheets/pageflow/admin/tabs_view.css.scss
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
}

> .tab_container {
@include clearfix;
@extend .panel_contents;

display: none;
Expand Down
68 changes: 62 additions & 6 deletions app/views/components/pageflow/admin/embedded_index_table.rb
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,11 @@ def scope(*args)

def table_for_collection(*args, &block)
if scopes.any?
custom_scopes_renderer(scopes, :default_scope => scopes.first.id)
custom_scopes_renderer(scopes, default_scope: scopes.first.id)
end

record_sort_columns(&block)

if scoped_collection.any?
build_table(*args, &block)
else
Expand All @@ -31,15 +33,15 @@ def table_for_collection(*args, &block)
private

def build_table(*args, &block)
paginated_collection(scoped_collection.page(params[:page]).per(10),
:download_links => false) do
paginated_collection(paginate(apply_sorting(scoped_collection)),
download_links: false) do
table_for(collection, *args, &block)
end
end

def build_blank_slate
div :class => "blank_slate_container" do
span :class => "blank_slate" do
div class: 'blank_slate_container' do
span class: 'blank_slate' do
@blank_slate_text
end
end
Expand All @@ -50,10 +52,64 @@ def scoped_collection
end

def current_scope
scopes.find do |scope|
scopes.detect do |scope|
scope.id.to_s == params[:scope]
end || scopes.first
end

def paginate(collection)
collection.page(params[:page]).per(10)
end

def apply_sorting(collection)
if has_sort_columns?
collection.reorder(order_clause)
else
collection
end
end

def has_sort_columns?
@sort_columns.any?
end

def order_clause
if valid_order?
params[:order].gsub('_asc', ' ASC').gsub('_desc', ' DESC')
else
"#{@sort_columns.first} ASC"
end
end

def valid_order?
params[:order] &&
@sort_columns.include?(params[:order].gsub('_asc', '').gsub('_desc', ''))
end

def record_sort_columns(&block)
recorder = SortColumnRecorder.new
recorder.instance_eval(&block)
@sort_columns = recorder.columns
end

class SortColumnRecorder
attr_reader :columns

def initialize
@columns = []
end

def column(name = nil, options = {})
if options[:sortable].is_a?(String) || options[:sortable].is_a?(Symbol)
@columns << options[:sortable].to_s
elsif options[:sortable] != false && name
@columns << name.to_s
end
end

def row_attributes
end
end
end
end
end
15 changes: 6 additions & 9 deletions app/views/components/pageflow/admin/entries_tab.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,14 @@ module Admin
class EntriesTab < ViewComponent
def build(theming)
account = theming.account
if account.entries.any?
table_for account.entries, :i18n => Pageflow::Entry do
column :title do |entry|
embedded_index_table(account.entries,
blank_slate_text: I18n.t('pageflow.admin.entries.no_members')) do
table_for_collection(sortable: true, class: 'entries', i18n: Pageflow::Entry) do
column :title, sortable: :title do |entry|
link_to(entry.title, admin_entry_path(entry))
end
end
else
div :class => "blank_slate_container" do
span :class => "blank_slate" do
I18n.t('pageflow.admin.accounts.no_entries')
end
column :created_at
column :updated_at
end
end
end
Expand Down
31 changes: 19 additions & 12 deletions app/views/components/pageflow/admin/members_tab.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,31 +2,38 @@ module Pageflow
module Admin
class MembersTab < ViewComponent
def build(entry)
if entry.memberships.any?
table_for entry.memberships, :class => 'memberships' do
column t('activerecord.attributes.user.full_name'), class: 'name' do |membership|
embedded_index_table(entry.memberships.includes(:user).references(:users),
blank_slate_text: I18n.t('pageflow.admin.entries.no_members')) do
table_for_collection class: 'memberships', sortable: true, i18n: Pageflow::Membership do
column :user, sortable: 'users.last_name', class: 'name' do |membership|
if authorized? :manage, User
link_to membership.user.full_name, admin_user_path(membership.user), :class => 'view_creator'
link_to(membership.user.formal_name, admin_user_path(membership.user),
class: 'view_creator')
else
membership.user.full_name
end
end
column :created_at, sortable: 'pageflow_memberships.created_at'
column do |membership|
if authorized?(:destroy, membership)
link_to(I18n.t('pageflow.admin.entries.remove'), admin_entry_membership_path(membership.entry, membership), :method => :delete, :data => {:confirm => I18n.t('active_admin.delete_confirmation'), :rel => 'delete_membership'})
link_to(I18n.t('pageflow.admin.entries.remove'),
admin_entry_membership_path(membership.entry, membership),
method: :delete,
data: {
confirm: I18n.t('active_admin.delete_confirmation'),
rel: 'delete_membership'
})
end
end
end
else
div :class => "blank_slate_container" do
span :class => "blank_slate" do
I18n.t('pageflow.admin.entries.no_members')
end
end
end

if authorized? :manage, Pageflow::Entry
span do
link_to I18n.t('pageflow.admin.users.add'), new_admin_entry_membership_path(entry), :class => 'button', :data => {:rel => 'add_member'}
link_to(I18n.t('pageflow.admin.users.add'),
new_admin_entry_membership_path(entry),
class: 'button',
data: {rel: 'add_member'})
end
end
end
Expand Down
2 changes: 1 addition & 1 deletion app/views/components/pageflow/admin/revisions_tab.rb
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ def build(entry)
revision.creator.full_name
end
end
column :published_until do |revision|
column :published_until do |revision|
if revision.published_until
I18n.l(revision.published_until)
elsif revision.published?
Expand Down
16 changes: 6 additions & 10 deletions app/views/components/pageflow/admin/users_tab.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,13 @@ module Admin
class UsersTab < ViewComponent
def build(theming)
account = theming.account
if account.users.any?
table_for account.users, :i18n => User do
column :full_name do |user|
link_to user.full_name, admin_user_path(user)
end
end
else
div :class => "blank_slate_container" do
span :class => "blank_slate" do
I18n.t('pageflow.admin.accounts.no_members')
embedded_index_table(account.users,
blank_slate_text: I18n.t('pageflow.admin.accounts.no_members')) do
table_for_collection sortable: true, class: 'users', i18n: User do
column :full_name, sortable: :last_name do |user|
link_to user.formal_name, admin_user_path(user)
end
column :created_at
end
end
end
Expand Down
5 changes: 5 additions & 0 deletions config/locales/new/admin_embedded_index_tables.de.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
de:
activerecord:
attributes:
pageflow/membership:
created_at: "Mitglied seit"
5 changes: 5 additions & 0 deletions config/locales/new/admin_embedded_index_tables.en.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
en:
activerecord:
attributes:
pageflow/membership:
created_at: "Member since"
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,6 @@
Dom::Admin::EntryPage.first.add_member_link.click
Dom::Admin::NewMembershipForm.first.submit_with(:user_id => user.id)

expect(Dom::Admin::Membership.find_by_user_full_name(user.full_name)).to be_present
expect(Dom::Admin::Membership.find_by_user_full_name(user.formal_name)).to be_present
end
end
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,6 @@
Dom::Admin::EntryPage.first.add_member_link.click
Dom::Admin::NewMembershipForm.first.submit_with(:user_id => user.id)

expect(Dom::Admin::Membership.find_by_user_full_name(user.full_name)).to be_present
expect(Dom::Admin::Membership.find_by_user_full_name(user.formal_name)).to be_present
end
end
12 changes: 8 additions & 4 deletions spec/support/helpers/view_component_example_group.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,20 @@ module ViewComponentExampleGroup
attr_reader :rendered
end

def arbre
Arbre::Context.new({}, _view)
def arbre(&block)
Arbre::Context.new({}, _view, &block)
end

def helper
_view
end

def render(*args)
@rendered = arbre.send(described_class.builder_method_name, *args)
def render(*args, &block)
if block_given?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use the return of the conditional for variable assignment and comparison.

@rendered = arbre(&block).to_s
else
@rendered = arbre.send(described_class.builder_method_name, *args, &block)
end
end
end

Expand Down
Loading