taro-hooks
Version:
为 Taro 而设计的 Hooks Library
59 lines • 2.85 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); }
import { showNavigationBarLoading, hideNavigationBarLoading, setNavigationBarColor, setNavigationBarTitle, hideHomeButton } from '@tarojs/taro';
import { useRef, useEffect } from '@taro-hooks/core';
import usePromise from '../usePromise';
import { combineOptions, generateGeneralFail } from '../utils/tool';
function useNavigationBar(option) {
var generalOption = useRef(option);
var hideButton = usePromise(hideHomeButton);
var showNavigationBarLoadingAsync = usePromise(showNavigationBarLoading);
var hideNavigationBarLoadingAsync = usePromise(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 = usePromise(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(generateGeneralFail('setTitle', 'please provide a title'));
};
var setColorAsync = usePromise(setNavigationBarColor);
var setColor = function setColor(option) {
var setColorOption = combineOptions(generalOption.current, option);
if (!setColorOption.backgroundColor || !setColorOption.frontColor) {
return Promise.reject(generateGeneralFail('setColor', 'please provide backgroundColor or frontColor'));
}
return setColorAsync(setColorOption);
};
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
};
}
export default useNavigationBar;