added action_filter
[catagits/Reaction.git] / lib / Reaction / UI / ViewPort / Field / File.pm
index a1d181c..adb0155 100644 (file)
@@ -3,43 +3,29 @@ package Reaction::UI::ViewPort::Field::File;
 use Reaction::Class;
 use Reaction::Types::File;
 
-class File is 'Reaction::UI::ViewPort::Field', which {
+use namespace::clean -except => [ qw(meta) ];
+extends 'Reaction::UI::ViewPort::Field';
 
-  has '+value' => (isa => 'File', required => 0);
+use MooseX::Types::Moose qw/CodeRef/;
 
-  #has '+layout' => (default => 'file');
+has '+value' => (isa => Reaction::Types::File::File());
 
-  override apply_our_events => sub {
-    my ($self, $ctx, $events) = @_;
-    my $value_key = join(':', $self->location, 'value');
-    if (my $upload = $ctx->req->upload($value_key)) {
-      local $events->{$value_key} = $upload;
-      return super();
-    } else {
-      return super();
-    }
-  };
+has uri    => ( is => 'rw', lazy_build => 1);
 
-};
+has action => (isa => CodeRef, is => 'rw', required => 1);
 
-1;
-
-=head1 NAME
-
-Reaction::UI::ViewPort::Field::File
-
-=head1 DESCRIPTION
+sub _build_uri {
+  my $self = shift;
+  my $c = $self->ctx;
+  my ($c_name, $a_name, @rest) = @{ $self->action->($self->model, $c) };
+  $c->uri_for($c->controller($c_name)->action_for($a_name),@rest);
+}
 
-=head1 SEE ALSO
+sub _value_string_from_value {
+    shift->value->stringify;
+}
 
-=head2 L<Reaction::UI::ViewPort::Field>
+__PACKAGE__->meta->make_immutable;
 
-=head1 AUTHORS
 
-See L<Reaction::Class> for authors.
-
-=head1 LICENSE
-
-See L<Reaction::Class> for the license.
-
-=cut
+1;