Files
OSIT-AE-App-Native-Electron/app/js/app_ui_sessions.js

266 lines
13 KiB
JavaScript

//exports.render_event_session_records = async function () {
async function render_event_session_records() {
console.log('****************** Sessions ******************');
console.log('Rendering event session records...');
if (looping_tbl_event_session) {
console.log('Already looping through the tbl_event_session table. Not starting until finished.');
return false;
} else {
}
looping_tbl_event_session = true;
// First: update or add sessions
result = tbl_event_session.iterate(await function(value, key, iteration) {
if (value.event_id == event_id && value.event_location_id == event_location_id) {
console.log('*** Event session id ('+value.id+') is part of this event location.');
let session_startdatetime = new Date(value.start_datetime);
// *** ** * Checking if the session is already in the launcher menu * ** ***
if (document.getElementById('menu_event_session_'+value.id)) {
// Update the session menu list item
document.getElementById('menu_session_name_'+value.id).innerHTML = value.name;
} else {
// Unhide the sessions menu
if (document.getElementById('sessions_menu').classList.contains('d-none') ) {
document.getElementById('sessions_menu').classList.remove('d-none');
document.getElementById('sessions_menu').classList.add('d-block');
}
// Add the new session to the session menu
let li_session_node = document.createElement('LI');
li_session_node.id = 'menu_event_session_'+value.id;
//li_session_node.className = 'list-group-item btn btn-success d-flex justify-content-between align-items-center btn_view_session';
li_session_node.className = 'list-group-item btn btn-success justify-content-between align-items-center btn_view_session';
li_session_node.setAttribute('data-session_id', value.id);
li_session_node.title = 'id='+value.id+' session_id='+value.id;
// Create the session name span
let li_span_name_node = document.createElement('SPAN');
li_span_name_node.id = 'menu_session_name_'+value.id;
li_span_name_node.className = 'd-inline menu_session_name';
let li_span_name_text_node = document.createTextNode(value.name);
li_span_name_node.appendChild(li_span_name_text_node);
// Create the session time span
let span_session_time_string = dateFns.format(session_startdatetime, 'h:mm A');
let li_span_time_node = document.createElement('SPAN');
if ( display_menu_session_times && span_session_time_string ) {
li_span_time_node.className = 'd-inline menu_session_time';
} else {
li_span_time_node.className = 'd-none';
}
let li_span_time_text_node = document.createTextNode(span_session_time_string+': ');
li_span_time_node.appendChild(li_span_time_text_node);
// Create the session code span
let li_span_badge_node = document.createElement('SPAN');
if ( display_session_codes && value.code && value.code.length ) {
li_span_badge_node.className = 'd-inline menu_session_code';
} else {
li_span_badge_node.className = 'd-none';
}
let li_span_badge_text_node = document.createTextNode('('+value.code+')');
li_span_badge_node.appendChild(li_span_badge_text_node);
li_session_node.appendChild(li_span_time_node);
li_session_node.appendChild(li_span_name_node);
li_session_node.appendChild(li_span_badge_node);
document.getElementById('sessions_menu').getElementsByTagName('ul')[0].appendChild(li_session_node);
}
// *** ** * Checking if the session is already in the launcher sessions detail * ** ***
if (document.getElementById('detail_session_'+value.id)) {
// Update the launcher sessions list
// NOTE: Updating this text is very awkward?
//document.getElementById('detail_session_'+value.id).getElementsByTagName('h2')[0].firstChild.data = value.name;
document.getElementById('detail_session_name_'+value.id).innerHTML = value.name;
document.getElementById('detail_session_code_'+value.id).innerHTML = '('+value.code+')';
//console.log(document.getElementById('detail_session_'+value.id).getElementsByTagName('h2')[0]);
document.getElementById('detail_session_badge_'+value.id).innerHTML = dateFns.format(session_startdatetime, 'ddd h:mm A');
} else {
// Add the new session to the launcher sessions list
let div_session_node = document.createElement('DIV');
div_session_node.id = 'detail_session_'+value.id;
div_session_node.className = 'container d-none session_detail event_session';
div_session_node.setAttribute('data-session_id', value.id);
let h2_session_node = document.createElement('H2');
h2_session_node.className = 'session_heading d-flex justify-content-between align-items-center border-bottom border-primary';
//h2_session_node.className = 'detail_session_title justify-content-between align-items-center';
// Group the name and code together for the title
let span_session_title_node = document.createElement('SPAN');
span_session_title_node.className = 'session_title';
// Create the session name span
let span_session_name_node = document.createElement('SPAN');
span_session_name_node.id = 'detail_session_name_'+value.id;
span_session_name_node.className = 'detail_session_name';
let span_session_name_text_node = document.createTextNode('('+value.name+')');
span_session_name_node.appendChild(span_session_name_text_node);
//h2_session_node.appendChild(span_session_name_node);
span_session_title_node.appendChild(span_session_name_node);
// Create the session code span
let span_session_code_node = document.createElement('SPAN');
span_session_code_node.id = 'detail_session_code_'+value.id;
if ( display_session_codes && value.code && value.code.length) {
span_session_code_node.className = 'd-inline detail_session_code';
} else {
span_session_code_node.className = 'd-none detail_session_code';
}
let span_session_code_text_node = document.createTextNode('('+value.code+')');
span_session_code_node.appendChild(span_session_code_text_node);
//h2_session_node.appendChild(span_session_code_node);
span_session_title_node.appendChild(span_session_code_node);
h2_session_node.appendChild(span_session_title_node);
let span_session_badge_node = document.createElement('SPAN');
span_session_badge_node.id = 'detail_session_badge_'+value.id;
if (display_session_badges) {
span_session_badge_node.className = 'badge badge-pill badge-info d-inline';
} else {
span_session_badge_node.className = 'badge badge-pill badge-info d-none';
}
let span_session_badge_text_node = document.createTextNode(dateFns.format(session_startdatetime, 'ddd h:mm A'));
span_session_badge_node.appendChild(span_session_badge_text_node);
h2_session_node.appendChild(span_session_badge_node);
div_session_node.appendChild(h2_session_node);
// Add placeholder cards for session files and session presentations
// Files
let files_div_node = document.createElement('DIV');
files_div_node.id = 'event_session_files_'+value.id;
files_div_node.className = 'card session_files';
let files_header_div_node = document.createElement('DIV');
files_header_div_node.className = 'card-header';
let files_header_text_node = document.createTextNode('Session Files:');
files_header_div_node.appendChild(files_header_text_node);
let files_body_div_node = document.createElement('DIV');
files_body_div_node.className = 'card-body';
let files_body_ul_node = document.createElement('UL');
files_body_ul_node.id = 'session_files_list_'+value.id;
files_body_ul_node.className = 'list-group list-group-flush session_files_list event_files_list';
files_body_div_node.appendChild(files_body_ul_node);
files_div_node.appendChild(files_header_div_node);
files_div_node.appendChild(files_body_div_node);
div_session_node.appendChild(files_div_node);
// Presentations
let presentations_div_node = document.createElement('DIV');
presentations_div_node.id = 'session_presentations_'+value.id;
presentations_div_node.className = 'card session_presentations';
let presentations_header_div_node = document.createElement('DIV');
presentations_header_div_node.className = 'card-header';
let presentations_header_text_node = document.createTextNode('Presentations:');
presentations_header_div_node.appendChild(presentations_header_text_node);
let presentations_body_div_node = document.createElement('DIV');
presentations_body_div_node.className = 'card-body';
let presentations_body_ul_node = document.createElement('UL');
presentations_body_ul_node.id = 'session_presentations_list_'+value.id;
presentations_body_ul_node.className = 'list-group list-group-flush session_presentations_list';
presentations_body_ul_node.setAttribute('data-session_id', value.id);
presentations_body_div_node.appendChild(presentations_body_ul_node);
presentations_div_node.appendChild(presentations_header_div_node);
presentations_div_node.appendChild(presentations_body_div_node);
div_session_node.appendChild(presentations_div_node);
document.getElementById('launcher_sessions').appendChild(div_session_node);
}
} else {
//console.log('Event session not it.');
}
}).then(function() {
console.log('idb_to_ui: Iterate tbl_event_session complete');
//tbl_event_session_complete = true;
}).then(function() {
// Second: remove sessions from the launcher sessions menu and sessions list
// This is basing the removal of sessions only on the menu list of sessions.
// In theory this should be safe as long as nothing gets out sync...
console.log('Looking for removed sessions...');
let session_list_items = document.getElementById('sessions_menu').getElementsByTagName('ul')[0].childNodes;
//console.log(session_list_items);
let session_list = document.getElementById('sessions_menu').getElementsByTagName('ul')[0].children;
if (session_list_items.length) {
for (let i=0, len=session_list_items.length; i < len; i++) {
console.log('Checking session_id='+session_list_items[i].getAttribute('data-session_id'));
looping_tbl_event_session = true;
let session_id = session_list_items[i].getAttribute('data-session_id');
let session_valid = false;
tbl_event_session.iterate(function(value, key, iteration) {
//console.log(value.event_id+' ?= '+event_id+' : '+value.event_location_id+' ?= '+event_location_id+' : '+value.id+' ?= '+session_id);
if (value.event_id == event_id && value.event_location_id == event_location_id && value.id == session_id) {
// The session is still part of the event and the location
session_valid = true;
} else {
// The session is no longer part of the event and or the location
//console.log('Need to remove session id '+session_id);
}
}).then(function() {
console.log('idb_to_ui: Iterate tbl_event_session looking for sessions to remove is complete')
if (session_valid) {
//console.log('Keep session id '+session_id);
} else {
console.log('Remove session id '+session_id);
document.getElementById('menu_event_session_'+session_id).remove(); // Remove the node from the launcher sessions menu list
document.getElementById('detail_session_'+session_id).remove(); // Remove the node from the launcher sessions list
}
looping_tbl_event_session = false;
});
}
}
looping_tbl_event_session = false;
// Third: re-index view session buttons
index_launcher_sessions('btn_view_session');
return true
});
return result;
}