diff --git a/layouts/v7/modules/Reports/ListViewContents.tpl b/layouts/v7/modules/Reports/ListViewContents.tpl index 40718d5d7ddac995353c8bbf9598d1f79c8af3b7..54c098541333e9d492e54cb293880ae75f0133ce 100644 --- a/layouts/v7/modules/Reports/ListViewContents.tpl +++ b/layouts/v7/modules/Reports/ListViewContents.tpl @@ -73,12 +73,16 @@ </tr> {if $MODULE_MODEL->isQuickSearchEnabled() && !$SEARCH_MODE_RESULTS} - <tr class="searchRow"> - <th class="inline-search-btn"> - <div class="table-actions"> - <button class="btn btn-success btn-sm" data-trigger="listSearch">{vtranslate("LBL_SEARCH",$MODULE)}</button> - </div> - </th> + <tr class="searchRow listViewSearchContainer"> + <th class="inline-search-btn"> + <div class="table-actions"> + <button class="btn-sm btn btn-success {if count($SEARCH_DETAILS) gt 0}hide{/if}" data-trigger="listSearch"> + <i class="fa fa-search"></i> + <span class="s2-btn-text">{vtranslate("LBL_SEARCH",$MODULE)}</span> + </button> + <button class="searchAndClearButton btn-sm btn btn-danger {if count($SEARCH_DETAILS) eq 0}hide{/if}" data-trigger="clearListSearch"><i class="fa fa-close"></i> {vtranslate("LBL_CLEAR",$MODULE)}</button> + </div> + </th> {foreach item=LISTVIEW_HEADER key=LISTVIEW_HEADER_KEY from=$LISTVIEW_HEADERS} <th> {assign var="DATA_TYPE" value=$LISTVIEW_HEADER['type']} diff --git a/layouts/v7/modules/Users/ListViewContents.tpl b/layouts/v7/modules/Users/ListViewContents.tpl index 51a563f18f202041f310b9212dc6f615db04f231..6a1e33cd4873aebbaa21daf5195405a43326eda0 100644 --- a/layouts/v7/modules/Users/ListViewContents.tpl +++ b/layouts/v7/modules/Users/ListViewContents.tpl @@ -63,12 +63,20 @@ </thead> <tbody class="overflow-y"> {if $MODULE_MODEL->isQuickSearchEnabled() && !$SEARCH_MODE_RESULTS} - <tr class="searchRow"> - <th class="inline-search-btn"> - <div class="table-actions"> - <button class="btn btn-success btn-sm" data-trigger="listSearch">{vtranslate("LBL_SEARCH",$MODULE)}</button> - </div> - </th> + <tr class="searchRow listViewSearchContainer"> + <th class="user-inline-search-btn"> + <div class="table-actions"> + {assign var=HIDE_CLEAR_SEARCH value=false} + {if count($SEARCH_DETAILS) eq 0 || (is_array($SEARCH_DETAILS[0]) && count($SEARCH_DETAILS[0]) eq 0 && count($SEARCH_DETAILS) eq 1)} + {assign var=HIDE_CLEAR_SEARCH value=true} + {/if} + <button class="btn btn-sm btn-success {if !$HIDE_CLEAR_SEARCH}hide{/if}" data-trigger="listSearch"> + <i class="fa fa-search"></i> + <span class="s2-btn-text">{vtranslate("LBL_SEARCH",$MODULE)}</span> + </button> + <button class="searchAndClearButton btn btn-danger btn-sm {if $HIDE_CLEAR_SEARCH}hide{/if}" data-trigger="clearListSearch"><i class="fa fa-close"></i> {vtranslate("LBL_CLEAR",$MODULE)}</button> + </div> + </th> {foreach item=LISTVIEW_HEADER from=$LISTVIEW_HEADERS} {if $LISTVIEW_HEADER->getName() eq 'last_name' or $LISTVIEW_HEADER->getName() eq 'email1' or $LISTVIEW_HEADER->getName() eq 'status'} {continue} diff --git a/layouts/v7/modules/Vtiger/ListViewContents.tpl b/layouts/v7/modules/Vtiger/ListViewContents.tpl index f2df599ab72fac2f7a585196fb0aaefedfc24261..fd813e26f3055c384b7b1b6d8bb8fba53f1d7ca8 100644 --- a/layouts/v7/modules/Vtiger/ListViewContents.tpl +++ b/layouts/v7/modules/Vtiger/ListViewContents.tpl @@ -114,13 +114,17 @@ </tr> {if $MODULE_MODEL->isQuickSearchEnabled() && !$SEARCH_MODE_RESULTS} - <tr class="searchRow"> - <th class="inline-search-btn"> - <div class="table-actions"> - <button class="btn btn-success btn-sm" data-trigger="listSearch">{vtranslate("LBL_SEARCH",$MODULE)}</button> - </div> - </th> - {foreach item=LISTVIEW_HEADER from=$LISTVIEW_HEADERS} + <tr class="searchRow listViewSearchContainer"> + <th class="inline-search-btn"> + <div class="table-actions"> + <button class="btn btn-success btn-sm {if count($SEARCH_DETAILS) gt 0}hide{/if}" data-trigger="listSearch"> + <i class="fa fa-search"></i> + <span class="s2-btn-text">{vtranslate("LBL_SEARCH",$MODULE)}</span> + </button> + <button class="searchAndClearButton t-btn-sm btn btn-danger {if count($SEARCH_DETAILS) eq 0}hide{/if}" data-trigger="clearListSearch"><i class="fa fa-close"></i> {vtranslate("LBL_CLEAR",$MODULE)}</button> + </div> + </th> + {foreach item=LISTVIEW_HEADER from=$LISTVIEW_HEADERS} <th> {assign var=FIELD_UI_TYPE_MODEL value=$LISTVIEW_HEADER->getUITypeModel()} {include file=vtemplate_path($FIELD_UI_TYPE_MODEL->getListSearchTemplateName(),$MODULE) FIELD_MODEL= $LISTVIEW_HEADER SEARCH_INFO=$SEARCH_DETAILS[$LISTVIEW_HEADER->getName()] USER_MODEL=$CURRENT_USER_MODEL} diff --git a/layouts/v7/modules/Vtiger/resources/List.js b/layouts/v7/modules/Vtiger/resources/List.js index 4f8c8b5c77849395c8e47f199cc228b2f7c681bf..d6928a66c82539b8238c5b05b74786257f3991d0 100644 --- a/layouts/v7/modules/Vtiger/resources/List.js +++ b/layouts/v7/modules/Vtiger/resources/List.js @@ -1258,48 +1258,104 @@ Vtiger.Class("Vtiger_List_Js", { }); }); }, - /** - * Function to register the list view row search event - */ - registerListViewSearch: function () { - var listViewPageDiv = this.getListViewContainer(); - var thisInstance = this; - listViewPageDiv.on('click', '[data-trigger="listSearch"]', function (e) { - e.preventDefault(); - var params = { - 'page': '1' - } - thisInstance.loadListViewRecords(params).then( - function (data) { - //To unmark the all the selected ids - jQuery('#deSelectAllMsgDiv').trigger('click'); - }, - function (textStatus, errorThrown) { + prevSearchValues : [], + + /** + * Function to register the list view row search event + */ + registerListViewSearch : function() { + var listViewPageDiv = this.getListViewContainer(); + var thisInstance = this; + listViewPageDiv.on('click','[data-trigger="listSearch"]',function(e){ + e.preventDefault(); + var params = { + 'page': '1' + } + var searchButton = jQuery(this); + searchButton.addClass('hide'); + listViewPageDiv.find('[data-trigger="clearListSearch"]').removeClass('hide'); + + thisInstance.loadListViewRecords(params).then( + function(data){ + //To unmark the all the selected ids + jQuery('#deSelectAllMsgDiv').trigger('click'); + }, + + function(textStatus, errorThrown){ + } + ); + }); + + var clearSearchContributor = function(contributor) { + if(contributor.is('input')) { + contributor.val(''); + } else if(contributor.is('select')) { + contributor.select2("val", ""); + contributor.val(''); + } else { + console.log("contributor clearing now handled : ", contributor); + } + }; + + //register clear search event + listViewPageDiv.on('click', '[data-trigger="clearListSearch"]', function(e) { + e.preventDefault(); + listViewPageDiv.find('.listSearchContributor:not(".select2-container")').each(function(i, contributor) { + contributor = jQuery(contributor); + clearSearchContributor(contributor); + }); + var clearButton = jQuery(this); + clearButton.addClass('hide'); + thisInstance.prevSearchValues = []; + jQuery('#currentSearchParams').val(''); + listViewPageDiv.find('[data-trigger="listSearch"]').removeClass('hide').trigger('click'); + }); + + + //floatThead change event object has undefined keyCode, using keyup instead + var listSearchContributorChangeHandler = function(e){ + var element = jQuery(e.currentTarget); + var fieldName = element.attr('name'); + var searchValue = element.val(); + if(element.hasClass('select2')){ + var currentElementContainer = element.closest('.select2_search_div').find('div.listSearchContributor').find('ul'); + var desireHeight = 150; + if(currentElementContainer.height() > desireHeight){ + currentElementContainer.css({'cssText':'height:'+desireHeight+'px !important;'+'padding:0'}); + }else if(currentElementContainer.find('.mCSB_container').height() < desireHeight){ + currentElementContainer.removeAttr('style'); } - ); - }); - - //floatThead change event object has undefined keyCode, using keyup instead - var prevSearchValues = []; - listViewPageDiv.on('keyup', '.listSearchContributor', function (e) { - var element = jQuery(e.currentTarget); - var fieldName = element.attr('name'); - var searchValue = element.val(); - if (e.keyCode == 13 && prevSearchValues[fieldName] !== searchValue) { - e.preventDefault(); - var element = jQuery(e.currentTarget); - var parentElement = element.closest('tr'); - var searchTriggerElement = parentElement.find('[data-trigger="listSearch"]'); - searchTriggerElement.trigger('click'); - prevSearchValues[fieldName] = searchValue; - } - }); - - listViewPageDiv.on('datepicker-change', '.dateField', function (e) { - var element = jQuery(e.currentTarget); - element.trigger('change'); - }); - }, + currentElementContainer.mCustomScrollbar("update"); + } + + if(e.keyCode == 13 && thisInstance.prevSearchValues[fieldName] !== searchValue && !element.hasClass('select2')){ + e.preventDefault(); + var element = jQuery(e.currentTarget); + var parentElement = element.closest('tr'); + var searchTriggerElement = parentElement.find('[data-trigger="listSearch"]'); + searchTriggerElement.trigger('click'); + thisInstance.prevSearchValues[fieldName] = searchValue; + } + if(e.keyCode !== 13) { + listViewPageDiv.find('[data-trigger="clearListSearch"]').addClass('hide'); + setTimeout(function(){ + listViewPageDiv.find('[data-trigger="listSearch"]').removeClass('hide'); + }, 10); + } + }; + listViewPageDiv.find('.searchRow div.listSearchContributor.select2').each(function(i,elem){ + var currentSearchInput = jQuery(elem); + app.helper.showVerticalScroll(currentSearchInput.find('ul'),{'height': 150}); + }); + listViewPageDiv.on('keyup','.listSearchContributor', listSearchContributorChangeHandler); + listViewPageDiv.on('change','select', listSearchContributorChangeHandler); + listViewPageDiv.on('datepicker-change', '.dateField', function(e){ + var element = jQuery(e.currentTarget); + element.trigger('change'); + listSearchContributorChangeHandler(e); + }); + }, + saveMassedit: function (event, form_original_data, isOwnerChanged) { event.preventDefault(); var form = $('#massEdit'); diff --git a/pkg/vtiger/modules/RecycleBin/layouts/v7/modules/RecycleBin/ListViewContents.tpl b/pkg/vtiger/modules/RecycleBin/layouts/v7/modules/RecycleBin/ListViewContents.tpl index 9c53f01be7f0f7d0daa1c4ecf5b59bd26cf8a264..817a191c94bcf0bddc88fa0253790bb3c973f901 100644 --- a/pkg/vtiger/modules/RecycleBin/layouts/v7/modules/RecycleBin/ListViewContents.tpl +++ b/pkg/vtiger/modules/RecycleBin/layouts/v7/modules/RecycleBin/ListViewContents.tpl @@ -65,11 +65,15 @@ </tr> {if $MODULE_MODEL->isQuickSearchEnabled() && !$SEARCH_MODE_RESULTS} - <tr class="searchRow"> + <tr class="searchRow listViewSearchContainer"> <th class="inline-search-btn"> - <div class="table-actions"> - <button class="btn btn-success btn-sm" data-trigger="listSearch">{vtranslate("LBL_SEARCH",$MODULE)}</button> - </div> + <div class="table-actions"> + <button class="btn btn-sm btn-success {if count($SEARCH_DETAILS) gt 0}hide{/if}" data-trigger="listSearch"> + <i class="fa fa-search"></i> + <span class="s2-btn-text">{vtranslate("LBL_SEARCH",$MODULE)}</span> + </button> + <button class="searchAndClearButton btn btn-sm btn-danger {if count($SEARCH_DETAILS) eq 0}hide{/if}" data-trigger="clearListSearch"><i class="fa fa-close"></i> {vtranslate("LBL_CLEAR",$MODULE)}</button> + </div> </th> {foreach item=LISTVIEW_HEADER from=$LISTVIEW_HEADERS} <th>