resolve unknown/ambiguous stop into list of stops

This commit is contained in:
Birte Kristina Friesel 2023-08-24 21:26:00 +02:00
parent d23283329d
commit d313ca7fc1
No known key found for this signature in database
GPG key ID: 19E6E524EBB177BA
4 changed files with 74 additions and 11 deletions

View file

@ -1074,20 +1074,54 @@ sub station {
)->catch(
sub {
my ( $err, $status ) = @_;
if ($status) {
if ( $status and $status->{suggestions} ) {
$self->render(
'landingpage',
with_autocomplete => 1,
with_geolocation => 1,
error => $status->{errstr},
status => 400,
'disambiguation',
suggestions => $status->{suggestions},
status => 300,
);
}
elsif ( $use_hafas and $status and $status->errcode eq 'LOCATION' )
{
$status->similar_stops_p->then(
sub {
my @suggestions = @_;
if ( @suggestions == 1 ) {
$self->redirect_to(
'/s/' . $suggestions[0]->{id} . '?hafas=1' );
}
else {
$self->render(
'disambiguation',
suggestions => [
map {
{
name => $_->{name},
eva => $_->{id}
}
} @suggestions
],
status => 300,
);
}
}
)->catch(
sub {
my ($err2) = @_;
$self->render(
'exception',
exception =>
"StopFinder threw '$err2' when handling '$err'",
status => 502
);
}
)->wait;
}
else {
$self->render(
'exception',
exception => $err,
status => 500
status => 502
);
}
}

View file

@ -153,10 +153,12 @@ sub get_departures_p {
return Mojo::Promise->reject(
'ambiguous station name',
{
results => [],
errstr =>
"Mehrdeutiger Stationsname: '$station'. Mögliche Eingaben: "
. join( q{, }, map { $_->[1] } @station_matches ),
results => [],
errstr => "Mehrdeutiger Stationsname: '$station'",
suggestions => [
map { { name => $_->[1], eva => $_->[2] } }
@station_matches
],
}
);
}

View file

@ -64,3 +64,10 @@ h3 {
font-size: 16px;
}
}
ul.suggestions {
li {
padding-top: 0.5rem;
padding-bottom: 0.5rem;
}
}

View file

@ -0,0 +1,20 @@
<div class="row">
<div class="col s12">
<div class="card info-color">
<div class="card-content">
<span class="card-title">Mehrdeutige Eingabe</span>
<p>„<%= $station %>“ ist nicht eindeutig. Bitte wähle eine der folgenden Optionen aus.</p>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col s12">
<ul class="suggestions">
% for my $suggestion (@{$suggestions // []}) {
<li><a href="<%= url_for('station' => $suggestion->{eva}) . (param('hafas') ? '?hafas=1' : q{}) %>"><%= $suggestion->{name} %></a></li>
% }
</ul>
</div>
</div>