rclass stuff ripped out of everything but widget classes
[catagits/Reaction.git] / lib / Reaction / UI / ViewPort / Field / Mutable / DateTime.pm
index 71428e5..27181f5 100644 (file)
@@ -4,32 +4,25 @@ use Reaction::Class;
 use Time::ParseDate;
 use DateTime;
 
-class 'Reaction::UI::ViewPort::Field::Mutable::DateTime',
-  is 'Reaction::UI::ViewPort::Field::DateTime', which {
-
-  does 'Reaction::UI::ViewPort::Field::Role::Mutable';
-
-  has value_string =>
-    ( is => 'rw', isa => 'Str', lazy_build => 1, trigger_adopt('value_string') );
-
-  implements adopt_value_string => as {
-    my ($self) = @_;
-    my $value = $self->value_string;
-    my ($epoch) = Time::ParseDate::parsedate($value);
-    if (defined $epoch) {
-      my $dt = 'DateTime'->from_epoch( epoch => $epoch );
-      $self->value($dt);
-    } else {
-      $self->message("Could not parse date or time");
-      $self->clear_value;
-      $self->needs_sync(1);
-    }
-  };
-
-  around accept_events => sub { ('value_string', shift->(@_)) };
-
+use namespace::clean -except => [ qw(meta) ];
+extends 'Reaction::UI::ViewPort::Field::DateTime';
+
+with 'Reaction::UI::ViewPort::Field::Role::Mutable::Simple';
+sub adopt_value_string {
+  my ($self) = @_;
+  my $value = $self->value_string;
+  my ($epoch) = Time::ParseDate::parsedate($value);
+  if (defined $epoch) {
+    my $dt = 'DateTime'->from_epoch( epoch => $epoch );
+    $self->value($dt);
+  } else {
+    $self->value($self->value_string);
+  }
 };
 
+__PACKAGE__->meta->make_immutable;
+
+
 1;