{% extends "management/base.html" %} {% load lucide ui i18n %} {% block heading %}{% trans "Members" %}{% endblock heading %} {% block actions %} {% lucide "download" size=14 %} {% trans "Download upload template" %} {% if is_club_admin %} {% lucide "upload" size=14 %} {% trans "Mass upload" %} {% lucide "users" size=14 %} {% trans "Add family" %} {% lucide "user-plus" size=14 %} {% trans "Add member" %} {% endif %} {% endblock actions %} {% block panel %}
{% if selected_kind != "member" %}{% endif %} {# Icon-only below `sm`: label text next to a growing input is what forced this row to wrap on a phone. #} {% if search %} {% lucide "x" size=16 %} {% endif %}
{% comment %} Guardians -- parents attached to the club only through a child -- have no fee and aren't counted as members, so members_visible_to() leaves them out of the default list entirely. Without this filter that's silent: a parent just registered via "Add family"/"Add parent" simply doesn't appear here, with nothing on the page explaining why. ?kind= makes the exclusion an explicit, reversible choice instead. {% endcomment %}
{% trans "Members" %} {% trans "Guardians" %} {% trans "Both" %}
{% trans "Guardians are parents linked only through a child -- no fee, not counted as a member." %}
{# table-cards: below `md` each row reads as a card instead of forcing a horizontal scroll -- see the .table-cards rule in app.css. #}
{% for member in members %} {% empty %} {% endfor %}
{% trans "Name" %} {% trans "Email" %} {% trans "Family" %} {% trans "Status" %}
{{ member.last_name }}, {{ member.first_name }} {{ member.contact_email|default:"-" }} {% if member.family_memberships_display %}
{% for fm in member.family_memberships_display %} {% endfor %}
{% else %} - {% endif %}
{% if member.current_membership %} {{ member.current_membership.get_status_display }} {% else %} {% trans "unknown" %} {% endif %} {% if is_club_admin %}
{% lucide "pencil" size=14 %} {% trans "Edit" %}
{% endif %}
{% trans "No members yet." %}
{% include "management/_pagination.html" %} {% if is_club_admin %} {% trans "Delete member" as delete_member_title %} {% trans "Delete" as delete_label %} {% for member in members %} {% url 'management:member_delete' member.pk as member_delete_url %} {% blocktrans with full_name=member.get_full_name asvar delete_member_body %}Delete {{ full_name }}? This also removes their club membership, roster spots, staff assignments, and family links. This cannot be undone.{% endblocktrans %} {% include "controlpanel/_confirm_modal.html" with modal_id=member.pk|dom_id:"member_delete_modal" title=delete_member_title body=delete_member_body action_url=member_delete_url submit_label=delete_label %} {% endfor %} {% endif %} {% endblock panel %}