import { useNavigate } from "react-router-dom"; import { useTranslation } from "react-i18next"; import routes from "@/routes"; import styles from "./styles.module.css"; import { useApi, useApiCall } from "@/api"; import { Asset } from "@/api/resources/Assets"; import { useCallback, useEffect, useRef, useState } from "react"; import BlurringSubstrate from "../BlurringSubstrate"; import EnergyValues from "../EnergyValues"; import { UserAura } from "@/api/resources/Auras"; import { useDispatch, useSelector } from "react-redux"; import { getCategoryIdByZodiacSign, getZodiacSignByDate, } from "@/services/zodiac-sign"; import { actions, selectors } from "@/store"; import { getRandomArbitrary } from "@/services/random-value"; import Title from "../Title"; // import { UserDailyForecast } from "@/api/resources/UserDailyForecasts"; import { EPathsFromHome } from "@/store/siteConfig"; import { buildFilename, saveFile } from "../WallpaperPage/utils"; import Onboarding from "../Onboarding"; import TextWithFinger from "../TextWithFinger"; import Slider from "../Slider"; import BestiesHoroscopeSlider, { Horoscope } from "../BestiesHoroscopeSlider"; import PredictionMoonsSlider, { IPredictionMoon, } from "../PredictionMoonsSlider"; import { predictionMoonsPeriods } from "@/data"; import WallpapersZodiacSign from "../WallpapersZodiacSign"; import ThermalSlider from "../ThermalSlider"; import MoonPhaseTracker from "../MoonPhaseTracker"; import EnergyVampirism from "../EnergyVampirism"; import NameHoroscopeSlider from "../NameHoroscopeSlider"; const buttonTextFormatter = (text: string): JSX.Element => { const sentences = text.split("."); return ( <> {sentences[0]}
{sentences[1]} ); }; function HomePage(): JSX.Element { const token = useSelector(selectors.selectToken); const navigate = useNavigate(); const dispatch = useDispatch(); const buttonsRef = useRef(null); const { i18n, t } = useTranslation(); const locale = i18n.language; const birthdate = useSelector(selectors.selectBirthdate); const zodiacSign = getZodiacSignByDate(birthdate); const [asset, setAsset] = useState(); const [moonsAssets, setMoonsAssets] = useState([]); const api = useApi(); const homeConfig = useSelector(selectors.selectHome); const isShowNavbar = homeConfig.isShowNavbar; const onboardingConfigHome = useSelector(selectors.selectOnboardingHome); const compatibilities = useSelector(selectors.selectCompatibilities); const [isShowOnboardingHome, setIsShowOnboardingHome] = useState( !onboardingConfigHome?.isShown ); useEffect(() => { dispatch( actions.onboardingConfig.update({ home: { isShown: true, }, }) ); }, [dispatch]); const handleCompatibility = () => { dispatch( actions.siteConfig.update({ home: { pathFromHome: EPathsFromHome.compatibility, isShowNavbar }, }) ); navigate(routes.client.compatibility()); }; const handleBreath = () => { dispatch( actions.siteConfig.update({ home: { pathFromHome: EPathsFromHome.breath, isShowNavbar }, }) ); navigate(routes.client.breath()); }; const handleMyHoroscope = () => { navigate(routes.client.myHoroscopeResult()); }; const handleMagicBall = () => { navigate(routes.client.magicBall()); }; const assetsData = useCallback(async () => { const { asset_categories } = await api.getAssetCategories({ locale }); const categoryId = getCategoryIdByZodiacSign(zodiacSign, asset_categories); const { assets } = await api.getAssets({ category: String(categoryId || "1"), }); return assets; }, [api, locale, zodiacSign]); const { data: assets, // isPending } = useApiCall(assetsData); useEffect(() => { if (assets) { setAsset(assets[getRandomArbitrary(0, assets?.length || 0)]); } }, [assets]); const auraData = useCallback(async () => { const { user_aura } = await api.getAuras({ token }); return user_aura; }, [api, token]); const { data: aura, // isPending } = useApiCall(auraData); // const dailyForecastData = useCallback(async () => { // const { user_daily_forecast } = await api.getDailyForecasts({ token }); // return user_daily_forecast; // }, [api, token]); // const { // data: dailyForecast, // // isPending // } = useApiCall(dailyForecastData); useEffect(() => { getMoonsImages(); }, []); const getMoonsImages = async () => { const assets = ( await api.getAssets({ category: String("au.prediction_moons" || "1") }) ).assets; const randomAssets: Asset[] = []; for (let i = 0; i < predictionMoonsPeriods.length; i++) { const index = getRandomArbitrary(0, assets.length - 1); randomAssets.push(assets[index]); assets.splice(index, 1); } setMoonsAssets(randomAssets); }; const downloadImg = () => { if (!asset) return; saveFile(asset.url.replace("http://", "https://"), buildFilename("1")); }; const handleBestiesHoroscope = (item: Horoscope) => { const { name, birthDate } = item; navigate( `${routes.client.horoscopeBestiesResult()}?name=${name}&birthDate=${birthDate}` ); }; const handleThermal = (item: Horoscope) => { const { name, birthDate } = item; navigate( `${routes.client.thermalResult()}?name=${name}&birthDate=${birthDate}` ); }; const handlePredictionMoon = (item: IPredictionMoon) => { const { period } = item; navigate(`${routes.client.predictionMoonResult()}?period=${period}`); }; const handleMoonPhaseTracker = () => { navigate(`${routes.client.moonPhaseTracker()}?period=today`); }; const handleEnergyVampirism = () => { navigate(`${routes.client.energyVampirismResult()}?period=today`); }; const handleNameHoroscope = (item: IPredictionMoon) => { navigate(`${routes.client.nameHoroscopeResult()}?period=${item.period}`); }; return (
{/*
*/}
Your energy today
{aura && }
{/* */}
setIsShowOnboardingHome(false)} /> {buttonTextFormatter(t("aura-money_compatibility-button"))} {buttonTextFormatter(t("aura-10_breath-button"))} {buttonTextFormatter( t("Receive an In-Depth Analysis and Today’s Horoscope") )}

{"Get an answer"}

{/* SLIDERS */}
{"Your Besties' Horoscope"} {compatibilities.map((item, index) => ( { handleBestiesHoroscope(item); }} /> ))}
{"Prediction Based on Your Moons"} {predictionMoonsPeriods.map((item, index) => ( { handlePredictionMoon(item); }} /> ))}
{/* END SLIDERS */} {"Energy Vampirism"} {/* SLIDERS */}
{t("Your Name's Horoscope")} {predictionMoonsPeriods.map((item, index) => ( { handleNameHoroscope(item); }} /> ))}
{/* END SLIDERS */} {"AI-based unique Walpapers"} {/* SLIDERS */}
{t("au.thermal_compatibility.result_title")} {compatibilities.map((item, index) => ( { handleThermal(item); }} /> ))}
{/* END SLIDERS */} {/*
{dailyForecast && dailyForecast.forecasts.map((forecast, index) => (
{t("aura.personal_aura.button")}

{forecast.body}

))}
*/}
{/*
*/}
); } export default HomePage;