diff options
Diffstat (limited to 'lib/Reaction/UI/ViewPort')
8 files changed, 46 insertions, 19 deletions
diff --git a/lib/Reaction/UI/ViewPort/Field/Mutable/ChooseMany.pm b/lib/Reaction/UI/ViewPort/Field/Mutable/ChooseMany.pm index 1b7a411..227ad33 100644 --- a/lib/Reaction/UI/ViewPort/Field/Mutable/ChooseMany.pm +++ b/lib/Reaction/UI/ViewPort/Field/Mutable/ChooseMany.pm @@ -11,11 +11,11 @@ use namespace::clean -except => [ qw(meta) ]; use MooseX::Types::Moose qw/ArrayRef/; extends 'Reaction::UI::ViewPort::Field'; -with 'Reaction::UI::ViewPort::Field::Role::Mutable'; +with 'Reaction::UI::ViewPort::Field::Role::Mutable' => { value_type => 'ArrayRef' }; with 'Reaction::UI::ViewPort::Field::Role::Choices'; #MUST BE HERE, BELOW THE 'does', OR THE TRIGGER WILL NOT HAPPEN! -has '+value' => (isa => ArrayRef); +#has '+value' => (isa => ArrayRef); around value => sub { my $orig = shift; diff --git a/lib/Reaction/UI/ViewPort/Field/Mutable/File.pm b/lib/Reaction/UI/ViewPort/Field/Mutable/File.pm index 4318eee..5c1b35d 100644 --- a/lib/Reaction/UI/ViewPort/Field/Mutable/File.pm +++ b/lib/Reaction/UI/ViewPort/Field/Mutable/File.pm @@ -6,9 +6,8 @@ use Reaction::Class; use namespace::clean -except => [ qw(meta) ]; extends 'Reaction::UI::ViewPort::Field'; -with 'Reaction::UI::ViewPort::Field::Role::Mutable::Simple'; - -has '+value' => (isa => Upload); +with 'Reaction::UI::ViewPort::Field::Role::Mutable::Simple' + => { value_type => Upload }; override apply_our_events => sub { my ($self, $events) = @_; diff --git a/lib/Reaction/UI/ViewPort/Field/Mutable/HiddenArray.pm b/lib/Reaction/UI/ViewPort/Field/Mutable/HiddenArray.pm index 77df3de..a54dfc5 100644 --- a/lib/Reaction/UI/ViewPort/Field/Mutable/HiddenArray.pm +++ b/lib/Reaction/UI/ViewPort/Field/Mutable/HiddenArray.pm @@ -6,9 +6,9 @@ use MooseX::Types::Moose qw/ArrayRef/; extends 'Reaction::UI::ViewPort::Field'; -with 'Reaction::UI::ViewPort::Field::Role::Mutable'; +with 'Reaction::UI::ViewPort::Field::Role::Mutable' => { value_type => 'ArrayRef' }; -has '+value' => (isa => ArrayRef); +#has '+value' => (isa => ArrayRef); around value => sub { my $orig = shift; diff --git a/lib/Reaction/UI/ViewPort/Field/Role/Mutable.pm b/lib/Reaction/UI/ViewPort/Field/Role/Mutable.pm index 94953f4..16ae93f 100644 --- a/lib/Reaction/UI/ViewPort/Field/Role/Mutable.pm +++ b/lib/Reaction/UI/ViewPort/Field/Role/Mutable.pm @@ -1,26 +1,46 @@ package Reaction::UI::ViewPort::Field::Role::Mutable; -use Reaction::Role; +use MooseX::Role::Parameterized; use aliased 'Reaction::InterfaceModel::Action'; use aliased 'Reaction::Meta::InterfaceModel::Action::ParameterAttribute'; use MooseX::Types::Moose qw/Int Str/; - use namespace::clean -except => [ qw(meta) ]; +=pod + +15:24 mst:» I'm not sure I understand why the +foo is overwriting my after'ed clear_value +15:24 mst:» but I would argue it shouldn't do that +15:25 @doy:» because has '+foo' is creating an entirely new attribute +15:25 @doy:» and just copying the meta-attribute's attributes into it +15:25 @doy:» so it's creating a new clearer sub in the subclass +15:27 rafl:» mst: for that case, i tend to just parameterize the role on whatever i might want to override in its attribute definitions + +=cut + +parameter value_type => ( + predicate => 'has_value_type' +); + +role { + +my $p = shift; + has model => (is => 'ro', isa => Action, required => 1); has attribute => (is => 'ro', isa => ParameterAttribute, required => 1); has value => ( - is => 'rw', lazy_build => 1, trigger_adopt('value'), + is => 'rw', lazy_build => 1, trigger => sub { shift->adopt_value }, clearer => 'clear_value', + $p->has_value_type? (isa => $p->value_type) : () ); + has needs_sync => (is => 'rw', isa => Int, default => 0); #should be bool? has message => (is => 'rw', isa => Str, clearer => 'clear_message'); has is_modified => ( #sould be bool? - is => 'ro', writer => '_set_modified', + is => 'ro', writer => '_set_modified', required => 1, default => 1, init_arg => undef ); @@ -111,6 +131,7 @@ sub sync_from_action { around accept_events => sub { ('value', shift->(@_)) }; +}; 1; diff --git a/lib/Reaction/UI/ViewPort/Field/Role/Mutable/Simple.pm b/lib/Reaction/UI/ViewPort/Field/Role/Mutable/Simple.pm index e19fa61..d8ca473 100644 --- a/lib/Reaction/UI/ViewPort/Field/Role/Mutable/Simple.pm +++ b/lib/Reaction/UI/ViewPort/Field/Role/Mutable/Simple.pm @@ -1,14 +1,23 @@ package Reaction::UI::ViewPort::Field::Role::Mutable::Simple; -use Reaction::Role; +use MooseX::Role::Parameterized; use aliased 'Reaction::UI::ViewPort::Field::Role::Mutable'; use namespace::clean -except => [ qw(meta) ]; -with Mutable; + +parameter value_type => ( + predicate => 'has_value_type' +); + +role { + +my $p = shift; + +with Mutable, $p->has_value_type ? { value_type => $p->value_type } : (); has value_string => ( - is => 'rw', lazy_build => 1, trigger_adopt('value_string'), + is => 'rw', lazy_build => 1, trigger => sub { shift->adopt_value_string }, clearer => 'clear_value', ); @@ -44,6 +53,6 @@ around accept_events => sub { ('value_string', shift->(@_)) }; around force_events => sub { (value_string => '', shift->(@_)) }; - +}; 1; diff --git a/lib/Reaction/UI/ViewPort/ListViewWithSearch.pm b/lib/Reaction/UI/ViewPort/ListViewWithSearch.pm index ee5f738..c199f7d 100644 --- a/lib/Reaction/UI/ViewPort/ListViewWithSearch.pm +++ b/lib/Reaction/UI/ViewPort/ListViewWithSearch.pm @@ -6,8 +6,6 @@ extends 'Reaction::UI::ViewPort::Collection::Grid'; with 'Reaction::UI::ViewPort::Collection::Role::UseSearchSpec'; with 'Reaction::UI::ViewPort::Collection::Role::Order'; -with 'Reaction::UI::ViewPort::Collection::Role::Pager'; -with 'Reaction::UI::ViewPort::Role::Actions'; __PACKAGE__->meta->make_immutable; diff --git a/lib/Reaction/UI/ViewPort/Role/Actions.pm b/lib/Reaction/UI/ViewPort/Role/Actions.pm index 32c7bbb..ceb9bfe 100644 --- a/lib/Reaction/UI/ViewPort/Role/Actions.pm +++ b/lib/Reaction/UI/ViewPort/Role/Actions.pm @@ -67,7 +67,7 @@ sub _build_actions { location => join ('-', $loc, 'action', $i++), uri => ( ref($uri) eq 'CODE' ? $uri->($target, $ctx) : $uri ), display => ( ref($label) eq 'CODE' ? $label->($target, $ctx) : $label ), - layout => ( ref($layout) eq 'CODE' ? $layout->($target, $ctx) : $layout ), + layout => $layout, ); push(@act, $action); } diff --git a/lib/Reaction/UI/ViewPort/SearchableListViewContainer.pm b/lib/Reaction/UI/ViewPort/SearchableListViewContainer.pm index d83941b..4468275 100644 --- a/lib/Reaction/UI/ViewPort/SearchableListViewContainer.pm +++ b/lib/Reaction/UI/ViewPort/SearchableListViewContainer.pm @@ -74,7 +74,7 @@ override BUILDARGS => sub { }; override child_event_sinks => method () { - ((map $self->$_, 'listview', 'search_form'), super); + ((map $self->$_, 'search_form', 'listview'), super); }; 1; |