From f901a2f1391a9964866a4b27e330cc0c80884bd1 Mon Sep 17 00:00:00 2001 From: Poafs1 Date: Tue, 5 Mar 2024 14:30:46 +0700 Subject: [PATCH 1/4] refactor(pages): revamp code detail contracts section --- src/lib/app-provider/env.ts | 1 + src/lib/components/pagination/usePaginator.ts | 2 +- src/lib/model/contract.ts | 21 +--- .../code-info/table/CodeContractsTable.tsx | 19 ++- src/lib/query/contract.ts | 48 -------- src/lib/services/contract.ts | 69 ++++++++++- src/lib/services/contractService.ts | 115 ++++++------------ 7 files changed, 116 insertions(+), 159 deletions(-) diff --git a/src/lib/app-provider/env.ts b/src/lib/app-provider/env.ts index 9df5decd7..382f70f0d 100644 --- a/src/lib/app-provider/env.ts +++ b/src/lib/app-provider/env.ts @@ -17,6 +17,7 @@ export enum CELATONE_QUERY_KEYS { CONTRACT_QUERY_MSGS = "CELATONE_QUERY_CONTRACT_QUERY_MSGS", CONTRACT_QUERY = "CELATONE_QUERY_CONTRACT_QUERY", CONTRACT_STATE = "CELATONE_QUERY_CONTRACT_STATE", + CONTRACTS_BY_CODE_ID = "CELATONE_QUERY_CONTRACTS_BY_CODE_ID", // ACCOUNT ACCOUNT_DATA = "CELATONE_QUERY_ACCOUNT_DATA", ACCOUNT_TYPE = "CELATONE_QUERY_ACCOUNT_TYPE", diff --git a/src/lib/components/pagination/usePaginator.ts b/src/lib/components/pagination/usePaginator.ts index a7023780d..9f6bc73bc 100644 --- a/src/lib/components/pagination/usePaginator.ts +++ b/src/lib/components/pagination/usePaginator.ts @@ -30,7 +30,7 @@ export const usePaginator = ({ } => { const { currentChainId } = useCelatoneApp(); - const [totalData, setTotalData] = useState(total ?? 0); + const [totalData, setTotalData] = useState(total ?? 0); const [pageSize, setPageSize] = useState(initialState.pageSize ?? 0); const [currentPage, setCurrentPage] = useState( initialState.currentPage diff --git a/src/lib/model/contract.ts b/src/lib/model/contract.ts index 29e5228e7..795b38895 100644 --- a/src/lib/model/contract.ts +++ b/src/lib/model/contract.ts @@ -3,12 +3,11 @@ import { INSTANTIATED_LIST_NAME } from "lib/data"; import { useContractStore } from "lib/providers/store"; import {} from "lib/services/contract"; import { - useContractListByCodeIdPagination, useInstantiatedCountByUserQuery, useInstantiatedListByUserQuery, } from "lib/services/contractService"; import type { ContractListInfo } from "lib/stores/contract"; -import type { BechAddr, BechAddr32, ContractInfo, Option } from "lib/types"; +import type { BechAddr, BechAddr32 } from "lib/types"; import { formatSlugName, getCurrentDate, getDefaultDate } from "lib/utils"; interface InstantiatedByMeState { @@ -58,21 +57,3 @@ export const useInstantiatedMockInfoByMe = (): ContractListInfo => { isContractRemovable: false, }; }; - -export const useContractsByCodeId = ( - codeId: number, - offset: number, - pageSize: number -) => { - const { getContractLocalInfo } = useContractStore(); - const { data: rawCodeContracts, isLoading } = - useContractListByCodeIdPagination(codeId, offset, pageSize); - const contracts: Option = rawCodeContracts?.map( - (contract) => ({ - ...contract, - ...getContractLocalInfo(contract.contractAddress), - }) - ); - - return { contracts, isLoading }; -}; diff --git a/src/lib/pages/code-details/components/code-info/table/CodeContractsTable.tsx b/src/lib/pages/code-details/components/code-info/table/CodeContractsTable.tsx index 383c8c7f8..df1bcb3cc 100644 --- a/src/lib/pages/code-details/components/code-info/table/CodeContractsTable.tsx +++ b/src/lib/pages/code-details/components/code-info/table/CodeContractsTable.tsx @@ -6,8 +6,7 @@ import { useInternalNavigate } from "lib/app-provider"; import { Pagination } from "lib/components/pagination"; import { usePaginator } from "lib/components/pagination/usePaginator"; import { ContractsTable, TableTitle } from "lib/components/table"; -import { useContractsByCodeId } from "lib/model/contract"; -import { useContractListCountByCodeId } from "lib/services/contractService"; +import { useContractsByCodeId } from "lib/services/contractService"; import type { BechAddr32 } from "lib/types"; import { NoContracts } from "./NoContracts"; @@ -25,7 +24,6 @@ export const CodeContractsTable = observer( query: { contract }, }); - const { data: totalData, refetch } = useContractListCountByCodeId(codeId); const { pagesQuantity, currentPage, @@ -34,7 +32,6 @@ export const CodeContractsTable = observer( setPageSize, offset, } = usePaginator({ - total: totalData, initialState: { pageSize: 10, currentPage: 1, @@ -42,10 +39,10 @@ export const CodeContractsTable = observer( }, }); - const { contracts, isLoading } = useContractsByCodeId( + const { data, isLoading, refetch } = useContractsByCodeId( codeId, - offset, - pageSize + pageSize, + offset ); useEffect(() => { @@ -69,21 +66,21 @@ export const CodeContractsTable = observer( <> } onRowSelect={onRowSelect} /> - {!!totalData && totalData > 10 && ( + {!!data?.total && data.total > 10 && ( parseWithError(zContractQueryMsgs, data)); + +export const zContractItem = z.object({ + address: zBechAddr32, + admin: z + .object({ + address: zBechAddr, + }) + .nullable(), + contract_histories: z.array( + z.object({ + account: z.object({ + address: zBechAddr, + }), + block: z.object({ + timestamp: z.string(), + }), + remark: zContractHistoryRemark, + }) + ), + init_by: z.array( + z.object({ + account: z.object({ + address: zBechAddr, + }), + }) + ), + label: z.string(), +}); +const zContractsData = z + .object({ + items: z.array(zContractItem), + total: z.number().nonnegative(), + }) + .transform((val) => ({ + items: val.items.map((item) => ({ + contractAddress: item.address as BechAddr32, + instantiator: item.init_by[0]?.account.address as BechAddr, + label: item.label, + admin: item.admin?.address as BechAddr, + latestUpdater: item.contract_histories[0]?.account.address as BechAddr, + latestUpdated: parseDateOpt(item.contract_histories[0]?.block.timestamp), + remark: item.contract_histories[0]?.remark, + })), + total: val.total, + })); +export type ContractsData = z.infer; + +export const getContractsByCodeId = async ( + endpoint: string, + codeId: number, + limit: number, + offset: number +): Promise => + axios + .get(`${endpoint}/${codeId}/contracts`, { + params: { + limit, + offset, + }, + }) + .then(({ data }) => parseWithError(zContractsData, data)); diff --git a/src/lib/services/contractService.ts b/src/lib/services/contractService.ts index 6f75caaff..18af02db3 100644 --- a/src/lib/services/contractService.ts +++ b/src/lib/services/contractService.ts @@ -9,12 +9,11 @@ import { useGovConfig, useWasmConfig, } from "lib/app-provider"; +import { useContractStore } from "lib/providers/store"; import { getAdminByContractAddressesQueryDocument, getContractByContractAddressQueryDocument, getContractListByAdmin, - getContractListByCodeIdPagination, - getContractListCountByCodeId, getInstantiatedCountByUserQueryDocument, getInstantiatedListByUserQueryDocument, } from "lib/query"; @@ -22,12 +21,11 @@ import type { ContractLocalInfo } from "lib/stores/contract"; import type { Option, Dict, - ContractInfo, BechAddr20, BechAddr32, BechAddr, + ContractInfo, } from "lib/types"; -import { parseDateOpt } from "lib/utils"; import { getCodeIdInfo } from "./code"; import { @@ -36,6 +34,7 @@ import { getContractQueryMsgs, getContractTableCounts, getContracts, + getContractsByCodeId, getInstantiatedContractsByAddress, getMigrationHistoriesByContractAddress, } from "./contract"; @@ -282,80 +281,6 @@ export const useMigrationHistoriesByContractAddress = ( ); }; -export const useContractListByCodeIdPagination = ( - codeId: Option, - offset: number, - pageSize: number -): UseQueryResult => { - const { indexerGraphClient } = useCelatoneApp(); - - const queryFn = useCallback(async () => { - if (!codeId) throw new Error("Code ID not found (useContractListByCodeId)"); - - return indexerGraphClient - .request(getContractListByCodeIdPagination, { codeId, offset, pageSize }) - .then(({ contracts }) => - contracts.map((contract) => ({ - contractAddress: contract.address as BechAddr32, - instantiator: contract.init_by[0]?.account.address as BechAddr, - label: contract.label, - admin: contract.admin?.address as BechAddr, - latestUpdater: contract.contract_histories[0]?.account - .address as BechAddr, - latestUpdated: parseDateOpt( - contract.contract_histories[0]?.block.timestamp - ), - remark: contract.contract_histories[0]?.remark, - })) - ); - }, [codeId, indexerGraphClient, offset, pageSize]); - - return useQuery( - [ - CELATONE_QUERY_KEYS.CONTRACTS_BY_CODE_ID_PAGINATION, - codeId, - indexerGraphClient, - offset, - pageSize, - ], - queryFn, - { - keepPreviousData: true, - enabled: Boolean(codeId), - } - ); -}; - -export const useContractListCountByCodeId = ( - codeId: Option -): UseQueryResult> => { - const { indexerGraphClient } = useCelatoneApp(); - - const queryFn = useCallback(async () => { - if (!codeId) - throw new Error("Code ID not found (useContractListCountByCodeId)"); - - return indexerGraphClient - .request(getContractListCountByCodeId, { - codeId, - }) - .then(({ contracts_aggregate }) => contracts_aggregate?.aggregate?.count); - }, [codeId, indexerGraphClient]); - - return useQuery( - [ - CELATONE_QUERY_KEYS.CONTRACTS_BY_CODE_ID_COUNT, - codeId, - indexerGraphClient, - ], - queryFn, - { - keepPreviousData: true, - enabled: Boolean(codeId), - } - ); -}; - export const useInstantiatedContractsByAddress = ( address: BechAddr, limit: number, @@ -434,3 +359,37 @@ export const useContractQueryMsgs = (contractAddress: BechAddr32) => { } ); }; + +export const useContractsByCodeId = ( + codeId: number, + limit: number, + offset: number +) => { + const endpoint = useBaseApiRoute("codes"); + const { getContractLocalInfo } = useContractStore(); + + const { data, isLoading, refetch } = useQuery( + [CELATONE_QUERY_KEYS.CONTRACTS_BY_CODE_ID, endpoint, limit, offset], + async () => getContractsByCodeId(endpoint, codeId, limit, offset), + { + retry: 1, + refetchOnWindowFocus: false, + } + ); + + const contracts: Option = data?.items?.map( + (contract) => ({ + ...contract, + ...getContractLocalInfo(contract.contractAddress), + }) + ); + + return { + data: { + ...data, + items: contracts, + }, + isLoading, + refetch, + }; +}; From 0d37625218ffce5880144972a7c81acb36ebf29d Mon Sep 17 00:00:00 2001 From: Poafs1 Date: Tue, 5 Mar 2024 14:33:07 +0700 Subject: [PATCH 2/4] refactor: update change log --- CHANGELOG.md | 1 + src/lib/components/pagination/usePaginator.ts | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6316726b2..f4b250478 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -67,6 +67,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Improvements +- [#805](https://github.com/alleslabs/celatone-frontend/pull/805) Revamp code detail page contracts section - [#802](https://github.com/alleslabs/celatone-frontend/pull/802) Revamp code detail page - [#800](https://github.com/alleslabs/celatone-frontend/pull/800) Add logging error in Zod parsing - [#798](https://github.com/alleslabs/celatone-frontend/pull/798) Add empty state to proposal messages diff --git a/src/lib/components/pagination/usePaginator.ts b/src/lib/components/pagination/usePaginator.ts index 9f6bc73bc..a7023780d 100644 --- a/src/lib/components/pagination/usePaginator.ts +++ b/src/lib/components/pagination/usePaginator.ts @@ -30,7 +30,7 @@ export const usePaginator = ({ } => { const { currentChainId } = useCelatoneApp(); - const [totalData, setTotalData] = useState(total ?? 0); + const [totalData, setTotalData] = useState(total ?? 0); const [pageSize, setPageSize] = useState(initialState.pageSize ?? 0); const [currentPage, setCurrentPage] = useState( initialState.currentPage From 29b99bfe90962bd94e04cdd76047393faf28e56e Mon Sep 17 00:00:00 2001 From: Poafs1 Date: Wed, 6 Mar 2024 13:46:24 +0700 Subject: [PATCH 3/4] refactor: fix pr comment --- src/lib/app-provider/env.ts | 2 -- src/lib/model/contract.ts | 1 - .../code-info/table/CodeContractsTable.tsx | 36 ++++++------------- src/lib/pages/code-details/data.ts | 36 +++++++++++++++++++ src/lib/services/contractService.ts | 34 ++++-------------- 5 files changed, 53 insertions(+), 56 deletions(-) create mode 100644 src/lib/pages/code-details/data.ts diff --git a/src/lib/app-provider/env.ts b/src/lib/app-provider/env.ts index 9f74a33c0..fbbb19681 100644 --- a/src/lib/app-provider/env.ts +++ b/src/lib/app-provider/env.ts @@ -43,8 +43,6 @@ export enum CELATONE_QUERY_KEYS { INSTANTIATED_LIST_BY_WALLET_ADDRESS = "CELATONE_QUERY_INSTANTIATED_LIST_BY_WALLET_ADDRESS", ADMINS_BY_CONTRACTS = "CELATONE_QUERY_ADMINS_BY_CONTRACTS", CONTRACT_MIGRATION_HISTORIES_BY_CONTRACT_ADDRESS = "CELATONE_QUERY_CONTRACT_MIGRATION_HISTORIES_BY_CONTRACT_ADDRESS", - CONTRACTS_BY_CODE_ID_PAGINATION = "CELATONE_QUERY_CONTRACTS_BY_CODE_ID_PAGINATION", - CONTRACTS_BY_CODE_ID_COUNT = "CELATONE_QUERY_CONTRACTS_BY_CODE_ID_COUNT", // X/STAKING DELEGATIONS_BY_ADDRESS = "CELATONE_QUERY_DELEGATIONS_BY_ADDRESS", VALIDATOR_INFO_BY_ADDRESS = "CELATONE_QUERY_VALIDATOR_INFO_BY_ADDRESS", diff --git a/src/lib/model/contract.ts b/src/lib/model/contract.ts index 795b38895..374fa8d2c 100644 --- a/src/lib/model/contract.ts +++ b/src/lib/model/contract.ts @@ -1,7 +1,6 @@ import { useCurrentChain } from "lib/app-provider"; import { INSTANTIATED_LIST_NAME } from "lib/data"; import { useContractStore } from "lib/providers/store"; -import {} from "lib/services/contract"; import { useInstantiatedCountByUserQuery, useInstantiatedListByUserQuery, diff --git a/src/lib/pages/code-details/components/code-info/table/CodeContractsTable.tsx b/src/lib/pages/code-details/components/code-info/table/CodeContractsTable.tsx index df1bcb3cc..431b0825e 100644 --- a/src/lib/pages/code-details/components/code-info/table/CodeContractsTable.tsx +++ b/src/lib/pages/code-details/components/code-info/table/CodeContractsTable.tsx @@ -1,12 +1,10 @@ import { observer } from "mobx-react-lite"; -import type { ChangeEvent } from "react"; -import { useEffect } from "react"; import { useInternalNavigate } from "lib/app-provider"; import { Pagination } from "lib/components/pagination"; import { usePaginator } from "lib/components/pagination/usePaginator"; import { ContractsTable, TableTitle } from "lib/components/table"; -import { useContractsByCodeId } from "lib/services/contractService"; +import { useCodeContracts } from "lib/pages/code-details/data"; import type { BechAddr32 } from "lib/types"; import { NoContracts } from "./NoContracts"; @@ -26,6 +24,7 @@ export const CodeContractsTable = observer( const { pagesQuantity, + setTotalData, currentPage, setCurrentPage, pageSize, @@ -39,26 +38,9 @@ export const CodeContractsTable = observer( }, }); - const { data, isLoading, refetch } = useContractsByCodeId( - codeId, - pageSize, - offset - ); - - useEffect(() => { - setCurrentPage(1); - }, [pageSize, setCurrentPage]); - - const onPageChange = (nextPage: number) => { - refetch(); - setCurrentPage(nextPage); - }; - - const onPageSizeChange = (e: ChangeEvent) => { - const size = Number(e.target.value); - refetch(); - setPageSize(size); - }; + const { data, isLoading } = useCodeContracts(codeId, pageSize, offset, { + onSuccess: ({ total }) => setTotalData(total), + }); const tableHeaderId = "contractTableHeader"; @@ -83,8 +65,12 @@ export const CodeContractsTable = observer( totalData={data.total} scrollComponentId={tableHeaderId} pageSize={pageSize} - onPageChange={onPageChange} - onPageSizeChange={onPageSizeChange} + onPageChange={setCurrentPage} + onPageSizeChange={(e) => { + const size = Number(e.target.value); + setPageSize(size); + setCurrentPage(1); + }} /> )} diff --git a/src/lib/pages/code-details/data.ts b/src/lib/pages/code-details/data.ts new file mode 100644 index 000000000..018ca1814 --- /dev/null +++ b/src/lib/pages/code-details/data.ts @@ -0,0 +1,36 @@ +import type { UseQueryOptions } from "@tanstack/react-query"; + +import { useContractStore } from "lib/providers/store"; +import type { ContractsData } from "lib/services/contract"; +import { useContractsByCodeId } from "lib/services/contractService"; +import type { ContractInfo, Option } from "lib/types"; + +export const useCodeContracts = ( + codeId: number, + limit: number, + offset: number, + options: Pick, "onSuccess"> = {} +) => { + const { getContractLocalInfo } = useContractStore(); + const { data, isLoading } = useContractsByCodeId( + codeId, + limit, + offset, + options + ); + + const contracts: Option = data?.items?.map( + (contract) => ({ + ...contract, + ...getContractLocalInfo(contract.contractAddress), + }) + ); + + return { + data: { + ...data, + items: contracts, + }, + isLoading, + }; +}; diff --git a/src/lib/services/contractService.ts b/src/lib/services/contractService.ts index 705b4c79d..00545f5df 100644 --- a/src/lib/services/contractService.ts +++ b/src/lib/services/contractService.ts @@ -9,7 +9,6 @@ import { useGovConfig, useWasmConfig, } from "lib/app-provider"; -import { useContractStore } from "lib/providers/store"; import { getAdminByContractAddressesQueryDocument, getContractByContractAddressQueryDocument, @@ -18,14 +17,7 @@ import { getInstantiatedListByUserQueryDocument, } from "lib/query"; import type { ContractLocalInfo } from "lib/stores/contract"; -import type { - BechAddr, - BechAddr20, - BechAddr32, - ContractInfo, - Dict, - Option, -} from "lib/types"; +import type { BechAddr, BechAddr20, BechAddr32, Dict, Option } from "lib/types"; import { getCodeIdInfo } from "./code"; import { @@ -40,6 +32,7 @@ import { } from "./contract"; import type { ContractData, + ContractsData, ContractsResponse, ContractTableCounts, MigrationHistoriesResponse, @@ -363,33 +356,18 @@ export const useContractQueryMsgs = (contractAddress: BechAddr32) => { export const useContractsByCodeId = ( codeId: number, limit: number, - offset: number + offset: number, + options: Pick, "onSuccess"> = {} ) => { const endpoint = useBaseApiRoute("codes"); - const { getContractLocalInfo } = useContractStore(); - const { data, isLoading, refetch } = useQuery( + return useQuery( [CELATONE_QUERY_KEYS.CONTRACTS_BY_CODE_ID, endpoint, limit, offset], async () => getContractsByCodeId(endpoint, codeId, limit, offset), { retry: 1, refetchOnWindowFocus: false, + ...options, } ); - - const contracts: Option = data?.items?.map( - (contract) => ({ - ...contract, - ...getContractLocalInfo(contract.contractAddress), - }) - ); - - return { - data: { - ...data, - items: contracts, - }, - isLoading, - refetch, - }; }; From 4203b42285000b246f27fa42e8c3c7299ffb6a0f Mon Sep 17 00:00:00 2001 From: Poafs1 Date: Thu, 7 Mar 2024 17:50:05 +0700 Subject: [PATCH 4/4] feat(types): change contracts by id to use contract response validator and interface --- src/lib/pages/code-details/data.ts | 4 +- src/lib/services/contract.ts | 58 ++--------------------------- src/lib/services/contractService.ts | 3 +- 3 files changed, 6 insertions(+), 59 deletions(-) diff --git a/src/lib/pages/code-details/data.ts b/src/lib/pages/code-details/data.ts index 018ca1814..a0474fb90 100644 --- a/src/lib/pages/code-details/data.ts +++ b/src/lib/pages/code-details/data.ts @@ -1,7 +1,7 @@ import type { UseQueryOptions } from "@tanstack/react-query"; import { useContractStore } from "lib/providers/store"; -import type { ContractsData } from "lib/services/contract"; +import type { ContractsResponse } from "lib/services/contract"; import { useContractsByCodeId } from "lib/services/contractService"; import type { ContractInfo, Option } from "lib/types"; @@ -9,7 +9,7 @@ export const useCodeContracts = ( codeId: number, limit: number, offset: number, - options: Pick, "onSuccess"> = {} + options: Pick, "onSuccess"> = {} ) => { const { getContractLocalInfo } = useContractStore(); const { data, isLoading } = useContractsByCodeId( diff --git a/src/lib/services/contract.ts b/src/lib/services/contract.ts index bc9329d5e..670191293 100644 --- a/src/lib/services/contract.ts +++ b/src/lib/services/contract.ts @@ -15,13 +15,7 @@ import { zPublicContractInfo, zUtcDate, } from "lib/types"; -import { - encode, - parseDateOpt, - parseTxHash, - parseWithError, - snakeToCamel, -} from "lib/utils"; +import { encode, parseTxHash, parseWithError, snakeToCamel } from "lib/utils"; export interface ContractCw2Info { contract: string; @@ -272,58 +266,12 @@ export const getContractQueryMsgs = async ( .get(`${endpoint}/${encodeURIComponent(contractAddress)}/query-msgs`) .then(({ data }) => parseWithError(zContractQueryMsgs, data)); -export const zContractItem = z.object({ - address: zBechAddr32, - admin: z - .object({ - address: zBechAddr, - }) - .nullable(), - contract_histories: z.array( - z.object({ - account: z.object({ - address: zBechAddr, - }), - block: z.object({ - timestamp: z.string(), - }), - remark: zContractHistoryRemark, - }) - ), - init_by: z.array( - z.object({ - account: z.object({ - address: zBechAddr, - }), - }) - ), - label: z.string(), -}); -const zContractsData = z - .object({ - items: z.array(zContractItem), - total: z.number().nonnegative(), - }) - .transform((val) => ({ - items: val.items.map((item) => ({ - contractAddress: item.address as BechAddr32, - instantiator: item.init_by[0]?.account.address as BechAddr, - label: item.label, - admin: item.admin?.address as BechAddr, - latestUpdater: item.contract_histories[0]?.account.address as BechAddr, - latestUpdated: parseDateOpt(item.contract_histories[0]?.block.timestamp), - remark: item.contract_histories[0]?.remark, - })), - total: val.total, - })); -export type ContractsData = z.infer; - export const getContractsByCodeId = async ( endpoint: string, codeId: number, limit: number, offset: number -): Promise => +): Promise => axios .get(`${endpoint}/${codeId}/contracts`, { params: { @@ -331,4 +279,4 @@ export const getContractsByCodeId = async ( offset, }, }) - .then(({ data }) => parseWithError(zContractsData, data)); + .then(({ data }) => parseWithError(zContractsResponse, data)); diff --git a/src/lib/services/contractService.ts b/src/lib/services/contractService.ts index 00545f5df..99929040e 100644 --- a/src/lib/services/contractService.ts +++ b/src/lib/services/contractService.ts @@ -32,7 +32,6 @@ import { } from "./contract"; import type { ContractData, - ContractsData, ContractsResponse, ContractTableCounts, MigrationHistoriesResponse, @@ -357,7 +356,7 @@ export const useContractsByCodeId = ( codeId: number, limit: number, offset: number, - options: Pick, "onSuccess"> = {} + options: Pick, "onSuccess"> = {} ) => { const endpoint = useBaseApiRoute("codes");