Sync upstream v2.8.0-alpha.1 (merge conflicts)#4
Conversation
…ON (blockscout#3335) * Hero banner: move 'explorer' to new ENV Resolves blockscout#3290 * [skip ci] update docs
…lockscout#3337) * Numeric widget: add new value from API Resolves blockscout#3282 * [skip ci] add formatting to value title
…lockscout#3338) * Support both chain slug and chain id in page parameters in multichain explorer mode Resolves blockscout#3320 * fix test
* add export for address txs * transfer all export from page to dialog * remove old route and components * improve file name and fix loading state of icon button * basic implementation * refetch item status * status indicator for download items * changes for multichain * handle too many requests for downloads error * update button styles and spacing * fix tests * disable async export for multichain * Fix CSV export cancel flow and stabilize context updates Applied via @cursor push command * test and review fixes * design fixes * refactor file names --------- Co-authored-by: Cursor Agent <cursoragent@cursor.com>
* add export for address txs * transfer all export from page to dialog * remove old route and components * improve file name and fix loading state of icon button * basic implementation * refetch item status * status indicator for download items * changes for multichain * handle too many requests for downloads error * update button styles and spacing * fix tests * disable async export for multichain * Fix CSV export cancel flow and stabilize context updates Applied via @cursor push command * test and review fixes * move file to client folder * round 3 * add glossary * migration tasks and skill * move skills to .agents folder * rename migrate skill * refine project rules * move MIGRATION_TASKS.md to client directory * update sym links * refine migration skills * fixes after merging the main branch --------- Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ckscout#3346) Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
…ckscout#3349) Enable ESLint import/no-cycle and architecture boundary rules Add eslint-plugin-boundaries with element-types matching ARCH_REDESIGN §8, enable import/no-cycle (error in client/, warn in lib/ and ui/), extend consistent-default-export-name to client/**/*.tsx, and document §10 types/api.ts enforcement as a follow-up. Made-with: Cursor
* debug wallet client error * Support raw text/html for NFT animation on the token instance page Resolves blockscout#2609 * fix writing to a contract with dynamic provider * change default interval for hot contracts * wait for load event of NFT embed frame * update screenshots * add network validation mode to dynamic provider * add rootstock mainnet preset * update preset for rootsrock mainnet * [skip ci] disable essential dapps for rootstock mainnet * pass required flag to FormFieldSelect controller * bump dynamic version * fix rabby wallet tx write
Replaces text/plain with application/json for proper ingestion on the backend
Add Content-Type header to /api/v2/key request
…blockscout#3355) * Support full instance specifiers for admin services handles Resolves blockscout#3350 * fix ts
…lockscout#3351) * fix stats counters layout * ICTT users index * bridged tokens page * move bridged tokens to the tab on tokens page * migrate to new API version * add support for sankey chart on stats page * rename Chart into LineChart * create reusable chart components * sankey widget * cross chain txs paths chart page * add filter for bridged tokens and fix sorting for ictt users * hide chain select for paths chart * add chain filter to paths chart page * show zero-value nodes on sankey chart * add tests * refactoring * fix tests * review fixes * Update ChainStatsDetails to handle counterparty chain IDs as an array and change chart sorting to ascending order
…ockscout#3359) * Adjust scale in d3 to display correct resolution by week in stats Resolves blockscout#2701 * fixes
- Rename second review environment and update values, workflow and jobs related to it
* bump nextjs version * bump vite and path-to-regexp * bump dev packages versions
…der (blockscout#3364) * Initial plan * feat: add DEFAULT_SERVER_NEW_BASE constant for Swagger server URL alignment Add a new `DEFAULT_SERVER_NEW_BASE = 'http://localhost'` constant alongside the existing `DEFAULT_SERVER_NEW = 'http://localhost/api'` to support new-style Swagger documents where the server URL omits `/api` and each operation path includes `/api` instead. - The more-specific `DEFAULT_SERVER_NEW` check (with `/api`) is evaluated first to prevent overlap since `http://localhost` is a substring of `http://localhost/api` - The new `DEFAULT_SERVER_NEW_BASE` handler replaces `http://localhost` with `${api.endpoint}${api.basePath ?? ''}` without appending `/api` - Tests updated to properly exercise each branch Agent-Logs-Url: https://github.com/blockscout/frontend/sessions/712e7bc9-f630-409c-bb97-9d8553bb200f Co-authored-by: tom2drum <22130104+tom2drum@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: tom2drum <22130104+tom2drum@users.noreply.github.com>
Review images are published to ghcr.io/blockscout/frontend-private since commit 13203ef (Sep 2025). The reusable cleanup_docker.yaml now accepts an optional imageName input (blockscout/actions PR #4); pass it here so cleanup jobs delete from the correct GHCR package. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
blockscout/actions PR #4 adds an optional `namespace` input that defaults to globalEnv (autodeploy-compatible). Frontend creates namespace from appName, so pass it explicitly here. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* update env presets * Multichain: support async csv export Resolves blockscout#3331
* chore(migration 1-2): add codemod scripts for client/shared/ migration Scripts used to mechanically move files, update relative imports in moved files, and perform repo-wide absolute import path replacements for task 1-2. https://claude.ai/code/session_01ANGHydwdidiSBdW359Mfv8 * feat(migration 1-2): migrate lib/ buckets to client/shared/ Moves all files per the issue scope: - lib/mixpanel/ → client/shared/analytics/ (kebab-case rename) - lib/rollbar/ → client/shared/monitoring/rollbar/ - lib/growthbook/ → client/shared/feature-flags/ - lib/networks/ + lib/units.ts → client/shared/chain/ (network→chain rename) - lib/router/ + filter helpers → client/shared/router/ (kebab-case rename) - lib/errors/ → client/shared/errors/ (kebab-case rename) - lib/web3/ → client/shared/web3/ (kebab-case rename) - lib/metadata/ → client/shared/metadata/ (kebab-case rename) - lib/hooks/useTimeAgoIncrement → client/shared/date-and-time/ - lib/hooks/{useLazyRenderedList,useInitialList} + lib/getItemIndex → client/shared/lists/ - lib/cookies.ts → client/shared/storage/ - lib/decodeJWT.ts → client/shared/auth/ - lib/setLocale.ts → client/shared/i18n/ - lib/{capitalizeFirstLetter,shortenString,escapeRegExp,highlightText} → client/shared/text/ - lib/{base64ToHex,bytesToBase64,bytesToHex,hexTo*} → client/shared/transformers/ - lib/utils/stripUtmParams → client/shared/links/utils/ - lib/{delay,isMetaKey} → client/shared/utils/ - lib/hooks/{useDebounce,...,useUpdateValueEffect} → client/shared/hooks/ - lib/getErrorMessage.ts → client/features/account/utils/get-api-error-text.ts (form-field error helper; distinct from lib/errors/getErrorMessage) All import paths updated repo-wide (473 files). network→chain identifier rename applied to all exported function names and call sites (22 files). Codemod commands used: python3 scripts/migrate-1-2.py # file copies python3 scripts/migrate-1-2-phase2.py # import replacements + renames Cross-slice deps left at old paths (excluded from this PR): - client/shared/web3/useAddChain.tsx imports lib/hooks/useRewardsActivity → task 6-10 pnpm lint:tsc / lint:eslint could not be verified locally (node_modules missing in environment); both commands produce identical errors on clean main. https://claude.ai/code/session_01ANGHydwdidiSBdW359Mfv8 * fix(migration 1-2): resolve ESLint consistent-default-export-name errors - Rename useInit.tsx → useMixpanelInit.tsx to match its exported function name; update import in analytics/index.ts - Convert get-resource-error-payload.tsx → .ts (no JSX used; removes file from client/**/*.tsx rule scope) - Convert is-meta-key.tsx → .ts (same reason) https://claude.ai/code/session_01ANGHydwdidiSBdW359Mfv8 * fix(migration 1-2): fix remaining camelCase relative imports in moved files Missed during phase 2: router and transformer files still referenced their sibling modules by old camelCase filenames after rename to kebab-case. - useEtherscanRedirects.ts: ./getQueryParamString → ./get-query-param-string - get-filter-values-from-query.ts: ./getValuesArrayFromQuery → ./get-values-array-from-query - base64-to-hex.ts: ./bytesToHex → ./bytes-to-hex - hex-to-base64.ts: ./bytesToBase64 → ./bytes-to-base64, ./hexToBytes → ./hex-to-bytes pnpm lint:tsc now passes with zero errors. https://claude.ai/code/session_01ANGHydwdidiSBdW359Mfv8 * fix review comments: relocate chain-explorers, remove codemod scripts - Move client/shared/chain/chain-explorers.ts → client/features/alternative-explorers/utils/explorers.ts (belongs to the alternative-explorers feature, not a generic shared util) - Remove scripts/migrate-1-2*.py — codemod scripts should not be committed - Add Alternative Explorers entry to docs/GLOSSARY.md - Add task 6-28 (feature: alternative-explorers) to client/MIGRATION_TASKS.md - Update arch-migrate skill: run codemod scripts locally then delete, never commit Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * more refactoring --------- Co-authored-by: Claude <noreply@anthropic.com>
* Initial plan * feat: remove zkEvm rollup option and all related code Agent-Logs-Url: https://github.com/blockscout/frontend/sessions/89a09631-8af8-4a6d-bc36-9f9e790ee98e Co-authored-by: tom2drum <22130104+tom2drum@users.noreply.github.com> * more deletion * fix spell checker --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: tom2drum <22130104+tom2drum@users.noreply.github.com> Co-authored-by: tom <tom@ohhhh.me>
* move types * move stubs * move mocks * move tx index page components * move tx details page components * move TxEntity components * move shared tx components * update migration tasks * [skip ci] update research skill
…3379) * [Migration 3-1] Extract block types into feature type files - Add BlockArbitrum + ArbitrumBlockData to rollup/arbitrum/types/api.ts - Add BlockOptimism + OptimismBlockData to rollup/optimistic/types/api.ts - Add BlockZkSync to rollup/zk-sync/types/api.ts - Add BlockBaseFeeCelo + BlockCelo to chain-variants/celo/types/api.ts - Add ZilliqaBlockData, ZilliqaQuorumCertificate, ZilliqaNestedQuorumCertificate, BlockZilliqa to chain-variants/zilliqa/types/api.ts - Create chain-variants/rootstock/types/api.ts with BlockRootstock - Create chain-variants/beacon-chain/types/api.ts with BlockWithdrawalsResponse, BlockWithdrawalsItem - Add BlockDataAvailability to data-availability/types/api.ts - Create client/slices/block/types/api.ts with Block extending all feature sub-types https://claude.ai/code/session_017CjbiM8hMYA2vjkjtj6GnG * [Migration 3-1] Move lib/block utils and block hooks to client/slices/block/ - lib/block/getBlockReward.ts → client/slices/block/utils/get-block-reward.ts - lib/block/getBlockTotalReward.ts → client/slices/block/utils/get-block-total-reward.ts - ui/block/useBlockQuery.tsx → client/slices/block/hooks/useBlockQuery.ts - ui/block/useBlockTxsQuery.tsx → client/slices/block/hooks/useBlockTxsQuery.ts - ui/block/useBlockInternalTxsQuery.tsx → client/slices/block/hooks/useBlockInternalTxsQuery.ts https://claude.ai/code/session_017CjbiM8hMYA2vjkjtj6GnG * [Migration 3-1] Move BlockDetails and BlockInternalTxs to client/slices/block/pages/details/ - ui/block/BlockDetails.tsx + .pw.tsx → client/slices/block/pages/details/ - ui/block/BlockInternalTxs.tsx → client/slices/block/pages/details/ https://claude.ai/code/session_017CjbiM8hMYA2vjkjtj6GnG * [Migration 3-1] Move beacon-chain block pages to client/features/chain-variants/beacon-chain/ - ui/block/BlockDeposits.tsx → chain-variants/beacon-chain/pages/block/ - ui/block/BlockWithdrawals.tsx → chain-variants/beacon-chain/pages/block/ - ui/block/useBlockDepositsQuery.tsx → chain-variants/beacon-chain/pages/block/useBlockDepositsQuery.ts https://claude.ai/code/session_017CjbiM8hMYA2vjkjtj6GnG * [Migration 3-1] Move celo and remaining beacon-chain block pages to client/features/ - ui/block/BlockWithdrawals query → chain-variants/beacon-chain/pages/block/ - ui/block/BlockCeloEpochTag.tsx → chain-variants/celo/pages/block/ - ui/block/details/BlockDetailsBaseFeeCelo.tsx → chain-variants/celo/pages/block/ https://claude.ai/code/session_017CjbiM8hMYA2vjkjtj6GnG * [Migration 3-1] Move BlockDetailsBaseFeeCelo visual tests and screenshots to celo feature - ui/block/details/BlockDetailsBaseFeeCelo.pw.tsx → celo/pages/block/ - ui/block/details/__screenshots__/ (celo) → celo/pages/block/__screenshots__/ https://claude.ai/code/session_017CjbiM8hMYA2vjkjtj6GnG * [Migration 3-1] Move Zilliqa block page to client/features/chain-variants/zilliqa/ - ui/block/details/BlockDetailsZilliqaQuorumCertificate.tsx + .pw.tsx + screenshots → chain-variants/zilliqa/pages/block/ https://claude.ai/code/session_017CjbiM8hMYA2vjkjtj6GnG * [Migration 3-1] Move data-availability block pages to client/features/data-availability/ - ui/block/details/BlockDetailsBlobInfo.tsx → data-availability/pages/block/ - ui/block/useBlockBlobTxsQuery.tsx → data-availability/pages/block/useBlockBlobTxsQuery.ts https://claude.ai/code/session_017CjbiM8hMYA2vjkjtj6GnG * [Migration 3-1] Move blocks index page components (partial) to client/slices/block/pages/index/ - ui/blocks/BlocksContent.tsx → client/slices/block/pages/index/ - ui/blocks/BlocksList.tsx → client/slices/block/pages/index/ https://claude.ai/code/session_017CjbiM8hMYA2vjkjtj6GnG * [Migration 3-1] Move blocks, blockCountdown, and shared block components to client/ - Move ui/blocks/* to client/slices/block/pages/index/ and client/features/flashblocks/ - Move ui/blockCountdown/* to client/slices/block/pages/countdown/ - Move ui/shared/block/* to client/slices/block/components/ - Move ui/shared/entities/block/* to client/slices/block/components/entity/ and client/features/rollup/ - Move mocks/blocks/block.ts and stubs/block.ts to client/slices/block/ - Update all imports across the codebase to use new paths - Fix ESLint errors in migrated mock files (max-len, consistent-type-imports) https://claude.ai/code/session_017CjbiM8hMYA2vjkjtj6GnG * Move useBlockBlobTxsQuery to data-availability/hooks/ Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * Move ui/pages/Block*.tsx and visual tests to client/slices/block/pages/ Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * split countdown page folder into two * update migration research skill --------- Co-authored-by: Claude <noreply@anthropic.com>
* [Migration 3-2] Slice: address — migrate address-related files to client/ Closes blockscout#3380 What moved: - types/api/{address,addressParams,addresses}.ts → client/slices/address/types/api.ts - types/client/addressMetadata.ts → client/features/address-metadata/types/view.ts - types/api/addressMetadata.ts → client/features/address-metadata/types/api.ts - lib/address/useAddressMetadata*.ts → client/features/address-metadata/hooks/ - lib/address/parseMetaPayload.ts → client/features/address-metadata/utils/ - lib/hooks/useAddressProfileApiQuery.tsx → client/features/address-profile-api/hooks/ - ui/shared/entities/address/AddressEntity*.tsx → client/slices/address/components/entity/ - ui/shared/entities/address/AddressEntityTacTon.tsx → client/features/chain-variants/tac/components/ - ui/shared/entities/address/AddressEntityZetaChain*.tsx → client/features/chain-variants/zeta-chain/components/ - ui/shared/entities/address/AddressEntityInterop*.tsx → client/features/op-interop/components/ - ui/shared/entities/address/AddressEntityL1.tsx → client/features/rollup/common/components/ - ui/address/coinBalance/* → client/slices/address/pages/coin-balance/ - ui/address/blocksValidated/* → client/slices/address/pages/blocks-validated/ - ui/address/nfts/* → client/slices/address/pages/nfts/ - ui/address/mud/* → client/features/chain-variants/mud/pages/address/ - ui/address/celo/* → client/features/chain-variants/celo/pages/address/ - ui/address/filecoin/* → client/features/chain-variants/filecoin/pages/address/ - ui/address/beacon-chain/* → client/features/chain-variants/beacon-chain/pages/address/ - ui/pages/Accounts.tsx → client/slices/address/pages/index/Accounts.tsx - lib/address/AddressFavoriteButton.tsx → client/features/account/pages/address/ - ui/address/address3rdPartyWidgets/* → client/features/address-3rd-party-widgets/pages/address/ - Mud types extracted to client/features/chain-variants/mud/types/api.ts - Celo epoch rewards types extracted to client/features/chain-variants/celo/types/api.ts - Filecoin types extracted to client/features/chain-variants/filecoin/types/api.ts - Zilliqa AddressZilliqaParams added to client/features/chain-variants/zilliqa/types/api.ts - New stubs: client/slices/address/stubs/address{,-params}.ts - New stubs: client/features/chain-variants/{celo,mud}/stubs/address.ts - New utils: client/slices/address/utils/{tx,consts}.ts - New view types: client/features/address-3rd-party-widgets/types/view.ts - Deleted types/client/addressProfileAPIConfig.ts (type inlined in configs/app/features/address-profile-api.ts) - pages/accounts/index.tsx updated to dynamic-import the new page location Design decision: AddressCeloParams kept in client/slices/address/types/api.ts (not extracted to celo feature) to avoid address-slice -> celo-feature -> address-slice circular import, since AddressCeloParams references AddressParam. Codemods run (not committed): # Redirect ADDRESS_HASH / ADDRESS_PARAMS stubs imports across repo find stubs/ ui/ lib/ client/ -name '*.ts' -o -name '*.tsx' | \ xargs sed -i "s|from 'stubs/addressParams'|from 'client/slices/address/stubs/address-params'|g" # Redirect relative ./addressParams in stubs/ sed -i "s|from './addressParams'|from 'client/slices/address/stubs/address-params'|g" stubs/*.ts # Redirect relative ./addressParams in types/api/ find types/api/ -name '*.ts' | \ xargs sed -i "s|from './addressParams'|from 'client/slices/address/types/api'|g" # Redirect addressMetadata imports in types/api/ find types/api/ -name '*.ts' | \ xargs sed -i "s|from './addressMetadata'|from 'client/features/address-metadata/types/api'|g" Cross-slice deps left at legacy paths (pending future migrations): - types/api/contract (SmartContractMudSystemsResponse, SmartContractMudSystemInfo) - types/api/token (TokenInfo) - types/api/tokenTransfer (TokenTransfer) - types/api/internalTransaction (InternalTransaction) - types/api/mudWorlds (MudWorldsResponse, MudTableInfo) - types/api/epochs (CeloEpochRewardsType) - ui/shared/entities/base/utils (EntityBaseProps etc.) Checklist: - [x] pnpm lint:tsc passes (zero errors) - [x] pnpm lint:eslint:fix passes (no errors in client/) https://claude.ai/code/session_016VNwTsfk9VTzWCTv8Ppmq3 * chore: update git-lfs husky hook messages (auto-updated by git lfs install) https://claude.ai/code/session_016VNwTsfk9VTzWCTv8Ppmq3 * fix: delete source files after migrating to client/ (address review) Address reviewer feedback: files were added to client/ but old source files were not removed, leaving both locations active. Changes: - pages/address/[hash]/index.tsx: import Address from client/slices/address/pages/details/Address - ui/pages/Token.tsx: update Address3rdPartyWidgets imports to client/features/address-3rd-party-widgets/pages/address/ - Delete ui/pages/Address.tsx (replaced by client/slices/address/pages/details/Address.tsx) - Delete ui/pages/Accounts.tsx (replaced by client/slices/address/pages/index/Accounts.tsx) - Move ui/pages/Address.pw.tsx to client/slices/address/pages/details/Address.pw.tsx - Delete ui/pages/Accounts.pw.tsx (duplicate of client/slices/address/pages/index/Accounts.pw.tsx) - Delete ui/address/ barrel files that were migrated and are no longer referenced: AddressBlocksValidated, AddressCoinBalance (still used by multichain — kept), AddressDetails, AddressInternalTxs, AddressLogs, AddressTokens, AddressTokenTransfers, AddressTxs, AddressWithdrawals, AddressMud, AddressMultichainInfoButton, AddressUserOps, AddressEpochRewards, AddressDeposits, AddressAccountHistory, Address3rdPartyWidgets and address3rdPartyWidgets/ - Delete ui/address/ subdirectories migrated to client/: blocksValidated/, mud/, filecoin/, address3rdPartyWidgets/ - Delete ui/address/details/ files only referenced by old Address.tsx: AddressFavoriteButton, AddressCeloAccount (migrated to celo feature) - Delete ui/address/clusters/AddressClusters.tsx, ensDomains/AddressEnsDomains.tsx - Delete ui/address/utils/ hooks only referenced by old Address.tsx: useAddressQuery, useCheckAddressFormat, useCheckDomainNameParam Files left in ui/address/ (still referenced by ui/multichain/, ui/token/, client/ cross-deps): - AddressContract, SolidityscanReport, contract/, AddressCoinBalance, coinBalance/, tokens/, details/AddressQrCode, details/AddressAlerts, details/AddressMultichainButton, utils/useAddressCountersQuery, utils/tokenUtils, AddressTxsFilter, AddressAdvancedFilterLink, AddressTokenTransfersLocal, testUtils/ https://claude.ai/code/session_016VNwTsfk9VTzWCTv8Ppmq3 * fix: delete all remaining migrated ui/address/ files; update multichain/token imports Complete the cleanup — all files that were migrated to client/ are now deleted from their old ui/address/ locations. Updated imports in: - ui/multichain/address/MultichainAddressCoinBalanceHistory.tsx - ui/multichain/address/MultichainAddressInternalTxs.tsx - ui/multichain/address/MultichainAddressTokenTransfers.tsx - ui/multichain/address/MultichainAddressTxs.tsx - ui/multichain/address/MultichainAddress.tsx - ui/multichain/address/MultichainAddressPortfolio.tsx - ui/multichain/address/portfolio/MultichainAddressPortfolioNetWorth.tsx - ui/multichain/address/portfolio/MultichainAddressPortfolioTokens.tsx - ui/multichain/address/portfolio/MultichainAddressTokensListItem.tsx - ui/multichain/address/portfolio/MultichainAddressTokensTable.tsx - ui/multichain/address/portfolio/MultichainAddressTokensTableItem.tsx - ui/token/TokenPageTitle.tsx - ui/tokenInstance/TokenInstancePageTitle.tsx - client/slices/address/pages/details/info/token-select/TokenSelect.pw.tsx Deleted old ui/address/ files/dirs: AddressCoinBalance.tsx/.pw.tsx, AddressTokenTransfersLocal.tsx, AddressTxsFilter.tsx, AddressAdvancedFilterLink.tsx, useAddress{InternalTxs,TokenTransfers,TokenTransfersSocket,Txs}Query.ts, coinBalance/, tokens/, tokenSelect/, details/, utils/, accountHistory/, epochRewards/, testUtils/ Remaining in ui/address/ (out of scope — contract slice task): AddressContract.tsx/.pw.tsx, SolidityscanReport.tsx/.pw.tsx, contract/ https://claude.ai/code/session_016VNwTsfk9VTzWCTv8Ppmq3 * fixes * move solidity scan to features --------- Co-authored-by: Claude <noreply@anthropic.com>
…out#3390) * Add copilot-setup-steps.yml with pnpm dependency installation Agent-Logs-Url: https://github.com/blockscout/frontend/sessions/f1fddbff-09fd-44ca-8791-671c3bd62625 Co-authored-by: tom2drum <22130104+tom2drum@users.noreply.github.com> * Remove redundant cache option from pnpm/action-setup Agent-Logs-Url: https://github.com/blockscout/frontend/sessions/f1fddbff-09fd-44ca-8791-671c3bd62625 Co-authored-by: tom2drum <22130104+tom2drum@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: tom2drum <22130104+tom2drum@users.noreply.github.com>
…label via children (blockscout#3386) * truncate long value and labels in input and input groups * adaptive tabs: pass list item props * switch: render children as label * screenshot updates and fixes * add small size to checkbox and radio components * fix flickering of empty state in charts components * fix tests
* move address tokens components to token slice * use singular nouns for slice names * group imports from client directory
* promoting PRO API * add .ai to .gitignore * add client alias to Vite configuration * two modes for llms.txt --------- Co-authored-by: Alexander Kolotov <alexander.kolotov@gmail.com>
There was a problem hiding this comment.
Code Review
This pull request continues the ongoing frontend architecture migration by moving various API services, features, and utility modules into the new client/ directory structure. It also introduces a new CSV export feature and updates several project configuration files and documentation. The review comments highlight a missing TODO reference, incorrect import formatting, a missing explanation for an eslint-disable comment, the use of an enum instead of a const object, and the use of a synchronous window.confirm dialog. All review comments are actionable and have been kept.
| chainId?: string; | ||
| } | ||
|
|
||
| // TODO @tom2drum extract to a separate file |
There was a problem hiding this comment.
Every TODO comment must be paired with a clear follow-up plan or an issue reference to ensure it doesn't get lost in the codebase.
References
- TODOs are acceptable only when paired with a clear follow-up plan or issue reference. (link)
| AddressTokenBalancesResponse, | ||
| } from 'types/api/address'; | ||
| import type { AddressesMetadataSearchFilters, AddressesMetadataSearchResult, AddressesResponse } from 'types/api/addresses'; | ||
| AddressesResponse } from 'client/slices/address/types/api'; |
There was a problem hiding this comment.
The import statement has incorrect formatting. The closing brace and the source path should be on separate lines or follow the project's standard import style for better readability.
| AddressesResponse } from 'client/slices/address/types/api'; | |
| AddressesResponse, | |
| } from 'client/slices/address/types/api'; |
| if (!isInitialLoading && query.data?.info && !config.meta.seo.enhancedDataEnabled) { | ||
| metadata.update({ pathname: '/stats/[id]', query: { id } }, query.data.info); | ||
| } | ||
| // eslint-disable-next-line react-hooks/exhaustive-deps |
There was a problem hiding this comment.
Every eslint-disable comment must include an explanation for why the rule is being suppressed.
| // eslint-disable-next-line react-hooks/exhaustive-deps | |
| // eslint-disable-next-line react-hooks/exhaustive-deps -- update metadata only when initial loading is finished |
References
- Every eslint-disable comment must include an explanation. (link)
| export enum StatsIntervalId { | ||
| all = 'all', | ||
| oneMonth = 'oneMonth', | ||
| threeMonths = 'threeMonths', | ||
| sixMonths = 'sixMonths', | ||
| oneYear = 'oneYear', | ||
| } |
There was a problem hiding this comment.
Enums are discouraged in this project. Please use a const object or a union type instead to maintain consistency and improve type safety.
| export enum StatsIntervalId { | |
| all = 'all', | |
| oneMonth = 'oneMonth', | |
| threeMonths = 'threeMonths', | |
| sixMonths = 'sixMonths', | |
| oneYear = 'oneYear', | |
| } | |
| export const StatsIntervalId = { | |
| all: 'all', | |
| oneMonth: 'oneMonth', | |
| threeMonths: 'threeMonths', | |
| sixMonths: 'sixMonths', | |
| oneYear: 'oneYear', | |
| } as const; |
|
|
||
| const handleOpenChange: OnOpenChangeHandler = React.useCallback(({ open }) => { | ||
| if (formState.isSubmitting && !open) { | ||
| const confirm = window.confirm('Are you sure you want to close the dialog? The export will be cancelled.'); |
7baf271 to
5cc8337
Compare
5cc8337 to
130817c
Compare
Upstream Sync - v2.8.0-alpha.1
Auto-merge with upstream
v2.8.0-alpha.1failed due to conflicts.To resolve:
v2.8.0-alpha.1to trigger Docker buildUpstream release notes