Your IP : 172.70.80.239


Current Path : /var/www/element/data/www/revenuestory.ru/bitrix/js/ui/entity-catalog/src/components/
Upload File :
Current File : /var/www/element/data/www/revenuestory.ru/bitrix/js/ui/entity-catalog/src/components/search.js

import { BaseEvent } from 'main.core.events';
import { Loc, debounce, Type } from 'main.core';

export const Search = {
	emits: ['onSearch'],
	name: 'ui-entity-catalog-titlebar-search',
	data(): Object
	{
		return {
			opened: false,
			debounceSearchHandler: null,
			queryString: '',
			showClearSearch: false,
		};
	},
	watch:{
		queryString(newString)
		{
			this.showClearSearch = this.opened && this.$refs['search-input'] && Type.isStringFilled(newString);
		},
	},
	created()
	{
		this.debounceSearchHandler = debounce((event) => {
			this.onSearch(event.target.value);
		}, 255);
	},
	methods: {
		openSearch()
		{
			this.opened = true;
			this.$nextTick(() => {
				this.$refs['search-input'].focus();
			});
		},
		onSearch(queryString)
		{
			this.queryString = queryString;
			this.$emit(
				'onSearch',
				new BaseEvent({data: {queryString: queryString ? queryString.toString() : ''}})
			);
		},
		clearSearch()
		{
			if (this.showClearSearch)
			{
				this.$refs['search-input'].value = '';
				this.onSearch('');
			}
		}
	},
	template: `
		<div class="ui-ctl ui-ctl-after-icon ui-ctl-w100 ui-ctl-round" @click.once="openSearch">
			<a 
				:class="{
					'ui-ctl-after': true,
					'ui-ctl-icon-search': !showClearSearch,
					'ui-ctl-icon-clear': showClearSearch
				}"
				@click="clearSearch"
			/>
			<input
				type="text"
				class="ui-ctl-element ui-ctl-textbox"
				placeholder="${Loc.getMessage('UI_JS_ENTITY_CATALOG_GROUP_LIST_SEARCH_PLACEHOLDER')}"
				ref="search-input"
				v-if="opened"
				@input="debounceSearchHandler"
			/>
		</div>
	`,
};