3-tier-arch-serverless / app / client / src / pages / Home.js
Home.js
Raw
import {useState} from 'react'

const Home = () => {

    const [username, setUsername] = useState('')
    const [email, setEmail] = useState('')
    const [errorMsg, setErrorMsg] = useState('')
    const [successMsg, setSuccessMsg] = useState('')
    const [users, setUsers] = useState([])
    const [count, setCount] = useState(0)

    const url = 'https://pfgcpe1219.execute-api.us-east-1.amazonaws.com/test/user'
    const handleFormSubmit = (e) => {
        e.preventDefault()
        if (username.length === 0 || email.length === 0) {
            setErrorMsg('Incomplete user data')
            setSuccessMsg('')
            setTimeout(() => {
                setErrorMsg('') 
                setUsername('')
                setEmail('')        
            }, 3000)
        }else {
            fetch(url, {
                method : 'POST',
                mode: 'cors',
                headers : {
                    'Content-Type' : 'application/json'
                },
                body : JSON.stringify({username, email})     
            })
            .then((response) => {
                return response.json()
            })
            .then((result) => {
                console.log(result)
                if (result === 'no_username') {
                    setErrorMsg('Username is required')
                    setSuccessMsg('')
                    setTimeout(() => {
                        setErrorMsg('') 
                        setUsername('')
                        setEmail('')        
                    }, 3000)
                }else if (result === 'no_email') {
                    setErrorMsg('Email is required')
                    setSuccessMsg('')
                    setTimeout(() => {
                        setErrorMsg('') 
                        setUsername('')
                        setEmail('')        
                    }, 3000)
                }else if (result === 'user_exist') {
                    setErrorMsg('User already exist')
                    setSuccessMsg('')
                    setTimeout(() => {
                        setErrorMsg('') 
                        setUsername('')
                        setEmail('')        
                    }, 3000)
                }else if (result === 'server_error') {
                    setErrorMsg('Server error. Try again later')
                    setSuccessMsg('')
                    setTimeout(() => {
                        setErrorMsg('') 
                        setUsername('')
                        setEmail('')        
                    }, 3000)
                }else if (result.postBody.message === 'user_added') {
                    setSuccessMsg('User successfully created')
                    setErrorMsg('')
                    setTimeout(() => {
                        setSuccessMsg('') 
                        setUsername('')
                        setEmail('')        
                    }, 3000)
                    setCount(result.allUsers.length)
                    setUsers(result.allUsers)
                }
            })
            .catch((err) => {
                console.log(err)
                setErrorMsg('Error occurred. Try again later')
                setSuccessMsg('')
                setTimeout(() => {
                    setErrorMsg('') 
                    setUsername('')
                    setEmail('')        
                }, 3000)
            })
        }
    }

    return (
        <div className="container">
            <div className="form-container">
                <form onSubmit={handleFormSubmit}>
                    <div className="username">
                        <span className="username-text">Username:</span>
                        <input 
                        type="text"
                        value={username}
                        onChange={(e) => setUsername(e.target.value)}
                        />
                    </div>
                    <div className="email">
                        <span className="email-text">Email:</span>
                        <input 
                        type="email"
                        value={email}
                        onChange={(e) => setEmail(e.target.value)}
                        />
                    </div>
                    <div className="btn-div">
                        <button>Save</button>
                    </div>
                    {errorMsg && <p className="error-msg">{errorMsg}</p>}
                    {successMsg && <p className="success-msg">{successMsg}</p>}
                </form>
            </div>
            <hr></hr>
            <div className="users-container">
                <div className="users-count">
                    <h3>All Users</h3>
                    <p>Count : <span className="count">{count}</span></p>
                </div>
                <div className="users">
                    {users.map((user) => (
                        <p key={user._id}>{user.username}</p>
                    ))}
                </div>
            </div>
        </div>
    )
}

export default Home