/* ---------------------------------- @mui ---------------------------------- */ import { styled } from '@mui/material/styles'; import { Box, Card, Divider, Grid, Link, Stack, Typography, IconButton } from '@mui/material'; /* ------------------------------- components ------------------------------- */ import Page from '../../components/Page'; import Logo from '../../components/Logo'; import Iconify from '../../components/Iconify'; /* ---------------------------------- hooks --------------------------------- */ import useLocalStorage from '../../hooks/useLocalStorage'; /* -------------------------------- sections -------------------------------- */ import { LoginEmailForm, LoginPhoneForm, VerifyCodeForm } from '../../sections/auth/login'; import React, { useState, useEffect } from 'react'; import axios from '../../utils/axios'; import { enqueueSnackbar } from 'notistack'; /* --------------------------------- styled --------------------------------- */ const RootStyle = styled('div')(({ theme }) => ({ [theme.breakpoints.up('md')]: { display: 'flex', }, minHeight: '100vh', flexDirection: 'column', justifyContent: 'center', alignItems: 'center', })); const ContentStyle = styled(Card)(({ theme }) => ({ [theme.breakpoints.up('md')]: { maxHeight: '600px', maxWidth: '1000px', }, })); // ---------------------------------------------------------------------- export default function Login() { const [emailOrPhone, setEmailOrPhone] = useLocalStorage('emailOrPhone', ''); const [emailOrPhoneForm, setEmailOrPhoneForm] = useLocalStorage('emailOrPhoneForm', false); const [loginOrVerifyCode, setLoginOrVerifyCode] = useLocalStorage('loginOrVerifyCode', false); const [lastSentTime, setLastSentTime] = useState(null); const [canSendOTP, setCanSendOTP] = useState(true); useEffect(() => { let timer; if (lastSentTime) { timer = setInterval(() => { const timeDiff = Math.floor((new Date() - lastSentTime) / 1000); if (timeDiff >= 60) { setCanSendOTP(true); clearInterval(timer); } }, 1000); } return () => clearInterval(timer); }, [lastSentTime]); const sendOTP = (phoneOrEmail: string) => { if (canSendOTP) { // Logic untuk mengirim OTP axios .post('/login', { phoneOrEmail }) .then(() => { enqueueSnackbar('Kode OTP telah dikirim, silahkan cek email dan spam folder', { variant: 'success', autoHideDuration: 5000, }); }) .catch((error) => { if (error.response.status !== 404) throw error.response; if (error.response.status !== 422) throw error.response; }); setLastSentTime(new Date()); setCanSendOTP(false); } else { alert('You can only send OTP once every minute.'); } } return ( {loginOrVerifyCode && emailOrPhone ? ( <> { localStorage.removeItem('emailOrPhone'); setLoginOrVerifyCode(false); }} > Verifikasi OTP Masukkan kode OTP anda disini Tidak mendapatkan kode? { sendOTP(emailOrPhone); }} >Kirim Ulang Kode OTP ) : ( <> Sign in to LinkSehat Enter your details below. {emailOrPhoneForm ? ( ) : ( )} )} {/* Atau {emailOrPhoneForm ? ( { setEmailOrPhone(''); setLoginOrVerifyCode(false); setEmailOrPhoneForm(false); }} sx={{ cursor: 'pointer' }} > Masuk menggunakan email ) : ( { setEmailOrPhone(''); setLoginOrVerifyCode(false); setEmailOrPhoneForm(true); }} sx={{ cursor: 'pointer' }} > Masuk menggunakan nomor handphone )} */} ); }