package Reaction::UI::Controller::Role::Action::List; use Moose::Role -traits => 'MethodAttributes'; use Reaction::UI::ViewPort::Collection; requires qw/get_collection setup_viewport/; sub list :Action :Args(0) { my ($self, $c) = @_; my $collection = $c->stash->{collection} || $self->get_collection($c); $self->setup_viewport($c, { collection => $collection }); } around _build_action_viewport_map => sub { my $orig = shift; my $map = shift->$orig( @_ ); $map->{list} = 'Reaction::UI::ViewPort::Collection'; return $map; }; 1; __END__; =head1 NAME Reaction::UI::Controller::Role::Action::List - List action =head1 DESCRIPTION Provides a C action, which sets up an L using the collection contained in the C slot of the stash, if present, or using the object returned by the method C. =head1 SYNOPSYS package MyApp::Controller::Foo; use base 'Reaction::Controller'; use Reaction::Class; with( 'Reaction::UI::Controller::Role::GetCollection', 'Reaction::UI::Controller::Role::Action::Simple', 'Reaction::UI::Controller::Role::Action::List' ); __PACKAGE__->config( action => { list => { Chained => 'base' }, } ); sub base :Chained('/base') :CaptureArgs(0) { ... } =head1 ROLES CONSUMED This role also consumes the following roles: =over4 =item L =back =head1 REQUIRED METHODS The following methods must be provided by the consuming class: =over4 =item C =back =head1 ACTIONS =head2 list Chain endpoint with no args, sets up the viewport with the appropriate action. =head1 METHODS =head2 _build_action_viewport_map Extends to set the C key in the map to L =head1 SEE ALSO =over4 =item L =item L =item L =item L =item L =item L =item L =item L =item L =back =head1 AUTHORS See L for authors. =head1 LICENSE See L for the license. =cut