From d7a2ce1908c2197776d8b5a029e3d4cb9aa0eb06 Mon Sep 17 00:00:00 2001 From: dfkadyr Date: Mon, 18 May 2026 08:50:10 +0300 Subject: [PATCH 01/16] up COW to latest version --- package.json | 4 +- pnpm-lock.yaml | 110 +++++++++++++++++++++++++------------------------ tsconfig.json | 2 +- 3 files changed, 59 insertions(+), 57 deletions(-) diff --git a/package.json b/package.json index bfe435e..a2987da 100644 --- a/package.json +++ b/package.json @@ -74,8 +74,8 @@ }, "dependencies": { "@binance/w3w-ethereum-provider": "1.1.8-alpha.0", - "@cowprotocol/cow-sdk": "7.2.5", - "@cowprotocol/sdk-ethers-v6-adapter": "0.3.0", + "@cowprotocol/cow-sdk": "8.0.0", + "@cowprotocol/sdk-ethers-v6-adapter": "0.3.11", "@floating-ui/react": "0.27.16", "@floating-ui/react-dom": "2.1.6", "@headlessui/react": "2.2.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0fcd34a..533a8e3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,11 +16,11 @@ importers: specifier: 1.1.8-alpha.0 version: 1.1.8-alpha.0 '@cowprotocol/cow-sdk': - specifier: 7.2.5 - version: 7.2.5(ajv@8.17.1)(cross-fetch@3.2.0)(ipfs-only-hash@4.0.0)(multiformats@9.9.0) + specifier: 8.0.0 + version: 8.0.0(ajv@8.17.1)(cross-fetch@3.2.0)(ipfs-only-hash@4.0.0)(multiformats@9.9.0) '@cowprotocol/sdk-ethers-v6-adapter': - specifier: 0.3.0 - version: 0.3.0(ethers@6.14.3) + specifier: 0.3.11 + version: 0.3.11(ethers@6.14.3) '@floating-ui/react': specifier: 0.27.16 version: 0.27.16(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -369,8 +369,8 @@ packages: '@cacheable/utils@2.3.3': resolution: {integrity: sha512-JsXDL70gQ+1Vc2W/KUFfkAJzgb4puKwwKehNLuB+HrNKWf91O736kGfxn4KujXCCSuh6mRRL4XEB0PkAFjWS0A==} - '@cowprotocol/cow-sdk@7.2.5': - resolution: {integrity: sha512-4yf/xZ+dRyt/OhpgRvd2n2l4e9uLdeXf7laBjVjfXhvBAwzsSTbBzzGgo/ZqXn/rxzOzrv3unCIm5ybsQe7O5g==} + '@cowprotocol/cow-sdk@8.0.0': + resolution: {integrity: sha512-vhwEedCx8mZwi1FJCO5gCM1XkoJ5OHM0sclQNZ45UnRrYic55qpAhjpDyN7jui/oxDGX5s4YtXKU+CInFKwbrw==} peerDependencies: '@openzeppelin/merkle-tree': ^1.x cross-fetch: ^3.x @@ -384,36 +384,36 @@ packages: multiformats: optional: true - '@cowprotocol/sdk-app-data@4.3.6': - resolution: {integrity: sha512-ru4h/+oeI1VHhneLX9fX1lvti87c0wcqOL92JIXbX5wGp2M/TuHETeRpwMHc70MR6iIoWgT+WRhhvJzaYpzEhQ==} + '@cowprotocol/sdk-app-data@4.6.8': + resolution: {integrity: sha512-JlHprXVhiqxU6ESBxzLsoVxjfeQi6E0jg27g6nX0t/RlrGQjgxzIe0kV+aaI932Aih5fZoIUhg6VebTab14WlQ==} peerDependencies: ajv: ^8.x cross-fetch: ^3.x ipfs-only-hash: ^4.x multiformats: ^9.x - '@cowprotocol/sdk-common@0.4.0': - resolution: {integrity: sha512-ciXiHzTzj7LKZqMKssgyNooZp1nS/mvRE9oO/6DlMQcxVA7/4ajPmk/XzseX/rjdRbSbYyXIEF1oY5w0tcbVjQ==} + '@cowprotocol/sdk-common@0.7.1': + resolution: {integrity: sha512-YnCrvNGuaE+OI6RwXQ5ZOX2ci2CZT3rLFVgSnUggAS9TmklCfK01EqAAxdzheu/vICv+1DGBuGrzcR0o/+OkJQ==} - '@cowprotocol/sdk-config@0.6.2': - resolution: {integrity: sha512-L6cPT3pQCrHChRUjWffuYielUlw7TXPbI0o3IvimF/DSpPiGuW+A1g7XSLEGUhNcoKNfQf5YUZPaoenAKl9MNg==} + '@cowprotocol/sdk-config@1.0.0': + resolution: {integrity: sha512-iS/9CA8hNA/BAtzXHMRnsmuigc0i2v4FlPiCMKHyYtLhRLFI7Yo/cogZKYL/9Mbt4GamdQeZ+nH92xl3KYyAtg==} - '@cowprotocol/sdk-contracts-ts@0.8.1': - resolution: {integrity: sha512-8yQO11S4R3mAfgKqb5afCo9c+z/sHpKiOZuN+gry46fjBKK3kUd2hKLWNYnQds5xUVJ07DlT0k7jFGgkEnremw==} + '@cowprotocol/sdk-contracts-ts@2.0.0': + resolution: {integrity: sha512-4mH5aEsouRAD9nQr03FcwayqVL89nDDchubm/bXcsz5ucOwPqfS+1aEgT1NrPBAW88KUy6GTrhTHxPbFJylu9A==} - '@cowprotocol/sdk-ethers-v6-adapter@0.3.0': - resolution: {integrity: sha512-1TXtTLB5Zi2MGbCvEB9az0fJL1RDmQOa9sohO3biQNP/crGDb6jwPv30RtR3Sr621Dy8HNrfnJFHC87klPXC2g==} + '@cowprotocol/sdk-ethers-v6-adapter@0.3.11': + resolution: {integrity: sha512-yR1UFj8F/ImrB/TuTlA5pRQUZWZ92aCQGreg4JYTeEX5Fs9o6E8/GsuT0naU1HGSP7cFZWu/mp+537OmR+fuYQ==} peerDependencies: ethers: ^6.13.7 - '@cowprotocol/sdk-order-book@0.4.4': - resolution: {integrity: sha512-iTP2Vfi9h4ACvTnRArA0s3BmJgnUnNcQfsdMva4udkLy1GwjQgju7FkcCmlUxPaPvFgGm9hz8E9yPuNMWp/xWg==} + '@cowprotocol/sdk-order-book@2.0.0': + resolution: {integrity: sha512-4mDIYQc7ro2dm7co9gMfsab1zPpElhmKuqWr6BcCQ4huJI69pzPYj7PNpToIKL7ZNemV7UeAjuu4ftZKFx7ttw==} - '@cowprotocol/sdk-order-signing@0.1.21': - resolution: {integrity: sha512-zGVlo+kybnLLUzIxgHlCRbtcPQZpxt4LEDMz/DjcaJnsZEtooUORWOY1GA4NZ7VNOjY1v513v2nMu9DpU1dIzg==} + '@cowprotocol/sdk-order-signing@0.1.38': + resolution: {integrity: sha512-Kts658oFbe516w1/LNux6hpbavjgjWx0zs6ZZJHKao/FcPKMjueorOFPfSFkfMEpeRsoUazOmaGzIJpWdjz+AA==} - '@cowprotocol/sdk-trading@0.7.1': - resolution: {integrity: sha512-SfCsV1oUjw6cpMFTGk2bIPTTt3xqJ8hPZE/4OPQ5kVUUzHa8gXiclwhae+oJqoRbM5jdDB30Bd7yYSb9Qic+sw==} + '@cowprotocol/sdk-trading@1.0.4': + resolution: {integrity: sha512-DhS06tDpFHSoq1MlkcXmW9cdMK9pkfuxyLbvCFwjoqx2uUxX1l6MGIWwWR/sQkiWK4bDJCxEBHX80L3G4MkLqA==} '@csstools/css-parser-algorithms@3.0.5': resolution: {integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==} @@ -5982,15 +5982,15 @@ snapshots: hashery: 1.4.0 keyv: 5.5.5 - '@cowprotocol/cow-sdk@7.2.5(ajv@8.17.1)(cross-fetch@3.2.0)(ipfs-only-hash@4.0.0)(multiformats@9.9.0)': + '@cowprotocol/cow-sdk@8.0.0(ajv@8.17.1)(cross-fetch@3.2.0)(ipfs-only-hash@4.0.0)(multiformats@9.9.0)': dependencies: - '@cowprotocol/sdk-app-data': 4.3.6(ajv@8.17.1)(cross-fetch@3.2.0)(ipfs-only-hash@4.0.0)(multiformats@9.9.0) - '@cowprotocol/sdk-common': 0.4.0 - '@cowprotocol/sdk-config': 0.6.2 - '@cowprotocol/sdk-contracts-ts': 0.8.1 - '@cowprotocol/sdk-order-book': 0.4.4 - '@cowprotocol/sdk-order-signing': 0.1.21 - '@cowprotocol/sdk-trading': 0.7.1(ajv@8.17.1)(cross-fetch@3.2.0)(ipfs-only-hash@4.0.0)(multiformats@9.9.0) + '@cowprotocol/sdk-app-data': 4.6.8(ajv@8.17.1)(cross-fetch@3.2.0)(ipfs-only-hash@4.0.0)(multiformats@9.9.0) + '@cowprotocol/sdk-common': 0.7.1 + '@cowprotocol/sdk-config': 1.0.0 + '@cowprotocol/sdk-contracts-ts': 2.0.0 + '@cowprotocol/sdk-order-book': 2.0.0 + '@cowprotocol/sdk-order-signing': 0.1.38 + '@cowprotocol/sdk-trading': 1.0.4(ajv@8.17.1)(cross-fetch@3.2.0)(ipfs-only-hash@4.0.0)(multiformats@9.9.0) cross-fetch: 3.2.0 optionalDependencies: ipfs-only-hash: 4.0.0 @@ -5999,59 +5999,61 @@ snapshots: - ajv - encoding - '@cowprotocol/sdk-app-data@4.3.6(ajv@8.17.1)(cross-fetch@3.2.0)(ipfs-only-hash@4.0.0)(multiformats@9.9.0)': + '@cowprotocol/sdk-app-data@4.6.8(ajv@8.17.1)(cross-fetch@3.2.0)(ipfs-only-hash@4.0.0)(multiformats@9.9.0)': dependencies: - '@cowprotocol/sdk-common': 0.4.0 + '@cowprotocol/sdk-common': 0.7.1 ajv: 8.17.1 cross-fetch: 3.2.0 ipfs-only-hash: 4.0.0 json-stringify-deterministic: 1.0.12 multiformats: 9.9.0 - '@cowprotocol/sdk-common@0.4.0': {} + '@cowprotocol/sdk-common@0.7.1': + dependencies: + '@cowprotocol/sdk-config': 1.0.0 - '@cowprotocol/sdk-config@0.6.2': + '@cowprotocol/sdk-config@1.0.0': dependencies: exponential-backoff: 3.1.3 limiter: 2.1.0 - '@cowprotocol/sdk-contracts-ts@0.8.1': + '@cowprotocol/sdk-contracts-ts@2.0.0': dependencies: - '@cowprotocol/sdk-common': 0.4.0 - '@cowprotocol/sdk-config': 0.6.2 + '@cowprotocol/sdk-common': 0.7.1 + '@cowprotocol/sdk-config': 1.0.0 - '@cowprotocol/sdk-ethers-v6-adapter@0.3.0(ethers@6.14.3)': + '@cowprotocol/sdk-ethers-v6-adapter@0.3.11(ethers@6.14.3)': dependencies: - '@cowprotocol/sdk-common': 0.4.0 + '@cowprotocol/sdk-common': 0.7.1 ethers: 6.14.3 - '@cowprotocol/sdk-order-book@0.4.4': + '@cowprotocol/sdk-order-book@2.0.0': dependencies: - '@cowprotocol/sdk-common': 0.4.0 - '@cowprotocol/sdk-config': 0.6.2 + '@cowprotocol/sdk-common': 0.7.1 + '@cowprotocol/sdk-config': 1.0.0 cross-fetch: 3.2.0 exponential-backoff: 3.1.3 limiter: 3.0.0 transitivePeerDependencies: - encoding - '@cowprotocol/sdk-order-signing@0.1.21': + '@cowprotocol/sdk-order-signing@0.1.38': dependencies: - '@cowprotocol/sdk-common': 0.4.0 - '@cowprotocol/sdk-config': 0.6.2 - '@cowprotocol/sdk-contracts-ts': 0.8.1 - '@cowprotocol/sdk-order-book': 0.4.4 + '@cowprotocol/sdk-common': 0.7.1 + '@cowprotocol/sdk-config': 1.0.0 + '@cowprotocol/sdk-contracts-ts': 2.0.0 + '@cowprotocol/sdk-order-book': 2.0.0 transitivePeerDependencies: - encoding - '@cowprotocol/sdk-trading@0.7.1(ajv@8.17.1)(cross-fetch@3.2.0)(ipfs-only-hash@4.0.0)(multiformats@9.9.0)': + '@cowprotocol/sdk-trading@1.0.4(ajv@8.17.1)(cross-fetch@3.2.0)(ipfs-only-hash@4.0.0)(multiformats@9.9.0)': dependencies: - '@cowprotocol/sdk-app-data': 4.3.6(ajv@8.17.1)(cross-fetch@3.2.0)(ipfs-only-hash@4.0.0)(multiformats@9.9.0) - '@cowprotocol/sdk-common': 0.4.0 - '@cowprotocol/sdk-config': 0.6.2 - '@cowprotocol/sdk-contracts-ts': 0.8.1 - '@cowprotocol/sdk-order-book': 0.4.4 - '@cowprotocol/sdk-order-signing': 0.1.21 + '@cowprotocol/sdk-app-data': 4.6.8(ajv@8.17.1)(cross-fetch@3.2.0)(ipfs-only-hash@4.0.0)(multiformats@9.9.0) + '@cowprotocol/sdk-common': 0.7.1 + '@cowprotocol/sdk-config': 1.0.0 + '@cowprotocol/sdk-contracts-ts': 2.0.0 + '@cowprotocol/sdk-order-book': 2.0.0 + '@cowprotocol/sdk-order-signing': 0.1.38 deepmerge: 4.3.1 transitivePeerDependencies: - ajv diff --git a/tsconfig.json b/tsconfig.json index b6e4315..0c1468a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -13,7 +13,7 @@ "esModuleInterop": true, "isolatedModules": true, "resolveJsonModule": true, - "moduleResolution": "node", + "moduleResolution": "bundler", "noEmit": true, "allowSyntheticDefaultImports": true, "forceConsistentCasingInFileNames": true, From 64a94e4e497f013df6d53095278a45e08b478412 Mon Sep 17 00:00:00 2001 From: dfkadyr Date: Mon, 18 May 2026 08:53:24 +0300 Subject: [PATCH 02/16] fix-gnosis-safe --- src/config/core/connectors/WalletLinkConnector.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/config/core/connectors/WalletLinkConnector.ts b/src/config/core/connectors/WalletLinkConnector.ts index 430e6be..9a8131f 100644 --- a/src/config/core/connectors/WalletLinkConnector.ts +++ b/src/config/core/connectors/WalletLinkConnector.ts @@ -38,6 +38,8 @@ class WalletLinkConnector extends WagmiConnector { if (isGnosisSafe) { const method = provider.request + const chainId = provider.chainId + provider.request = async (data) => { const response = await method.bind(provider)(data) @@ -55,7 +57,15 @@ class WalletLinkConnector extends WagmiConnector { while (true) { let timer = 0 - const safeAPI = 'https://safe-transaction-gnosis-chain.safe.global/api/v1/multisig-transactions' + const chainNames: Record = { + 1: 'eth', + 100: 'gno', + } + + const chainName = chainNames[chainId] + + const safeAPI = `https://api.safe.global/tx-service/${chainName}/api/v1/multisig-transactions` + const response = await fetch(`${safeAPI}/${safeHash}`) if (!response.ok) { From 0570cd3d37d75620aa767e288e2d40e5d4bb604c Mon Sep 17 00:00:00 2001 From: dfkadyr Date: Mon, 18 May 2026 10:09:12 +0300 Subject: [PATCH 03/16] new RPC, update Transactions UI --- .../Transactions/TransactionView/TransactionView.tsx | 4 ++-- src/components/Transactions/Transactions.module.scss | 2 +- src/helpers/methods/apiUrls/data.ts | 2 +- src/helpers/methods/getSDK/getUrls.ts | 5 ++++- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/components/Transactions/TransactionView/TransactionView.tsx b/src/components/Transactions/TransactionView/TransactionView.tsx index 771fa14..0a5a2dd 100644 --- a/src/components/Transactions/TransactionView/TransactionView.tsx +++ b/src/components/Transactions/TransactionView/TransactionView.tsx @@ -47,7 +47,7 @@ const TransactionView: React.FC = (props) => { const isClose = closeStatuses.includes(status) const isLast = lastStatuses.includes(status) - const iconClassName = cx('flex items-center justify-center flex-none rounded-full w-32 h-32', { + const iconClassName = cx('mt-8 flex items-center justify-center flex-none rounded-full w-32 h-32', { 'bg-dark/5': !isLast, 'bg-success-light': status === TransactionStatus.Success, 'bg-error': status === TransactionStatus.Fail, @@ -69,7 +69,7 @@ const TransactionView: React.FC = (props) => { return (
{ const formattedWeb3 = urls.map((url) => ({ url, - headers: {}, + headers: { + // For SSR + Origin: 'https://app.stakewise.io', + }, })) return { From 887e74b0f7df4a0942e7fbfb7285bc6203d15228 Mon Sep 17 00:00:00 2001 From: dfkadyr Date: Mon, 18 May 2026 10:45:22 +0300 Subject: [PATCH 04/16] translations --- src/config/core/messages.ts | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/config/core/messages.ts b/src/config/core/messages.ts index 4740d56..a03e329 100644 --- a/src/config/core/messages.ts +++ b/src/config/core/messages.ts @@ -15,7 +15,7 @@ export default { es: 'Desconectado exitosamente de {wallet}', pt: 'Desconectado com sucesso de {wallet}', de: 'Erfolgreich von {wallet} getrennt', - zh: '成功断开连接 {wallet}', + zh: '成功断开与 {wallet} 的连接', }, switchNetwork: { en: 'Please confirm via WalletConnect to switch network', @@ -24,13 +24,13 @@ export default { es: 'Por favor confirme a través de WalletConnect para cambiar de red', pt: 'Por favor, confirme através do WalletConnect para mudar de rede', de: 'Bitte bestätigen Sie über WalletConnect, um das Netzwerk zu wechseln', - zh: '请通过WalletConnect确认以切换网络', + zh: '请通过 WalletConnect 确认以切换网络', }, authMessages: { waitingAuth: { en: 'Waiting for authorization to be completed', ru: 'Ожидание завершения авторизации', - fr: 'En attente de l\'achèvement de l\'autorisation', + fr: 'En attente de l\'autorisation', es: 'Esperando a que se complete la autorización', pt: 'Aguardando a conclusão da autorização', de: 'Warten auf Abschluss der Autorisierung', @@ -39,9 +39,9 @@ export default { waitingAuthByQR: { en: 'Waiting for QR code to be scanned', ru: 'Ожидание сканирования QR-кода', - fr: 'En attente de la numérisation du code QR', + fr: 'En attente du scan du code QR', es: 'Esperando que se escanee el código QR', - pt: 'Aguardando a leitura do código QR', + pt: 'Aguardando o scan do código QR', de: 'Warten auf das Scannen des QR-Codes', zh: '等待扫描二维码', }, @@ -60,7 +60,7 @@ export default { en: 'Your wallet does not support adding the network', ru: 'Ваш кошелек не поддерживает добавление сети', fr: 'Votre portefeuille ne prend pas en charge l\'ajout du réseau', - es: 'Su billetera no admite la adición de la red', + es: 'Su billetera no permite agregar la red', pt: 'Sua carteira não suporta a adição da rede', de: 'Ihr Wallet unterstützt das Hinzufügen des Netzwerks nicht', zh: '您的钱包不支持添加网络', @@ -69,7 +69,7 @@ export default { en: 'Your wallet does not support switching the network', ru: 'Ваш кошелек не поддерживает переключение сети', fr: 'Votre portefeuille ne prend pas en charge le changement de réseau', - es: 'Su billetera no admite cambiar la red', + es: 'Su billetera no permite cambiar la red', pt: 'Sua carteira não suporta a troca de rede', de: 'Ihr Wallet unterstützt das Wechseln des Netzwerks nicht', zh: '您的钱包不支持切换网络', @@ -124,9 +124,9 @@ export default { ru: 'Текущий идентификатор цепи не поддерживается', fr: 'L\'identifiant de chaîne actuel n\'est pas supporté', es: 'El ID de cadena actual no es compatible', - pt: 'O ID de corrente atual não é suportado', + pt: 'O ID de cadeia atual não é suportado', de: 'Die aktuelle Ketten-ID wird nicht unterstützt', - zh: '当前链ID不受支持', + zh: '当前链 ID 不受支持', }, authorize: { en: 'Please allow access to your account', @@ -163,7 +163,7 @@ export default { es: 'La aplicación Ledger Ethereum no está abierta', pt: 'O aplicativo Ledger Ethereum não está aberto', de: 'Die Ledger Ethereum App ist nicht geöffnet', - zh: 'Ledger Ethereum应用未打开', + zh: 'Ledger Ethereum 应用未打开', }, lock: { en: 'Please unlock the Ledger', @@ -190,7 +190,7 @@ export default { es: 'Ledger no está conectado o la aplicación Ethereum no está abierta', pt: 'Ledger não está conectado ou o aplicativo Ethereum não está aberto', de: 'Ledger ist nicht verbunden oder die Ethereum-App ist nicht geöffnet', - zh: 'Ledger未连接或Ethereum应用未打开', + zh: 'Ledger 未连接或 Ethereum 应用未打开', }, }, }, From aae7d835a11ffaf9c7514d9105ca7969fa79a67e Mon Sep 17 00:00:00 2001 From: dfkadyr Date: Mon, 18 May 2026 10:56:24 +0300 Subject: [PATCH 05/16] SubmitButton readOnly --- .../SubmitButton/SubmitButton.tsx | 28 ++++++++++++++++--- .../SubmitButton/messages.ts | 11 ++++++++ 2 files changed, 35 insertions(+), 4 deletions(-) create mode 100644 src/views/SwapView/common/SubmitButtonWrapper/SubmitButton/messages.ts diff --git a/src/views/SwapView/common/SubmitButtonWrapper/SubmitButton/SubmitButton.tsx b/src/views/SwapView/common/SubmitButtonWrapper/SubmitButton/SubmitButton.tsx index b4a371a..1c895bd 100644 --- a/src/views/SwapView/common/SubmitButtonWrapper/SubmitButton/SubmitButton.tsx +++ b/src/views/SwapView/common/SubmitButtonWrapper/SubmitButton/SubmitButton.tsx @@ -1,10 +1,13 @@ -import React from 'react' +import React, { useMemo } from 'react' import forms from 'modules/forms' +import { useConfig } from 'config' import { commonMessages } from 'helpers' import { Button, Tooltip } from 'components' import type { ButtonProps as ButtonComponentProps } from 'components' +import messages from './messages' + export type SubmitButtonProps = { className?: string @@ -12,16 +15,33 @@ export type SubmitButtonProps = { loading?: boolean disabled?: boolean tooltip?: Intl.Message + isSkipFieldCheck?: boolean field: Forms.Field | Forms.Field color?: ButtonComponentProps['color'] onClick: () => void } const SubmitButton: React.FC = (props) => { - const { className, field, title, loading, disabled, color, tooltip, onClick } = props + const { className, field, title, loading, disabled, color, tooltip, isSkipFieldCheck, onClick } = props + const { isReadOnlyMode } = useConfig() const { value, error } = forms.useFieldValue(field) + const isFilled = isSkipFieldCheck ? true : Boolean(value) + const isButtonDisabled = isReadOnlyMode || disabled || !isFilled || Boolean(error) + + const buttonTitle = useMemo(() => { + if (isReadOnlyMode) { + return messages.readOnlyTitle + } + + if (!value && !isSkipFieldCheck) { + return commonMessages.enterAmount + } + + return title + }, [ title, value, isReadOnlyMode, isSkipFieldCheck ]) + const button = (