Form::Factory::Control::SelectMany - the multi-select control


Form-Factory documentation Contained in the Form-Factory distribution.

Index


Code Index:

NAME

Top

Form::Factory::Control::SelectMany - the multi-select control

VERSION

Top

version 0.020

SYNOPSIS

Top

  has_control pick_some => (
      control => 'select_many',
      options => {
          label => 'Just select some of these already...",
          available_choices => [
              Form::Factory::Control::Choice->new('one');
              Form::Factory::Control::Choice->new('two');
              Form::Factory::Control::Choice->new('three');
          ],
          default_selected_choices => [ qw( one three ) ],
      },
  );

DESCRIPTION

Top

A select many can be displayed as a multi-select list box or a list of checkboxes.

This control implements Form::Factory::Control, Form::Factory::Control::Role::AvailableChoices, Form::Factory::Control::Role::Labeled, Form::Factory::Control::Role::ListValue.

METHODS

Top

current_values

This is a synonym for current_value.

selected_choices

This is a synonym for value.

has_selected_choices

This is a synonyms for has_selected_choices.

default_selected_choices

This is a synonym for default_value.

has_default_selected_choices

This is a synonym for has_default_selected_choices.

is_choice_selected

  for my $choice (@{ $self->available_choices }) {
      if ($control->is_choice_selected($choice)) {
          # ...
      }
  }

This is a helper that is useful while iterating over the available choices in deciding which have been selected.

has_current_value

It has a current value if one or more values are selected.

AUTHOR

Top

Andrew Sterling Hanenkamp <hanenkamp@cpan.org>

COPYRIGHT AND LICENSE

Top


Form-Factory documentation Contained in the Form-Factory distribution.
package Form::Factory::Control::SelectMany;
BEGIN {
  $Form::Factory::Control::SelectMany::VERSION = '0.020';
}
use Moose;

with qw(
    Form::Factory::Control
    Form::Factory::Control::Role::AvailableChoices
    Form::Factory::Control::Role::Labeled
    Form::Factory::Control::Role::ListValue
);

use List::MoreUtils qw( any );

has '+value' => (
    isa       => 'ArrayRef[Str]',
);

has '+default_value' => (
    isa       => 'ArrayRef[Str]',
    default   => sub { [] },
);

sub current_values { shift->current_value(@_) }

sub selected_choices { shift->value(@_) }

sub has_selected_choices { shift->has_value(@_) }

sub default_selected_choices { shift->default_value(@_) }

sub has_default_selected_choices { shift->has_default_value(@_) }

sub is_choice_selected {
    my ($self, $choice) = @_;

    return any { $_ eq $choice->value } @{ $self->current_values };
}

around has_current_value => sub {
    my $next = shift;
    my $self = shift;
    return ($self->has_value || $self->has_default_value) 
        && scalar(@{ $self->current_value }) > 0;
};


1;