aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Reaction/UI/Widget/Field/ChooseMany.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Reaction/UI/Widget/Field/ChooseMany.pm')
-rw-r--r--lib/Reaction/UI/Widget/Field/ChooseMany.pm39
1 files changed, 30 insertions, 9 deletions
diff --git a/lib/Reaction/UI/Widget/Field/ChooseMany.pm b/lib/Reaction/UI/Widget/Field/ChooseMany.pm
index 8520068..efb100d 100644
--- a/lib/Reaction/UI/Widget/Field/ChooseMany.pm
+++ b/lib/Reaction/UI/Widget/Field/ChooseMany.pm
@@ -4,15 +4,36 @@ use Reaction::UI::WidgetClass;
class ChooseMany is 'Reaction::UI::Widget::Field', which {
- fragment field [qw/available_values action_buttons selected_values current_values/];
-
- fragment current_values [ hidden_value => over func('viewport', 'current_value_choices') ];
- fragment hidden_value [ string { $_->{value} } ];
-
- fragment available_values [ option => over func('viewport', 'available_value_choices') ];
- fragment selected_values [ option => over func('viewport', 'current_value_choices') ];
- fragment option [string {"DUMMY"}], { v_value => sub {$_->{value}}, v_name => sub {$_->{name}} };
- fragment action_buttons [ string {"DUMMY"} ];
+ implements fragment action_buttons {
+ foreach my $event (
+ qw(add_all_values do_add_values do_remove_values remove_all_values)
+ ) {
+ arg "event_id_${event}" => event_id $event;
+ }
+ };
+
+ implements fragment current_values {
+ render hidden_value => over $_{viewport}->current_value_choices;
+ };
+
+ implements fragment selected_values {
+ arg event_id_remove_values => event_id 'remove_values';
+ render value_option => over $_{viewport}->current_value_choices;
+ };
+
+ implements fragment available_values {
+ arg event_id_add_values => event_id 'add_values';
+ render value_option => over $_{viewport}->available_value_choices;
+ };
+
+ implements fragment value_option {
+ arg option_name => $_->{name};
+ arg option_value => $_->{value};
+ };
+
+ implements fragment hidden_value {
+ arg hidden_value => $_->{value};
+ };
};