1 package Reaction::UI::ViewPort::Collection::Grid;
5 use aliased 'Reaction::InterfaceModel::Collection' => 'IM_Collection';
6 use aliased 'Reaction::UI::ViewPort::Collection::Grid::Member';
8 class Grid is 'Reaction::UI::ViewPort::Collection', which {
10 has field_order => ( isa => 'ArrayRef', is => 'ro', lazy_build => 1);
11 has field_labels => ( isa => 'HashRef', is => 'ro', lazy_build => 1);
13 has ordered_fields => (is => 'ro', isa => 'ArrayRef', lazy_build => 1);
14 has excluded_fields => (is => 'ro', isa => 'ArrayRef', lazy_build => 1);
16 ####################################
17 implements _build_member_class => as { };
19 implements _build_field_labels => as {
22 for my $field ( @{$self->field_order}){
23 $labels{$field} = join(' ', map{ ucfirst } split('_', $field));
28 implements _build_ordered_fields => as {
30 confess("current_collection lacks a value for 'member_type' attribute")
31 unless $self->current_collection->has_member_type;
32 my %excluded = map { $_ => undef } @{ $self->excluded_fields };
33 #treat _$field_name as private and exclude fields with no reader
34 my @names = grep { $_ !~ /^_/ && !exists($exclude{$_})} map { $_->name }
35 grep { defined $_->get_read_method }
36 $self->current_collection->member_type->meta->parameter_attributes;
37 return $self->sort_by_spec($self->field_order, \@names);
40 before _build_members => sub {
42 $self->member_args->{ordered_fields} ||= $self->ordered_fields;