--- trunk/lib/Strix/View/User.pm 2008/07/10 21:17:43 91 +++ trunk/lib/Strix/View/User.pm 2008/07/11 13:11:36 97 @@ -9,9 +9,43 @@ use Moose; -extends 'Continuity::Widget'; +#extends 'Continuity::Widget'; +extends 'Frey::Web::Button'; #with 'BonusTypes'; +use Moose::Util::TypeConstraints; + +enum 'Render_as' => qw( view edit none ); +has _render_as => ( is => 'rw', isa => 'Render_as', required => 1, default => 'view' ); + +has _fey => ( + is => 'rw', + label => 'Fey object', + isa => 'Strix::User', +); + +enum 'Layouts' => qw( div table columns ); +has _layout => ( + is => 'rw', + isa => 'Layouts', + default => 'div', + required => 1, +); + +sub render_iterator { + confess "BACKWARD INCOMATIBLE CHANGE: render_iterator works ONLY with 2 params!" unless $#_ == 1; + my ($self, $iterator) = @_; + my %attrmap = %{ $self->meta->get_attribute_map }; + my $out; + while( my ($name, $attr) = each %attrmap ) { + my $reader = $attr->get_read_method; + my $val = $self->$reader || ''; + my $field_name = $self->field_name($name); + $out .= $iterator->( $name, $field_name, $attr->label, $val ) || ''; # || '' to shut warnings + } + return $out; +} + sub edit_delete_buttons { my $self = shift; @@ -23,7 +57,8 @@ my $out = $self->render_edit; my $f = $self->next($out); my $hash = $self->set_from_hash($f); - $self->_fey->update( %$hash ); + warn "# Edit/Save hash = ",dump( $hash ); + $self->_fey->update( %$hash ) if $hash; $self->rename_button( 'Save' => 'Edit' ); $self->delete_button; }); @@ -33,11 +68,10 @@ sub delete_button { my $self = shift; $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! + $self->next( qq|