import Utils from '../utils/utils'; import Mixins from '../utils/mixins'; /* phenome-dts-imports import { Panel as PanelNamespace } from 'framework7/components/panel/panel'; */ /* phenome-dts-instance f7Panel: PanelNamespace.Panel */ export default { name: 'f7-panel', props: { id: [String, Number], className: String, // phenome-react-line style: Object, // phenome-react-line side: String, effect: String, cover: Boolean, reveal: Boolean, left: Boolean, right: Boolean, opened: Boolean, ...Mixins.colorProps, }, render() { const props = this.props; const { id, style, } = props; return (
); }, computed: { classes() { const self = this; const props = self.props; const { left, reveal, className, opened } = props; let { side, effect } = props; side = side || (left ? 'left' : 'right'); effect = effect || (reveal ? 'reveal' : 'cover'); return Utils.classNames( className, 'panel', { 'panel-active': opened, [`panel-${side}`]: side, [`panel-${effect}`]: effect, }, Mixins.colorClasses(props), ); }, }, watch: { 'props.opened': function watchOpened(opened) { const self = this; if (!self.$f7) return; const side = self.props.side || (self.props.left ? 'left' : 'right'); if (opened) { self.$f7.panel.open(side); } else { self.$f7.panel.open(side); } }, }, componentDidMount() { const self = this; const el = self.refs.el; const { side, effect, opened, left, reveal } = self.props; self.onOpenBound = self.onOpen.bind(self); self.onOpenedBound = self.onOpened.bind(self); self.onCloseBound = self.onClose.bind(self); self.onClosedBound = self.onClosed.bind(self); self.onBackdropClickBound = self.onBackdropClick.bind(self); self.onPanelSwipeBound = self.onPanelSwipe.bind(self); self.onPanelSwipeOpenBound = self.onPanelSwipeOpen.bind(self); self.onBreakpointBound = self.onBreakpoint.bind(self); if (el) { el.addEventListener('panel:open', self.onOpenBound); el.addEventListener('panel:opened', self.onOpenedBound); el.addEventListener('panel:close', self.onCloseBound); el.addEventListener('panel:closed', self.onClosedBound); el.addEventListener('panel:backdrop-click', self.onBackdropClickBound); el.addEventListener('panel:swipe', self.onPanelSwipeBound); el.addEventListener('panel:swipeopen', self.onPanelSwipeOpenBound); el.addEventListener('panel:breakpoint', self.onBreakpointBound); } self.$f7ready(() => { const $ = self.$$; if (!$) return; if ($('.panel-backdrop').length === 0) { $('
').insertBefore(el); } self.f7Panel = self.$f7.panel.create({ el }); }); if (opened) { el.style.display = 'block'; } const $ = self.$$; if (!$) return; const panelSide = side || (left ? 'left' : 'right'); const panelEffect = effect || (reveal ? 'reveal' : 'cover'); if (opened) { $('html').addClass(`with-panel-${panelSide}-${panelEffect}`); } }, componentWillUnmount() { const self = this; if (self.f7Panel) self.f7Panel.destroy(); const el = self.refs.el; if (!el) return; el.removeEventListener('panel:open', self.onOpenBound); el.removeEventListener('panel:opened', self.onOpenedBound); el.removeEventListener('panel:close', self.onCloseBound); el.removeEventListener('panel:closed', self.onClosedBound); el.removeEventListener('panel:backdrop-click', self.onBackdropClickBound); el.removeEventListener('panel:swipe', self.onPanelSwipeBound); el.removeEventListener('panel:swipeopen', self.onPanelSwipeOpenBound); el.removeEventListener('panel:breakpoint', self.onBreakpointBound); }, methods: { onOpen(event) { this.dispatchEvent('panel:open panelOpen', event); }, onOpened(event) { this.dispatchEvent('panel:opened panelOpened', event); }, onClose(event) { this.dispatchEvent('panel:close panelClose', event); }, onClosed(event) { this.dispatchEvent('panel:closed panelClosed', event); }, onBackdropClick(event) { this.dispatchEvent('panel:backdrop-click panelBackdropClick', event); }, onPanelSwipe(event) { this.dispatchEvent('panel:swipe panelSwipe', event); }, onPanelSwipeOpen(event) { this.dispatchEvent('panel:swipeopen panelSwipeOpen', event); }, onBreakpoint(event) { this.dispatchEvent('panel:breakpoint panelBreakpoint', event); }, open(animate) { const self = this; if (!self.$f7) return; const side = self.props.side || (self.props.left ? 'left' : 'right'); self.$f7.panel.open(side, animate); }, close(animate) { const self = this; if (!self.$f7) return; const side = self.props.side || (self.props.left ? 'left' : 'right'); self.$f7.panel.close(side, animate); }, }, };