import { ActionIcon, Group, Menu, Modal, Text, Tooltip } from "@mantine/core"; import { useDisclosure } from "@mantine/hooks"; import { IconRosetteDiscountCheckFilled, IconShieldCheck, } from "@tabler/icons-react"; import { useTranslation } from "react-i18next"; import { useParams } from "react-router-dom"; import { extractPageSlugId } from "@/lib"; import { usePageQuery } from "@/features/page/queries/page-query"; import { usePageVerificationInfoQuery } from "@/ee/page-verification/queries/page-verification-query"; import { useHasFeature } from "@/ee/hooks/use-feature"; import { useUpgradeLabel } from "@/ee/hooks/use-upgrade-label"; import { Feature } from "@/ee/features"; import { SetupVerificationForm } from "./setup-verification-form"; import { ManageVerificationForm } from "./manage-verification-form"; import { getStatusColor, getStatusLabel } from "./verification-status"; type PageVerificationModalProps = { pageId: string; opened: boolean; onClose: () => void; }; export function PageVerificationModal({ pageId, opened, onClose, }: PageVerificationModalProps) { const { t } = useTranslation(); const { data: verificationInfo } = usePageVerificationInfoQuery( opened ? pageId : undefined, ); const status = verificationInfo?.status ?? "none"; return ( {status === "none" ? t("Set up verification") : t("Verify page")} } size={520} > {status === "none" ? ( ) : ( )} ); } type PageVerificationBadgeProps = { readOnly?: boolean; }; export function PageVerificationBadge({ readOnly, }: PageVerificationBadgeProps) { const { t } = useTranslation(); const { pageSlug } = useParams(); const pageSlugId = extractPageSlugId(pageSlug); const hasVerificationFeature = useHasFeature(Feature.PAGE_VERIFICATION); const [opened, { open, close }] = useDisclosure(false); const { data: page } = usePageQuery({ pageId: pageSlugId }); const pageId = page?.id; const { data: verificationInfo, isLoading } = usePageVerificationInfoQuery( hasVerificationFeature ? pageId : undefined, ); const upgradeLabel = useUpgradeLabel(); if (!pageId) return null; if (!hasVerificationFeature) { if (readOnly) return null; return ( ); } if (isLoading) return null; const status = verificationInfo?.status ?? "none"; if (status === "none" && readOnly) return null; return ( <> {status !== "none" ? ( {getStatusLabel(status, t)} ) : !readOnly ? ( ) : null} ); } type PageVerificationMenuItemProps = { pageId?: string; onClick: () => void; }; export function PageVerificationMenuItem({ pageId, onClick, }: PageVerificationMenuItemProps) { const { t } = useTranslation(); const hasVerificationFeature = useHasFeature(Feature.PAGE_VERIFICATION); const upgradeLabel = useUpgradeLabel(); const { data: verificationInfo } = usePageVerificationInfoQuery( hasVerificationFeature ? pageId : undefined, ); const hasVerification = !!verificationInfo && verificationInfo.status !== "none"; const label = hasVerification ? t("Edit verification") : t("Add verification"); const menuItem = ( } onClick={hasVerificationFeature ? onClick : undefined} > {label} ); if (!hasVerificationFeature) { return ( {menuItem} ); } return menuItem; }