revert r620
[catagits/Reaction.git] / lib / Reaction / UI / ViewPort / Action.pm
index 1251d8e..1e92025 100644 (file)
@@ -2,6 +2,10 @@ package Reaction::UI::ViewPort::Action;
 
 use Reaction::Class;
 
+use aliased 'Reaction::UI::ViewPort::Object';
+
+BEGIN { *DEBUG_EVENTS = \&Reaction::UI::ViewPort::DEBUG_EVENTS; }
+
 use aliased 'Reaction::UI::ViewPort::Field::Mutable::Text';
 use aliased 'Reaction::UI::ViewPort::Field::Mutable::Array';
 use aliased 'Reaction::UI::ViewPort::Field::Mutable::String';
@@ -13,10 +17,10 @@ use aliased 'Reaction::UI::ViewPort::Field::Mutable::DateTime';
 use aliased 'Reaction::UI::ViewPort::Field::Mutable::ChooseOne';
 use aliased 'Reaction::UI::ViewPort::Field::Mutable::ChooseMany';
 
-#use aliased 'Reaction::UI::ViewPort::InterfaceModel::Field::Mutable::File';
-#use aliased 'Reaction::UI::ViewPort::InterfaceModel::Field::Mutable::TimeRange';
+use aliased 'Reaction::UI::ViewPort::Field::Mutable::File';
+#use aliased 'Reaction::UI::ViewPort::Field::Mutable::TimeRange';
 
-class Action is 'Reaction::UI::ViewPort::Object', which {
+class Action is Object, which {
   has model  => (is => 'ro', isa => 'Reaction::InterfaceModel::Action', required => 1);
   #has '+model' => (isa => 'Reaction::InterfaceModel::Action');
 
@@ -44,11 +48,26 @@ class Action is 'Reaction::UI::ViewPort::Object', which {
   implements can_apply => as {
     my ($self) = @_;
     foreach my $field ( @{ $self->fields } ) {
-      return 0 if $field->needs_sync;
+      if ($field->needs_sync) {
+        if (DEBUG_EVENTS) {
+          $self->ctx->log->debug(
+            "Failing out of can_apply on ${\ref($self)} at ${\$self->location}"
+            ." because field for ${\$field->attribute->name} needs sync"
+          );
+        }
+      }
       # if e.g. a datetime field has an invalid value that can't be re-assembled
       # into a datetime object, the action may be in a consistent state but
       # not synchronized from the fields; in this case, we must not apply
     }
+    if (DEBUG_EVENTS) {
+      my $ret = $self->model->can_apply;
+      $self->ctx->log->debug(
+        "model can_apply returned ${ret}"
+        ." on ${\ref($self)} at ${\$self->location}"
+      );
+      return $ret;
+    }
     return $self->model->can_apply;
   };
 
@@ -121,30 +140,31 @@ class Action is 'Reaction::UI::ViewPort::Object', which {
     $self->_build_simple_field(attribute => $attr, class => Boolean, %$args);
   };
 
-  implements _build_fields_for_type_SimpleStr => as {
+  implements _build_fields_for_type_Reaction_Types_Core_SimpleStr => as {
     my ($self, $attr, $args) = @_;
     $self->_build_simple_field(attribute => $attr, class => String, %$args);
   };
 
-  #implements _build_fields_for_type_File => as {
-  #  my ($self, $attr, $args) = @_;
-  #  $self->_build_simple_field(attribute => $attr, class => File, %$args);
-  #};
+  implements _build_fields_for_type_File => as {
+    my ($self, $attr, $args) = @_;
+    $self->_build_simple_field(attribute => $attr, class => File, %$args);
+  };
 
   implements _build_fields_for_type_Str => as {
     my ($self, $attr, $args) = @_;
     if ($attr->has_valid_values) { # There's probably a better way to do this
       $self->_build_simple_field(attribute => $attr, class => ChooseOne, %$args);
+    } else {
+      $self->_build_simple_field(attribute => $attr, class => Text, %$args);
     }
-    $self->_build_simple_field(attribute => $attr, class => Text, %$args);
   };
 
-  implements _build_fields_for_type_Password => as {
+  implements _build_fields_for_type_Reaction_Types_Core_Password => as {
     my ($self, $attr, $args) = @_;
     $self->_build_simple_field(attribute => $attr, class => Password, %$args);
   };
 
-  implements _build_fields_for_type_DateTime => as {
+  implements _build_fields_for_type_Reaction_Types_DateTime_DateTime => as {
     my ($self, $attr, $args) = @_;
     $self->_build_simple_field(attribute => $attr, class => DateTime, %$args);
   };
@@ -170,7 +190,7 @@ class Action is 'Reaction::UI::ViewPort::Object', which {
         (
          attribute => $attr,
          class     => Array,
-         layout    => 'interface_model/field/mutable/array/hidden',
+         layout    => 'field/mutable/hidden_array',
          %$args);
     }
   };
@@ -186,7 +206,7 @@ class Action is 'Reaction::UI::ViewPort::Object', which {
 
 =head1 NAME
 
-Reaction::UI::ViewPort::InterfaceModel::Action
+Reaction::UI::ViewPort::Action
 
 =head1 SYNOPSIS