<div class="acl-filter-drawer__container" style="width: 500px;">
<div class="acl-filter-drawer">
<div class="acl-filter-drawer__button">
<div class="acl-filter-drawer__button-label">Filter <span class="acl-filter-drawer__selected-count"></span>
</div>
</div>
<div class="acl-filter-drawer__drawer" data-expanded="false">
<div class="acl-filter-drawer__drawer-header">
<div class="acl-filter-drawer__drawer-header-text">
Search the filters for your search results
</div>
<div class="acl-filter-drawer__drawer-close-button">
<i class="aforza-icons">acl_close_small</i>
</div>
</div>
<div class="acl-filter-drawer__chips">
<div class="acl-selectable-chips">
</div>
</div>
</div>
</div>
</div>
<script>
const filterDrawerEl = document.querySelector('.acl-filter-drawer');
const filters = [{
id: 'filter01',
name: "Big",
selected: 'true'
},
{
id: 'filter02',
name: "Medium",
selected: 'false'
},
{
id: 'filter03',
name: "Small",
selected: 'false'
},
{
id: 'filter04',
name: "Xsmall",
selected: 'false'
},
{
id: 'filter05',
name: "Supermarket",
selected: 'false'
},
{
id: 'filter06',
name: "Petrol Station",
selected: 'true'
},
];
const filterDrawer = new acl.ACLFilterDrawer(filterDrawerEl, filters);
const selectableChipsEl = document.querySelector('.acl-selectable-chips');
selectableChipsEl.addEventListener('selectedchips',
function(e) {
console.log('Selected Chips Array Change:');
console.log(e.detail);
}, false);
selectableChipsEl.addEventListener('selectedchipcount',
function(e) {
console.log('Selected Chip Count:' + e.detail);
}, false);
</script>
<div class="acl-filter-drawer__container" style="width: 500px;">
<div class="acl-filter-drawer">
<div class="acl-filter-drawer__button">
<div class="acl-filter-drawer__button-label">Filter <span class="acl-filter-drawer__selected-count"></span>
</div>
</div>
<div class="acl-filter-drawer__drawer" data-expanded="false">
<div class="acl-filter-drawer__drawer-header">
<div class="acl-filter-drawer__drawer-header-text">
Search the filters for your search results
</div>
<div class="acl-filter-drawer__drawer-close-button">
<i class="aforza-icons">acl_close_small</i>
</div>
</div>
<div class="acl-filter-drawer__chips">
<div class="acl-selectable-chips">
</div>
</div>
</div>
</div>
</div>
<script>
const filterDrawerEl = document.querySelector('.acl-filter-drawer');
const filters = [
{ id: 'filter01', name: "Big", selected: 'true' },
{ id: 'filter02', name: "Medium", selected: 'false' },
{ id: 'filter03', name: "Small", selected: 'false' },
{ id: 'filter04', name: "Xsmall", selected: 'false' },
{ id: 'filter05', name: "Supermarket", selected: 'false' },
{ id: 'filter06', name: "Petrol Station", selected: 'true' },
];
const filterDrawer = new acl.ACLFilterDrawer(filterDrawerEl, filters);
const selectableChipsEl = document.querySelector('.acl-selectable-chips');
selectableChipsEl.addEventListener('selectedchips',
function (e) {
console.log('Selected Chips Array Change:');
console.log(e.detail);
}, false);
selectableChipsEl.addEventListener('selectedchipcount',
function (e) {
console.log('Selected Chip Count:' + e.detail);
}, false);
</script>
/* No context defined. */
.acl-filter-drawer {
&__container {
position: relative;
display: flex;
align-items: center;
justify-content: space-between;
&--border {
border: 1px solid #e0e0e0;
}
&--rounded-corners {
border-radius: 6px;
}
}
&__button {
cursor: pointer;
height: 14px;
color: #8892b4;
font-family: 'Open Sans';
font-size: 10px;
font-weight: 600;
line-height: 14px;
text-align: center;
padding: 12px 20px;
display: flex;
border-left: 1px solid #f8f8fb;
z-index: 1;
background-color: #f8f8fb;
box-shadow: inset 0 1px 3px 0 rgba(0, 0, 0, 0.1);
&--flat {
box-shadow: none;
}
&--left {
border-top-left-radius: 7px;
border-bottom-left-radius: 7px;
}
&--right {
border-top-right-radius: 7px;
border-bottom-right-radius: 7px;
}
}
&__button-label {
display: flex;
white-space: nowrap;
}
&__drawer {
display: none;
&[data-expanded='true'] {
display: block;
max-height: 226px;
border-radius: 4px;
background-color: #f8f8fb;
border: 1px solid #e8ebf8;
padding: 10px;
position: absolute;
top: -1px;
left: -1px;
width: calc(100% - 20px);
}
}
&__drawer-header {
display: flex;
justify-content: space-between;
}
&__drawer-header-text {
color: rgba(0, 0, 0, 0.5);
font-family: 'Open Sans';
font-size: 10px;
line-height: 14px;
}
&__drawer-close-button {
cursor: pointer;
i {
color: #b1b7cd;
}
}
&__selected-count {
background-color: $light-blue;
color: $white;
border-radius: 50%;
min-width: 15px;
font-size: 9px;
display: flex;
justify-content: center;
align-items: center;
margin: 0 5px;
&:empty {
display: none;
}
&--hidden {
display: none;
}
}
}
class ACLFilterDrawer {
constructor(filterDrawerEl, filterData, closeOnLostFocus = true) {
this.filterDrawerEl = filterDrawerEl;
this.closeOnLostFocus = closeOnLostFocus;
this.filterButton = this.filterDrawerEl.querySelector('.acl-filter-drawer__button');
this.filterData = filterData;
this.drawer = this.filterDrawerEl.querySelector('.acl-filter-drawer__drawer');
this.selectableChipsEl = this.filterDrawerEl.querySelector('.acl-selectable-chips');
this.selectedChipCountEl = this.filterButton.querySelector('.acl-filter-drawer__selected-count');
this.closeButton = this.filterDrawerEl.querySelector('.acl-filter-drawer__drawer-close-button');
this.selectableChips = new acl.ACLSelectableChips(this.selectableChipsEl, this.filterData);
this.handleEventListeners();
this.getSelectedChipCount();
}
handleEventListeners() {
this.filterButton.addEventListener('click', () => {
this.openDrawer();
});
this.closeButton.addEventListener('click', () => {
this.closeDrawer();
});
this.selectableChipsEl.addEventListener(
'selectedchipcount',
e => {
this.selectedChipCountEl.innerHTML = e.detail.toString();
if (e.detail > 0) {
this.showSelectedChipCount();
} else {
this.hideSelectedChipCount();
}
},
false
);
if (this.closeOnLostFocus) {
document.addEventListener('click', (event) => {
this.handleDocumentClick(event);
});
}
}
handleDocumentClick(event) {
if (!this.filterDrawerEl.contains(event.target)) {
this.closeDrawer();
}
}
openDrawer() {
this.drawer.dataset.expanded = 'true';
}
closeDrawer() {
this.drawer.dataset.expanded = 'false';
}
getSelectedChips() {
this.selectableChips.getSelectedChips();
}
getSelectedChipCount() {
this.selectedChipCount = this.selectableChips.getSelectedChips();
}
hideSelectedChipCount() {
this.selectedChipCountEl.classList.add('acl-filter-drawer__selected-count--hidden');
}
showSelectedChipCount() {
this.selectedChipCountEl.classList.remove('acl-filter-drawer__selected-count--hidden');
}
dispatchCustomEvent(element, eventName, detailObj) {
element.dispatchEvent(
new CustomEvent(eventName, {
detail: detailObj,
})
);
}
}
export { ACLFilterDrawer };
No notes defined.