"use client"; import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import { Check, ExternalLink, Mail } from "lucide-react"; import Link from "next/link"; import { useParams } from "next/navigation"; import { useEffect, useState } from "react"; import { toast } from "sonner"; import { USER_QUERY_KEY } from "@/atoms/user/user-query.atoms"; import { Button } from "@/components/ui/button"; import { Card, CardContent } from "@/components/ui/card"; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { Separator } from "@/components/ui/separator"; import { Skeleton } from "@/components/ui/skeleton"; import { Spinner } from "@/components/ui/spinner"; import type { IncentiveTaskInfo } from "@/contracts/types/incentive-tasks.types"; import { incentiveTasksApiService } from "@/lib/apis/incentive-tasks-api.service"; import { stripeApiService } from "@/lib/apis/stripe-api.service"; import { trackIncentivePageViewed, trackIncentiveTaskClicked, trackIncentiveTaskCompleted, } from "@/lib/posthog/events"; import { cn } from "@/lib/utils"; export function MorePagesContent() { const params = useParams(); const queryClient = useQueryClient(); const searchSpaceId = params?.search_space_id ?? ""; const [claimOpen, setClaimOpen] = useState(false); useEffect(() => { trackIncentivePageViewed(); }, []); const { data, isLoading } = useQuery({ queryKey: ["incentive-tasks"], queryFn: () => incentiveTasksApiService.getTasks(), }); const { data: stripeStatus } = useQuery({ queryKey: ["stripe-status"], queryFn: () => stripeApiService.getStatus(), }); const pageBuyingEnabled = stripeStatus?.page_buying_enabled ?? true; const completeMutation = useMutation({ mutationFn: incentiveTasksApiService.completeTask, onSuccess: (response, taskType) => { if (response.success) { toast.success(response.message); const task = data?.tasks.find((t) => t.task_type === taskType); if (task) { trackIncentiveTaskCompleted(taskType, task.pages_reward); } queryClient.invalidateQueries({ queryKey: ["incentive-tasks"] }); queryClient.invalidateQueries({ queryKey: USER_QUERY_KEY }); } }, onError: () => { toast.error("Failed to complete task. Please try again."); }, }); const handleTaskClick = (task: IncentiveTaskInfo) => { if (!task.completed) { trackIncentiveTaskClicked(task.task_type); completeMutation.mutate(task.task_type); } }; return (

Get Free Pages

Claim your free page offer and earn bonus pages

{/* 3k free offer */}
3k

Claim 3,000 Free Pages

Limited offer. Schedule a meeting or email us to claim.

{/* Free tasks */}

Earn Bonus Pages

{isLoading ? (
) : (
{data?.tasks.map((task) => (
{task.completed ? ( ) : ( +{task.pages_reward} )}

{task.title}

))}
)}
{/* Link to buy pages */}

Need more?

{pageBuyingEnabled ? ( ) : (

Page purchases are temporarily unavailable.

)}
{/* Claim 3k dialog */} Claim 3,000 Free Pages Send us an email to claim your free 3,000 pages. Include your account email and primary usecase for free pages.
); }