epaew/react-liff

View on GitHub
src/hooks/use-login-state-manager.ts

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
import { Liff } from "@line/liff";
import { useEffect, useState } from "react";

export const useLoginStateManager = (liff: Liff | undefined): [boolean, Liff] => {
  const { isLoggedIn = () => false, login = () => {}, logout = () => {}, ...rest } = liff ?? {};
  const [loginState, setLoginState] = useState(false);

  useEffect(() => {
    setLoginState(isLoggedIn());
  }, [isLoggedIn]);

  const customLogin: Liff["login"] = (...args) => {
    login(...args);
    setLoginState(isLoggedIn());
  };
  const customLogout: Liff["logout"] = () => {
    logout();
    setLoginState(isLoggedIn());
  };

  return [loginState, { ...rest, isLoggedIn, login: customLogin, logout: customLogout } as Liff];
};