mekari-ui-toolkit
Version:
Mekari ui toolkit
160 lines (130 loc) • 6.92 kB
JavaScript
import $ from 'jquery'; // Create js for init dropdown
var dropdownInit = function dropdownInit() {
// find dropdown with pill class
var $wrapperDropdownPill = $('.dropdown-with-pill'); // find dropdown with select class
var $wrapperDropdownSelect = $('.dropdown-with-select'); // find dropdown with search class
var $dropdownWithSearch = $('.dropdown-action--search'); // Init first load. If $wrapperDropdownPill exist, display all selected option in pill
$wrapperDropdownPill.each(function () {
var $selectedOptions = $(this).find('.dropdown-selected-list');
var $menuList = $(this).find('.dropdown-menu-list');
var $selectNameHidden = $menuList.attr('data-select-name');
var $arrayListSelected = $(this).find('.dropdown-menu .is-selected').map(function () {
return $(this).attr("data-val");
}).get();
if (!$selectedOptions.length) {
$(this).append("<div class='dropdown-selected-list'></div>");
$selectedOptions = $(this).find('.dropdown-selected-list');
} // insert all selected options to pill
for (var _iterator = $arrayListSelected, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
var _ref;
if (_isArray) {
if (_i >= _iterator.length) break;
_ref = _iterator[_i++];
} else {
_i = _iterator.next();
if (_i.done) break;
_ref = _i.value;
}
var item = _ref;
var $itemId = $(this).find(".dropdown-item[data-val='" + item + "']").attr('data-id');
$selectedOptions.append("<span class='badge badge-smoke' data-id='" + $itemId + "' data-val='" + item + "'>" + item + " <i class='ic ic-reset'></i></span><input type='hidden' value='" + $itemId + "' name='" + $selectNameHidden + "'>");
} // find all dropdown pill and set listener for delete
var $pillList = $('.dropdown-with-pill .badge .ic');
removePill($pillList); // listen to DomInserted in dropdown-menu-list
$menuList.bind("DOMNodeInserted", function (e) {
if (e.target !== $menuList[0]) {
e.target.addEventListener('click', activateThisItem);
}
});
}); // Init first load. If $wrapperDropdownSelect exist, display selected option & append input hidden
$wrapperDropdownSelect.each(function () {
var $menuList = $(this).find('.dropdown-menu-list');
var $selectNameHidden = $menuList.attr('data-select-name');
var $optionSelected = $(this).find('.dropdown-menu .is-selected');
var $itemId = $optionSelected.attr('data-id');
var $itemVal = $optionSelected.text(); // display selected option & append input hidden
if ($itemVal) {
$(this).find('.dropdown-toggle').html($itemVal);
$(this).append("<div class='dropdown-selected-list'><input type='hidden' value='" + $itemId + "' name='" + $selectNameHidden + "'></div>");
} else {
$(this).append("<div class='dropdown-selected-list'><input type='hidden' value='' name='" + $selectNameHidden + "'></div>");
}
}); // find all options
var $dropdownPillItems = $('.dropdown-with-pill .dropdown-item');
var $dropdownSelectItems = $('.dropdown-with-select .dropdown-item'); // Add 'is-selected' in dropdown menu when option is selected
$dropdownPillItems.click(activateThisItem);
$dropdownSelectItems.click(activateThisItem); // Init search dropdown. If $dropdownWithSearch exist, listen when keydown
$dropdownWithSearch.each(function () {
var $inputSearch = $(this).find("input[type='text']");
var $dropdownMenu = $inputSearch.closest('.dropdown-menu');
$inputSearch.keyup(function (e) {
var $arrayListOptions = $dropdownMenu.find('.dropdown-menu-list .dropdown-item').not('.text-link');
var $searchText = e.currentTarget.value.toLocaleLowerCase();
$arrayListOptions.each(function () {
if (!$(this).text().toLocaleLowerCase().includes($searchText)) {
$(this).addClass('d-none');
} else {
$(this).removeClass('d-none');
}
}); // find all option with hiden ('d-none') class
var $hiddenOpt = $dropdownMenu.find('.dropdown-menu-list .dropdown-item.d-none').not('.text-link');
var $notFound = $dropdownMenu.find('span.dropdown-not-found');
if ($hiddenOpt.length === $arrayListOptions.length) {
if ($notFound.length) {
$notFound.removeClass('d-none');
} else {
$dropdownMenu.append("<span class=\"dropdown-not-found\">No data found</span>");
}
} else {
$notFound.addClass('d-none');
}
});
});
};
var removePill = function removePill(item) {
// remove pill and class is-selected in dropdown menu when button 'x' is clicked
item.click(function () {
var $badge = $(this).closest('.badge');
var $val = $badge.attr('data-val');
var $itemId = $badge.attr('data-id');
$badge.closest('.dropdown-selected-list').find("input[value='" + $itemId + "']").remove();
$badge.closest('.dropdown-with-pill').find(".is-selected[data-val='" + $val + "']").removeClass('is-selected');
$badge.remove();
});
};
var activateThisItem = function activateThisItem() {
var $this = $(event.currentTarget);
var $dropdownType;
if ($this.closest('.dropdown').hasClass('dropdown-with-select')) {
$dropdownType = '.dropdown-with-select';
} else if ($this.closest('.dropdown').hasClass('dropdown-with-pill')) {
$dropdownType = '.dropdown-with-pill';
}
if (!$this.hasClass('dropdown-action')) {
var $wrapperDropdown = $this.closest($dropdownType);
var $selectedOptions = $wrapperDropdown.find('.dropdown-selected-list'); // remove selected class in all options
if ($dropdownType == '.dropdown-with-select') {
$wrapperDropdown.find('.dropdown-item').removeClass('is-selected');
} // add selected class
$this.addClass('is-selected');
var $itemId = $this.attr('data-id');
var $selectNameHidden = $wrapperDropdown.find('.dropdown-menu-list').attr('data-select-name');
if ($dropdownType == '.dropdown-with-pill') {
// adding pill
var $val = $this.attr('data-val');
$selectedOptions.append("<span class='badge badge-smoke' data-id='" + $itemId + "' data-val='" + $val + "'>" + $val + "<i class='ic ic-reset'></i></span> <input type='hidden' value='" + $itemId + "' name='" + $selectNameHidden + "'>");
var $pill = $selectedOptions.find(".badge[data-val='" + $val + "'] .ic");
removePill($pill);
} else if ($dropdownType == '.dropdown-with-select') {
// adding selected value & input hidden
$wrapperDropdown.find('.dropdown-toggle').addClass('selected').html($this.text());
$selectedOptions.html("<input type='hidden' value='" + $itemId + "' name='" + $selectNameHidden + "'>");
}
}
;
};
$(document).ready(function () {
dropdownInit();
});
export default dropdownInit;
//# sourceMappingURL=mekari-ui-dropdown.js.map