Skip to content
Merged
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
107 changes: 71 additions & 36 deletions src/app/(admin)/(masters)/chain/form-submit.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import {
DialogTrigger,
} from "@/components/ui/dialog"
import { Form } from "@/components/ui/form"
import { ScrollArea } from "@/components/ui/scroll-area"
import { useUpload } from "@/hooks/useUpload"
import { toUrlAsset } from "@/lib/utils"
import { useCreateChain, useUpdateChain } from "@/modules/chain/hooks/useChain"
Expand All @@ -24,7 +25,7 @@ import { zodResolver } from "@hookform/resolvers/zod"
import { useState } from "react"
import { useForm } from "react-hook-form"

export function FormSubmit({ data }: { data?:TChain }) {
export function FormSubmit({ data }: { data?: TChain }) {
const [dialog, setDialog] = useState(false)
const { mutate: upload } = useUpload()
const { mutate: createChain, isPending: updating } = useCreateChain()
Expand All @@ -36,13 +37,16 @@ export function FormSubmit({ data }: { data?:TChain }) {
logo: "",
ticker: "",
urlScanner: "",
type: ""
type: "",
chainid: 1,
urlApi: '',
urlRpc: ''
},
})

function onSubmit(values: TFormChain) {
if (data?.id) {
updateChain({id:data.id, data:values}, {
updateChain({ id: data.id, data: values }, {
onSuccess: () => {
setDialog(false)
}
Expand All @@ -67,14 +71,23 @@ export function FormSubmit({ data }: { data?:TChain }) {
}
function handleOpen() {
setDialog(!dialog)
form.reset({ ...data })
form.reset({
chainid: data?.chainid,
logo: data?.logo,
name: data?.name,
ticker: data?.ticker,
type: data?.type,
urlApi: data?.urlApi || '-',
urlRpc: data?.urlRpc || '-',
urlScanner: data?.urlScanner,
})
}
return (
<Dialog open={dialog} onOpenChange={handleOpen}>
<form>
<DialogTrigger asChild>
{
data?.id? (
data?.id ? (
<Button size={"icon-sm"}><Icon name="mdi:pencil" /></Button>
) : (
<Button>Add New</Button>
Expand All @@ -92,45 +105,67 @@ export function FormSubmit({ data }: { data?:TChain }) {
<div className="grid gap-4">
<Form {...form}>
<form onSubmit={form.handleSubmit(onSubmit)} className="space-y-3">
<div className="grid md:grid-cols-4 gap-3 items-center">
<div>
<FormImageDropzone defaultImage={data?.logo ? toUrlAsset(form.getValues('logo')!): ''} onChange={handleUploadFile} text="Upload Icon Here..." />
<ScrollArea className="h-[60vh] md:h-auto">
<div className="grid md:grid-cols-4 gap-3 items-center mx-2">
<div className="w-32 md:w-auto">
<FormImageDropzone defaultImage={data?.logo ? toUrlAsset(form.getValues('logo')!) : ''} onChange={handleUploadFile} text="Upload Icon Here..." />
</div>
<div className="md:col-span-3 space-y-2">
<FormInput
placeholder="name"
label="Name" name={"name"}
control={form.control}
/>
<div className="grid grid-cols-2 gap-3">
<FormInput
placeholder="ticker"
label="Ticker" name={"ticker"}
control={form.control}
/>
<div>
<FormInput
placeholder="chainid"
label="Chainid" name={"chainid"}
control={form.control}
/>
<a className="text-xs font-bold underline" href="https://docs.etherscan.io/etherscan-v2/supported-chains" target="_blank" rel="noopener noreferrer">Show Chain ID</a>
</div>
</div>
</div>
</div>
<div className="md:col-span-3 space-y-2">
<div className="grid grid-cols-1 gap-3">
<FormSelect
placeholder="type"
label="Type" name={"type"}
control={form.control}
options={[
{
value: 'Mainnet',
label: 'Mainnet'
},
{
value: 'Testnet',
label: 'Testnet'
},
]}
/>
<FormInput
placeholder="name"
label="Name" name={"name"}
placeholder="urlScanner"
label="Scanner" name={"urlScanner"}
control={form.control}
/>
<FormInput
placeholder="ticker"
label="Ticker" name={"ticker"}
placeholder="urlApi"
label="Url Api" name={"urlApi"}
control={form.control}
/>
<FormInput
placeholder="urlRpc"
label="Url RPC" name={"urlRpc"}
control={form.control}
/>
</div>
</div>
<div className="grid grid-cols-1 gap-3">
<FormSelect
placeholder="type"
label="Type" name={"type"}
control={form.control}
options={[
{
value: 'Mainnet',
label: 'Mainnet'
},
{
value: 'Testnet',
label: 'Testnet'
},
]}
/>
<FormInput
placeholder="urlScanner"
label="Scanner" name={"urlScanner"}
control={form.control}
/>
</div>
</ScrollArea>
<div className="mt-4">
<DialogFooter>
<DialogClose asChild>
Expand Down
35 changes: 33 additions & 2 deletions src/app/(admin)/(masters)/chain/table/columns.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,39 @@ export const columns: ColumnDef<TChain>[] = [
header: 'Type',
},
{
accessorKey: 'urlScanner',
header: 'Scanner',
accessorKey: 'chainid',
header: 'Chainid',
},
{
accessorKey: 'url',
header: 'Urls',
cell: ({ row }) => {
return (
<div>
<div className="flex">
<div className="w-24 shrink-0">Api Url</div>
<div className="w-2">:</div>
<div className="flex-1">
{row.original.urlApi ?? "-"}
</div>
</div>
<div className="flex">
<div className="w-24 shrink-0">Rpc Url</div>
<div className="w-2">:</div>
<div className="flex-1">
{row.original.urlRpc ?? "-"}
</div>
</div>
<div className="flex">
<div className="w-24 shrink-0">Scanner</div>
<div className="w-2">:</div>
<div className="flex-1">
{row.original.urlScanner ?? "-"}
</div>
</div>
</div>
)
}
},
{
id: "actions",
Expand Down
3 changes: 3 additions & 0 deletions src/modules/chain/schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,7 @@ export const formChainSchema = z.object({
ticker: z.string(),
type: z.string(),
urlScanner: z.string().optional(),
chainid: z.coerce.number(),
urlApi: z.string().optional(),
urlRpc: z.string().optional(),
})
4 changes: 4 additions & 0 deletions src/types/chain.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,8 @@ export type TChain = {
logo: string
urlScanner: string
type: string
urlScanner: string | null
chainid: number,
urlApi: string | null,
urlRpc: string | null
}