Tabs
Tabs UI Components.
Main Tabs
The main tabs components which contains the three sections.
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
import { useTabsContext } from "@/providers/tabs.provider";
import { DeployEndpoints } from "../endpoints/DeployEndpoints";
import { EscrowEndpoints } from "../endpoints/EscrowEndpoints";
import { HelperEndpoints } from "../endpoints/HelperEndpoints";
export const MainTabs = () => {
const { activeTab, setActiveTab } = useTabsContext();
return (
<Tabs
key={activeTab}
value={activeTab}
onValueChange={(val) =>
setActiveTab(val as "deploy" | "escrow" | "helper")
}
className="w-full"
>
<TabsList className="grid w-full grid-cols-3">
<TabsTrigger value="deploy">Deploy</TabsTrigger>
<TabsTrigger value="escrow">Escrows</TabsTrigger>
<TabsTrigger value="helper">Helpers</TabsTrigger>
</TabsList>
<div className="p-6">
<TabsContent value="deploy" className="mt-0">
<DeployEndpoints />
</TabsContent>
<TabsContent value="escrow" className="mt-0">
<EscrowEndpoints />
</TabsContent>
<TabsContent value="helper" className="mt-0">
<HelperEndpoints />
</TabsContent>
</div>
</Tabs>
);
};
Deploy Endpoints
Initialize escrow endpoint.
"use client";
import { Button } from "@/components/ui/button";
import { InitializeEscrowForm } from "../forms/InitializeEscrowForm";
import {
Card,
CardContent,
CardDescription,
CardHeader,
CardTitle,
} from "@/components/ui/card";
import { useInitializeEscrow } from "../../hooks/initialize-escrow-form.hook";
export function DeployEndpoints() {
const {
form,
loading,
response,
trustlinesOptions,
currentStep,
addMilestone,
removeMilestone,
loadTemplate,
onSubmit,
nextStep,
prevStep,
} = useInitializeEscrow();
const handleLoadTemplate = () => {
loadTemplate();
};
return (
<Card className="border shadow-sm">
<CardHeader className="pb-3 flex justify-between gap-4">
<div className="flex gap-2 flex-col">
<CardTitle className="text-xl">Deploy Endpoints</CardTitle>
<CardDescription>
Deploy and initialize escrow contracts on the Stellar blockchain
</CardDescription>
</div>
<Button
type="button"
variant="outline"
onClick={handleLoadTemplate}
className="mb-4"
>
Use Template
</Button>
</CardHeader>
<CardContent className="p-6">
<InitializeEscrowForm
form={form}
onSubmit={onSubmit}
addMilestone={addMilestone}
removeMilestone={removeMilestone}
loading={loading}
response={response}
trustlinesOptions={trustlinesOptions.map((option) => ({
value: option.value,
label: option.label || option.value,
}))}
currentStep={currentStep}
nextStep={nextStep}
prevStep={prevStep}
/>
</CardContent>
</Card>
);
}
Escrow Endpoints
All the escrow endpoints divided by tabs.
"use client";
import { useState } from "react";
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
import {
Card,
CardContent,
CardDescription,
CardHeader,
CardTitle,
} from "@/components/ui/card";
import { StartDisputeForm } from "../forms/StartDisputeForm";
import { GetEscrowForm } from "../forms/GetEscrowForm";
import { FundEscrowForm } from "../forms/FundEscrowForm";
import { ChangeMilestoneStatusForm } from "../forms/ChangeMilestoneStatusForm";
import { ChangeMilestoneFlagForm } from "../forms/ChangeMilestoneFlagForm";
import { ReleaseFundsForm } from "../forms/ReleaseFundsForm";
import { ResolveDisputeForm } from "../forms/ResolveDisputeForm";
import { UpdateEscrowForm } from "../forms/UpdateEscrowForm";
import { EscrowCreatedSection } from "../sections/EscrowCreatedSection";
import { useEscrowContext } from "@/providers/escrow.provider";
import { useTabsContext } from "@/providers/tabs.provider";
import { Button } from "@/components/ui/button";
export function EscrowEndpoints() {
const [activeTabEscrow, setActiveTabEscrow] = useState("get-escrow");
const { resetEscrow } = useEscrowContext();
const { setActiveTab } = useTabsContext();
const { escrow } = useEscrowContext();
return (
<Card className="border shadow-sm">
<CardHeader className="pb-3 flex justify-between gap-4">
<div className="flex gap-2 flex-col">
<CardTitle className="text-xl">Escrow Endpoints</CardTitle>
<CardDescription>
Manage escrow contracts, milestones, and funds
</CardDescription>
</div>
{escrow && (
<Button
type="button"
variant="destructive"
onClick={() => {
resetEscrow();
setActiveTab("deploy");
}}
className="mb-4"
>
Reset Escrow
</Button>
)}
</CardHeader>
<CardContent className="p-6">
<Tabs
value={activeTabEscrow}
onValueChange={setActiveTabEscrow}
className="w-full"
>
<TabsList className="w-full flex flex-wrap mb-32 md:mb-4 gap-1">
<TabsTrigger value="get-escrow" className="flex-1">
Get Escrow
</TabsTrigger>
<TabsTrigger value="fund-escrow" className="flex-1">
Fund Escrow
</TabsTrigger>
<TabsTrigger value="change-milestone-status" className="flex-1">
Change Status
</TabsTrigger>
<TabsTrigger value="change-milestone-flag" className="flex-1">
Approve Milestone
</TabsTrigger>
<TabsTrigger value="change-dispute-flag" className="flex-1">
Start Dispute
</TabsTrigger>
<TabsTrigger value="resolve-dispute" className="flex-1">
Resolve Dispute
</TabsTrigger>
<TabsTrigger value="release-funds" className="flex-1">
Release Funds
</TabsTrigger>
<TabsTrigger value="update-escrow" className="flex-1">
Update Escrow
</TabsTrigger>
</TabsList>
<div className="flex flex-col md:flex-row gap-10 w-full">
<div className="w-full md:w-3/4">
<div className="mt-2 pt-4 border-t">
<TabsContent value="get-escrow" className="mt-0">
<GetEscrowForm />
</TabsContent>
<TabsContent value="fund-escrow" className="mt-0">
<FundEscrowForm />
</TabsContent>
<TabsContent value="change-milestone-status" className="mt-0">
<ChangeMilestoneStatusForm />
</TabsContent>
<TabsContent value="change-milestone-flag" className="mt-0">
<ChangeMilestoneFlagForm />
</TabsContent>
<TabsContent value="change-dispute-flag" className="mt-0">
<StartDisputeForm />
</TabsContent>
<TabsContent value="resolve-dispute" className="mt-0">
<ResolveDisputeForm />
</TabsContent>
<TabsContent value="release-funds" className="mt-0">
<ReleaseFundsForm />
</TabsContent>
<TabsContent value="update-escrow" className="mt-0">
<UpdateEscrowForm />
</TabsContent>
</div>
</div>
<EscrowCreatedSection />
</div>
</Tabs>
</CardContent>
</Card>
);
}
Helper Endpoints
Get balances endpoint.
"use client";
import { useState } from "react";
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
import {
Card,
CardContent,
CardDescription,
CardHeader,
CardTitle,
} from "@/components/ui/card";
import { GetMultipleEscrowBalanceForm } from "../forms/GetMultipleEscrowBalanceForm";
export function HelperEndpoints() {
const [activeTab, setActiveTab] = useState("get-multiple-escrow-balance");
return (
<Card className="border shadow-sm">
<CardHeader className="pb-3">
<CardTitle className="text-xl">Helper Endpoints</CardTitle>
<CardDescription>
Utility endpoints for blockchain interactions
</CardDescription>
</CardHeader>
<CardContent className="p-6">
<Tabs value={activeTab} onValueChange={setActiveTab} className="w-full">
<TabsList className="w-full mb-4">
<TabsTrigger value="get-multiple-escrow-balance" className="flex-1">
Get Balances
</TabsTrigger>
</TabsList>
<div className="mt-2 pt-4 border-t">
<TabsContent
value="get-multiple-escrow-balance"
className="flex justify-center mt-0"
>
<GetMultipleEscrowBalanceForm />
</TabsContent>
</div>
</Tabs>
</CardContent>
</Card>
);
}
Last updated
Was this helpful?