Reaction::Manual::ActionPrototypes - Changes to the Action Prototype Mechanism
After Reaction 0.001001 the API used to create links for different actions in the ViewPort::Collection::Grid changed significantly. The aim of the changes was to create a simpler API that was more concise, flexible, and didn't tie unneccessary controller logic in the ViewPort layer.
list
default_member_actions
default_collection_actions
_build_member_action_prototype
_build_collection_action_prototype
_build_action_viewport_args
By default, enable create, update, delete, delete_all, actions.
create
update
delete
delete_all
member_action_count
Completely revamped the action-prototypes, added ordering support and moved to using the new ViewPort::URI|Reaction::UI::ViewPort::URI.
ViewPort::URI|Reaction::UI::ViewPort::URI
Most notably action_prototypes is now a HASH ref.
action_prototypes
In most cases, you shouldn't need to change much for migration, but if you had custom actions in your controllers that were linked to by the CRUD system, or you had excluded certain classes, you'll need to create some minor updates.
#old code sub custom_action { ... } sub _build_action_viewport_map { my $map = shift->next::method(@_); $map->{custom_action} = 'Reaction::UI::ViewPort::Action'; return $map; } sub _build_action_viewport_args { my $args = shift->next::method(@_); my $custom_proto = { label => 'Create', action => sub { [ '', 'create', $_[1]->req->captures ] } }; my $protos = $args->{list}->{action_prototypes}; push(@$protos, $custom_proto); return $args; } #new code: sub custom_action { ... } sub _build_action_viewport_map { my $map = shift->next::method(@_); $map->{custom_action} = 'Reaction::UI::ViewPort::Action'; return $map; } sub _build_default_collection_actions { [ @{shift->next::method(@_)}, 'custom_action']; }
#old code sub custom_action { ... } sub _build_action_viewport_map { my $map = shift->next::method(@_); $map->{custom_action} = 'Reaction::UI::ViewPort::Action'; return $map; } sub _build_action_viewport_args { my $args = shift->next::method(@_); my $custom_proto = { label => 'Create', action => sub { [ '', 'create', $_[1]->req->captures ] } }; my $protos = $args->{list}->{Member}->{action_prototypes}; push(@$protos, $custom_proto); return $args; } #new code: sub custom_action { ... } sub _build_action_viewport_map { my $map = shift->next::method(@_); $map->{custom_action} = 'Reaction::UI::ViewPort::Action'; return $map; } sub _build_default_member_actions { [ @{shift->next::method(@_)}, 'custom_action']; }
#old code sub delete_all {} sub _build_action_viewport_args { my $args = shift->next::method(@_); #remove the delete all action my $protos = $args->{list}->{action_prototypes}; @$protos = grep { $_->{label} !~ /Delete all/i } @$protos; return $args; } #new code sub delete_all {} sub _build_default_collection_actions { [ grep {$_ ne 'delete_all'} @{ shift->next::method(@_) } ]; } #or ... sub delete_all {} sub _build_action_viewport_args { my $args = shift->next::method(@_); my $protos = $args->{list}->{action_prototypes}; delete $protos->{delete_all}; return $args; }
#old code sub _build_action_viewport_args { my $args = shift->next::method(@_); my $protos = $args->{list}->{action_prototypes}; $proto = grep { $_->{label} eq 'Delete all' } @$protos; $proto->{label} = 'New Label'; return $args; } #new code sub delete_all {} sub _build_action_viewport_args { my $args = shift->next::method(@_); my $protos = $args->{list}->{action_prototypes}; $proto->{delete_all}->{label} = 'New Label'; return $args; } #or ... __PACKAGE__->config(action => { list => { ViewPort => { action_prototypes => { delete_all => {label => 'New Label'} } }, );
To install Reaction, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Reaction
CPAN shell
perl -MCPAN -e shell install Reaction
For more information on module installation, please visit the detailed CPAN module installation guide.