179 lines
8.7 KiB
JavaScript
179 lines
8.7 KiB
JavaScript
//exports.render_event_session_records = async function () {
|
|
async function render_event_session_records() {
|
|
console.log('Rendering event session records...');
|
|
|
|
// First: update or add sessions
|
|
tbl_event_session.iterate(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.');
|
|
|
|
// *** ** * 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_event_session_'+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 node = document.createElement('LI');
|
|
node.id = 'menu_event_session_'+value.id;
|
|
node.className = 'list-group-item btn btn-info d-flex justify-content-between align-items-center btn_view_session';
|
|
node.setAttribute('data-session_id', value.id);
|
|
|
|
node.title = 'id='+value.id+' session_id='+value.id;
|
|
|
|
let text_node = document.createTextNode(value.name);
|
|
|
|
node.appendChild(text_node);
|
|
|
|
document.getElementById('sessions_menu').getElementsByTagName('ul')[0].appendChild(node);
|
|
}
|
|
|
|
let session_startdatetime = new Date(value.start_datetime);
|
|
|
|
// *** ** * 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;
|
|
console.log(document.getElementById('detail_session_'+value.id).getElementsByTagName('h2')[0]);
|
|
document.getElementById('detail_session_'+value.id).getElementsByTagName('h2')[0].getElementsByTagName('span')[0].innerHTML = dateFns.format(session_startdatetime, 'ddd h:mm A');
|
|
} else {
|
|
// Add the new session to the launcher sessions list
|
|
let div_node = document.createElement('DIV');
|
|
div_node.id = 'detail_session_'+value.id;
|
|
div_node.className = 'container d-none session_detail event_session';
|
|
div_node.setAttribute('data-session_id', value.id);
|
|
|
|
let h2_node = document.createElement('H2');
|
|
h2_node.className = 'session_title d-flex justify-content-between align-items-center';
|
|
|
|
// NOTE: Instead of a text node should this just be wrapped in a set of tags?
|
|
// Updating this is kind of awkward... see above
|
|
let h2_text_node = document.createTextNode(value.name);
|
|
h2_node.appendChild(h2_text_node);
|
|
|
|
let h2_span_node = document.createElement('SPAN');
|
|
h2_span_node.className = 'badge badge-pill badge-info';
|
|
|
|
let h2_span_text_node = document.createTextNode(dateFns.format(session_startdatetime, 'ddd h:mm A'));
|
|
h2_span_node.appendChild(h2_span_text_node);
|
|
|
|
h2_node.appendChild(h2_span_node);
|
|
|
|
div_node.appendChild(h2_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_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_node.appendChild(presentations_div_node);
|
|
|
|
|
|
document.getElementById('launcher_sessions').appendChild(div_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'));
|
|
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
|
|
}
|
|
});
|
|
}
|
|
}
|
|
});
|
|
|
|
// Third: re-index view session buttons
|
|
// NOTE: Should this go in a .then() section?
|
|
// NOTE: It might make even more sense to only have this done individually per add. Should also do a remove to keep things clean.
|
|
//index_launcher_sessions('btn_view_session');
|
|
index_launcher_sessions('btn_view_session');
|
|
|
|
}
|