Source: components/filter/filter-tree/filter-option/filter-option-list.js

import FilterOption from './filter-option';
import FilterOptionEnum from '../../../../enum/filter-option-enum';
import Utils from '../../../../helpers/utils';

/**
 * Filter option with displayType = 'list'
 * @extends FilterOption
 */
class FilterOptionList extends FilterOption {
	/**
	 * Get the content html template for DisplayType.LIST
	 * Depending on its filterTreeType, it returns different templates for 'vertical' and 'horizontal'
	 * @returns {string} Raw html template
	 */
	getBlockContentTemplate() {
		if (this.selectType == FilterOptionEnum.SelectType.SINGLE) {
			return `
				<ul class="{{class.filterOptionItemList}} {{class.filterOptionItemListSingleList}}">
					{{filterItems}}
				</ul>
			`;
		} else {	
			return `
				<ul class="{{class.filterOptionItemList}} {{class.filterOptionItemListMultipleList}}">
					{{filterItems}}
				</ul>
			`;
		}
	}

	/**
	 * Prepare filter option data
	 * @param {Object} data - Filter data
	 */
	prepareFilterOptionData(data) {
		if ((data.filterType == 'price' || data.filterType == 'variants_price') && data.values && jQ.isArray(data.values)) {
			for (var i = 0; i < data.values.length; i++) {
				var under = false, above = false;
				// Convert max-price to active currency
				if (data.values[i].hasOwnProperty('to')) {
					under = true;
					data.values[i]['to'] = Utils.convertPriceBasedOnActiveCurrency(data.values[i]['to']);
				}
				// Convert min-price to active currency
				if (data.values[i].hasOwnProperty('from')) {
					above = true;
					data.values[i]['from'] = Utils.convertPriceBasedOnActiveCurrency(data.values[i]['from']);
				}
				// Replace the key string
				if (under && above) {
					data.values[i]['key'] = data.values[i]['from'] + '-' + data.values[i]['to'];
				} else if (under) {
					data.values[i]['key'] = '*-' + data.values[i]['to'];
				} else {
					data.values[i]['key'] = data.values[i]['from'] + '-*';
				}
			}
		}
		return data;
	}

	/**
	 * Set data for FilterOptionList. Override default setData by FilterOption.
	 * It calls super.setData(), and then set some extra data exclusive to range slider.
	 * @param {Object} data - Filter data
	 */
	setData(data) {
		// Prepare filter option data
		data = this.prepareFilterOptionData(data);
		super.setData(data);
	}
}

export default FilterOptionList;