package Reaction::UI::ViewPort::Collection::Role::UseSearchSpec; use Reaction::Role; use aliased 'Reaction::InterfaceModel::Search::Spec' => 'SearchSpecRole'; use Scalar::Util qw(weaken); use Method::Signatures::Simple; use signatures; use namespace::clean -except => 'meta'; has 'search_spec' => (isa => SearchSpecRole, is => 'ro', required => 1); has '_search_spec_cb' => (is => 'ro', lazy_build => 1); method _build__search_spec_cb () { my $object = $self; weaken($object); my $cb = sub { $object->clear_current_collection }; } method _filter_collection_using_search_spec($coll) { $self->search_spec->filter_collection($coll); } method _register_self_with_search_spec () { my $cb = $self->_search_spec_cb; $self->search_spec->register_dependent($self, $cb); } around _build_current_collection => sub ($orig, $self, @rest) { my $coll = $self->$orig(@rest); return $self->_filter_collection_using_search_spec($coll); }; 1;