antui-mobile
Version:
mobile ui for antd
125 lines (94 loc) • 3.62 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Native = undefined;
var _typeof2 = require('babel-runtime/helpers/typeof');
var _typeof3 = _interopRequireDefault(_typeof2);
var _stringify = require('babel-runtime/core-js/json/stringify');
var _stringify2 = _interopRequireDefault(_stringify);
var _keys = require('babel-runtime/core-js/object/keys');
var _keys2 = _interopRequireDefault(_keys);
var _promise = require('babel-runtime/core-js/promise');
var _promise2 = _interopRequireDefault(_promise);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _baseevent = require('../baseevent');
var _storage = require('../../utils/storage');
var _objectAssign = require('object-assign');
var _objectAssign2 = _interopRequireDefault(_objectAssign);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var EVENT_COUNT = 0;
var Native = exports.Native = function Native() {
var _this = this;
var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
func: function func() {},
defaultParam: {},
nameCB: ""
};
(0, _classCallCheck3.default)(this, Native);
this.activate = function (param) {
var device = _storage.Session.getAttribute("device");
return new _promise2.default(function (resolve, reject) {
(0, _baseevent.once)(_this.NATIVE_IDENT, function (res) {
return _this.handleData(res, device, resolve, reject);
});
var _p = (0, _objectAssign2.default)({}, _this.defaultParam, param);
var paramStr = null;
if ((0, _keys2.default)(_p).length) {
paramStr = (0, _stringify2.default)(_p);
}
if (_this.method[device]) {
if ((0, _typeof3.default)(window.callback) === "object") {
paramStr ? window.callback[_this.method[device]](paramStr) : window.callback[_this.method[device]]();
} else {
paramStr ? window[_this.method[device]](paramStr) : window[_this.method[device]]();
}
} else {
return reject(new TypeError("not fount method of device:" + device));
}
});
};
this.deactivate = function () {};
this.handleData = function (res, device, resolve, reject) {
var data = null;
try {
if (typeof res === "string") {
data = JSON.parse(window.atob(res));
} else if ((typeof res === 'undefined' ? 'undefined' : (0, _typeof3.default)(res)) === "object") {
data = res;
} else {
throw TypeError("return type only is string or object!");
}
} catch (e) {
throw e;
}
return resolve(data);
};
if (opts === null) {
throw new TypeError("opts is required object!");
}
if (!opts.nameCB || !opts.func) {
throw new TypeError("opts set error!");
}
if ((0, _typeof3.default)(opts.defaultParam) === "object") {
this.defaultParam = opts.defaultParam;
}
if (opts.func) {
this.method = {};
if (typeof opts.func === "string") {
this.method.ios = this.method.android = opts.func;
} else if ((0, _typeof3.default)(opts.func) === "object" && (!!opts.func.ios || !!opts.func.android)) {
this.method = opts.func;
} else {
throw new TypeError("func set error!");
}
}
this.NATIVE_IDENT = "NATIVE_" + EVENT_COUNT++;
window[opts.nameCB] = function (res) {
(0, _baseevent.trigger)(_this.NATIVE_IDENT, res);
};
}
// 需要自定义反回数据的在子类中重写这个方法, 并反回resolve或reject
;
exports.default = Native;