@tarojs/taro-h5
Version:
Taro h5 framework
288 lines (285 loc) • 9.97 kB
JavaScript
import Taro from '@tarojs/api';
import { shouldBeObject, getParameterError } from '../../utils/index.js';
import { MethodHandler } from '../../utils/handler.js';
import { isValidColor } from '../../utils/valid.js';
let tabConf;
function initTabBarApis(config = {}) {
tabConf = config.tabBar;
}
/**
* 显示 tabBar 某一项的右上角的红点
*/
const showTabBarRedDot = (options) => {
// options must be an Object
const isObject = shouldBeObject(options);
if (!isObject.flag) {
const res = { errMsg: `showTabBarRedDot:fail ${isObject.msg}` };
console.error(res.errMsg);
return Promise.reject(res);
}
const { index, success, fail, complete } = options;
const handle = new MethodHandler({ name: 'showTabBarRedDot', success, fail, complete });
if (typeof index !== 'number') {
return handle.fail({
errMsg: getParameterError({
para: 'index',
correct: 'Number',
wrong: index
})
});
}
return new Promise((resolve, reject) => {
Taro.eventCenter.trigger('__taroShowTabBarRedDotHandler', {
index,
successHandler: (res = {}) => handle.success(res, { resolve, reject }),
errorHandler: (res = {}) => handle.fail(res, { resolve, reject })
});
});
};
/**
* 显示 tabBar
*/
const showTabBar = (options = {}) => {
// options must be an Object
const isObject = shouldBeObject(options);
if (!isObject.flag) {
const res = { errMsg: `showTabBar:fail ${isObject.msg}` };
console.error(res.errMsg);
return Promise.reject(res);
}
const { animation, success, fail, complete } = options;
const handle = new MethodHandler({ name: 'showTabBar', success, fail, complete });
if (options.hasOwnProperty('animation') && typeof animation !== 'boolean') {
return handle.fail({
errMsg: getParameterError({
para: 'animation',
correct: 'Boolean',
wrong: animation
})
});
}
return new Promise((resolve, reject) => {
Taro.eventCenter.trigger('__taroShowTabBar', {
animation,
successHandler: (res = {}) => handle.success(res, { resolve, reject }),
errorHandler: (res = {}) => handle.fail(res, { resolve, reject })
});
});
};
/**
* 动态设置 tabBar 的整体样式
*/
const setTabBarStyle = (options = {}) => {
// options must be an Object
const isObject = shouldBeObject(options);
if (!isObject.flag) {
const res = { errMsg: `setTabBarStyle:fail ${isObject.msg}` };
console.error(res.errMsg);
return Promise.reject(res);
}
const { color, selectedColor, backgroundColor, borderStyle, success, fail, complete } = options;
const handle = new MethodHandler({ name: 'setTabBarStyle', success, fail, complete });
let errMsg;
if (color && !isValidColor(color)) {
errMsg = 'color';
}
else if (selectedColor && !isValidColor(selectedColor)) {
errMsg = 'selectedColor';
}
else if (backgroundColor && !isValidColor(backgroundColor)) {
errMsg = 'backgroundColor';
}
else if (borderStyle && !/^(black|white)$/.test(borderStyle)) {
errMsg = 'borderStyle';
}
if (errMsg) {
return handle.fail({ errMsg: `invalid ${errMsg}` });
}
if (!tabConf) {
return handle.fail();
}
const obj = {};
if (color)
obj.color = color;
if (selectedColor)
obj.selectedColor = selectedColor;
if (backgroundColor)
obj.backgroundColor = backgroundColor;
if (borderStyle)
obj.borderStyle = borderStyle;
return new Promise((resolve, reject) => {
Taro.eventCenter.trigger('__taroSetTabBarStyle', {
color,
selectedColor,
backgroundColor,
borderStyle,
successHandler: (res = {}) => handle.success(res, { resolve, reject }),
errorHandler: (res = {}) => handle.fail(res, { resolve, reject })
});
});
};
/**
* 动态设置 tabBar 某一项的内容
*/
const setTabBarItem = (options) => {
// options must be an Object
const isObject = shouldBeObject(options);
if (!isObject.flag) {
const res = { errMsg: `setTabBarItem:fail ${isObject.msg}` };
console.error(res.errMsg);
return Promise.reject(res);
}
const { index, text, iconPath, selectedIconPath, success, fail, complete } = options;
const handle = new MethodHandler({ name: 'setTabBarItem', success, fail, complete });
if (typeof index !== 'number') {
return handle.fail({
errMsg: getParameterError({
para: 'index',
correct: 'Number',
wrong: index
})
});
}
return new Promise((resolve, reject) => {
Taro.eventCenter.trigger('__taroSetTabBarItem', {
index,
text,
iconPath,
selectedIconPath,
successHandler: (res = {}) => handle.success(res, { resolve, reject }),
errorHandler: (res = {}) => handle.fail(res, { resolve, reject })
});
});
};
/**
* 为 tabBar 某一项的右上角添加文本
*/
const setTabBarBadge = (options) => {
// options must be an Object
const isObject = shouldBeObject(options);
if (!isObject.flag) {
const res = { errMsg: `setTabBarBadge:fail ${isObject.msg}` };
console.error(res.errMsg);
return Promise.reject(res);
}
const { index, text, success, fail, complete } = options;
const handle = new MethodHandler({ name: 'setTabBarBadge', success, fail, complete });
if (typeof index !== 'number') {
return handle.fail({
errMsg: getParameterError({
para: 'index',
correct: 'Number',
wrong: index
})
});
}
if (typeof text !== 'string') {
return handle.fail({
errMsg: getParameterError({
para: 'text',
correct: 'String',
wrong: text
})
});
}
return new Promise((resolve, reject) => {
Taro.eventCenter.trigger('__taroSetTabBarBadge', {
index,
text: text.replace(/[\u0391-\uFFE5]/g, 'aa').length > 4 ? '...' : text,
successHandler: (res = {}) => handle.success(res, { resolve, reject }),
errorHandler: (res = {}) => handle.fail(res, { resolve, reject })
});
});
};
/**
* 移除 tabBar 某一项右上角的文本
*/
const removeTabBarBadge = (options) => {
// options must be an Object
const isObject = shouldBeObject(options);
if (!isObject.flag) {
const res = { errMsg: `removeTabBarBadge:fail ${isObject.msg}` };
console.error(res.errMsg);
return Promise.reject(res);
}
const { index, success, fail, complete } = options;
const handle = new MethodHandler({ name: 'removeTabBarBadge', success, fail, complete });
if (typeof index !== 'number') {
return handle.fail({
errMsg: getParameterError({
para: 'index',
correct: 'Number',
wrong: index
})
});
}
return new Promise((resolve, reject) => {
Taro.eventCenter.trigger('__taroRemoveTabBarBadge', {
index,
successHandler: (res = {}) => handle.success(res, { resolve, reject }),
errorHandler: (res = {}) => handle.fail(res, { resolve, reject })
});
});
};
/**
* 隐藏 tabBar 某一项的右上角的红点
*/
const hideTabBarRedDot = (options) => {
// options must be an Object
const isObject = shouldBeObject(options);
if (!isObject.flag) {
const res = { errMsg: `hideTabBarRedDot:fail ${isObject.msg}` };
console.error(res.errMsg);
return Promise.reject(res);
}
const { index, success, fail, complete } = options;
const handle = new MethodHandler({ name: 'hideTabBarRedDot', success, fail, complete });
if (typeof index !== 'number') {
return handle.fail({
errMsg: getParameterError({
para: 'index',
correct: 'Number',
wrong: index
})
});
}
return new Promise((resolve, reject) => {
Taro.eventCenter.trigger('__taroHideTabBarRedDotHandler', {
index,
successHandler: (res = {}) => handle.success(res, { resolve, reject }),
errorHandler: (res = {}) => handle.fail(res, { resolve, reject })
});
});
};
/**
* 隐藏 tabBar
*/
const hideTabBar = (options = {}) => {
// options must be an Object
const isObject = shouldBeObject(options);
if (!isObject.flag) {
const res = { errMsg: `hideTabBar:fail ${isObject.msg}` };
console.error(res.errMsg);
return Promise.reject(res);
}
const { animation, success, fail, complete } = options;
const handle = new MethodHandler({ name: 'hideTabBar', success, fail, complete });
if (options.hasOwnProperty('animation') && typeof animation !== 'boolean') {
return handle.fail({
errMsg: getParameterError({
para: 'animation',
correct: 'Boolean',
wrong: animation
})
});
}
return new Promise((resolve, reject) => {
Taro.eventCenter.trigger('__taroHideTabBar', {
animation,
successHandler: (res = {}) => handle.success(res, { resolve, reject }),
errorHandler: (res = {}) => handle.fail(res, { resolve, reject })
});
});
};
export { hideTabBar, hideTabBarRedDot, initTabBarApis, removeTabBarBadge, setTabBarBadge, setTabBarItem, setTabBarStyle, showTabBar, showTabBarRedDot };
//# sourceMappingURL=tab-bar.js.map