1.0.2 • Published 4 months ago

react-use-promise-raii v1.0.2

Weekly downloads
-
License
MIT
Repository
github
Last release
4 months ago

react-use-promise-raii

NPM JavaScript Style Guide

Install

npm install --save react-use-promise-raii

Usage

global blocking io : example1 + example2 + example3

  • example1: provider installation is required.
import { ProviderPromiseRaii } from "react-use-promise-raii";

export default function App() {
  return (
    <>
      <GlobalStyle />
      <ProviderPromiseRaii>
        <HomePage/>
      </ProviderPromiseRaii>
    </>
  );
  • example2: When you need global blocking...
import { useCheckPromiseRaii } from "react-use-promise-raii";

const useBlockingIoPreventKeyEvents = (isBlocking: boolean) => {
  const preventer = useMemo(() => {
    const keyEventArr = ['keydown', 'keypress', 'keyup']
    const onKeyEvent = (e: Event) => e.preventDefault()
    const regist = () => {
      keyEventArr.forEach((keyEvent) => {
        document.addEventListener(keyEvent, onKeyEvent)
      })
    }
    const unregist = () => {
      keyEventArr.forEach((keyEvent) => {
        document.removeEventListener(keyEvent, onKeyEvent)
      })
    }
    return { regist, unregist }
  }, [])

  useEffect(() => {
    if (isBlocking) {
      preventer.regist()
    } else {
      preventer.unregist()
    }
  }, [isBlocking, preventer])
}

export const BlockingIo = () => {
  const isBlocking = useCheckPromiseRaii() > 0 // useCheckPromiseRaii

  useBlockingIoPreventKeyEvents(isBlocking)

  return (
    <WrBlockingIo isBlocking={isBlocking}>
      <Watch visible={isBlocking} color={'#ffffff'} width={80} height={80} />
    </WrBlockingIo>
  )
}

const WrBlockingIo = styled.div<{ isBlocking: boolean }>`
  visibility: ${(props) => (props.isBlocking ? 'visible' : 'hidden')};

  z-index: ${zIndex.blocking};
  position: fixed;
  width: 100%;
  height: 100%;

  background-color: rgba(0, 0, 0, 0.5);
  display: flex;
  align-items: center;
  justify-content: center;
`
  • example3: When you want to delay a promise.
import { usePromiseRaiiSleep } from "react-use-promise-raii";

export const useAxios = () => {
  const raiiSleep = usePromiseRaiiSleep();

  const axiosGet = useCallback(
    async (queryKey: string) => {
      if (queryKey.length === 0) return null;
      const { data } = await raiiSleep(axios.get(queryKey, axiosConfig), 1000);
      return data;
    },
    [raiiSleep]
  );

  // ...

  return {axiosGet, ... }
}

License

MIT © eezz4

1.0.2

4 months ago

1.0.1

1 year ago

1.0.0

1 year ago