package Reaction::UI::Controller::Role::Action::Delete; use Moose::Role -traits => 'MethodAttributes'; use Reaction::UI::ViewPort::Action; requires qw/make_context_closure setup_viewport/; sub delete :Action :Args(0) { my ($self, $c) = @_; my $target = $c->stash->{object}; my %vp_args = ( model => $target->action_for('Delete') ); if( $self->can('on_delete_apply_callback') ){ my $apply = sub { $self->on_delete_apply_callback( @_) }; $vp_args{on_apply_callback} = $self->make_context_closure( $apply ); } if( $self->can('on_delete_close_callback') ){ my $close = sub { $self->on_delete_close_callback( @_) }; $vp_args{on_close_callback} = $self->make_context_closure( $close ); } $self->setup_viewport( $c, \%vp_args ); } around _build_action_viewport_map => sub { my $orig = shift; my $map = shift->$orig( @_ ); $map->{delete} = 'Reaction::UI::ViewPort::Action'; return $map; }; 1; __END__; =head1 NAME Reaction::UI::Controller::Role::Action::Delete - Delete action =head1 DESCRIPTION Provides a C action, which sets up an L by calling C on the object located in the C slot of the 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::Object', 'Reaction::UI::Controller::Role::Action::Delete' ); __PACKAGE__->config( action => { object => { Chained => 'base' }, delete => { Chained => 'object' }, } ); sub base :Chained('/base') :CaptureArgs(0) { ... } sub on_delete_apply_callback{ #optional callback my($self, $c, $vp, $result) = @_; ... } sub on_delete_close_callback{ #optional callback my($self, $c, $vp) = @_; ... } =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 delete Chain endpoint with no args, sets up the viewport with the appropriate action. If the methods C and C are present in the consuming class, they will be used as callbacks in the viewport. =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