Improved Feedback list page
This commit is contained in:
parent
4beb26a0a4
commit
c3519fa4df
5 changed files with 61 additions and 8 deletions
|
@ -36,6 +36,7 @@ sub startup {
|
||||||
$self->plugin('Pear::LocalLoop::Plugin::BootstrapPagination', { bootstrap4 => 1 } );
|
$self->plugin('Pear::LocalLoop::Plugin::BootstrapPagination', { bootstrap4 => 1 } );
|
||||||
$self->plugin('Pear::LocalLoop::Plugin::Validators');
|
$self->plugin('Pear::LocalLoop::Plugin::Validators');
|
||||||
$self->plugin('Pear::LocalLoop::Plugin::Datetime');
|
$self->plugin('Pear::LocalLoop::Plugin::Datetime');
|
||||||
|
$self->plugin('Pear::LocalLoop::Plugin::TemplateHelpers');
|
||||||
|
|
||||||
$self->plugin('Authentication' => {
|
$self->plugin('Authentication' => {
|
||||||
'load_user' => sub {
|
'load_user' => sub {
|
||||||
|
|
|
@ -9,8 +9,15 @@ has result_set => sub {
|
||||||
sub index {
|
sub index {
|
||||||
my $c = shift;
|
my $c = shift;
|
||||||
|
|
||||||
my $feedback_rs = $c->result_set;
|
my $feedback_rs = $c->result_set->search(
|
||||||
$c->stash( feedbacks => [ $feedback_rs->all ] );
|
undef,
|
||||||
|
{
|
||||||
|
page => $c->param('page') || 1,
|
||||||
|
rows => 12,
|
||||||
|
order_by => { -desc => 'submitted_at' },
|
||||||
|
},
|
||||||
|
);
|
||||||
|
$c->stash( feedback_rs => $feedback_rs );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub read {
|
sub read {
|
||||||
|
|
|
@ -6,6 +6,17 @@ use DateTime::Format::Strptime;
|
||||||
sub register {
|
sub register {
|
||||||
my ( $plugin, $app, $conf ) = @_;
|
my ( $plugin, $app, $conf ) = @_;
|
||||||
|
|
||||||
|
$app->helper( human_datetime_parser => sub {
|
||||||
|
return DateTime::Format::Strptime->new( pattern => '%x %X' );
|
||||||
|
});
|
||||||
|
|
||||||
|
$app->helper( format_human_datetime => sub {
|
||||||
|
my ( $c, $datetime_obj ) = @_;
|
||||||
|
return $c->human_datetime_parser->format_datetime(
|
||||||
|
$datetime_obj,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
$app->helper( iso_datetime_parser => sub {
|
$app->helper( iso_datetime_parser => sub {
|
||||||
return DateTime::Format::Strptime->new( pattern => '%Y-%m-%dT%H:%M:%S.%3N%z' );
|
return DateTime::Format::Strptime->new( pattern => '%Y-%m-%dT%H:%M:%S.%3N%z' );
|
||||||
});
|
});
|
||||||
|
|
18
lib/Pear/LocalLoop/Plugin/TemplateHelpers.pm
Normal file
18
lib/Pear/LocalLoop/Plugin/TemplateHelpers.pm
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
package Pear::LocalLoop::Plugin::TemplateHelpers;
|
||||||
|
use Mojo::Base 'Mojolicious::Plugin';
|
||||||
|
|
||||||
|
sub register {
|
||||||
|
my ( $plugin, $app, $conf ) = @_;
|
||||||
|
|
||||||
|
$app->helper( truncate_text => sub {
|
||||||
|
my ( $c, $string, $length ) = @_;
|
||||||
|
if ( length $string < $length ) {
|
||||||
|
return $string;
|
||||||
|
} else {
|
||||||
|
return substr( $string, 0, $length - 3 ) . '...';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
|
@ -11,12 +11,28 @@
|
||||||
<strong>Success!</strong> <%= $success %>
|
<strong>Success!</strong> <%= $success %>
|
||||||
</div>
|
</div>
|
||||||
% }
|
% }
|
||||||
<div class="list-group">
|
<div class="row">
|
||||||
% for my $feedback (@$feedbacks) {
|
% for my $feedback ( $feedback_rs->all ) {
|
||||||
<a href="<%= url_for . '/' . $feedback->id %>" class="list-group-item list-group-item-action">
|
<div class="col col-md-4 mb-3">
|
||||||
<div>
|
<div class="card">
|
||||||
<%= $feedback->user->email %> <%= $feedback->submitted_at %>
|
<div class="card-block">
|
||||||
|
<h6 class="card-title">
|
||||||
|
%= format_human_datetime $feedback->submitted_at;
|
||||||
|
</h6>
|
||||||
|
<h6 class="card-subtitle mb-2 text-muted">
|
||||||
|
%= $feedback->user->email;
|
||||||
|
</h6>
|
||||||
|
<pre class="card-text"><%= truncate_text $feedback->feedbacktext => 50; %></pre>
|
||||||
|
<a href="<%= url_for . '/' . $feedback->id %>" class="card-link">
|
||||||
|
More info
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</div>
|
||||||
% }
|
% }
|
||||||
</div>
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
%= bootstrap_pagination( $c->param('page') || 1, $feedback_rs->pager->last_page, { class => 'justify-content-center' } );
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
Reference in a new issue