framework7-vue
Version:
Build full featured iOS & Android apps using Framework7 & Vue
87 lines (77 loc) • 2 kB
JavaScript
import Utils from '../utils/utils';
import Mixins from '../utils/mixins';
import F7Link from './link';
import __vueComponentDispatchEvent from '../runtime-helpers/vue-component-dispatch-event.js';
import __vueComponentProps from '../runtime-helpers/vue-component-props.js';
export default {
name: 'f7-nav-left',
props: Object.assign({
id: [String, Number],
backLink: [Boolean, String],
backLinkUrl: String,
backLinkForce: Boolean,
sliding: Boolean
}, Mixins.colorProps),
render() {
const _h = this.$createElement;
const props = this.props;
const {
backLink,
backLinkUrl,
backLinkForce,
sliding,
className,
style,
id
} = props;
let linkEl;
if (backLink) {
linkEl = _h(F7Link, {
class: backLink === true || backLink && this.$theme.md ? 'icon-only' : undefined,
on: {
click: this.onBackClick
},
attrs: {
href: backLinkUrl || '#',
back: true,
icon: 'icon-back',
force: backLinkForce || undefined,
text: backLink !== true && !this.$theme.md ? backLink : undefined
}
});
}
const classes = Utils.classNames(className, 'left', {
sliding
}, Mixins.colorClasses(props));
const children = [];
const slots = this.$slots;
if (slots && Object.keys(slots).length) {
Object.keys(slots).forEach(key => {
children.push(...slots[key]);
});
}
return _h('div', {
style: style,
class: classes,
attrs: {
id: id
}
}, [linkEl, children]);
},
created() {
Utils.bindMethods(this, ['onBackClick']);
},
methods: {
onBackClick(event) {
this.dispatchEvent('back-click backClick click:back clickBack', event);
},
dispatchEvent(events, ...args) {
__vueComponentDispatchEvent(this, events, ...args);
}
},
computed: {
props() {
return __vueComponentProps(this);
}
}
};