{# The body of a sync's Items panel (sync_detail.html): status chips with counts, one page of the ledger newest first, and the pager. All of it reflects the search box above it, which stays put while this swaps. Served by sync_views.sync_items. #} {% from "macros/local_datetime.html" import local_datetime %} {% from "components/htmx_pagination.html" import htmx_pagination %} {% set url = url_for('sync_items', slug=selected.slug) %} {% set all_count = items.counts.values() | sum %} {% if all_count or search %}
| {{ _("Photo") }} | {{ _("Status") }} | {{ _("In your library") if role == 'source' else _("Sent to") }} | {{ _("Updated") }} |
|---|---|---|---|
| {% if row.media_item_id %} {{ row.label }} {% else %}{{ row.label }}{% endif %} |
{{ row.status_label }}{% if row.sent_as %} ({{ row.sent_as }}){% endif %}
{% if row.error %} {{ row.error }} {% endif %}
|
{{ row.where or '—' }} | {{ local_datetime(row.updated_at) }} |
{{ _("No items match “%(search)s”.", search=search) }}
{% elif all_count %}{{ _("Nothing with this status.") }}
{% else %}{{ _("Nothing yet. Items appear here after the first run.") }}
{% endif %} {# The pager sits outside #sync-items-body (sync_detail.html); this replaces it in place, so it isn't redrawn with the table. Empty when there's nothing to page. #}