1 package Reaction::UI::ViewPort::Collection::Role::UseSearchSpec;
4 use aliased 'Reaction::InterfaceModel::Search::Spec' => 'SearchSpecRole';
5 use Scalar::Util qw(weaken);
6 use Method::Signatures::Simple;
8 use namespace::clean -except => 'meta';
10 has 'search_spec' => (isa => SearchSpecRole, is => 'ro', required => 1);
12 has '_search_spec_cb' => (is => 'ro', lazy_build => 1);
14 method _build__search_spec_cb () {
17 my $cb = sub { $object->clear_current_collection };
20 method _filter_collection_using_search_spec($coll) {
21 $self->search_spec->filter_collection($coll);
24 method _register_self_with_search_spec () {
25 my $cb = $self->_search_spec_cb;
26 $self->search_spec->register_dependent($self, $cb);
29 around _build_current_collection => sub ($orig, $self, @rest) {
30 my $coll = $self->$orig(@rest);
31 return $self->_filter_collection_using_search_spec($coll);