diff --git a/src/components/AccountConfirmationModal/index.tsx b/src/components/AccountConfirmationModal/index.tsx
index 0de2c2ce..99968104 100644
--- a/src/components/AccountConfirmationModal/index.tsx
+++ b/src/components/AccountConfirmationModal/index.tsx
@@ -1,6 +1,6 @@
import * as React from "react";
-import { UseModalBehaviour } from "@/hooks/useModalBehaviour";
+import { UseModalBehaviour } from "@/hooks/common/useModalBehaviour";
import BaseConfirmationDialog from "../BaseConfirmationDialog";
diff --git a/src/components/AddressBook/AddressBookItem.tsx b/src/components/AddressBook/AddressBookItem.tsx
index 52da29a9..092d9937 100644
--- a/src/components/AddressBook/AddressBookItem.tsx
+++ b/src/components/AddressBook/AddressBookItem.tsx
@@ -10,9 +10,9 @@ import { ChainExtended } from "@/config/chain";
import { AddressBookInput } from "@/domain/AddressBooks";
import { UseDeleteAddressBookReturn } from "@/hooks/addressBook/useDeleteAddressBook";
import { UseUpdateAddressBook } from "@/hooks/addressBook/useUpdateAddressBook";
+import { useRecentlyClicked } from "@/hooks/common/useRecentlyClicked";
import { useForm } from "@/hooks/useForm";
import useOnClickOutside from "@/hooks/useOnClickOutside";
-import { useRecentlyClicked } from "@/hooks/useRecentlyClicked";
import { getExplorerUrl } from "@/utils/blockchain";
import { notEmpty, onlyAddress } from "@/utils/inputValidation";
diff --git a/src/components/ArgumentForm/inputs/OptionArgument.tsx b/src/components/ArgumentForm/inputs/OptionArgument.tsx
index e3128c9c..e410abdb 100644
--- a/src/components/ArgumentForm/inputs/OptionArgument.tsx
+++ b/src/components/ArgumentForm/inputs/OptionArgument.tsx
@@ -4,7 +4,7 @@ import { OptionalFieldWrapper } from "@/components/OptionalFieldWrapper";
import { usePolkadotContext } from "@/context/usePolkadotContext";
import { ArgumentComponentProps } from "@/domain/substrateInputTypes";
import { OrFalsy } from "@/domain/utilityTsTypes";
-import { useToggle } from "@/hooks/useToggle";
+import { useToggle } from "@/hooks/common/useToggle";
import { getInitValue } from "@/services/substrate/getInitValue";
import { Registry, TypeDef } from "@/services/substrate/types";
diff --git a/src/components/ModalWalletProvider/ConnectButton.tsx b/src/components/ModalWalletProvider/ConnectButton.tsx
index 25ba64bd..404be192 100644
--- a/src/components/ModalWalletProvider/ConnectButton.tsx
+++ b/src/components/ModalWalletProvider/ConnectButton.tsx
@@ -7,9 +7,9 @@ import { StyledConnectButton } from "@/components/ModalWalletProvider/styled";
import { ROUTES } from "@/config/routes";
import { usePolkadotContext } from "@/context/usePolkadotContext";
import { WalletConnectionEvents } from "@/domain/events/WalletConnectionEvents";
+import { useModalBehaviour } from "@/hooks/common/useModalBehaviour";
+import { useRecentlyClicked } from "@/hooks/common/useRecentlyClicked";
import { useEventListenerCallback } from "@/hooks/useEventListenerCallback";
-import { useModalBehaviour } from "@/hooks/useModalBehaviour";
-import { useRecentlyClicked } from "@/hooks/useRecentlyClicked";
import { useGetXsignerSelected } from "@/hooks/xsignerSelected/useGetXsignerSelected";
import { WalletAccount } from "@/services/useink/types";
import { areAddressesEqual } from "@/utils/blockchain";
diff --git a/src/components/MultisigEventListener/index.tsx b/src/components/MultisigEventListener/index.tsx
index 2b849b8d..e669b3b1 100644
--- a/src/components/MultisigEventListener/index.tsx
+++ b/src/components/MultisigEventListener/index.tsx
@@ -4,6 +4,7 @@ import { useEvents, useEventSubscription } from "useink";
import { createToast } from "@/components/AppToastNotification";
import { useLocalDbContext } from "@/context/uselocalDbContext";
+import { LocalMultisigEvents } from "@/domain/events/LocalMultisigEvents";
import { MultisigContractEvents } from "@/domain/events/MultisigContractEvents";
import { useMultisigContractPromise } from "@/hooks/contractPromise/useMultisigContractPromise";
import { useGetXsignerSelected } from "@/hooks/xsignerSelected/useGetXsignerSelected";
@@ -29,6 +30,8 @@ export function MultisigEventListener() {
icon: ,
});
});
+ events.length &&
+ document.dispatchEvent(new CustomEvent(LocalMultisigEvents.eventAdded));
}, [events, localMultisigEventRepo]);
useEffect(() => {
diff --git a/src/components/NetworkConfirmationModal/index.tsx b/src/components/NetworkConfirmationModal/index.tsx
index 282e5e9e..d734cb8a 100644
--- a/src/components/NetworkConfirmationModal/index.tsx
+++ b/src/components/NetworkConfirmationModal/index.tsx
@@ -5,7 +5,7 @@ import { useEffect, useState } from "react";
import { getChain } from "@/config/chain";
import { ROUTES } from "@/config/routes";
import { usePolkadotContext } from "@/context/usePolkadotContext";
-import { useModalBehaviour } from "@/hooks/useModalBehaviour";
+import { useModalBehaviour } from "@/hooks/common/useModalBehaviour";
import { useGetXsignerSelected } from "@/hooks/xsignerSelected/useGetXsignerSelected";
import BaseConfirmationDialog from "../BaseConfirmationDialog";
diff --git a/src/components/Transaction/steps/Review.tsx b/src/components/Transaction/steps/Review.tsx
index b7e65e94..34d38b67 100644
--- a/src/components/Transaction/steps/Review.tsx
+++ b/src/components/Transaction/steps/Review.tsx
@@ -3,6 +3,7 @@ import { ApiPromise } from "@polkadot/api";
import { AccountSigner } from "@/components/StepperSignersAccount/AccountSigner";
import { ChainExtended, getChain } from "@/config/chain";
+import { useNameAddressBookContext } from "@/context/NameInAddressBookContext";
import { useNetworkApi } from "@/hooks/useNetworkApi";
import { chainTokenSymbol } from "@/services/useink/substrate/tokenTypes";
@@ -22,6 +23,7 @@ export const ReviewTokens = (props: Props) => {
const { apiPromise: api } = useNetworkApi();
const symbol = chainTokenSymbol(api as ApiPromise);
const customToken = getChain();
+ const { nameConnectedOrAddressBookOrSigners } = useNameAddressBookContext();
return (
@@ -35,7 +37,7 @@ export const ReviewTokens = (props: Props) => {
diff --git a/src/components/TxBuilderStepper/ProposeTxStep/index.tsx b/src/components/TxBuilderStepper/ProposeTxStep/index.tsx
index 8a166f80..d302f6db 100644
--- a/src/components/TxBuilderStepper/ProposeTxStep/index.tsx
+++ b/src/components/TxBuilderStepper/ProposeTxStep/index.tsx
@@ -7,10 +7,10 @@ import ErrorMessage from "@/components/common/ErrorMessage";
import { ExplorerLink } from "@/components/ExplorerLink";
import { TextFieldWithLoadingProps } from "@/components/TextFieldWithLoading/TextFieldWithLoading";
import { ROUTES } from "@/config/routes";
+import { useRecentlyClicked } from "@/hooks/common/useRecentlyClicked";
import { useMultisigContractPromise } from "@/hooks/contractPromise/useMultisigContractPromise";
import { sringArgsToContractParam } from "@/hooks/externalTxData/stringArgsToContractParam";
import { useCreateExternalTxData } from "@/hooks/externalTxData/useCreateExternalTxData";
-import { useRecentlyClicked } from "@/hooks/useRecentlyClicked";
import { useGetXsignerSelected } from "@/hooks/xsignerSelected/useGetXsignerSelected";
import {
replacerArgs,
diff --git a/src/components/TxTable/ConfirmationWidget.tsx b/src/components/TxTable/ConfirmationWidget.tsx
index d13c5c82..6a8ad9a7 100644
--- a/src/components/TxTable/ConfirmationWidget.tsx
+++ b/src/components/TxTable/ConfirmationWidget.tsx
@@ -5,8 +5,11 @@ import { Dispatch, SetStateAction, useEffect, useMemo } from "react";
import { LoadingButton } from "@/components/common/LoadingButton";
import { usePolkadotContext } from "@/context/usePolkadotContext";
import { MultisigContractEvents } from "@/domain/events/MultisigContractEvents";
+import {
+ TWO_SECONDS,
+ useRecentlyClicked,
+} from "@/hooks/common/useRecentlyClicked";
import { useDryRunExecution } from "@/hooks/useDryRunExecution";
-import { TWO_SECONDS, useRecentlyClicked } from "@/hooks/useRecentlyClicked";
import { ContractPromise } from "@/services/substrate/types";
import { shouldDisable } from "@/services/useink/utils";
diff --git a/src/components/TxTable/ModalTxExecution/index.tsx b/src/components/TxTable/ModalTxExecution/index.tsx
new file mode 100644
index 00000000..826278ca
--- /dev/null
+++ b/src/components/TxTable/ModalTxExecution/index.tsx
@@ -0,0 +1,87 @@
+import CloseIcon from "@mui/icons-material/Close";
+import {
+ Button,
+ DialogActions,
+ IconButton,
+ Modal,
+ Typography,
+} from "@mui/material";
+import React from "react";
+
+import {
+ ModalStyled,
+ ModalTypography,
+} from "@/components/ModalAddressBook/styled";
+import { BlockchainIssuedEvent } from "@/domain/BlockchainIssuedEvent";
+import { MultisigContractEvents } from "@/domain/events/MultisigContractEvents";
+import { TransactionProposedItemUi } from "@/domain/TransactionProposedItemUi";
+
+export type TransactionWithAction = TransactionProposedItemUi & {
+ actionName: BlockchainIssuedEvent["name"];
+};
+
+interface Props {
+ open: boolean;
+ onClose: () => void;
+ onConfirm?: () => void;
+ onConfirmText?: string;
+ transactionToProcess: TransactionWithAction | undefined;
+}
+
+export function ModalTxExecution({
+ open,
+ onClose,
+ onConfirm,
+ onConfirmText = "Confirm",
+ transactionToProcess,
+}: Props) {
+ if (!open || !transactionToProcess) return;
+
+ const action =
+ transactionToProcess.actionName ===
+ MultisigContractEvents.TransactionExecuted
+ ? "executed"
+ : "cancelled";
+
+ return (
+
+
+
+ {`Transaction #${transactionToProcess.txId} has been "${action}"!`}
+
+ theme.palette.grey[500],
+ }}
+ >
+
+
+
+ The transaction with identifier {transactionToProcess.txId} will be
+ out of the of the queue for reaching the required number of
+ signatures.
+
+
+ You can follow the transaction in the history tab.
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/src/components/TxTable/ModalTxExecution/useRemovedTxIds.tsx b/src/components/TxTable/ModalTxExecution/useRemovedTxIds.tsx
new file mode 100644
index 00000000..849fd1b7
--- /dev/null
+++ b/src/components/TxTable/ModalTxExecution/useRemovedTxIds.tsx
@@ -0,0 +1,55 @@
+import { useEffect, useState } from "react";
+
+import { useLocalDbContext } from "@/context/uselocalDbContext";
+import { BlockchainIssuedEvent } from "@/domain/BlockchainIssuedEvent";
+import { LocalMultisigEvents } from "@/domain/events/LocalMultisigEvents";
+import { MultisigContractEvents } from "@/domain/events/MultisigContractEvents";
+import { TransactionProposedItemUi } from "@/domain/TransactionProposedItemUi";
+import { useEventListenerCallback } from "@/hooks/useEventListenerCallback";
+
+import { TransactionWithAction } from ".";
+
+interface Props {
+ data: TransactionProposedItemUi[] | undefined;
+ callback: () => void;
+}
+
+interface UseRemovedTxIdsReturn {
+ transactionToProcess: TransactionWithAction | undefined;
+}
+
+export function useRemovedTxIds({
+ data,
+ callback,
+}: Props): UseRemovedTxIdsReturn {
+ const [transactionToProcess, setTransactionWillBeExecuted] =
+ useState();
+ const { localMultisigEventRepo } = useLocalDbContext();
+ const [newEvent, setNewEvent] = useState();
+
+ useEventListenerCallback(LocalMultisigEvents.eventAdded, () =>
+ setNewEvent(
+ localMultisigEventRepo
+ .getEvents()
+ .find(
+ (event) =>
+ event.name === MultisigContractEvents.TransactionExecuted ||
+ event.name === MultisigContractEvents.TransactionCancelled
+ )
+ )
+ );
+ useEffect(() => {
+ if (!data || !newEvent) return;
+
+ const willBeExecuted = data.find((tx) => tx.txId === newEvent.args[0]);
+ if (willBeExecuted) {
+ setTransactionWillBeExecuted({
+ ...willBeExecuted,
+ actionName: newEvent.name,
+ });
+ callback();
+ }
+ }, [callback, data, localMultisigEventRepo, newEvent]);
+
+ return { transactionToProcess };
+}
diff --git a/src/components/TxTable/NameInAddressBook.tsx b/src/components/TxTable/NameInAddressBook.tsx
index 4304e8f6..8f9b5951 100644
--- a/src/components/TxTable/NameInAddressBook.tsx
+++ b/src/components/TxTable/NameInAddressBook.tsx
@@ -1,6 +1,5 @@
import { useEffect, useState } from "react";
-import { LoadingSkeleton } from "@/components/common/LoadingSkeleton";
import { useNameAddressBookContext } from "@/context/NameInAddressBookContext";
import { truncateAddress } from "@/utils/formatString";
@@ -23,7 +22,7 @@ export function NameInAddressBook({ recipient }: Props) {
}, [recipient, nameConnectedOrAddressBookOrSigners]);
if (isLoading || nameInAddressBook === undefined) {
- return ;
+ return "-";
}
return nameInAddressBook
diff --git a/src/components/TxTable/TransactionsQueueDetail.tsx b/src/components/TxTable/TransactionsQueueDetail.tsx
index ad047a4c..3eb35ee4 100644
--- a/src/components/TxTable/TransactionsQueueDetail.tsx
+++ b/src/components/TxTable/TransactionsQueueDetail.tsx
@@ -1,12 +1,16 @@
import { Box } from "@mui/material";
+import router from "next/router";
import React from "react";
import { ChainId } from "useink/dist/chains";
import { LoadingSkeleton } from "@/components/common/LoadingSkeleton";
import { SignatoriesAccount } from "@/domain/SignatoriesAccount";
+import { useModalBehaviour } from "@/hooks/common/useModalBehaviour";
import { useMultisigContractPromise } from "@/hooks/contractPromise/useMultisigContractPromise";
import { useListTxQueue } from "@/hooks/transactions/useListTxQueue";
+import { ModalTxExecution } from "./ModalTxExecution";
+import { useRemovedTxIds } from "./ModalTxExecution/useRemovedTxIds";
import { TxDetailItem } from "./TxDetailItem";
interface Props {
@@ -22,6 +26,11 @@ export const TransactionQueueDetail: React.FC = ({
const { multisigContractPromise } = useMultisigContractPromise(
xsignerAccount.address
);
+ const { isOpen, closeModal, openModal } = useModalBehaviour();
+ const { transactionToProcess } = useRemovedTxIds({
+ data,
+ callback: () => openModal(),
+ });
if (data === undefined || multisigContractPromise?.contract === undefined) {
return (
@@ -31,6 +40,21 @@ export const TransactionQueueDetail: React.FC = ({
);
}
+ const replaceURLParam = (paramValue: string) => {
+ const newQueryParams = { ...router.query };
+
+ newQueryParams["tab"] = paramValue;
+
+ router.replace(
+ {
+ pathname: router.pathname,
+ query: newQueryParams,
+ },
+ undefined,
+ { shallow: true }
+ );
+ };
+
return (
<>
{data.map((txData) => {
@@ -44,6 +68,13 @@ export const TransactionQueueDetail: React.FC = ({
/>
);
})}
+ replaceURLParam("history")}
+ />
>
);
};
diff --git a/src/components/XsignerAccountInfoWidget/SelectXsignerItems.tsx b/src/components/XsignerAccountInfoWidget/SelectXsignerItems.tsx
index 0d8ac5ac..1f48214c 100644
--- a/src/components/XsignerAccountInfoWidget/SelectXsignerItems.tsx
+++ b/src/components/XsignerAccountInfoWidget/SelectXsignerItems.tsx
@@ -12,7 +12,7 @@ import * as React from "react";
import { ROUTES } from "@/config/routes";
import { SignatoriesAccount } from "@/domain/SignatoriesAccount";
-import { UseModalBehaviour } from "@/hooks/useModalBehaviour";
+import { UseModalBehaviour } from "@/hooks/common/useModalBehaviour";
import { formatThreshold, truncateAddress } from "@/utils/formatString";
import CopyButton from "../common/CopyButton";
diff --git a/src/components/XsignerAccountInfoWidget/SwitchUserAccount.tsx b/src/components/XsignerAccountInfoWidget/SwitchUserAccount.tsx
index eb615e8f..84472e20 100644
--- a/src/components/XsignerAccountInfoWidget/SwitchUserAccount.tsx
+++ b/src/components/XsignerAccountInfoWidget/SwitchUserAccount.tsx
@@ -1,7 +1,7 @@
import ChangeCircleRoundedIcon from "@mui/icons-material/ChangeCircleRounded";
import { IconButton } from "@mui/material";
-import { UseModalBehaviour } from "@/hooks/useModalBehaviour";
+import { UseModalBehaviour } from "@/hooks/common/useModalBehaviour";
type Props = UseModalBehaviour;
diff --git a/src/components/XsignerAccountInfoWidget/XsignerAccountInfoUI.tsx b/src/components/XsignerAccountInfoWidget/XsignerAccountInfoUI.tsx
index f2d2fe56..e9153810 100644
--- a/src/components/XsignerAccountInfoWidget/XsignerAccountInfoUI.tsx
+++ b/src/components/XsignerAccountInfoWidget/XsignerAccountInfoUI.tsx
@@ -4,7 +4,7 @@ import * as React from "react";
import { ChainColors, CHAINS_ALLOWED } from "@/config/chain";
import { SignatoriesAccount } from "@/domain/SignatoriesAccount";
-import { useModalBehaviour } from "@/hooks/useModalBehaviour";
+import { useModalBehaviour } from "@/hooks/common/useModalBehaviour";
import { useSetXsignerSelected } from "@/hooks/xsignerSelected/useSetXsignerSelected";
import { formatThreshold, truncateAddress } from "@/utils/formatString";
diff --git a/src/components/guards/ConnectedGuard.tsx b/src/components/guards/ConnectedGuard.tsx
index 9fb3363e..663babd9 100644
--- a/src/components/guards/ConnectedGuard.tsx
+++ b/src/components/guards/ConnectedGuard.tsx
@@ -3,7 +3,7 @@ import { ReactElement, ReactNode, useEffect } from "react";
import { ROUTES, RouteValue, routeValues } from "@/config/routes";
import { usePolkadotContext } from "@/context/usePolkadotContext";
-import { useDelay } from "@/hooks/useDelay";
+import { useDelay } from "@/hooks/common/useDelay";
import { DELAY_UNTIL_READ_WALLETS } from "@/services/useink/constants";
interface ConnectionGuardProps {
diff --git a/src/components/guards/WhenWalletIsConnectedGuard.tsx b/src/components/guards/WhenWalletIsConnectedGuard.tsx
index ba7db58c..2d761f92 100644
--- a/src/components/guards/WhenWalletIsConnectedGuard.tsx
+++ b/src/components/guards/WhenWalletIsConnectedGuard.tsx
@@ -4,7 +4,7 @@ import { PropsWithChildren, useEffect } from "react";
import { FallbackSpinner } from "@/components/common/FallbackSpinner";
import { ROUTES } from "@/config/routes";
import { usePolkadotContext } from "@/context/usePolkadotContext";
-import { useDelay } from "@/hooks/useDelay";
+import { useDelay } from "@/hooks/common/useDelay";
import { useFindSignersAccount } from "@/hooks/xsignersAccount";
import { DELAY_UNTIL_READ_WALLETS } from "@/services/useink/constants";
diff --git a/src/context/NameInAddressBookContext.tsx b/src/context/NameInAddressBookContext.tsx
index ce500559..c67cd355 100644
--- a/src/context/NameInAddressBookContext.tsx
+++ b/src/context/NameInAddressBookContext.tsx
@@ -88,7 +88,6 @@ export const NameInAddressBookProvider: React.FC = ({
const nameConnectedOrAddressBookOrSigners = useCallback(
(address: string) => {
- setIsLoading(true);
let _name = null;
const isSigner = xSignerSelected?.owners.find(
(owner) => owner.address === address
@@ -104,7 +103,6 @@ export const NameInAddressBookProvider: React.FC = ({
_name = xSignerSelected.name;
}
- setIsLoading(false);
return _name;
},
[
diff --git a/src/domain/events/LocalMultisigEvents.ts b/src/domain/events/LocalMultisigEvents.ts
new file mode 100644
index 00000000..36ff069d
--- /dev/null
+++ b/src/domain/events/LocalMultisigEvents.ts
@@ -0,0 +1,3 @@
+export const enum LocalMultisigEvents {
+ eventAdded = "eventAdded",
+}
diff --git a/src/domain/events/MultisigContractEvents.ts b/src/domain/events/MultisigContractEvents.ts
index d282e7f6..0eab3395 100644
--- a/src/domain/events/MultisigContractEvents.ts
+++ b/src/domain/events/MultisigContractEvents.ts
@@ -1,6 +1,8 @@
export enum MultisigContractEvents {
TransactionProposed = "TransactionProposed",
TransactionRemoved = "TransactionRemoved",
+ TransactionExecuted = "TransactionExecuted",
+ TransactionCancelled = "TransactionCancelled",
OwnerAdded = "OwnerAdded",
ThresholdChanged = "ThresholdChanged",
OwnerRemoved = "OwnerRemoved",
diff --git a/src/hooks/common/useAutoClose.ts b/src/hooks/common/useAutoClose.ts
new file mode 100644
index 00000000..b608b747
--- /dev/null
+++ b/src/hooks/common/useAutoClose.ts
@@ -0,0 +1,42 @@
+import { useEffect, useState } from "react";
+
+interface Props {
+ initialTime?: number;
+ handleClose: () => void;
+ autoRun?: boolean;
+}
+
+interface UseAutoCloseReturn {
+ countdown: number;
+ startAutoClose: () => void;
+}
+
+export function useAutoClose({
+ initialTime = 5,
+ handleClose,
+ autoRun = true,
+}: Props): UseAutoCloseReturn {
+ const [countdown, setCountdown] = useState(initialTime);
+
+ useEffect(() => {
+ let timer: NodeJS.Timeout;
+
+ if (countdown > 0) {
+ timer = setTimeout(() => setCountdown(countdown - 1), 1000);
+ } else if (countdown === 0) {
+ handleClose();
+ }
+
+ return () => clearTimeout(timer);
+ }, [countdown, handleClose]);
+
+ useEffect(() => {
+ if (autoRun) {
+ setCountdown(initialTime);
+ }
+ }, [autoRun, initialTime]);
+
+ return { countdown, startAutoClose: () => setCountdown(initialTime) };
+}
+
+export default useAutoClose;
diff --git a/src/hooks/useDelay.ts b/src/hooks/common/useDelay.ts
similarity index 100%
rename from src/hooks/useDelay.ts
rename to src/hooks/common/useDelay.ts
diff --git a/src/hooks/useModalBehaviour.ts b/src/hooks/common/useModalBehaviour.ts
similarity index 100%
rename from src/hooks/useModalBehaviour.ts
rename to src/hooks/common/useModalBehaviour.ts
diff --git a/src/hooks/useRecentlyClicked.ts b/src/hooks/common/useRecentlyClicked.ts
similarity index 100%
rename from src/hooks/useRecentlyClicked.ts
rename to src/hooks/common/useRecentlyClicked.ts
diff --git a/src/hooks/useRedirectComparison.ts b/src/hooks/common/useRedirectComparison.ts
similarity index 100%
rename from src/hooks/useRedirectComparison.ts
rename to src/hooks/common/useRedirectComparison.ts
diff --git a/src/hooks/useToggle.ts b/src/hooks/common/useToggle.ts
similarity index 100%
rename from src/hooks/useToggle.ts
rename to src/hooks/common/useToggle.ts
diff --git a/src/hooks/useEventListenerCallback.ts b/src/hooks/useEventListenerCallback.ts
index e76d26c0..59df66b0 100644
--- a/src/hooks/useEventListenerCallback.ts
+++ b/src/hooks/useEventListenerCallback.ts
@@ -2,6 +2,7 @@ import { useEffect, useRef } from "react";
import { IS_DEVELOPMENT } from "@/config/app";
import { AddressBookEvents } from "@/domain/events/AddressBookEvents";
+import { LocalMultisigEvents } from "@/domain/events/LocalMultisigEvents";
import { MultisigContractEvents } from "@/domain/events/MultisigContractEvents";
import { WalletConnectionEvents } from "@/domain/events/WalletConnectionEvents";
import { XsignerAccountEvents } from "@/domain/events/XsignerAccountEvents";
@@ -11,7 +12,8 @@ type EventNames =
| keyof typeof AddressBookEvents
| keyof typeof WalletConnectionEvents
| keyof typeof XsignerAccountEvents
- | keyof typeof MultisigContractEvents;
+ | keyof typeof MultisigContractEvents
+ | keyof typeof LocalMultisigEvents;
export function useEventListenerCallback(
events: EventNames[] | EventNames, // accept any array of strings as event names
diff --git a/src/pages/connect.tsx b/src/pages/connect.tsx
index e0eeed6f..91d18e3e 100644
--- a/src/pages/connect.tsx
+++ b/src/pages/connect.tsx
@@ -7,7 +7,7 @@ import { BasicLayout } from "@/components/layout/BasicLayout";
import { MainContentCard } from "@/components/layout/shared/MainContentCard";
import { ROUTES } from "@/config/routes";
import { WalletConnectionEvents } from "@/domain/events/WalletConnectionEvents";
-import { useRedirectComparison } from "@/hooks/useRedirectComparison";
+import { useRedirectComparison } from "@/hooks/common/useRedirectComparison";
export function getTextInstructions(route: string) {
if (route === ROUTES.New) {