diff --git a/frontend/eslint.config.mjs b/frontend/eslint.config.mjs index ef1cae60..198fb90f 100644 --- a/frontend/eslint.config.mjs +++ b/frontend/eslint.config.mjs @@ -30,6 +30,7 @@ export default [ }, files: ["**/*.ts", "**/*.tsx"], rules: { + "react-hooks/set-state-in-effect": "off", "@typescript-eslint/no-unused-vars": [ "warn", { diff --git a/frontend/package.json b/frontend/package.json index ad963f50..fc40a307 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -66,7 +66,7 @@ "@vitejs/plugin-react-swc": "^4.3.0", "eslint": "^10.2.0", "eslint-config-prettier": "^10.1.8", - "eslint-plugin-react-hooks": "^7.0.1", + "eslint-plugin-react-hooks": "^7.1.1", "eslint-plugin-react-refresh": "^0.5.2", "globals": "^17.4.0", "husky": "^9.0.11", diff --git a/frontend/src/components/FixedFloatSwapInFlow.tsx b/frontend/src/components/FixedFloatSwapInFlow.tsx index 2f940355..55a3f8e6 100644 --- a/frontend/src/components/FixedFloatSwapInFlow.tsx +++ b/frontend/src/components/FixedFloatSwapInFlow.tsx @@ -45,7 +45,6 @@ export function FixedFloatSwapInFlow({ useEffect(() => { if (invoiceData?.settledAt) { - // eslint-disable-next-line react-hooks/set-state-in-effect setPaymentDone(true); } }, [invoiceData]); diff --git a/frontend/src/components/password/RevealPasswordToggle.tsx b/frontend/src/components/password/RevealPasswordToggle.tsx index 23350462..7e88c61f 100644 --- a/frontend/src/components/password/RevealPasswordToggle.tsx +++ b/frontend/src/components/password/RevealPasswordToggle.tsx @@ -18,7 +18,6 @@ export default function RevealPasswordToggle({ // toggle the button if password view is handled by component itself useEffect(() => { if (typeof isRevealed !== "undefined") { - // eslint-disable-next-line react-hooks/set-state-in-effect setRevealed(isRevealed); } }, [isRevealed]); diff --git a/frontend/src/components/ui/theme-provider.tsx b/frontend/src/components/ui/theme-provider.tsx index d7550004..243e5a94 100644 --- a/frontend/src/components/ui/theme-provider.tsx +++ b/frontend/src/components/ui/theme-provider.tsx @@ -79,7 +79,6 @@ export function ThemeProvider({ prefersDark = darkMode === "dark"; } - // eslint-disable-next-line react-hooks/set-state-in-effect setIsDarkMode(prefersDark); if (prefersDark) { diff --git a/frontend/src/screens/apps/NewApp.tsx b/frontend/src/screens/apps/NewApp.tsx index 52ad4c07..82afc845 100644 --- a/frontend/src/screens/apps/NewApp.tsx +++ b/frontend/src/screens/apps/NewApp.tsx @@ -103,6 +103,7 @@ const NewAppInternal = ({ capabilities }: NewAppInternalProps) => { const reqMethodsParam = queryParams.get("request_methods") ?? ""; const notificationTypesParam = queryParams.get("notification_types") ?? ""; + /* eslint-disable react-hooks/preserve-manual-memoization */ const initialScopes: Scope[] = React.useMemo(() => { const methods = reqMethodsParam ? reqMethodsParam.split(" ") @@ -115,6 +116,7 @@ const NewAppInternal = ({ capabilities }: NewAppInternalProps) => { (method) => capabilities.methods.indexOf(method) < 0 ); if (unsupportedMethods.length) { + // eslint-disable-next-line react-hooks/set-state-in-render setUnsupportedError( "This app requests methods not supported by your wallet: " + unsupportedMethods @@ -137,6 +139,7 @@ const NewAppInternal = ({ capabilities }: NewAppInternalProps) => { capabilities.notificationTypes.indexOf(notificationType) < 0 ); if (unsupportedNotificationTypes.length) { + // eslint-disable-next-line react-hooks/set-state-in-render setUnsupportedError( "This app requests notification types not supported by your wallet: " + unsupportedNotificationTypes @@ -188,6 +191,7 @@ const NewAppInternal = ({ capabilities }: NewAppInternalProps) => { notificationTypesParam, reqMethodsParam, ]); + /* eslint-enable react-hooks/preserve-manual-memoization */ const parseExpiresParam = (expiresParam: string): Date | undefined => { const expiresParamTimestamp = parseInt(expiresParam); diff --git a/frontend/src/screens/channels/IncreaseIncomingCapacity.tsx b/frontend/src/screens/channels/IncreaseIncomingCapacity.tsx index 9e4081b3..a40d07a0 100644 --- a/frontend/src/screens/channels/IncreaseIncomingCapacity.tsx +++ b/frontend/src/screens/channels/IncreaseIncomingCapacity.tsx @@ -168,6 +168,8 @@ function NewChannelInternal({ function onSubmit(e: FormEvent) { e.preventDefault(); try { + const nextOrder: Partial = { ...order }; + if (!showAdvanced) { if (!channelPeerSuggestions) { throw new Error("Channel Peer suggestions not loaded"); @@ -187,18 +189,15 @@ function NewChannelInternal({ }); return; } - order.paymentMethod = "lightning"; - if ( - order.paymentMethod !== "lightning" || - bestPartner.paymentMethod !== "lightning" - ) { - throw new Error("Unexpected order or partner payment method"); + nextOrder.paymentMethod = "lightning"; + if (bestPartner.paymentMethod !== "lightning") { + throw new Error("Unexpected partner payment method"); } - order.lspType = bestPartner.type; - order.lspIdentifier = bestPartner.identifier; + nextOrder.lspType = bestPartner.type; + nextOrder.lspIdentifier = bestPartner.identifier; } - useChannelOrderStore.getState().setOrder(order as NewChannelOrder); + useChannelOrderStore.getState().setOrder(nextOrder as NewChannelOrder); navigate("/channels/order"); } catch (error) { toast.error("Something went wrong", { diff --git a/frontend/src/screens/onchain/DepositBitcoin.tsx b/frontend/src/screens/onchain/DepositBitcoin.tsx index 99f616fd..04016104 100644 --- a/frontend/src/screens/onchain/DepositBitcoin.tsx +++ b/frontend/src/screens/onchain/DepositBitcoin.tsx @@ -68,7 +68,6 @@ export default function DepositBitcoin() { if (txId) { const utxo = mempoolAddressUtxos.find((utxo) => utxo.txid === txId); if (utxo?.status.confirmed) { - // eslint-disable-next-line react-hooks/set-state-in-effect setConfirmedAmount(utxo.value); setPendingAmount(null); } diff --git a/frontend/src/screens/wallet/receive/ReceiveOnchain.tsx b/frontend/src/screens/wallet/receive/ReceiveOnchain.tsx index b006f0bd..c83ae486 100644 --- a/frontend/src/screens/wallet/receive/ReceiveOnchain.tsx +++ b/frontend/src/screens/wallet/receive/ReceiveOnchain.tsx @@ -65,7 +65,6 @@ export default function ReceiveOnchain() { useEffect(() => { const newTabValue = searchParams.get("type"); if (newTabValue) { - // eslint-disable-next-line react-hooks/set-state-in-effect setTab(newTabValue); setSearchParams({}); } @@ -138,7 +137,6 @@ function ReceiveToOnchain() { if (txId) { const utxo = mempoolAddressUtxos.find((utxo) => utxo.txid === txId); if (utxo?.status.confirmed) { - // eslint-disable-next-line react-hooks/set-state-in-effect setConfirmedAmount(utxo.value); setPendingAmount(null); } diff --git a/frontend/src/screens/wallet/swap/index.tsx b/frontend/src/screens/wallet/swap/index.tsx index e249ec55..a6faf4c3 100644 --- a/frontend/src/screens/wallet/swap/index.tsx +++ b/frontend/src/screens/wallet/swap/index.tsx @@ -48,7 +48,6 @@ export default function Swap() { useEffect(() => { const newTabValue = searchParams.get("type"); if (newTabValue) { - // eslint-disable-next-line react-hooks/set-state-in-effect setTab(newTabValue); setSearchParams({}); } diff --git a/frontend/yarn.lock b/frontend/yarn.lock index 4ffd4156..ede9d431 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -3466,10 +3466,10 @@ eslint-config-prettier@^10.1.8: resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz#15734ce4af8c2778cc32f0b01b37b0b5cd1ecb97" integrity sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w== -eslint-plugin-react-hooks@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.0.1.tgz#66e258db58ece50723ef20cc159f8aa908219169" - integrity sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA== +eslint-plugin-react-hooks@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.1.1.tgz#e6742cad75d970c0a3f30d7d3fa80a4784f55927" + integrity sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g== dependencies: "@babel/core" "^7.24.4" "@babel/parser" "^7.24.4"