[UI][PLUGIN][Directory] Add UI for Directory listing ordering. This uses a GET parameter, which subits the field in order_by and the operator in order_op. Using order_by=filed^ is still supported

This commit is contained in:
Hugo Sales 2022-01-02 20:11:44 +00:00 committed by Diogo Peralta Cordeiro
parent 6cfb69d64b
commit ea5a4df1a4
No known key found for this signature in database
GPG Key ID: 18D2D35001FBFAB0
2 changed files with 25 additions and 21 deletions

View File

@ -8,9 +8,14 @@
<div> <div>
<p>{% trans %}Sort by:{% endtrans %}</p> <p>{% trans %}Sort by:{% endtrans %}</p>
{% for option in sort_options %} <form method="GET">
<a {{ option.active ? 'class="active"' : '' }} href="{{ option.url }}">{{ option.label }}</a> {% for field in sort_form_fields %}
<label for="order_by_{{ field.value }}">{{ field.label }}</label>
<input id="order_by_{{ field.value }}" type="radio" name="order_by" value="{{ field.value }}" {% if field.checked %}checked="checked"{% endif %}>
{% endfor %} {% endfor %}
<button type="submit" name="order_op" value="ASC">{% trans %}Ascending{% endtrans %}</button>
<button type="submit" name="order_op" value="DESC">{% trans %}Descending{% endtrans %}</button>
</form>
</div> </div>
<div class="section-padding"> <div class="section-padding">

View File

@ -31,7 +31,7 @@ use App\Util\Exception\ClientException;
use Component\Collection\Util\Controller\CircleController; use Component\Collection\Util\Controller\CircleController;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
class Directory extends FeedController class Directory extends CircleController
{ {
public const PER_PAGE = 32; public const PER_PAGE = 32;
public const ALLOWED_FIELDS = ['nickname', 'created', 'modified', 'activity', 'subscribers']; public const ALLOWED_FIELDS = ['nickname', 'created', 'modified', 'activity', 'subscribers'];
@ -62,7 +62,11 @@ class Directory extends FeedController
$order_by_op = 'ASC'; $order_by_op = 'ASC';
} else { } else {
$order_by_field = $order_by_qs; $order_by_field = $order_by_qs;
$order_by_op = 'ASC'; $order_by_op = match ($this->string('order_op')) {
'ASC' => 'ASC',
'DESC' => 'DESC',
default => 'ASC',
};
} }
if (!\in_array($order_by_field, self::ALLOWED_FIELDS)) { if (!\in_array($order_by_field, self::ALLOWED_FIELDS)) {
@ -129,17 +133,12 @@ class Directory extends FeedController
}; };
// -------- *** -------- // -------- *** --------
$sort_options = []; $sort_form_fields = [];
foreach (self::ALLOWED_FIELDS as $al) { foreach (self::ALLOWED_FIELDS as $al) {
$sort_options[] = [ $sort_form_fields[] = [
'active' => false, 'checked' => $order_by_field === $al,
'url' => '?order_by=' . $al . '^', 'value' => $al,
'label' => _m('{order_by} ascending', ['{order_by}' => ucfirst($al)]), 'label' => _m(ucfirst($al)),
];
$sort_options[] = [
'active' => false,
'url' => '?order_by=' . $al . 'v',
'label' => _m('{order_by} descending', ['{order_by}' => ucfirst($al)]),
]; ];
} }
@ -148,7 +147,7 @@ class Directory extends FeedController
'actors' => $query_fn($actor_type), 'actors' => $query_fn($actor_type),
'title' => $title, 'title' => $title,
'empty_message' => $empty_message, 'empty_message' => $empty_message,
'sort_options' => $sort_options, 'sort_form_fields' => $sort_form_fields,
'page' => $page, 'page' => $page,
]; ];
} }