UNPKG

taro-hooks

Version:
59 lines 2.85 kB
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;