Skip to content

Commit 23c57c8

Browse files
committed
Missed some bits
1 parent 7ccc6ac commit 23c57c8

9 files changed

Lines changed: 288 additions & 185 deletions

astra_app/core/static/core/js/membership_requests_datatables.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -449,6 +449,10 @@
449449
return document.getElementById(section === 'pending' ? 'membership-requests-pending-pager' : 'membership-requests-on-hold-pager');
450450
}
451451

452+
function sectionCountElement(section) {
453+
return document.getElementById(section === 'pending' ? 'membership-requests-pending-count' : 'membership-requests-on-hold-count');
454+
}
455+
452456
function tableBodyElement(tableSelector) {
453457
return document.querySelector(tableSelector + ' tbody');
454458
}
@@ -468,6 +472,31 @@
468472
}
469473
}
470474

475+
function updateSectionCount(section, count) {
476+
var countElement = sectionCountElement(section);
477+
if (!countElement) {
478+
return;
479+
}
480+
countElement.innerHTML = (section === 'pending' ? 'Pending: ' : 'On hold: ') + String(count);
481+
}
482+
483+
function updatePendingFilterOptions(filterMetadata) {
484+
var filterSelect = document.getElementById('requests-filter');
485+
if (!filterSelect || !filterMetadata || !Array.isArray(filterMetadata.options)) {
486+
return;
487+
}
488+
489+
filterSelect.innerHTML = filterMetadata.options.map(function (option) {
490+
var selected = option && option.value === filterMetadata.selected ? ' selected' : '';
491+
return '<option value="' + escapeHtml(option.value || '') + '"' + selected + '>' +
492+
escapeHtml(option.label || '') + ' (' + escapeHtml(option.count || 0) + ')</option>';
493+
}).join('');
494+
495+
if (filterMetadata.selected) {
496+
filterSelect.value = String(filterMetadata.selected);
497+
}
498+
}
499+
471500
function paginationWindow(totalPages, currentPage) {
472501
if (totalPages <= 10) {
473502
return {
@@ -898,6 +927,10 @@
898927
throw new Error((result.payload && result.payload.error) || 'Failed to load membership requests.');
899928
}
900929
callback(result.payload);
930+
updateSectionCount(section, Number(result.payload.recordsFiltered || 0));
931+
if (section === 'pending') {
932+
updatePendingFilterOptions(result.payload.pending_filter);
933+
}
901934
var tbody = tableBodyElement(tableSelector);
902935
if (!tbody) return;
903936
var rows = result.payload.data || [];

astra_app/core/templates/core/membership_requests.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,14 +77,14 @@ <h1 class="m-0">Membership Requests</h1>
7777
>
7878
{% for option in filter_options %}
7979
<option value="{{ option.value }}"{% if option.value == selected_filter %} selected{% endif %}>
80-
{{ option.label }} ({{ option.count }})
80+
{{ option.label }}{% if option.count != '' %} ({{ option.count }}){% endif %}
8181
</option>
8282
{% endfor %}
8383
</select>
8484
</form>
8585
</div>
8686

87-
<div class="text-muted">Pending: {{ pending_count }}</div>
87+
<div class="text-muted" id="membership-requests-pending-count">Pending: {{ pending_count }}</div>
8888
</div>
8989
</div>
9090

@@ -150,7 +150,7 @@ <h3 class="mt-4 mb-2">Waiting for requester response</h3>
150150
</div>
151151
</form>
152152

153-
<div class="text-muted">On hold: {{ on_hold_count }}</div>
153+
<div class="text-muted" id="membership-requests-on-hold-count">On hold: {{ on_hold_count }}</div>
154154
</div>
155155
</div>
156156

astra_app/core/templatetags/core_membership_notes.py

Lines changed: 28 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -671,7 +671,7 @@ def _render_membership_notes_aggregate(
671671
membership_can_change = bool(context.get("membership_can_change", False))
672672
membership_can_delete = bool(context.get("membership_can_delete", False))
673673
can_write = membership_can_add or membership_can_change or membership_can_delete
674-
resolved_notes = list(notes or [])
674+
resolved_notes = None if notes is None else list(notes)
675675

676676
dummy_request = SimpleNamespace(pk=_timeline_dom_id(dom_key))
677677

@@ -713,32 +713,34 @@ def _render_membership_notes_aggregate(
713713
note_summary_url = reverse("api-membership-notes-aggregate-summary") + "?" + aggregate_note_query
714714
note_detail_url = reverse("api-membership-notes-aggregate") + "?" + aggregate_note_query
715715

716-
votes_by_user = last_votes(resolved_notes)
717-
approvals = sum(1 for vote in votes_by_user.values() if vote == "approve")
718-
disapprovals = sum(1 for vote in votes_by_user.values() if vote == "disapprove")
719-
current_responses_by_request_id = _membership_request_responses_by_id(resolved_notes)
720-
request_resubmitted_new_snapshots_by_note_id = _request_resubmitted_new_snapshots_by_note_id(
721-
resolved_notes,
722-
current_responses_by_request_id=current_responses_by_request_id,
723-
)
724-
preloaded_users_by_username = _preloaded_aggregate_avatar_users_by_username(
725-
context=context,
726-
notes=resolved_notes,
727-
http_request=http_request,
728-
aggregate_target_user=aggregate_target_user,
729-
)
730-
groups = _group_timeline_entries(
731-
_timeline_entries_for_notes(
716+
has_fallback_content = resolved_notes is not None
717+
if resolved_notes is not None:
718+
votes_by_user = last_votes(resolved_notes)
719+
approvals = sum(1 for vote in votes_by_user.values() if vote == "approve")
720+
disapprovals = sum(1 for vote in votes_by_user.values() if vote == "disapprove")
721+
current_responses_by_request_id = _membership_request_responses_by_id(resolved_notes)
722+
request_resubmitted_new_snapshots_by_note_id = _request_resubmitted_new_snapshots_by_note_id(
732723
resolved_notes,
733-
current_username=_current_username_from_request(http_request),
734-
request_resubmitted_new_snapshots_by_note_id=request_resubmitted_new_snapshots_by_note_id,
735-
avatar_users_by_username=_aggregate_avatar_users_by_username(
724+
current_responses_by_request_id=current_responses_by_request_id,
725+
)
726+
preloaded_users_by_username = _preloaded_aggregate_avatar_users_by_username(
727+
context=context,
728+
notes=resolved_notes,
729+
http_request=http_request,
730+
aggregate_target_user=aggregate_target_user,
731+
)
732+
groups = _group_timeline_entries(
733+
_timeline_entries_for_notes(
736734
resolved_notes,
737-
preloaded_users_by_username=preloaded_users_by_username,
738-
),
735+
current_username=_current_username_from_request(http_request),
736+
request_resubmitted_new_snapshots_by_note_id=request_resubmitted_new_snapshots_by_note_id,
737+
avatar_users_by_username=_aggregate_avatar_users_by_username(
738+
resolved_notes,
739+
preloaded_users_by_username=preloaded_users_by_username,
740+
),
741+
)
739742
)
740-
)
741-
note_count = len(resolved_notes)
743+
note_count = len(resolved_notes)
742744

743745
html = render_to_string(
744746
"core/_membership_notes.html",
@@ -752,7 +754,7 @@ def _render_membership_notes_aggregate(
752754
"current_user_vote": None,
753755
"can_vote": False,
754756
"can_write": can_write,
755-
"has_fallback_content": True,
757+
"has_fallback_content": has_fallback_content,
756758
"details_loaded": False,
757759
"post_url": post_url,
758760
"aggregate_target_type": aggregate_target_type,
@@ -781,10 +783,9 @@ def _membership_notes_aggregate_for_target(
781783
if not membership_can_view:
782784
return ""
783785

784-
notes = list(Note.objects.filter(**notes_filter).order_by("timestamp", "pk"))
785786
return _render_membership_notes_aggregate(
786787
context=context,
787-
notes=notes,
788+
notes=None,
788789
dom_key=dom_key,
789790
compact=compact,
790791
next_url=next_url,

0 commit comments

Comments
 (0)