diff --git a/src/includes/entrepreneur/resources/list.pug b/src/includes/entrepreneur/resources/list.pug index 8b4f9f94d7d87b33d067ffdfe0f41588a6baa349..fed838249d4d2e61334c56d15fdfeb5b3da3ec01 100644 --- a/src/includes/entrepreneur/resources/list.pug +++ b/src/includes/entrepreneur/resources/list.pug @@ -107,7 +107,7 @@ container.block_list hidden i.fas.fa-spinner.fa-spin - sib-display#circles-list( + sib-display( loader-id="resources-loader-step1" data-src=`${endpoints.steps}1/`, fields='name' @@ -165,7 +165,7 @@ container.block_list //Step 2 div.step - sib-display#circles-list( + sib-display( data-src=`${endpoints.steps}2/`, fields='name' class="accordion" @@ -220,7 +220,7 @@ container.block_list ) div.step - sib-display#circles-list( + sib-display( data-src=`${endpoints.steps}3/`, fields='name' class="accordion" @@ -275,7 +275,7 @@ container.block_list //Step 4 div.step - sib-display#circles-list( + sib-display( data-src=`${endpoints.steps}4/`, fields='name' class="accordion" @@ -332,7 +332,7 @@ container.block_list //Step 5 div.step - sib-display#circles-list( + sib-display( data-src=`${endpoints.steps}5/`, fields='name' class="accordion" @@ -388,7 +388,7 @@ container.block_list //Step 6 div.step - sib-display#circles-list( + sib-display( data-src=`${endpoints.steps}6/`, fields='name' class="accordion" diff --git a/src/includes/mentor/resources/database.pug b/src/includes/mentor/resources/database.pug index bde275f366b6d538e21576d1c38810d8a0141f8b..8ed30ab123fe418e280cef1a76deb2dbaf85f902 100644 --- a/src/includes/mentor/resources/database.pug +++ b/src/includes/mentor/resources/database.pug @@ -99,7 +99,7 @@ container.block_list.flex.flex_espace div#resources-loader-step1-browse-database hidden i.fas.fa-spinner.fa-spin - sib-display#circles-list( + sib-display( loader-id="resources-loader-step1-browse-database" data-src=`${endpoints.steps}1/`, fields='name' @@ -156,7 +156,7 @@ container.block_list.flex.flex_espace //Step 2 div.step - sib-display#circles-list( + sib-display( data-src=`${endpoints.steps}2/`, fields='name' class="accordion" @@ -212,7 +212,7 @@ container.block_list.flex.flex_espace //Step 3 div.step - sib-display#circles-list( + sib-display( data-src=`${endpoints.steps}3/`, fields='name' class="accordion" @@ -269,7 +269,7 @@ container.block_list.flex.flex_espace //Step 4 div.step - sib-display#circles-list( + sib-display( data-src=`${endpoints.steps}4/`, fields='name' class="accordion" @@ -326,7 +326,7 @@ container.block_list.flex.flex_espace //Step 5 div.step - sib-display#circles-list( + sib-display( data-src=`${endpoints.steps}5/`, fields='name' class="accordion" @@ -382,7 +382,7 @@ container.block_list.flex.flex_espace //Step 6 div.step - sib-display#circles-list( + sib-display( data-src=`${endpoints.steps}6/`, fields='name' class="accordion" diff --git a/src/includes/public/resources/list.pug b/src/includes/public/resources/list.pug index 7b95d1a5b168e5712e37c57ede9ce11dbf4f65a7..fd5811cbda7f4cacafc86579ba09fafb6d4fd39a 100644 --- a/src/includes/public/resources/list.pug +++ b/src/includes/public/resources/list.pug @@ -92,7 +92,7 @@ container.block_list.flex.flex_espace div#resources-loader-step1-public hidden i.fas.fa-spinner.fa-spin - sib-display#circles-list( + sib-display( loader-id="resources-loader-step1-public" data-src=`${endpoints.steps}1/`, fields='name' @@ -150,7 +150,7 @@ container.block_list.flex.flex_espace //Step 2 div.step - sib-display#circles-list( + sib-display( data-src=`${endpoints.steps}2/`, fields='name' class="accordion" @@ -207,7 +207,7 @@ container.block_list.flex.flex_espace //Step 3 div.step - sib-display#circles-list( + sib-display( data-src=`${endpoints.steps}3/`, fields='name' class="accordion" @@ -264,7 +264,7 @@ container.block_list.flex.flex_espace //Step 4 div.step - sib-display#circles-list( + sib-display( data-src=`${endpoints.steps}4/`, fields='name' class="accordion" @@ -322,7 +322,7 @@ container.block_list.flex.flex_espace //Step 5 div.step - sib-display#circles-list( + sib-display( data-src=`${endpoints.steps}5/`, fields='name' class="accordion" @@ -378,7 +378,7 @@ container.block_list.flex.flex_espace ) //Step 6 div.step - sib-display#circles-list( + sib-display( data-src=`${endpoints.steps}6/`, fields='name' class="accordion" diff --git a/src/scripts/coopstarter.js b/src/scripts/coopstarter.js index e521a25344fb099f0c042eb28309a6dadc00f949..204c8850302179dad945367254ba86d3a9409d08 100644 --- a/src/scripts/coopstarter.js +++ b/src/scripts/coopstarter.js @@ -184,7 +184,8 @@ function selectHiddenManagement(select_hidden, option_selected) { //Removing the selected attribute from previous selection option_hidden.removeAttribute("selected"); if (option_hidden.value == option_selected.value) { - + option_hidden.setAttribute("selected", "selected"); + select_hidden.setAttribute("value", option_selected.value); //Actually selecting the option if it is the good one select_hidden.value = option_selected.value; break; @@ -235,6 +236,8 @@ function selectHiddenManagementForType(tab, form) { //Actually selecting the option if it is the good one option_hidden.setAttribute("selected", "selected"); select_hidden.setAttribute("value", option_hidden.value); + select_hidden.value = option_hidden.value; + break; } } @@ -257,26 +260,30 @@ function InitManagementForType() { forms.forEach(form => { form.addEventListener("populate", e => { - let type_hidden_field = form.querySelectorAll('select[name="type"]'); - type_hidden_field.forEach(function(select_hidden) { - options_hidden = select_hidden.getElementsByTagName("option"); - for (let option_hidden of options_hidden) { - option_hidden.removeAttribute("selected"); - str = option_hidden.value - - if (str.substr(str.length - 10) == 'types/1/"}') { - //Actually selecting the option if it is the good one - option_hidden.setAttribute("selected", "selected"); - select_hidden.setAttribute("value", option_hidden.value); + setTimeout(function() { + let type_hidden_field = form.querySelectorAll('select[name="type"]'); + type_hidden_field.forEach(function(select_hidden) { + options_hidden = select_hidden.getElementsByTagName("option"); + for (let option_hidden of options_hidden) { + option_hidden.removeAttribute("selected"); + str = option_hidden.value + + if (str.substr(str.length - 10) == 'types/1/"}') { + //Actually selecting the option if it is the good one + option_hidden.setAttribute("selected", "selected"); + select_hidden.setAttribute("value", option_hidden.value); + select_hidden.value = option_hidden.value; + break; + } } - } - - //Trigerring a reload of the associated form - let parent_form = select_hidden.closest("sib-form"); - parent_form.component.inputChange(); - parent_form.dispatchEvent(new CustomEvent('formChange')); - refreshPagination(); - }); + + //Trigerring a reload of the associated form + let parent_form = select_hidden.closest("sib-form"); + parent_form.component.inputChange(); + parent_form.dispatchEvent(new CustomEvent('formChange')); + refreshPagination(); + }); + }, 3000); }); }); } @@ -477,6 +484,35 @@ async function refreshRequestList(formId, listId) { }); } +/** + * Generic method to add filters events listeners to hidden search forms + * @param {String} baseElement - Id of the sumitted form + * @param {Element} filterForm - Id of the list to refresh + * @param {String} fieldName - Id of the list to refresh + */ +function addEventListenersToSearchFormFields(baseElement, filterForm, fieldName) { + //To retrieve format + setTimeout(function() { + let filter_field = filterForm.querySelector( + `select[name="${fieldName}"]` + ); + if (filter_field) { + filter_field.addEventListener('change', function() { + let option_selected = filter_field.querySelector( + "option:checked" + ); + let hidden_fields = baseElement.querySelectorAll( + `hidden-widget[name="more_criterias_hidden"] select[name="${fieldName}"]` + ); + + hidden_fields.forEach(function(select_hidden) { + selectHiddenManagement(select_hidden, option_selected); + }); + }); + } + }, 5000); +} + /** * For entrepreneur dashboard only : * As we cannot have multiple imbricated filtering with the native sib-display, we manage it manually. @@ -484,172 +520,78 @@ async function refreshRequestList(formId, listId) { */ function addProperFilterToSearchComponents(targetId) { var baseElement = document.getElementById(targetId); + + // Adding default type management var forms = baseElement.querySelectorAll(".resource_by_step"); forms.forEach(form => { form.addEventListener("populate", e => { - //Manage the pagination - refreshPagination(); - - //SEARCH BY KEYWORD - //To retrieve keyword - //https://git.happy-dev.fr/startinblox/framework/sib-core/issues/379 - //TODO: Wait for a solution to filter with multiple value with "OR" instead of "AND". - let keyword_form = baseElement.querySelectorAll(".search-by-keyword")[0]; - let keyword_field = keyword_form.querySelector( - `input[name="name_keyword"]` - ); - - if (keyword_field) { - let keyword_submit = baseElement.querySelectorAll(" .keyword_submit")[0]; - let keyword_hidden_fields = baseElement.querySelectorAll( - 'hidden-widget[name="search_for_a_resource"] input' - ); - - keyword_submit.addEventListener("click", function() { - keyword_hidden_fields.forEach(hidden_field => { - hidden_field.setAttribute("value", keyword_field.value); - hidden_field.value = keyword_field.value; - - let parent_form = hidden_field.closest("sib-form"); - parent_form.component.inputChange(); - parent_form.dispatchEvent(new CustomEvent('formChange')); - refreshPagination(); - }); + let tabs = baseElement.getElementsByClassName("filter_by_type"); + for (let tab of tabs) { + tab.addEventListener("click", function() { + selectHiddenManagementForType(tab, form); }); } + }); + }); + + //MORE CRITERIAS + const more_criterias_form = baseElement.querySelectorAll( + ".more_criterias" + )[0]; + more_criterias_form.addEventListener("populate", e => { + //SEARCH BY KEYWORD + //To retrieve keyword + //https://git.happy-dev.fr/startinblox/framework/sib-core/issues/379 + //TODO: Wait for a solution to filter with multiple value with "OR" instead of "AND". + let keyword_form = baseElement.querySelectorAll(".search-by-keyword")[0]; + let keyword_field = keyword_form.querySelector( + `input[name="name_keyword"]` + ); - //SEARCH IN DATABASE INSTANCE ONLY - let instance_only = baseElement.querySelectorAll( - ".instance_database_only" - )[0]; - if (instance_only) { - let checkbox_instance_only = instance_only.querySelector("input"); - if (checkbox_instance_only) { - checkbox_instance_only.onclick = function() { - if (this.checked) { - //We have to retrieve all data-scr needed to make them pointed only on the instance. - //How to? - } - }; - } - } - - - //MORE CRITERIAS - const more_criterias_form = baseElement.querySelectorAll( - ".more_criterias" - )[0]; - - // https://git.happy-dev.fr/startinblox/framework/sib-core/issues/453 - window.setTimeout(() => { - //Manage fake tabs for type - let tabs = baseElement.getElementsByClassName("filter_by_type"); - for (let tab of tabs) { - tab.addEventListener("click", function() { - selectHiddenManagementForType(tab, form); - }); - } - - //To retrieve format - let format_field_search = more_criterias_form.querySelector( - `select[name="format"]` - ); - let format_hidden_field = baseElement.querySelectorAll( - 'hidden-widget[name="more_criterias_hidden"] select[name="format"]' - ); - - //TODO: The first time the event is not call. - if (format_field_search) { - format_field_search.onchange = function() { - let option_selected = format_field_search.querySelector( - "option:checked" - ); - - format_hidden_field.forEach(function(select_hidden) { - selectHiddenManagement(select_hidden, option_selected); - }); - }; - } - - //To retrieve language - let language_field_search = more_criterias_form.querySelector( - `select[name="language"]` - ); - let language_hidden_field = baseElement.querySelectorAll( - 'hidden-widget[name="more_criterias_hidden"] select[name="language"]' - ); - - if (language_field_search) { - language_field_search.onchange = function() { - let option_selected = language_field_search.querySelector( - "option:checked" - ); - - language_hidden_field.forEach(function(select_hidden) { - selectHiddenManagement(select_hidden, option_selected); - }); - }; - } + if (keyword_field) { + let keyword_submit = baseElement.querySelectorAll(" .keyword_submit")[0]; + let keyword_hidden_fields = baseElement.querySelectorAll( + 'hidden-widget[name="search_for_a_resource"] input' + ); - //To retrieve field - let field_field_search = more_criterias_form.querySelector( - `select[name="fields"]` - ); - let field_hidden_field = baseElement.querySelectorAll( - 'hidden-widget[name="more_criterias_hidden"] select[name="fields"]' - ); + keyword_submit.addEventListener("click", function() { + keyword_hidden_fields.forEach(hidden_field => { + hidden_field.setAttribute("value", keyword_field.value); + hidden_field.value = keyword_field.value; - if (field_field_search) { - field_field_search.onchange = function() { - let option_selected = field_field_search.querySelector( - "option:checked" - ); + let parent_form = hidden_field.closest("sib-form"); + parent_form.component.inputChange(); + parent_form.dispatchEvent(new CustomEvent('formChange')); + refreshPagination(); + }); + }); + } - field_hidden_field.forEach(function(select_hidden) { - selectHiddenManagement(select_hidden, option_selected); - }); - }; - } + // https://git.happy-dev.fr/startinblox/framework/sib-core/issues/453 + //Manage fake tabs for type + addEventListenersToSearchFormFields(baseElement, more_criterias_form, 'format'); + addEventListenersToSearchFormFields(baseElement, more_criterias_form, 'languages'); + addEventListenersToSearchFormFields(baseElement, more_criterias_form, 'fields'); + addEventListenersToSearchFormFields(baseElement, more_criterias_form, 'country'); + + //To retrieve year of publication + //WARNING: If the user want to select "20" to get 21century made, he will get no result. + //I think it is a UX problem. + let year_field_search = more_criterias_form.querySelector( + `input[name="publication_year"]` + ); - //To retrieve year of publication - //WARNING: If the user want to select "20" to get 21century made, he will get no result. - //I think it is a UX problem. - let year_field_search = more_criterias_form.querySelector( - `input[name="publication_year"]` - ); + if (year_field_search) { + year_field_search.addEventListener("input", function() { let year_hidden_fields = baseElement.querySelectorAll( 'hidden-widget[name="more_criterias_hidden"] input[name="publication_year"]' ); - if (year_field_search) { - year_field_search.addEventListener("input", function() { - year_hidden_fields.forEach(field => { - inputHiddenManagement(field, year_field_search, form); - }); - }); - } - - //To retrieve the country - let country_field_search = more_criterias_form.querySelector( - `select[name="country"]` - ); - let country_hidden_fields = baseElement.querySelectorAll( - 'hidden-widget[name="more_criterias_hidden"] select[name="country"]' - ); - - if (country_field_search) { - country_field_search.onchange = function() { - let option_selected = country_field_search.querySelector( - "option:checked" - ); - - country_hidden_fields.forEach(function(select_hidden) { - selectHiddenManagement(select_hidden, option_selected); - }); - }; - } - }, 1000); - }); + year_hidden_fields.forEach(field => { + inputHiddenManagement(field, year_field_search, form); + }); + }); + } }); } @@ -696,7 +638,7 @@ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXX ON LOAD XXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX*/ -jQuery(document).ready(function($) { +document.addEventListener("DOMContentLoaded", event => { Sentry.init({ dsn: 'https://a95ca890079d4602a2096a64ca56c9d3@o383270.ingest.sentry.io/5213278' }); window.addEventListener('requestNavigation', function(e) {