1234567891011121314151617181920212223242526272829303132333435363738394041 |
- import { isDef } from '@/utils/is'
- import { useDebounceFn } from 'ahooks'
- import { useContext, useEffect } from 'react'
- import { FlowContext } from '../context'
- import { Actions } from '../enum'
- type LoadingOptions = {
- /** @name 延迟时间 */
- delay?: number
- }
- const useLoading = (opt: LoadingOptions = { delay: 500 }) => {
- const { flowState, dispatch } = useContext(FlowContext)
- const cancel = () => {
- dispatch({
- type: Actions.SET_FOLW_PROPS,
- payload: {
- canvasLoading: false
- }
- })
- }
- const { run: resetLoading, cancel: tryCancelDebounceFn } = useDebounceFn(cancel, {
- wait: opt.delay
- })
- useEffect(() => {
- return () => tryCancelDebounceFn()
- }, [])
- const run = () => {
- // 若当前loading为true停止执行
- if (isDef(flowState.canvasLoading) && flowState.canvasLoading) {
- return
- }
- dispatch({
- type: Actions.SET_FOLW_PROPS,
- payload: {
- canvasLoading: true
- }
- })
- resetLoading()
- }
- return { run }
- }
- export default useLoading
|