From ef99c8e63da3bf5138e4447a187416dc2fa97bd4 Mon Sep 17 00:00:00 2001 From: poomthiti Date: Mon, 30 Jan 2023 17:37:15 +0700 Subject: [PATCH 1/3] fix: invalidate queries after update/clear admin --- src/lib/app-fns/tx/clearAdmin.tsx | 4 ++-- src/lib/app-provider/tx/clearAdmin.ts | 13 ++++++++++--- src/lib/app-provider/tx/updateAdmin.ts | 11 +++++++++-- .../modal/contract/ClearAdminContract.tsx | 2 +- 4 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/lib/app-fns/tx/clearAdmin.tsx b/src/lib/app-fns/tx/clearAdmin.tsx index 52e0a156a..8eb485014 100644 --- a/src/lib/app-fns/tx/clearAdmin.tsx +++ b/src/lib/app-fns/tx/clearAdmin.tsx @@ -23,7 +23,7 @@ interface ClearAdminTxParams { fee: StdFee; memo?: string; client: SigningCosmWasmClient; - onTxSucceed?: (txHash: string) => void; + onTxSucceed?: () => void; } export const clearAdminTx = ({ @@ -40,7 +40,7 @@ export const clearAdminTx = ({ postFn: () => client.clearAdmin(address, contractAddress, fee, memo), }), ({ value: txInfo }) => { - onTxSucceed?.(txInfo.transactionHash); + onTxSucceed?.(); return { value: null, phase: TxStreamPhase.SUCCEED, diff --git a/src/lib/app-provider/tx/clearAdmin.ts b/src/lib/app-provider/tx/clearAdmin.ts index 601538350..18c18b1d4 100644 --- a/src/lib/app-provider/tx/clearAdmin.ts +++ b/src/lib/app-provider/tx/clearAdmin.ts @@ -1,4 +1,5 @@ import { useWallet } from "@cosmos-kit/react"; +import { useQueryClient } from "@tanstack/react-query"; import { useCallback } from "react"; import { useFabricateFee } from "../hooks"; @@ -7,11 +8,12 @@ import { CLEAR_ADMIN_GAS } from "lib/data"; import type { ContractAddr } from "lib/types"; export interface ClearAdminStreamParams { - onTxSucceed?: (txHash: string) => void; + onTxSucceed?: () => void; } export const useClearAdminTx = (contractAddress: ContractAddr) => { const { address, getCosmWasmClient } = useWallet(); + const queryClient = useQueryClient(); const fabricateFee = useFabricateFee(); const clearAdminFee = fabricateFee(CLEAR_ADMIN_GAS); @@ -26,9 +28,14 @@ export const useClearAdminTx = (contractAddress: ContractAddr) => { contractAddress, fee: clearAdminFee, client, - onTxSucceed, + onTxSucceed: () => { + onTxSucceed?.(); + queryClient.invalidateQueries({ + queryKey: ["admin_by_contracts", "instantiateInfo"], + }); + }, }); }, - [address, clearAdminFee, contractAddress, getCosmWasmClient] + [address, clearAdminFee, queryClient, contractAddress, getCosmWasmClient] ); }; diff --git a/src/lib/app-provider/tx/updateAdmin.ts b/src/lib/app-provider/tx/updateAdmin.ts index bb9ee397e..aa703dc9e 100644 --- a/src/lib/app-provider/tx/updateAdmin.ts +++ b/src/lib/app-provider/tx/updateAdmin.ts @@ -1,5 +1,6 @@ import type { StdFee } from "@cosmjs/stargate"; import { useWallet } from "@cosmos-kit/react"; +import { useQueryClient } from "@tanstack/react-query"; import { useCallback } from "react"; import { updateAdminTx } from "lib/app-fns/tx/updateAdmin"; @@ -15,6 +16,7 @@ export interface UpdateAdminStreamParams { export const useUpdateAdminTx = () => { const { address, getCosmWasmClient } = useWallet(); + const queryClient = useQueryClient(); return useCallback( async ({ @@ -35,10 +37,15 @@ export const useUpdateAdminTx = () => { newAdmin, fee: estimatedFee, client, - onTxSucceed, + onTxSucceed: () => { + onTxSucceed?.(); + queryClient.invalidateQueries({ + queryKey: ["admin_by_contracts", "instantiateInfo"], + }); + }, onTxFailed, }); }, - [address, getCosmWasmClient] + [address, queryClient, getCosmWasmClient] ); }; diff --git a/src/lib/components/modal/contract/ClearAdminContract.tsx b/src/lib/components/modal/contract/ClearAdminContract.tsx index 1644d903d..feb7b080d 100644 --- a/src/lib/components/modal/contract/ClearAdminContract.tsx +++ b/src/lib/components/modal/contract/ClearAdminContract.tsx @@ -20,7 +20,7 @@ export const ClearAdminContract = ({ const clearAdminTx = useClearAdminTx(contractAddress); const proceed = useCallback(async () => { - const stream = await clearAdminTx({ onTxSucceed: () => {} }); + const stream = await clearAdminTx({}); if (stream) broadcast(stream); }, [broadcast, clearAdminTx]); From 60010918751fa576d67485500c7e07228d776212 Mon Sep 17 00:00:00 2001 From: poomthiti Date: Mon, 30 Jan 2023 17:38:51 +0700 Subject: [PATCH 2/3] chore: changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b89cf6c9e..1427348c0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -102,6 +102,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Improvements +- [#135](https://github.com/alleslabs/celatone-frontend/pull/135) Invalidate queries after update/clear admin tx - [#123](https://github.com/alleslabs/celatone-frontend/pull/123) Refactor tables to use custom components - [#128](https://github.com/alleslabs/celatone-frontend/pull/128) Rewrite add to other list state and add default list to save to - [#114](https://github.com/alleslabs/celatone-frontend/pull/114) Handle wallet connection cases in instantiate button From a191a4cd623e6f533648583d5686e97b3896c4e6 Mon Sep 17 00:00:00 2001 From: poomthiti Date: Tue, 31 Jan 2023 11:02:17 +0700 Subject: [PATCH 3/3] fix: propoerly write invalidate queries --- src/lib/app-provider/tx/clearAdmin.ts | 11 ++++++++--- src/lib/app-provider/tx/updateAdmin.ts | 11 ++--------- src/lib/components/ContractSelectSection.tsx | 2 +- src/lib/components/modal/contract/SaveNewContract.tsx | 2 +- src/lib/model/contract.ts | 2 +- src/lib/pages/admin/index.tsx | 2 +- src/lib/pages/migrate/index.tsx | 2 +- 7 files changed, 15 insertions(+), 17 deletions(-) diff --git a/src/lib/app-provider/tx/clearAdmin.ts b/src/lib/app-provider/tx/clearAdmin.ts index 18c18b1d4..a9828f79b 100644 --- a/src/lib/app-provider/tx/clearAdmin.ts +++ b/src/lib/app-provider/tx/clearAdmin.ts @@ -30,9 +30,14 @@ export const useClearAdminTx = (contractAddress: ContractAddr) => { client, onTxSucceed: () => { onTxSucceed?.(); - queryClient.invalidateQueries({ - queryKey: ["admin_by_contracts", "instantiateInfo"], - }); + Promise.all([ + queryClient.invalidateQueries({ + queryKey: ["admin_by_contracts"], + }), + queryClient.invalidateQueries({ + queryKey: ["query", "instantiate_info"], + }), + ]); }, }); }, diff --git a/src/lib/app-provider/tx/updateAdmin.ts b/src/lib/app-provider/tx/updateAdmin.ts index aa703dc9e..bb9ee397e 100644 --- a/src/lib/app-provider/tx/updateAdmin.ts +++ b/src/lib/app-provider/tx/updateAdmin.ts @@ -1,6 +1,5 @@ import type { StdFee } from "@cosmjs/stargate"; import { useWallet } from "@cosmos-kit/react"; -import { useQueryClient } from "@tanstack/react-query"; import { useCallback } from "react"; import { updateAdminTx } from "lib/app-fns/tx/updateAdmin"; @@ -16,7 +15,6 @@ export interface UpdateAdminStreamParams { export const useUpdateAdminTx = () => { const { address, getCosmWasmClient } = useWallet(); - const queryClient = useQueryClient(); return useCallback( async ({ @@ -37,15 +35,10 @@ export const useUpdateAdminTx = () => { newAdmin, fee: estimatedFee, client, - onTxSucceed: () => { - onTxSucceed?.(); - queryClient.invalidateQueries({ - queryKey: ["admin_by_contracts", "instantiateInfo"], - }); - }, + onTxSucceed, onTxFailed, }); }, - [address, queryClient, getCosmWasmClient] + [address, getCosmWasmClient] ); }; diff --git a/src/lib/components/ContractSelectSection.tsx b/src/lib/components/ContractSelectSection.tsx index 990e6b075..7a8d895da 100644 --- a/src/lib/components/ContractSelectSection.tsx +++ b/src/lib/components/ContractSelectSection.tsx @@ -123,7 +123,7 @@ export const ContractSelectSection = observer( }); const { refetch } = useQuery( - ["query", "instantiateInfo", endpoint, contractAddress], + ["query", "instantiate_info", endpoint, contractAddress], async () => queryInstantiateInfo(endpoint, indexerGraphClient, contractAddress), { diff --git a/src/lib/components/modal/contract/SaveNewContract.tsx b/src/lib/components/modal/contract/SaveNewContract.tsx index aabff1be3..240c6812a 100644 --- a/src/lib/components/modal/contract/SaveNewContract.tsx +++ b/src/lib/components/modal/contract/SaveNewContract.tsx @@ -95,7 +95,7 @@ export function SaveNewContract({ list, buttonProps }: SaveNewContractProps) { // TODO: Abstract query const { refetch } = useQuery( - ["query", "instantiateInfo", endpoint, contractAddressState], + ["query", "instantiate_info", endpoint, contractAddressState], async () => queryInstantiateInfo( endpoint, diff --git a/src/lib/model/contract.ts b/src/lib/model/contract.ts index 773eaf1a2..acf17f8c1 100644 --- a/src/lib/model/contract.ts +++ b/src/lib/model/contract.ts @@ -107,7 +107,7 @@ export const useContractData = ( const { data: publicInfoBySlug } = usePublicProjectBySlug(publicInfo?.slug); const { data: instantiateInfo } = useQuery( - ["query", "instantiateInfo", endpoint, contractAddress], + ["query", "instantiate_info", endpoint, contractAddress], async () => queryInstantiateInfo(endpoint, indexerGraphClient, contractAddress), { enabled: !!currentChainRecord } diff --git a/src/lib/pages/admin/index.tsx b/src/lib/pages/admin/index.tsx index d50f17ba6..904eb583b 100644 --- a/src/lib/pages/admin/index.tsx +++ b/src/lib/pages/admin/index.tsx @@ -109,7 +109,7 @@ const UpdateAdmin = () => { * @remarks Contract admin validation */ useQuery( - ["query", "instantiateInfo", endpoint, contractAddressParam], + ["query", "instantiate_info", endpoint, contractAddressParam], async () => queryInstantiateInfo(endpoint, indexerGraphClient, contractAddressParam), { diff --git a/src/lib/pages/migrate/index.tsx b/src/lib/pages/migrate/index.tsx index d7a62f35b..04a109808 100644 --- a/src/lib/pages/migrate/index.tsx +++ b/src/lib/pages/migrate/index.tsx @@ -62,7 +62,7 @@ const Migrate = () => { ); useQuery( - ["query", "instantiateInfo", endpoint, contractAddress], + ["query", "instantiate_info", endpoint, contractAddress], async () => queryInstantiateInfo(endpoint, indexerGraphClient, contractAddress), {