POD for Order role
[catagits/Reaction.git] / lib / Reaction / UI / ViewPort / Collection / Role / Pager.pm
1 package Reaction::UI::ViewPort::Collection::Role::Pager;
2
3 use Reaction::Role;
4
5 use aliased 'Reaction::InterfaceModel::Collection';
6
7 # XX This needs to be consumed after Ordered
8 use namespace::clean -except => [ qw(meta) ];
9
10
11 #has paged_collection => (isa => Collection, is => 'rw', lazy_build => 1);
12
13 has pager    => (isa => 'Data::Page', is => 'rw', lazy_build => 1);
14 has page     => (isa => 'Int', is => 'rw', lazy_build => 1, trigger_adopt('page'), clearer => 'clear_page');
15 has per_page => (isa => 'Int', is => 'rw', lazy_build => 1, trigger_adopt('page'));
16 has per_page_max => (isa => 'Int', is => 'rw', lazy_build => 1);
17 sub _build_page { 1  };
18 sub _build_per_page { 10 };
19 sub _build_per_page_max { 100 };
20 sub _build_pager { shift->current_collection->pager };
21 sub adopt_page {
22   my ($self) = @_;
23   #$self->clear_paged_collection;
24
25   $self->clear_pager;
26   $self->clear_current_collection;
27 };
28
29 after clear_page => sub {
30   my ($self) = @_;
31   $self->clear_pager;
32   $self->clear_current_collection;
33 };
34
35 around accept_events => sub { ('page','per_page', shift->(@_)); };
36
37 #implements build_paged_collection => as {
38 #  my ($self) = @_;
39 #  my $collection = $self->current_collection;
40 #  return $collection->where(undef, {rows => $self->per_page})->page($self->page);
41 #};
42
43 around _build_current_collection => sub {
44   my $orig = shift;
45   my ($self) = @_;
46   my $collection = $orig->(@_);
47   return $collection->where(undef, {rows => $self->per_page})->page($self->page);
48 };
49
50 1;
51
52 __END__;