Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 14 additions & 3 deletions src/app/commitments/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ import MyCommitmentsFilters from '@/components/MyCommitmentsFilters/MyCommitment
import MyCommitmentsGrid from '@/components/MyCommitmentsGrid'
import MyCommitmentsGridSkeleton from '@/components/MyCommitmentsGridSkeleton'
import CommitmentEarlyExitModal from '@/components/CommitmentEarlyExitModal/CommitmentEarlyExitModal'
import ExportCommitmentsModal from '@/components/export/ExportCommitmentsModal'
import { useWallet } from '@/hooks/useWallet'
import { Commitment, CommitmentStats } from '@/types/commitment'
import { listCommitments } from '@/lib/backend/mocks/contracts'
import { fetchProtocolConstants, ProtocolConstants } from '@/utils/protocol'
Expand Down Expand Up @@ -131,6 +133,7 @@ function getEarlyExitValues(originalAmount: string, asset: string, penaltyPercen

export default function MyCommitments() {
const router = useRouter()
const { address } = useWallet()

// State
const [searchQuery, setSearchQuery] = useState('')
Expand All @@ -139,12 +142,13 @@ export default function MyCommitments() {
const [sortBy, setSortBy] = useState('Newest')

const [earlyExitCommitmentId, setEarlyExitCommitmentId] = useState<string | null>(null)
const [isExportOpen, setIsExportOpen] = useState(false)
const [hasAcknowledged, setHasAcknowledged] = useState(false)
const [commitmentsList, setCommitmentsList] = useState<Commitment[]>(mockCommitments)
const [successMessage, setSuccessMessage] = useState<string | null>(null)
const [isLoading, setIsLoading] = useState(true)
const [protocolConstants, setProtocolConstants] = useState<ProtocolConstants | null>(null)
const [isLoadingConstants, setIsLoadingConstants] = useState(true)
const [, setIsLoadingConstants] = useState(true)

useEffect(() => {
fetchProtocolConstants()
Expand Down Expand Up @@ -189,7 +193,7 @@ export default function MyCommitments() {
}

return filtered
}, [searchQuery, statusFilter, typeFilter, sortBy])
}, [commitmentsList, searchQuery, statusFilter, typeFilter, sortBy])

const commitmentForEarlyExit = commitmentsList.find((c) => c.id === earlyExitCommitmentId)
const earlyExitSummary = useMemo(() => {
Expand Down Expand Up @@ -256,6 +260,7 @@ export default function MyCommitments() {
<MyCommitmentsHeader
onBack={() => router.push('/')}
onCreateNew={() => router.push('/create')}
onExport={() => setIsExportOpen(true)}
/>

{successMessage && (
Expand Down Expand Up @@ -288,7 +293,7 @@ export default function MyCommitments() {
<MyCommitmentsStats
totalActive={mockStats.totalActive}
totalCommittedValue={mockStats.totalCommittedValue}
averageComplianceScore={`${mockStats.avgComplianceScore}%`}
avgComplianceScore={mockStats.avgComplianceScore}
totalFeesGenerated={mockStats.totalFeesGenerated}
/>

Expand Down Expand Up @@ -328,6 +333,12 @@ export default function MyCommitments() {
onClose={closeEarlyExitModal}
/>
)}

<ExportCommitmentsModal
isOpen={isExportOpen}
onClose={() => setIsExportOpen(false)}
ownerAddress={address}
/>
</main>
)
}
40 changes: 28 additions & 12 deletions src/components/MyCommitmentsHeader.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,14 @@

import React from 'react';
import Link from 'next/link';
import { ArrowLeft, Plus } from 'lucide-react';
import { ArrowLeft, Download, Plus } from 'lucide-react';

interface MyCommitmentsHeaderProps {
title?: string;
subtitle?: string;
onBack?: () => void;
onCreateNew?: () => void;
onExport?: () => void;
backHref?: string;
createHref?: string;
}
Expand All @@ -18,6 +19,7 @@ const MyCommitmentsHeader: React.FC<MyCommitmentsHeaderProps> = ({
subtitle = 'View and manage all your liquidity commitments',
onBack,
onCreateNew,
onExport,
backHref = '/',
createHref = '/create',
}) => {
Expand Down Expand Up @@ -57,17 +59,31 @@ const MyCommitmentsHeader: React.FC<MyCommitmentsHeaderProps> = ({
</div>
</div>

<Link
href={createHref}
className="flex items-center gap-2 rounded-[14px] bg-[#0A0A0A] border-t border-[#0FF0FC66] px-6 py-3 text-[14px] font-medium shadow-[0_0_20px_0_#0FF0FC33] transition-all duration-300 ease-[cubic-bezier(0.4,0,0.2,1)] whitespace-nowrap hover:bg-[rgba(0,255,255,0.1)] hover:shadow-[0_0_20px_rgba(0,255,255,0.4)] hover:-translate-y-0.5 focus:outline-none focus-visible:ring-2 focus-visible:ring-[rgba(0,255,255,0.5)] focus-visible:ring-offset-2 focus-visible:ring-offset-[#0A0A0A] max-[768px]:w-full max-[768px]:justify-center"
onClick={handleCreate}
aria-label="Create New Commitment"
>
<Plus size={18} color='#0FF0FC' />
<span className="bg-[linear-gradient(180deg,#F5F5F7_0%,#909091_100%)] bg-clip-text text-transparent">
+ Create New Commitment
</span>
</Link>
<div className="flex items-center gap-3 max-[768px]:w-full max-[768px]:flex-col">
{onExport ? (
<button
type="button"
onClick={onExport}
className="flex items-center gap-2 rounded-[14px] border border-[#0FF0FC66] bg-[#0A0A0A] px-6 py-3 text-[14px] font-medium text-white shadow-[0_0_20px_0_#0FF0FC22] transition-all duration-300 ease-[cubic-bezier(0.4,0,0.2,1)] whitespace-nowrap hover:bg-[rgba(0,255,255,0.1)] hover:shadow-[0_0_20px_rgba(0,255,255,0.35)] hover:-translate-y-0.5 focus:outline-none focus-visible:ring-2 focus-visible:ring-[rgba(0,255,255,0.5)] focus-visible:ring-offset-2 focus-visible:ring-offset-[#0A0A0A] max-[768px]:w-full max-[768px]:justify-center"
aria-label="Export commitment data"
>
<Download size={18} color="#0FF0FC" />
<span>Export</span>
</button>
) : null}

<Link
href={createHref}
className="flex items-center gap-2 rounded-[14px] bg-[#0A0A0A] border-t border-[#0FF0FC66] px-6 py-3 text-[14px] font-medium shadow-[0_0_20px_0_#0FF0FC33] transition-all duration-300 ease-[cubic-bezier(0.4,0,0.2,1)] whitespace-nowrap hover:bg-[rgba(0,255,255,0.1)] hover:shadow-[0_0_20px_rgba(0,255,255,0.4)] hover:-translate-y-0.5 focus:outline-none focus-visible:ring-2 focus-visible:ring-[rgba(0,255,255,0.5)] focus-visible:ring-offset-2 focus-visible:ring-offset-[#0A0A0A] max-[768px]:w-full max-[768px]:justify-center"
onClick={handleCreate}
aria-label="Create New Commitment"
>
<Plus size={18} color='#0FF0FC' />
<span className="bg-[linear-gradient(180deg,#F5F5F7_0%,#909091_100%)] bg-clip-text text-transparent">
+ Create New Commitment
</span>
</Link>
</div>
</header>
</div>
);
Expand Down
Loading
Loading