--- trunk/lib/Strix/View/User.pm 2008/07/08 12:22:16 63 +++ trunk/lib/Strix/View/User.pm 2008/07/10 10:33:04 79 @@ -1,5 +1,7 @@ package Strix::View::User; +use Data::Dump qw/dump/; + use metaclass 'Moose::Meta::Class' => ( attribute_metaclass => 'Continuity::Meta::Attribute::FormField' ); @@ -9,15 +11,111 @@ extends 'Continuity::Widget'; #with 'BonusTypes'; +sub main { + my ( $self ) = @_; + + if ( ! $self->_fey ) { + $self->add_button( 'Add' => sub { + warn "## Add button callback ",dump( @_ ); + my $f = shift; +# my $out = $self->render_edit; +# my $f = $self->next($out); + warn "## my uuid ",$self->uuid; + $self->set_from_hash($f, sub { + warn "## inside set_from_hash ",dump( @_ ); + my $hash = shift || die "no hash?"; + delete( $hash->{id} ); # FIXME clear primary key +# $hash->{id} = undef; + my $u = Strix::User->insert( %$hash ); + warn "Inserted ",$u->id; + $self->_fey( $u ); + $self->render_as( 'view' ); + }); + }); + } + + warn "# _fey = ",dump( $self->_fey ); + + if ( $self->_fey ) { + + $self->add_button( 'Edit' => sub { + my $out = $self->render_edit; + my $f = $self->next($out); + $self->set_from_hash($f, sub { + warn "## inside set_from_hash ",dump( @_ ); + my $hash = shift || die "no hash?"; + $self->_fey->update( %$hash ); + }); + }); + + $self->add_button('Delete' => sub { + print STDERR "delete ID @{[$self->id]}!\n"; + $self->_fey->delete; + $self->next("Deleted id @{[$self->id]}!"); + $self->render_as( 'deleted' ); + Strix::Schema->ClearObjectCaches(); # XXX important! + }); + + } + + while(1) { + my $out; + if ( $self->render_as eq 'edit' ) { + $out = $self->render_iterator( + qq|
|, + sub { + #warn "# edit render_iterator ",dump( @_ ); + my ( $name, $field_name, $label, $val ) = @_; + return if $name =~ /^_/; + return qq| +
+
$label
+
+ +
+
+ |; + }, + qq|
| + ); + } elsif ( $self->render_as eq 'view' ) { + $out = $self->render_iterator( + qq|
|, + sub { + #warn "# view render_iterator ",dump( @_ ); + my ( $name, $field_name, $label, $val ) = @_; + return if $name =~ /^_/; + return qq| +
+
$label
+
$val
+
+
+ |; + }, + qq|| + ); + } else { + warn "no renderer ",dump( $self->render_as ), " skipping..."; + } + + warn $@ if $@; + my $f = $self->next($out); + $self->set_from_hash($f); + $self->exec_buttons($f); + } +}; + use Data::Dump qw/dump/; use Strix::User; - my $m = Strix::User->meta; foreach ( $m->get_attribute_list ) { - warn ">> $_\n"; my $attr = $m->get_attribute( $_ ); + warn ">> $_\n"; + + # FIXME primary key would have to be read-only! has $_ => ( is => $attr->_is_metadata, @@ -27,9 +125,15 @@ } -has foo => ( +has _foo => ( is => 'rw', label => 'Foo', ); +has _fey => ( + is => 'rw', + label => 'Fey object', + isa => 'Strix::User', +); + 1;