import { Avatar, Box, Button, Card, CardBody, CardFooter, CardHeader, Center, HStack, Heading, Input, Text, VStack, } from '@chakra-ui/react' import { getFeatures } from '@brojs/cli' import React, { memo, useCallback, useContext, useState } from 'react' import { FormTest } from './from' import { Stars } from '../stars' import { stars as starsContext } from '../../__data__/context' import { useUsers } from '../../hooks' type User = Record & { id: string name: string avatar?: string rated: number friends?: User[] } const features = getFeatures('nav2') export const Profile = ({ user, isLink, title, }: { user: User isLink?: boolean title?: string }) => { // const [rated, setRated] = useState(user.rated || 0) const [editProfile, setEditProfile] = useState(false) return ( {!isLink && editProfile && } {!editProfile && } {title || 'Данные профиля'}
Имя: {user.name.toUpperCase()} {features['stars'] && ( )}
{/* {!isLink && features['buttons'] && user.friends?.map((friend) => ( */} {/* ))} */}
) } const Form = memo<{ initialState: string; onSubmit(value: string): void }>( ({ initialState, onSubmit }) => { const [message, setMessage] = useState(initialState) const handleMessageChange = (event) => { setMessage(event.target.value) } return ( Написать сообщение:
{ event.preventDefault() onSubmit(message) }} >
) }, ) Form.displayName = 'FormMemo' const withStars = (Component) => ({ userId }) => { const { stars, setStar } = useContext(starsContext) const addStar = useCallback( () => setStar(userId, stars[userId] + 1), [userId, setStar], ) const subStar = useCallback( () => setStar(userId, stars[userId] - 1), [userId, setStar], ) return ( ) } const Counter = ({ stars, addStar, subStar, userId }: { userId: 'some-user-id' | '2'}) => { const { rate, setUserRate } = useUsers((state) => state[userId].rated) return (
{rate}
) } const CounterWithStars = withStars(Counter)