//exports.render_event_session_records = async function () { async function render_event_session_records() { 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 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_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 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_name_node); li_session_node.appendChild(li_span_badge_node); document.getElementById('sessions_menu').getElementsByTagName('ul')[0].appendChild(li_session_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; 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 // 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'); }