db_kyc_project/frontend/src/shared/Pages/ClickerPage/ClickerPage.tsx

95 lines
4.3 KiB
TypeScript
Raw Normal View History

2024-11-18 16:33:44 +03:00
import React, { useEffect, useState } from 'react';
import styles from './clickerpage.module.css';
import { ClickerBtn } from '../../Clicker/ClickerBtn';
import { Profile } from '../../Clicker/Profile';
import { ETextStyles } from '../../texts';
import { SectionsBlock } from '../../Clicker/SectionsBlock';
import { ClickerFooter } from '../../Clicker/ClickerFooter';
import { StyleElements } from '../../Clicker/StyleElements';
import { PointsZoom } from '../../Clicker/PointsZoom';
import { useWindowSize } from 'usehooks-ts';
import { useAppSelector } from '../../hooks/useAppSelector';
2024-12-12 18:42:33 +03:00
import { ModalWindow } from '../../ModalWindow';
import { DevPopup } from '../../Elements/DevPopup';
2024-12-13 02:46:21 +03:00
import { AuctionMainPopups } from '../../Auction/AuctionMainPopups';
import { useAuctionData } from '../../hooks/useAuctionData';
2024-11-18 16:33:44 +03:00
interface IClickerPageInterface {
name: string,
points: number,
energy: number,
img: string
}
export function ClickerPage({ name, points, img, energy }: IClickerPageInterface) {
const styleIndex = Number(localStorage.getItem('selectedStyle'));
const [coins, setCoins] = useState(0);
const [mult, setMult] = useState(1);
const [closePoints, setClosePoints] = useState(true);
const [closePointsAnim, setClosePointsAnim] = useState(false);
const { width, height } = useWindowSize();
const savedMult = useAppSelector<number>(state => state.mult);
2024-12-12 18:42:33 +03:00
const [closeError, setCloseError] = useState(true);
const [animClose, setAnimClose] = useState(false);
const [initEnergy, setInitEnergy] = useState(energy);
2024-12-12 23:01:22 +03:00
const [clickTime, setClickTime] = useState(0);
const [closeAutoClick, setCloseAutoClick] = useState(true);
const [sameCoords, setSameCoords] = useState(false);
2024-12-13 02:46:21 +03:00
const [sameInterval, setSameInterval] = useState(false);
useAuctionData();
useEffect(() => {
const html = document.querySelector('html');
if(html) {
html.style.overflow = 'scroll';
}
}, []);
2024-12-12 18:42:33 +03:00
useEffect(() => {
setMult(savedMult);
}, [savedMult]);
useEffect(() => {
//@ts-ignore
let timer;
if (points !== coins && coins != 0) {
setClosePoints(false);
timer = setTimeout(() => {
setClosePointsAnim(true);
}, 2000);
}
return () => {
//@ts-ignore
clearTimeout(timer);
};
}, [coins]);
2024-11-18 16:33:44 +03:00
return (
<div className={styles.container}>
<div className={styles.records}>
2024-12-13 02:46:21 +03:00
{!closePoints && <PointsZoom sameInterval={sameInterval} setSameInterval={setSameInterval} sameCoords={sameCoords} setSameCoords={setSameCoords} setCloseAutoClick={setCloseAutoClick} setClickTime={setClickTime} clickTime={clickTime} setMult={setMult} setEnergy={setInitEnergy} setCloseError={setCloseError} setCoins={setCoins} points={coins} setClosePointsAnim={setClosePointsAnim} setClose={setClosePoints} className={styles.pointsAnim} closePointsAnim={closePointsAnim}/>}
<Profile name={name} className={styles.profile} img={img}/>
2024-11-18 16:33:44 +03:00
<h1 style={ETextStyles.RwSb24100} className={styles.title}>Мои рекорды</h1>
<SectionsBlock mult={mult}/>
2024-11-18 16:33:44 +03:00
</div>
<div className={styles.clicker} style={{height: `${height > 670 && 'calc(100vh - 355px)'}`}}>
2024-12-13 02:46:21 +03:00
<ClickerBtn setSameInterval={setSameInterval} closeAutoClick={closeAutoClick} sameCoords={sameCoords} setSameCoords={setSameCoords} clickTime={clickTime} setClickTime={setClickTime} setEnergy={setInitEnergy} coins={coins} setCoins={setCoins} energy={initEnergy} setMult={setMult}/>
2024-11-18 16:33:44 +03:00
</div>
<ClickerFooter />
{styleIndex != 0 && <div>
<StyleElements styleIndex={styleIndex}/>
</div>}
2024-12-12 18:42:33 +03:00
{!closeError && <ModalWindow removeBtn={true} setCloseAnimOut={setAnimClose} closeAnimOut={animClose} setClose={setCloseError} modalBlock={
<DevPopup setClose={setAnimClose} title='Возникла ошибка' text='Мы пока не можем принимать клики, но скоро всё починим.' />
} />}
2024-12-12 23:01:22 +03:00
{!closeAutoClick && <ModalWindow removeBtn={true} setCloseAnimOut={setAnimClose} closeAnimOut={animClose} setClose={setCloseAutoClick} modalBlock={
<DevPopup setClose={setAnimClose} title='Кажется, вы используете автокликер...' text='Ваши клики не отправлены. Давайте играть честно.' img='assets/police.gif'/>
} />}
2024-12-13 02:46:21 +03:00
<AuctionMainPopups/>
2024-11-18 16:33:44 +03:00
</div>
);
}