<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. */
  • Content:
    .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;
    		}
    	}
    }
    
  • URL: /components/raw/filter-drawer/acl-filter-drawer.scss
  • Filesystem Path: src/components/filter-drawer/acl-filter-drawer.scss
  • Size: 1.7 KB
  • Content:
    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 };
    
  • URL: /components/raw/filter-drawer/index.js
  • Filesystem Path: src/components/filter-drawer/index.js
  • Size: 2.2 KB

No notes defined.