9 |
|
|
10 |
use Moose; |
use Moose; |
11 |
|
|
12 |
extends 'Continuity::Widget'; |
#extends 'Continuity::Widget'; |
13 |
|
extends 'Frey::Web::Button'; |
14 |
#with 'BonusTypes'; |
#with 'BonusTypes'; |
15 |
|
|
16 |
|
has _render_as => ( is => 'rw', isa => 'Str', required => 1, default => 'view' ); |
17 |
|
|
18 |
|
sub render_iterator { |
19 |
|
confess "BACKWARD INCOMATIBLE CHANGE: render_iterator works ONLY with 2 params!" unless $#_ == 1; |
20 |
|
my ($self, $iterator) = @_; |
21 |
|
my %attrmap = %{ $self->meta->get_attribute_map }; |
22 |
|
my $out; |
23 |
|
while( my ($name, $attr) = each %attrmap ) { |
24 |
|
my $reader = $attr->get_read_method; |
25 |
|
my $val = $self->$reader || ''; |
26 |
|
my $field_name = $self->field_name($name); |
27 |
|
$out .= $iterator->( $name, $field_name, $attr->label, $val ) || ''; # || '' to shut warnings |
28 |
|
} |
29 |
|
return $out; |
30 |
|
} |
31 |
|
|
32 |
sub edit_delete_buttons { |
sub edit_delete_buttons { |
33 |
my $self = shift; |
my $self = shift; |
34 |
|
|
40 |
my $out = $self->render_edit; |
my $out = $self->render_edit; |
41 |
my $f = $self->next($out); |
my $f = $self->next($out); |
42 |
my $hash = $self->set_from_hash($f); |
my $hash = $self->set_from_hash($f); |
43 |
#warn "# Edit/Save hash = ",dump( $hash ); |
warn "# Edit/Save hash = ",dump( $hash ); |
44 |
$self->_fey->update( %$hash ) if $hash; |
$self->_fey->update( %$hash ) if $hash; |
45 |
$self->rename_button( 'Save' => 'Edit' ); |
$self->rename_button( 'Save' => 'Edit' ); |
46 |
$self->delete_button; |
$self->delete_button; |
54 |
print STDERR "delete ID @{[$self->id]}!\n"; |
print STDERR "delete ID @{[$self->id]}!\n"; |
55 |
$self->_fey->delete; |
$self->_fey->delete; |
56 |
$self->next("Deleted id @{[$self->id]}!"); |
$self->next("Deleted id @{[$self->id]}!"); |
57 |
$self->render_as( 'deleted' ); |
$self->_render_as( 'deleted' ); |
58 |
Strix::Schema->ClearObjectCaches(); # XXX important! |
Strix::Schema->ClearObjectCaches(); # XXX important! |
59 |
}); |
}); |
60 |
} |
} |
73 |
$self->_fey( $u ); |
$self->_fey( $u ); |
74 |
# put ID in widget, so that it know it's not new |
# put ID in widget, so that it know it's not new |
75 |
$self->id( $u->id ); |
$self->id( $u->id ); |
76 |
$self->render_as( 'view' ); |
$self->_render_as( 'view' ); |
77 |
$self->edit_delete_buttons; |
$self->edit_delete_buttons; |
78 |
$self->remove_button( 'Add' ); |
$self->remove_button( 'Add' ); |
79 |
}); |
}); |
85 |
|
|
86 |
while(1) { |
while(1) { |
87 |
my $out; |
my $out; |
88 |
if ( $self->render_as eq 'edit' ) { |
if ( $self->_render_as eq 'edit' ) { |
89 |
$out .= $self->render_edit; |
$out .= $self->render_edit; |
90 |
} elsif ( $self->render_as eq 'view' ) { |
} elsif ( $self->_render_as eq 'view' ) { |
91 |
$out .= $self->render_view; |
$out .= $self->render_view; |
92 |
} else { |
} else { |
93 |
warn "no renderer ",dump( $self->render_as ), " skipping..."; |
warn "no renderer ",dump( $self->_render_as ), " skipping..."; |
94 |
} |
} |
95 |
|
|
96 |
warn $@ if $@; |
warn $@ if $@; |