Files
home-works/src/s2-homeworks/hw03/GreetingContainer.tsx
2022-09-14 16:18:09 +03:00

79 lines
2.3 KiB
TypeScript

import React, { ChangeEvent, KeyboardEvent, useState } from 'react'
import Greeting from './Greeting'
import { UserType } from './HW3'
type GreetingContainerPropsType = {
users: any // need to fix any
addUserCallback: any // need to fix any
}
export const pureAddUser = (name: any, setError: any, setName: any, addUserCallback: any) => {
// если имя пустое - показать ошибку, иначе - добавить юзера и очистить инпут
if (!name.trim()) {
setError('name is required!')
} else {
addUserCallback(name)
setName('')
}
}
export const pureOnBlur = (name: any, setError: any) => { // если имя пустое - показать ошибку
if (!name.trim()) {
setError('name is required!')
}
}
export const pureOnEnter = (e: any, addUser: any) => { // если нажата кнопка Enter - добавить
if (e.key === 'Enter') {
addUser()
}
}
// более простой и понятный для новичков
// function GreetingContainer(props: GreetingPropsType) {
// более современный и удобный для про :)
const GreetingContainer: React.FC<GreetingContainerPropsType> = ({
users,
addUserCallback,
}) => {
// деструктуризация пропсов
const [name, setName] = useState<any>('') // need to fix any
const [error, setError] = useState<any>('') // need to fix any
const setNameCallback = (e: any) => { // need to fix any
setName(e.currentTarget.value) // need to fix
error && setError('')
}
const addUser = () => {
pureAddUser(name, setError, setName, addUserCallback)
}
const onBlur = () => {
pureOnBlur(name, setError)
}
const onEnter = (e: any) => {
pureOnEnter(e, addUser)
}
const totalUsers = users.length // need to fix
const lastUserName = users[users.length - 1]?.name // need to fix
return (
<Greeting
name={name}
setNameCallback={setNameCallback}
addUser={addUser}
onBlur={onBlur}
onEnter={onEnter}
error={error}
totalUsers={totalUsers}
lastUserName={lastUserName}
/>
)
}
export default GreetingContainer