diff --git a/subgraph/src/Curate.ts b/subgraph/src/Curate.ts index e3f604e..8f780f3 100644 --- a/subgraph/src/Curate.ts +++ b/subgraph/src/Curate.ts @@ -84,17 +84,17 @@ export function handleRequestSubmitted(event: RequestSubmitted): void { item.latestRequester = ensureUser(event.transaction.from.toHexString()).id; item.latestRequestResolutionTime = ZERO; item.latestRequestSubmissionTime = event.block.timestamp; + item.save(); let newStatus = getExtendedStatus(item.status, item.disputed); if (itemInfo.value1.equals(ONE)) { registry.numberOfPending = registry.numberOfPending.plus(ONE); + registry.save(); } else { updateCounters(prevStatus, newStatus, event.address); } - registry.save(); - item.save(); createRequestFromEvent(event); } diff --git a/subgraph/src/entities/Request.ts b/subgraph/src/entities/Request.ts index a784771..3de0a7e 100644 --- a/subgraph/src/entities/Request.ts +++ b/subgraph/src/entities/Request.ts @@ -14,11 +14,7 @@ export function createRequestFromEvent(event: RequestSubmitted): void { log.error(`Item for graphItemID {} not found.`, [graphItemID]); return; } - let registry = Registry.load(event.address.toHexString()); - if (!registry) { - log.error(`Registry at address {} not found`, [event.address.toHexString()]); - return; - } + const requestIndex = item.numberOfRequests.minus(ONE); const requestID = graphItemID + "-" + requestIndex.toString(); const request = new Request(requestID); @@ -27,7 +23,7 @@ export function createRequestFromEvent(event: RequestSubmitted): void { request.arbitratorExtraData = curate.getArbitratorExtraData(); request.requester = ensureUser(event.transaction.from.toHexString()).id; request.item = item.id; - request.registry = registry.id; + request.registry = event.address.toHexString(); request.registryAddress = event.address; request.resolutionTime = ZERO; request.disputeOutcome = NONE; diff --git a/subgraph/subgraph.yaml b/subgraph/subgraph.yaml index dd593f3..e8d5255 100644 --- a/subgraph/subgraph.yaml +++ b/subgraph/subgraph.yaml @@ -59,4 +59,6 @@ templates: handler: handleConnectedListSet - event: ListMetadataSet(string) handler: handleListMetadataSet + - event: DisputeRequest(indexed address,indexed uint256,uint256,uint256,string) + handler: handleRequestChallenged file: ./src/Curate.ts diff --git a/web/src/app.tsx b/web/src/app.tsx index bf4c53b..84c48f8 100644 --- a/web/src/app.tsx +++ b/web/src/app.tsx @@ -16,6 +16,7 @@ import { SubmitItemProvider } from "context/SubmitItemContext"; import SubmitItem from "./pages/SubmitItem"; import SubmitList from "./pages/SubmitList"; import { RegistryDetailsProvider } from "context/RegistryDetailsContext"; +import { SubmitListProvider } from "./context/SubmitListContext"; const App: React.FC = () => { return ( @@ -25,24 +26,26 @@ const App: React.FC = () => { - - - }> - } /> - } /> - - - - } - /> - } /> - 404 not found} /> - - - + + + + }> + } /> + } /> + + + + } + /> + } /> + 404 not found} /> + + + + diff --git a/web/src/components/ActionButton/ExecuteButton.tsx b/web/src/components/ActionButton/ExecuteButton.tsx new file mode 100644 index 0000000..70414b9 --- /dev/null +++ b/web/src/components/ActionButton/ExecuteButton.tsx @@ -0,0 +1,50 @@ +import { Button } from "@kleros/ui-components-library"; +import React, { useState } from "react"; +import { Address } from "viem"; +import { usePublicClient } from "wagmi"; +import { useCurateV2ExecuteRequest, usePrepareCurateV2ExecuteRequest } from "hooks/contracts/generated"; +import { wrapWithToast } from "utils/wrapWithToast"; +import { EnsureChain } from "../EnsureChain"; + +interface IExecuteButton { + registryAddress: Address; + itemId: string; + refetch: () => void; +} +const ExecuteButton: React.FC = ({ registryAddress, itemId, refetch }) => { + const publicClient = usePublicClient(); + const [isExecuting, setIsExecuting] = useState(false); + + const { + config, + isError, + isLoading: isPreparingConfig, + //@ts-ignore + } = usePrepareCurateV2ExecuteRequest({ address: registryAddress, args: [itemId as `0x${string}`] }); + const { writeAsync: executeRequest, isLoading } = useCurateV2ExecuteRequest(config); + return ( + +