- Ya
- 27 Aprili 2026, 21:33 UTC
- Mwandishi
- kamo
- Ahadi ya
- d16d5b9
History tab (SoftphoneHistoryTab.tsx): - Infinite scroll via IntersectionObserver inside the panel's scroll container - Filter chips: All / Inbound / Outbound / Missed / Recorded - Recording icon in row actions when the imaging side has a Recording row - Per-row overflow menu (Add to contacts) - Click-to-call back via existing dialpad Voicemail tab (SoftphoneVoicemailTab.tsx): - Infinite scroll, filter chips (All / Unread / Has audio) - Per-row Play / Call back / More actions - Auto-mark-read on play - Two-option delete dialog: Archive (soft-hide, all users) vs Permanently delete (gated by VOIP_VOICEMAIL_PERMANENT_DELETE right; falls back to disabled state for users without it) - Mark-all-read button with no-op-when-zero affordance MediaPlayer popup tool **************** - Audio: synthesized waveform-style scrubber, click-to-seek, Replay10/Forward10, playback rate (0.5x-2x), loop, volume + mute, output device honored from AV settings - Video: contained viewport, PiP, fullscreen, same scrubber + controls - Multi-track selector for call recordings (master + each per-channel leg) - Download - Two source modes: voipApi recording (call/VM) or imaging asset by imgId - Registered in tools/registry/registrations.ts as multi-instance Hook + plumbing: - useSoftphone exposes paginated history + voicemails (loadMore, hasMore, isLoading) and archive/permanent-delete actions - voipApi gains lookupRecordings, getRecordingMetadata, archiveVoicemail, paginated getVoicemails - /api/voip proxy passes audio/video/octet-stream bodies through with **************** intact (no buffering) so media elements scrub - New **************** forwards to DocsService's new streaming endpoint with Range - VOIP_VOICEMAIL_PERMANENT_DELETE added to the frontend RoleRightType registry so checkRight gates the delete UI