db_kyc_project/frontend/src/shared/Clicker/SectionsBlock/SectionsBlock.tsx

90 lines
4.0 KiB
TypeScript
Raw Normal View History

import React, { useEffect, useState } from 'react';
2024-11-18 16:33:44 +03:00
import styles from './sectionsblock.module.css';
import { CardSection } from '../../Elements/CardSection';
import { ETextStyles } from '../../texts';
import { PointsBlock } from '../../Elements/PointsBlock';
import { ModalWindow } from '../../ModalWindow';
import { ClickerPopup } from '../ClickerPopup';
import { useNavigate } from 'react-router-dom';
import { UsersIcons } from '../../Elements/UsersIcons';
import { formatNumber } from '../../../utils/formatNumber';
import { useAppSelector } from '../../hooks/useAppSelector';
2024-11-18 16:33:44 +03:00
interface ISectionsBlock {
mult:number;
}
export function SectionsBlock({ mult }: ISectionsBlock) {
2024-11-18 16:33:44 +03:00
const [close, setClose] = useState(true);
const navigate = useNavigate();
const referralStorage = Number(useAppSelector<string | undefined>(state => state.me.data.referralStorage));
//const referralStorage = 500;
const maxReferralStorage = useAppSelector<number>(state => state.me.data.maxStorage);
const [referralPercent, serReferralPercent] = useState(0);
useEffect(() => {
if(referralStorage >= maxReferralStorage) {
serReferralPercent(100);
} else {
serReferralPercent(referralStorage / maxReferralStorage * 100);
}
}, [referralStorage, maxReferralStorage]);
2024-11-18 16:33:44 +03:00
2024-11-24 21:12:26 +03:00
const isDev = true;
2024-11-18 16:33:44 +03:00
const multipCards = [
{
title: 'Что он делает',
text: <span>Увеличивает получение баллов с&nbsp;одного клика в&nbsp;столько раз, сколько указано в&nbsp;рамке.</span>,
2024-11-18 16:33:44 +03:00
img: 'assets/Rocket.png'
},
{
title: 'Как его увеличить',
text: <span>Чем выше концентрация&nbsp;&mdash; клики в&nbsp;час, тем выше множитель, он&nbsp;рассчитывается по&nbsp;формуле.</span>,
2024-11-18 16:33:44 +03:00
img: 'assets/Monocle.png'
},
{
title: 'Может ли он уменьшиться',
text: <span>Да, если снизится концентрация или долго не&nbsp;заходить в&nbsp;приложение и&nbsp;не&nbsp;совершать клики.</span>,
img: 'assets/Chain.png'
},
];
return (
<div className={styles.sectionContainer}>
<div className={styles.leftContainer}>
<CardSection title='Место в топе' onClick={() => {!isDev ? navigate('/rating') : navigate('/dev?type=rating')}}>
{<div className={`${styles.bottomRank} ${isDev ? styles.dev : ''}`}>
2024-11-18 16:33:44 +03:00
<div style={ETextStyles.InSb12120}>
<span className={styles.rank1}>#</span>
<span>{formatNumber(1)}</span>
2024-11-18 16:33:44 +03:00
</div>
<UsersIcons size={16}/>
</div>}
</CardSection>
<CardSection title='Множитель' onClick={() => { setClose(false) }}>
<p style={ETextStyles.InSb12120}>
<span style={{color: 'var(--primary)'}}>{'X '}</span>
{mult}
</p>
2024-11-18 16:33:44 +03:00
</CardSection>
</div>
<CardSection title='Реферальное хранилище' className={styles.rigthEl} onClick={() => { navigate('/referral') }}>
{<div>
<PointsBlock points={formatNumber(referralStorage.toFixed(2))} className={styles.scalePoints} />
2024-11-18 16:33:44 +03:00
<div className={styles.scaleContainer}>
<div className={`${styles.scale} ${referralPercent === 100 ? styles.scaleFull : ''}`} style={{ width: `${referralPercent}%` }}></div>
2024-11-18 16:33:44 +03:00
</div>
<p className={`${styles.scaleText} ${referralPercent === 100 ? styles.textFull : ''}`}>
{referralPercent === 100 ? 'Хранилище заполнено, заберите коины' : 'Когда хранилище заполнится, вы сможете забрать баллы'}
2024-11-18 16:33:44 +03:00
</p>
</div>}
</CardSection>
{!close && <ModalWindow setCloseAnimOut={setClose} setClose={setClose} modalBlock={
<ClickerPopup title='Что такое множитель' cards={multipCards} setClose={setClose}/>
} />}
</div>
);
}