Files
docupulse/static/js/room-members.js
2025-05-29 14:27:15 +02:00

107 lines
4.2 KiB
JavaScript

/**
* @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()
}
})
});
});
});
});