weex-nuke
Version:
基于 Rax 、Weex 的高性能组件体系 ~~
81 lines (68 loc) • 1.75 kB
JSX
/** @jsx createElement */
;
import { Component, createElement, PropTypes, unmountComponentAtNode, findDOMNode, render } from 'rax';
import dom from 'nuke-dom';
import { isWeex } from 'nuke-env';
import Picker from './picker';
const noop = () => {};
let pickerInstance = null;
let container = null;
export function show(options = {}, onSelect, onCancel, onShow, onFail) {
onSelect = onSelect || noop;
onShow = onShow || noop;
onFail = onFail || noop;
onCancel = onCancel || noop;
const {
title,
dataSource,
selectedKey,
locale,
maskClosable = true,
visible,
value,
content,
children,
...others
} = options;
if (!dataSource || !dataSource[0]) {
onFail({ err: 'empty dataSource' });
return;
}
const attrs = {
title,
maskClosable,
dataSource,
selectedKey: value || selectedKey,
afterClose: afterCloseCallback,
onCancel,
onDone: onSelect,
};
if (locale) {
attrs.locale = locale;
}
let picker = <Picker {...others} {...attrs} />;
function afterCloseCallback() {
unmountComponentAtNode(container);
document.body.removeChild(container);
pickerInstance = picker = container = null;
}
if (options.container) {
container = findDOMNode(options.container);
}
// container = options.container || null;
if (!container) {
container = dom.createEle('div', { t: 'id', abc: '_nuke_wrap' });
document.body.appendChild(container);
}
render(picker, container, function () {
pickerInstance = this;
pickerInstance.wrappedInstance.show();
});
}
export function hide() {
if (isWeex) {
// native 暂不支持
} else if (pickerInstance) {
pickerInstance.wrappedInstance.hide();
}
}