framework7
Version:
Full featured mobile HTML framework for building iOS & Android apps
139 lines (136 loc) • 4.03 kB
JavaScript
import $ from '../../shared/dom7';
import { extend } from '../../shared/utils';
import SmartSelect from './smart-select-class';
import ConstructorMethods from '../../shared/constructor-methods';
export default {
name: 'smartSelect',
params: {
smartSelect: {
el: undefined,
valueEl: undefined,
setValueText: true,
formatValueText: null,
openIn: 'page',
// or 'popup' or 'sheet' or 'popover'
popupPush: false,
popupSwipeToClose: undefined,
// defaults to app
sheetPush: false,
sheetSwipeToClose: undefined,
// defaults to app
sheetBackdrop: false,
pageTitle: undefined,
pageBackLinkText: 'Back',
popupCloseLinkText: 'Close',
popupTabletFullscreen: false,
sheetCloseLinkText: 'Done',
searchbar: false,
searchbarPlaceholder: 'Search',
searchbarDisableText: 'Cancel',
searchbarDisableButton: undefined,
searchbarSpellcheck: false,
closeOnSelect: false,
virtualList: false,
virtualListHeight: undefined,
scrollToSelectedItem: false,
formColorTheme: undefined,
navbarColorTheme: undefined,
routableModals: false,
url: 'select/',
cssClass: '',
/*
Custom render functions
*/
renderPage: undefined,
renderPopup: undefined,
renderSheet: undefined,
renderPopover: undefined,
renderItems: undefined,
renderItem: undefined,
renderSearchbar: undefined
}
},
static: {
SmartSelect: SmartSelect
},
create: function create() {
var app = this;
app.smartSelect = extend(ConstructorMethods({
defaultSelector: '.smart-select',
constructor: SmartSelect,
app: app,
domProp: 'f7SmartSelect'
}), {
open: function open(smartSelectEl) {
var ss = app.smartSelect.get(smartSelectEl);
if (ss && ss.open) return ss.open();
return undefined;
},
close: function close(smartSelectEl) {
var ss = app.smartSelect.get(smartSelectEl);
if (ss && ss.close) return ss.close();
return undefined;
}
});
},
on: {
tabMounted: function tabMounted(tabEl) {
var app = this;
$(tabEl).find('.smart-select-init').each(function (smartSelectEl) {
app.smartSelect.create(extend({
el: smartSelectEl
}, $(smartSelectEl).dataset()));
});
},
tabBeforeRemove: function tabBeforeRemove(tabEl) {
$(tabEl).find('.smart-select-init').each(function (smartSelectEl) {
if (smartSelectEl.f7SmartSelect && smartSelectEl.f7SmartSelect.destroy) {
smartSelectEl.f7SmartSelect.destroy();
}
});
},
pageInit: function pageInit(page) {
var app = this;
page.$el.find('.smart-select-init').each(function (smartSelectEl) {
app.smartSelect.create(extend({
el: smartSelectEl
}, $(smartSelectEl).dataset()));
});
},
pageBeforeRemove: function pageBeforeRemove(page) {
page.$el.find('.smart-select-init').each(function (smartSelectEl) {
if (smartSelectEl.f7SmartSelect && smartSelectEl.f7SmartSelect.destroy) {
smartSelectEl.f7SmartSelect.destroy();
}
});
}
},
clicks: {
'.smart-select': function open($clickedEl, data) {
var app = this;
if (!$clickedEl[0].f7SmartSelect) {
var ss = app.smartSelect.create(extend({
el: $clickedEl
}, data));
ss.open();
}
}
},
vnode: {
'smart-select-init': {
insert: function insert(vnode) {
var app = this;
var smartSelectEl = vnode.elm;
app.smartSelect.create(extend({
el: smartSelectEl
}, $(smartSelectEl).dataset()));
},
destroy: function destroy(vnode) {
var smartSelectEl = vnode.elm;
if (smartSelectEl.f7SmartSelect && smartSelectEl.f7SmartSelect.destroy) {
smartSelectEl.f7SmartSelect.destroy();
}
}
}
}
};