Refine Jitsi participant copy

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
Scott Idem
2026-05-06 14:39:45 -04:00
parent 25e35f6f96
commit e64252b839
2 changed files with 37 additions and 34 deletions

View File

@@ -533,7 +533,7 @@ Shown above the meeting list when data is loaded. Stats reflect the **filtered +
- **Total Duration** — sum of all session durations (HH:MM:SS) - **Total Duration** — sum of all session durations (HH:MM:SS)
In grouped view, each room header also shows its own subtotals (meeting count, unique participants by Novi UUID when available). In grouped view, each room header also shows its own subtotals (meeting count, unique participants by Novi UUID when available).
Each meeting instance now includes a **Copy names** button so staff can grab the full participant list for pasting into follow-up reports. Each meeting instance keeps the full participant list visible; the **Copy names** button is edit-mode only so staff can grab the list for follow-up reports without exposing extra controls to normal viewers.
### Caching / Load Behavior ### Caching / Load Behavior

View File

@@ -811,7 +811,6 @@ function export_json() {
{@const mods = m.real_participants.filter((p) => p.role === 'moderator')} {@const mods = m.real_participants.filter((p) => p.role === 'moderator')}
{@const others = m.real_participants.filter((p) => p.role !== 'moderator')} {@const others = m.real_participants.filter((p) => p.role !== 'moderator')}
{@const all_names = m.real_participants.map((p) => `${p.displayName} (${p.role})`).join('\n')} {@const all_names = m.real_participants.map((p) => `${p.displayName} (${p.role})`).join('\n')}
{@const participant_copy_text = build_participant_copy_text(m.real_participants)}
<tr <tr
class="border-surface-200-800 hover:bg-surface-100-900 border-b transition-colors duration-200"> class="border-surface-200-800 hover:bg-surface-100-900 border-b transition-colors duration-200">
<td <td
@@ -861,6 +860,7 @@ function export_json() {
{others.map((p) => p.displayName).join(', ')} {others.map((p) => p.displayName).join(', ')}
</div> </div>
{/if} {/if}
{#if $ae_loc.edit_mode}
<button <button
type="button" type="button"
onclick={() => onclick={() =>
@@ -877,6 +877,7 @@ function export_json() {
? 'Copied' ? 'Copied'
: 'Copy names'} : 'Copy names'}
</button> </button>
{/if}
</div> </div>
{/if} {/if}
</td> </td>
@@ -1050,6 +1051,7 @@ function export_json() {
class="text-xs tracking-wide uppercase opacity-40"> class="text-xs tracking-wide uppercase opacity-40">
Final Participants ({meeting.real_participant_count}) Final Participants ({meeting.real_participant_count})
</div> </div>
{#if $ae_loc.edit_mode}
<button <button
type="button" type="button"
onclick={() => onclick={() =>
@@ -1066,6 +1068,7 @@ function export_json() {
? 'Copied' ? 'Copied'
: 'Copy names'} : 'Copy names'}
</button> </button>
{/if}
</div> </div>
{#if meeting.real_participants && meeting.real_participants.length > 0} {#if meeting.real_participants && meeting.real_participants.length > 0}
<table class="w-full text-sm"> <table class="w-full text-sm">