import React from 'react'; import { useNavigate } from 'react-router-dom'; import { useTranslation } from 'react-i18next'; import { useQuery } from '@tanstack/react-query'; import { ChevronRight, HelpCircle } from 'lucide-react'; import { YStack, XStack } from '@tamagui/stacks'; import { SizableText as Text } from '@tamagui/text'; import { YGroup } from '@tamagui/group'; import { ListItem } from '@tamagui/list-item'; import { MobileShell } from './components/MobileShell'; import { MobileCard, CTAButton, SkeletonCard } from './components/Primitives'; import { useAdminTheme } from './theme'; import { useBackNavigation } from './hooks/useBackNavigation'; import { adminPath, ADMIN_PROFILE_PATH } from '../constants'; import { fetchHelpCenterArticles, type HelpCenterArticleSummary } from '../api'; const FAQ_SLUGS = new Set(['admin-issue-resolution']); function isFaqArticle(article: HelpCenterArticleSummary): boolean { const title = article.title?.toLowerCase() ?? ''; return FAQ_SLUGS.has(article.slug) || article.slug.startsWith('faq-') || title.includes('faq'); } export default function MobileHelpCenterPage() { const navigate = useNavigate(); const { t, i18n } = useTranslation(['management', 'dashboard']); const theme = useAdminTheme(); const back = useBackNavigation(ADMIN_PROFILE_PATH); const locale = i18n.language; const { data, isLoading, isError, refetch } = useQuery({ queryKey: ['mobile', 'help-center', locale], queryFn: () => fetchHelpCenterArticles(locale), }); const articles = Array.isArray(data) ? data : []; const faqArticles = articles.filter(isFaqArticle); const guideArticles = articles.filter((article) => !isFaqArticle(article)); return ( {isLoading ? ( ) : null} {isError ? ( {t('dashboard:help.error', 'Help could not be loaded.')} refetch()} fullWidth={false} /> ) : null} {!isLoading && !isError ? ( navigate(adminPath(`/mobile/help/${encodeURIComponent(slug)}`))} /> navigate(adminPath(`/mobile/help/${encodeURIComponent(slug)}`))} /> ) : null} ); } function HelpSection({ title, items, emptyLabel, icon: IconCmp, onSelect, }: { title: string; items: HelpCenterArticleSummary[]; emptyLabel: string; icon?: React.ComponentType<{ size?: number; color?: string }>; onSelect: (slug: string) => void; }) { const theme = useAdminTheme(); return ( {IconCmp ? ( ) : null} {title} {items.length === 0 ? ( {emptyLabel} ) : ( {items.map((item) => ( onSelect(item.slug)} title={ {item.title} } subTitle={ item.summary ? ( {item.summary} ) : undefined } iconAfter={} /> ))} )} ); }