import { ILinkEventTracker } from '@nitrots/nitro-renderer'; import { FC, useEffect, useMemo, useState } from 'react'; import { AchievementUtilities, AddEventLinkTracker, LocalizeText, RemoveLinkEventTracker } from '../../api'; import { Base, Column, LayoutImage, LayoutProgressBar, NitroCardContentView, NitroCardHeaderView, NitroCardSubHeaderView, NitroCardView, Text } from '../../common'; import { useAchievements } from '../../hooks'; import { AchievementCategoryView } from './views/AchievementCategoryView'; import { AchievementsCategoryListView } from './views/category-list/AchievementsCategoryListView'; export const AchievementsView: FC<{}> = props => { const [ isVisible, setIsVisible ] = useState(false); const { achievementCategories = [], selectedCategoryCode = null, setSelectedCategoryCode = null, selectedAchievementId = -1, setSelectedAchievementId = null, achievementScore = 0, getProgress = 0, getMaxProgress = 0, setAchievementSeen = null } = useAchievements(); const selectedCategory = useMemo(() => { if(selectedCategoryCode === null) return null; return achievementCategories.find(category => (category.code === selectedCategoryCode)); }, [ achievementCategories, selectedCategoryCode ]); useEffect(() => { const linkTracker: ILinkEventTracker = { linkReceived: (url: string) => { const parts = url.split('/'); if(parts.length < 2) return; switch(parts[1]) { case 'show': setIsVisible(true); return; case 'hide': setIsVisible(false); return; case 'toggle': setIsVisible(prevValue => !prevValue); return; } }, eventUrlPrefix: 'achievements/' }; AddEventLinkTracker(linkTracker); return () => RemoveLinkEventTracker(linkTracker); }, []); if(!isVisible) return null; return ( setIsVisible(false) } /> { selectedCategory && setSelectedCategoryCode(null) } className="nitro-achievements-back-arrow" /> { LocalizeText(`quests.${ selectedCategory.code }.name`) } { LocalizeText('achievements.details.categoryprogress', [ 'progress', 'limit' ], [ selectedCategory.getProgress().toString(), selectedCategory.getMaxProgress().toString() ]) } } { !selectedCategory && <> { LocalizeText('achievements.categories.score', [ 'score' ], [ achievementScore.toString() ]) } } { selectedCategory && } ); };