taro-hooks
Version:
为 Taro 而设计的 Hooks Library
65 lines (64 loc) • 3.04 kB
JavaScript
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
Object.defineProperty(exports, "__esModule", {
value: true
});
var tslib_1 = require("tslib");
var taro_1 = require("@tarojs/taro");
var core_1 = require("@taro-hooks/core");
var usePromise_1 = tslib_1.__importDefault(require("../usePromise"));
var tool_1 = require("../utils/tool");
function useNavigationBar(option) {
var generalOption = (0, core_1.useRef)(option);
var hideButton = (0, usePromise_1["default"])(taro_1.hideHomeButton);
var showNavigationBarLoadingAsync = (0, usePromise_1["default"])(taro_1.showNavigationBarLoading);
var hideNavigationBarLoadingAsync = (0, usePromise_1["default"])(taro_1.hideNavigationBarLoading);
var toggleLoading = function toggleLoading(toggle) {
var _generalOption$curren;
var loading = toggle != null ? toggle : !(generalOption != null && (_generalOption$curren = generalOption.current) != null && _generalOption$curren.loading);
var toggleAction = loading ? showNavigationBarLoadingAsync : hideNavigationBarLoadingAsync;
generalOption.current = _extends({}, generalOption.current || {}, {
loading: loading
});
return toggleAction();
};
var setTitleAsync = (0, usePromise_1["default"])(taro_1.setNavigationBarTitle);
var setTitle = function setTitle(title) {
var _generalOption$curren2;
var navigationTitle = title != null ? title : (_generalOption$curren2 = generalOption.current) == null ? void 0 : _generalOption$curren2.title;
if (typeof navigationTitle === 'string') {
return setTitleAsync({
title: navigationTitle
});
}
return Promise.reject((0, tool_1.generateGeneralFail)('setTitle', 'please provide a title'));
};
var setColorAsync = (0, usePromise_1["default"])(taro_1.setNavigationBarColor);
var setColor = function setColor(option) {
var setColorOption = (0, tool_1.combineOptions)(generalOption.current, option);
if (!setColorOption.backgroundColor || !setColorOption.frontColor) {
return Promise.reject((0, tool_1.generateGeneralFail)('setColor', 'please provide backgroundColor or frontColor'));
}
return setColorAsync(setColorOption);
};
(0, core_1.useEffect)(function () {
if (option) {
var autoRun = [];
option.hideButton && autoRun.push(hideButton());
'loading' in option && autoRun.push(toggleLoading(option.loading));
['backgroundColor', 'frontColor'].every(function (v) {
return option[v];
}) && autoRun.push(setColor(option));
Promise.all(autoRun)["finally"](function () {
generalOption.current = option;
});
}
}, [option]);
return {
setTitle: setTitle,
hideButton: hideButton,
toggleLoading: toggleLoading,
setColor: setColor
};
}
exports["default"] = useNavigationBar;
;