import Utils from '../utils/utils'; import Mixins from '../utils/mixins'; /* phenome-dts-imports import { Searchbar as SearchbarNamespace } from 'framework7/components/searchbar/searchbar'; */ /* phenome-dts-instance f7Searchbar: SearchbarNamespace.Searchbar */ export default { name: 'f7-searchbar', props: { id: [String, Number], className: String, // phenome-react-line style: Object, // phenome-react-line noShadow: Boolean, noHairline: Boolean, form: { type: Boolean, default: true, }, placeholder: { type: String, default: 'Search', }, disableButton: { type: Boolean, default: true, }, disableButtonText: { type: String, default: 'Cancel', }, clearButton: { type: Boolean, default: true, }, // Input Value value: [String, Number, Array], // SB Params inputEvents: { type: String, default: 'change input compositionend', }, expandable: Boolean, searchContainer: [String, Object], searchIn: { type: String, default: '.item-title', }, searchItem: { type: String, default: 'li', }, searchGroup: { type: String, default: '.list-group', }, searchGroupTitle: { type: String, default: '.item-divider, .list-group-title', }, foundEl: { type: [String, Object], default: '.searchbar-found', }, notFoundEl: { type: [String, Object], default: '.searchbar-not-found', }, backdrop: { type: Boolean, default: true, }, backdropEl: [String, Object], hideOnEnableEl: { type: [String, Object], default: '.searchbar-hide-on-enable', }, hideOnSearchEl: { type: [String, Object], default: '.searchbar-hide-on-search', }, ignore: { type: String, default: '.searchbar-ignore', }, customSearch: { type: Boolean, default: false, }, removeDiacritics: { type: Boolean, default: false, }, hideDividers: { type: Boolean, default: true, }, hideGroups: { type: Boolean, default: true, }, init: { type: Boolean, default: true, }, ...Mixins.colorProps, }, render() { const self = this; let clearEl; let disableEl; const props = self.props; const { placeholder, clearButton, disableButton, disableButtonText, form, noShadow, noHairline, expandable, className, style, id, value, } = props; if (clearButton) { clearEl = ( ); } if (disableButton) { disableEl = ( {disableButtonText} ); } const SearchbarTag = form ? 'form' : 'div'; const classes = Utils.classNames( className, 'searchbar', { 'no-shadow': noShadow, 'no-hairline': noHairline, 'searchbar-expandable': expandable, }, Mixins.colorClasses(props), ); let inputEl; if (process.env.COMPILER === 'react') { inputEl = ( ) } if (process.env.COMPILER === 'vue') { inputEl = ( ) } return (
{inputEl} {clearEl}
{disableEl}
); }, componentDidCreate() { this.onChange = this.onChange.bind(this); this.onInput = this.onInput.bind(this); this.onFocus = this.onFocus.bind(this); this.onBlur = this.onBlur.bind(this); this.onSubmit = this.onSubmit.bind(this); this.onClearButtonClick = this.onClearButtonClick.bind(this); this.onDisableButtonClick = this.onDisableButtonClick.bind(this); }, componentDidMount() { const self = this; const { init, inputEvents, searchContainer, searchIn, searchItem, searchGroup, searchGroupTitle, hideOnEnableEl, hideOnSearchEl, foundEl, notFoundEl, backdrop, backdropEl, disableButton, ignore, customSearch, removeDiacritics, hideDividers, hideGroups, form, } = self.props; const { inputEl, el, clearEl, disableEl } = self.refs; if (form && el) { el.addEventListener('submit', self.onSubmit, false); } if (clearEl) { clearEl.addEventListener('click', self.onClearButtonClick); } if (disableEl) { disableEl.addEventListener('click', self.onDisableButtonClick); } if (!init) return; self.$f7ready(() => { const params = Utils.noUndefinedProps({ el: self.refs.el, inputEvents, searchContainer, searchIn, searchItem, searchGroup, searchGroupTitle, hideOnEnableEl, hideOnSearchEl, foundEl, notFoundEl, backdrop, backdropEl, disableButton, ignore, customSearch, removeDiacritics, hideDividers, hideGroups, on: { search(searchbar, query, previousQuery) { self.dispatchEvent('searchbar:search searchbarSearch', searchbar, query, previousQuery); }, clear(searchbar, previousQuery) { self.dispatchEvent('searchbar:clear searchbarClear', searchbar, previousQuery); }, enable(searchbar) { self.dispatchEvent('searchbar:enable searchbarEnable', searchbar); }, disable(searchbar) { self.dispatchEvent('searchbar:disable searchbarDisable', searchbar); }, }, }); Object.keys(params).forEach((key) => { if (params[key] === '') { delete params[key]; } }); self.f7Searchbar = self.$f7.searchbar.create(params); }); }, componentWillUnmount() { const self = this; const { inputEl, el, clearEl, disableEl } = self.refs; if (self.props.form && el) { el.removeEventListener('submit', self.onSubmit, false); } if (clearEl) { clearEl.removeEventListener('click', self.onClearButtonClick); } if (disableEl) { disableEl.removeEventListener('click', self.onDisableButtonClick); } if (self.f7Searchbar && self.f7Searchbar.destroy) self.f7Searchbar.destroy(); }, methods: { search(query) { if (!this.f7Searchbar) return undefined; return this.f7Searchbar.search(query); }, enable() { if (!this.f7Searchbar) return undefined; return this.f7Searchbar.enable(); }, disable() { if (!this.f7Searchbar) return undefined; return this.f7Searchbar.disable(); }, toggle() { if (!this.f7Searchbar) return undefined; return this.toggle.disable(); }, clear() { if (!this.f7Searchbar) return undefined; return this.f7Searchbar.clear(); }, onChange(event) { this.dispatchEvent('change', event); }, onInput(event) { this.dispatchEvent('input', event); }, onFocus(event) { this.dispatchEvent('focus', event); }, onBlur(event) { this.dispatchEvent('blur', event); }, onSubmit(event) { this.dispatchEvent('submit', event); }, onClearButtonClick(event) { this.dispatchEvent('click:clear clickClear', event); }, onDisableButtonClick(event) { this.dispatchEvent('click:disable clickDisable', event); }, }, };