/** * @fileoverview Manages room member functionality and permissions. * This file handles: * - User selection interface using Select2 * - Room member permissions management * - Auto-saving permission changes */ /** * Initializes room member functionality when the document is ready. * Sets up: * - Select2 dropdown for user selection with Bootstrap 5 theme * - Auto-save functionality for permission changes * @function */ document.addEventListener('DOMContentLoaded', function() { // Initialize Select2 $('.select2').select2({ theme: 'bootstrap-5' }); // Log when a member is added to the room const addMemberForm = document.querySelector('form[action*="/add_member"]'); if (addMemberForm) { addMemberForm.addEventListener('submit', function(e) { const formData = new FormData(this); const userId = formData.get('user_id'); const roomId = this.action.split('/rooms/')[1].split('/add_member')[0]; fetch('/api/events/log', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-CSRFToken': document.querySelector('meta[name="csrf-token"]').getAttribute('content') }, body: JSON.stringify({ event_type: 'room_join', details: { room_id: roomId, user_id: userId, timestamp: new Date().toISOString() } }) }); }); } // Log when a member is removed from the room const removeMemberForms = document.querySelectorAll('form[action*="/remove_member"]'); removeMemberForms.forEach(form => { form.addEventListener('submit', function(e) { const roomId = this.action.split('/rooms/')[1].split('/remove_member')[0]; const userId = this.action.split('/users/')[1]; fetch('/api/events/log', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-CSRFToken': document.querySelector('meta[name="csrf-token"]').getAttribute('content') }, body: JSON.stringify({ event_type: 'room_leave', details: { room_id: roomId, user_id: userId, timestamp: new Date().toISOString() } }) }); }); }); // Log when member permissions are updated const permissionForms = document.querySelectorAll('.auto-save-perms-form'); permissionForms.forEach(form => { form.addEventListener('change', function(e) { const roomId = this.action.split('/rooms/')[1].split('/update_member_permissions')[0]; const userId = this.action.split('/users/')[1]; const formData = new FormData(this); fetch('/api/events/log', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-CSRFToken': document.querySelector('meta[name="csrf-token"]').getAttribute('content') }, body: JSON.stringify({ event_type: 'room_member_permissions_update', details: { room_id: roomId, user_id: userId, permissions: { can_view: formData.get('can_view') === '1', can_download: formData.get('can_download') === 'on', can_upload: formData.get('can_upload') === 'on', can_delete: formData.get('can_delete') === 'on', can_rename: formData.get('can_rename') === 'on', can_move: formData.get('can_move') === 'on', can_share: formData.get('can_share') === 'on' }, timestamp: new Date().toISOString() } }) }); }); }); });