let btn_select_field_all = $('#btn_select_all'), btn_select_field_single = $('#btn_select_one'), btn_unselect_field_all = $('#btn_unselect_all'), btn_unselect_field_single = $('#btn_unselect_one'), select_fields_available = $('#export_available_fields'), select_fields_selected = $('#export_selected_fields') btn_submit_modal_export = $('#modalExportFile_submit'), selected_ids = [] ; function btnManagement(){ let available_options = $('#export_available_fields option'), selected_options = $('#export_selected_fields option'), available_length_selected = $('#export_available_fields option:selected').length, selected_length_selected = $('#export_selected_fields option:selected').length ; if(0 < available_options.length){ $(btn_select_field_all).removeClass('disabled'); } else { $(btn_select_field_all).addClass('disabled'); } if(0 < selected_options.length){ $(btn_unselect_field_all).removeClass('disabled'); $(btn_submit_modal_export).removeClass('disabled'); } else { $(btn_unselect_field_all).addClass('disabled'); $(btn_submit_modal_export).addClass('disabled'); } if(0 < available_length_selected){ $(btn_select_field_single).removeClass('disabled'); } else { $(btn_select_field_single).addClass('disabled'); } if(0 < selected_length_selected){ $(btn_unselect_field_single).removeClass('disabled'); } else { $(btn_unselect_field_single).addClass('disabled'); } $(available_options).unbind('click'); $(available_options).bind('click',function() { btnManagement(); }); $(selected_options).unbind('click'); $(selected_options).bind('click',function() { btnManagement(); }); $(btn_submit_modal_export).unbind('click'); let has_clicked = false $(btn_submit_modal_export).bind('click', function () { if(!has_clicked){ has_clicked = true; let btn_initial_state = $(this).html(); let data = { 'fields':[], 'selection_only': $('#export_selection_only').is(':checked'), 'selected_ids' : selected_ids, 'separator': $('#export_separator').val(), 'charset': $('#export_charset').val(), 'file_format': $('#export_file_format').val(), 'token' : "{{ csrf_token('app_export') }}", 'code_export' : $('#export_code_export').val() } let selected_fields = $('#export_selected_fields option'); $(selected_fields).each(function(){ let value = $(this).val(); data.fields.push(value); }); $(btn_submit_modal_export).html(btn_spin); $.ajax({ url: "{{ url('app_export') }}", data: data, method: 'POST', xhr:function(){ var xhr = new XMLHttpRequest(); xhr.responseType = 'blob' return xhr; }, success: function (response,status, headers) { const regex = /filename=(.*?)$/g let content_disposition = headers.getResponseHeader('Content-Disposition'); let search = regex.exec(content_disposition); const url = window.URL.createObjectURL(response); const a = document.createElement('a'); a.style.display = 'none'; a.href = url; a.download = (search.length >= 1) ? search[1] : 'export.xlsx'; document.body.appendChild(a); a.click(); window.URL.revokeObjectURL(url); $(btn_submit_modal_export).html(btn_initial_state); $('#modalExportFile').foundation('close'); has_clicked = false; } }); } }); } btnManagement(); $(btn_select_field_all).click(function(){ let btn = this; if(!$(btn).hasClass('disabled')){ let available_options = $('#export_available_fields option'); $(available_options).each(function(){ selectOption(this); }); btnManagement(); } }); $(btn_select_field_single).click(function(){ let btn = this; if(!$(btn).hasClass('disabled')){ let available_fields = $('#export_available_fields option:selected'); $(available_fields).each(function(){ selectOption(this); }); btnManagement(); } }); $(btn_unselect_field_all).click(function(){ let btn = this; if(!$(btn).hasClass('disabled')){ let selected_fields = $('#export_selected_fields option'); $(selected_fields).each(function(){ unselectOption(this); }); btnManagement(); } }); $(btn_unselect_field_single).click(function(){ let btn = this; if(!$(btn).hasClass('disabled')){ let selected_fields = $('#export_selected_fields option:selected'); $(selected_fields).each(function(){ unselectOption(this); }); btnManagement(); } }); function selectOption(option){ $(option).detach().appendTo(select_fields_selected); } function unselectOption(option){ $(option).detach().appendTo(select_fields_available); }