import { useState } from "react"; import { useTranslation } from "react-i18next"; import { useLocation } from "react-router-dom"; import { Plus, RotateCcw, List, AlertTriangle, ListTree } from "lucide-react"; import { PageHelp } from "../components/shared/PageHelp"; import { useCategories, categoriesErrorText } from "../hooks/useCategories"; import CategoryTree from "../components/categories/CategoryTree"; import CategoryDetailPanel from "../components/categories/CategoryDetailPanel"; import AllKeywordsPanel from "../components/categories/AllKeywordsPanel"; import HierarchyCheckModal from "../components/categories/HierarchyCheckModal"; import OnboardingStepCard from "../components/onboarding/OnboardingStepCard"; import { useOnboarding } from "../contexts/OnboardingContext"; import { categoriesCardModel, onboardingTargetAttributes, showsStepCard, } from "../utils/onboardingPath"; /** The target key of "All keywords" while the Categories step card points at it (#432). */ export const CATEGORIES_ALL_KEYWORDS_TARGET = "categories-all-keywords"; export default function CategoriesPage() { const { t } = useTranslation(); const [showAllKeywords, setShowAllKeywords] = useState(false); const [showReinitConfirm, setShowReinitConfirm] = useState(false); const { state, selectCategory, startCreating, startEditing, cancelEditing, saveCategory, deleteCategory, addKeyword, editKeyword, removeKeyword, reinitializeCategories, moveCategory, checkHierarchy, reattachOrphan, closeHierarchyCheck, } = useCategories(); // The getting-started card (#432) points at "All keywords" while it is on // screen, never at "Reset" (it deletes the keywords and uncategorizes every // transaction). const location = useLocation(); const onboarding = useOnboarding(); const cardModel = categoriesCardModel(onboarding.checklist); const target = showsStepCard(onboarding.mode, onboarding.cardPage, location.pathname) ? cardModel.target : null; const handleReinitialize = async () => { setShowReinitConfirm(false); await reinitializeCategories(); }; const selectedCategory = state.selectedCategoryId !== null ? state.categories.find((c) => c.id === state.selectedCategoryId) ?? null : null; return (
{t("common.loading")}
) : showAllKeywords ? ({t("categories.reinitializeConfirm")}