import Mixins from '../utils/mixins';
import Utils from '../utils/utils';
/* phenome-dts-imports
import { Popup as PopupNamespace } from 'framework7/components/popup/popup';
*/
/* phenome-dts-instance
f7Popup: PopupNamespace.Popup
*/
export default {
name: 'f7-popup',
props: {
id: [String, Number],
className: String, // phenome-react-line
style: Object, // phenome-react-line
tabletFullscreen: Boolean,
opened: Boolean,
closeByBackdropClick: Boolean,
backdrop: Boolean,
animate: Boolean,
...Mixins.colorProps,
},
render() {
const self = this;
const props = self.props;
const {
className,
id,
style,
tabletFullscreen,
} = props;
const classes = Utils.classNames(
className,
'popup',
{
'popup-tablet-fullscreen': tabletFullscreen,
},
Mixins.colorClasses(props),
);
return (
);
},
watch: {
'props.opened': function watchOpened(opened) {
const self = this;
if (!self.f7Popup) return;
if (opened) {
self.f7Popup.open();
} else {
self.f7Popup.close();
}
},
},
componentDidMount() {
const self = this;
const el = self.refs.el;
if (!el) return;
self.onOpenBound = self.onOpen.bind(self);
self.onOpenedBound = self.onOpened.bind(self);
self.onCloseBound = self.onClose.bind(self);
self.onClosedBound = self.onClosed.bind(self);
el.addEventListener('popup:open', self.onOpenBound);
el.addEventListener('popup:opened', self.onOpenedBound);
el.addEventListener('popup:close', self.onCloseBound);
el.addEventListener('popup:closed', self.onClosedBound);
const props = self.props;
const { closeByBackdropClick, backdrop, animate } = props;
const popupParams = { el };
if (process.env.COMPILER === 'vue') {
if (typeof self.$options.propsData.closeByBackdropClick !== 'undefined') popupParams.closeByBackdropClick = closeByBackdropClick;
if (typeof self.$options.propsData.animate !== 'undefined') popupParams.animate = animate;
if (typeof self.$options.propsData.backdrop !== 'undefined') popupParams.backdrop = backdrop;
}
if (process.env.COMPILER === 'react') {
if ('closeByBackdropClick' in props) popupParams.closeByBackdropClick = closeByBackdropClick;
if ('animate' in props) popupParams.animate = animate;
if ('backdrop' in props) popupParams.backdrop = backdrop;
}
self.$f7ready(() => {
self.f7Popup = self.$f7.popup.create(popupParams);
if (self.props.opened) {
self.f7Popup.open(false);
}
});
},
componentWillUnmount() {
const self = this;
if (self.f7Popup) self.f7Popup.destroy();
const el = self.refs.el;
if (!el) return;
el.removeEventListener('popup:open', self.onOpenBound);
el.removeEventListener('popup:opened', self.onOpenedBound);
el.removeEventListener('popup:close', self.onCloseBound);
el.removeEventListener('popup:closed', self.onClosedBound);
},
methods: {
onOpen(event) {
this.dispatchEvent('popup:open popupOpen', event);
},
onOpened(event) {
this.dispatchEvent('popup:opened popupOpened', event);
},
onClose(event) {
this.dispatchEvent('popup:close popupClose', event);
},
onClosed(event) {
this.dispatchEvent('popup:closed popupClosed', event);
},
open(animate) {
const self = this;
if (!self.$f7) return undefined;
return self.$f7.popup.open(self.refs.el, animate);
},
close(animate) {
const self = this;
if (!self.$f7) return undefined;
return self.$f7.popup.close(self.refs.el, animate);
},
},
};