Skip to content

feat(watchlist): add wallet-scoped watchlist keyed by address (#846) - #870

Merged
Chucks1093 merged 11 commits into
accesslayerorg:devfrom
Seunfunmi-319509:feat/846-watchlist
Sep 5, 2026
Merged

feat(watchlist): add wallet-scoped watchlist keyed by address (#846)#870
Chucks1093 merged 11 commits into
accesslayerorg:devfrom
Seunfunmi-319509:feat/846-watchlist

Conversation

@Seunfunmi-319509

Copy link
Copy Markdown
Contributor

Closes #846

Summary
Adds a wallet-scoped watchlist. Users can bookmark creator keys (persisted in localStorage keyed by connected wallet address), see them on a /watchlist page as a card grid, and get an empty state plus a navbar badge showing the saved count.

Changes

  • useWatchlist zustand store (localStorage-persisted, keyed by wallet with guest fallback)
  • WatchlistButton bookmark toggle on CreatorCard + CreatorDetailPage
  • New /watchlist page with grid of bookmarked keys and an empty state
  • Watchlist nav link + count badge in the marketplace sidebar and marketing header
  • Lightweight useConnectedWallet store so watchlist components scope by wallet without requiring a wagmi provider

Tests

  • useWatchlist.test.ts, WatchlistButton.test.tsx, MarketplaceSidebar.watchlist.test.tsx, WatchlistPage.test.tsx — all passing
  • tsc, eslint, and pnpm build pass

…layerorg#846)

- Add useWatchlist zustand store persisted in localStorage, scoped by
  connected wallet address (guest fallback when disconnected)
- Add WatchlistButton bookmark toggle on CreatorCard and CreatorDetailPage
- Add /watchlist page with grid of bookmarked keys and an empty state
- Add Watchlist nav link + count badge to marketplace sidebar and home header
- Wire a lightweight useConnectedWallet store so components avoid wagmi
  useAccount where no provider is mounted
@drips-wave

drips-wave Bot commented Aug 31, 2026

Copy link
Copy Markdown

@Seunfunmi-319509 Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits.

You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀

Learn more about application limits

Seunfunmi-319509 and others added 8 commits August 31, 2026 04:40
…yerorg#846)

The branch was merged with dev, which reworked CreatorDetailPage,
CreatorCard, and Header. Restore the watchlist integration that the
merge dropped:

- Re-add WatchlistButton next to CreatorProfileHeader so the bookmark
  toggle renders and the import is used (fixes eslint unused-var error)
- Re-add useEffect import used by the connected-wallet sync in CreatorCard
- Re-add Bookmark icon and watchlist store wiring in Header
…org#898)

PR accesslayerorg#898 merge into feat/846-watchlist concatenated two versions of
KeySimulationTool, SlippageToleranceSelector, slippageTolerance.utils,
and their test files, producing broken syntax and duplicate declarations.
- KeySimulationTool.tsx: removed stale courseService-based duplicate, kept
  simulateKeyBuy version used by CreatorDetailPage
- SlippageToleranceSelector.tsx: kept only the accesslayerorg#877 version with
  previewPrice/side/onConfirm props
- slippageTolerance.utils.ts: added missing closing brace for
  computeSlippageBounds, removed duplicate SLIPPAGE_TOLERANCE_PRESETS
- Merged concatenated test files for SlippageToleranceSelector and
  slippageTolerance.utils with combined imports
- CreatorDetailPage.tsx: removed unused WatchlistButton import
- BatchBuyModal.tsx: fixed react-hooks/exhaustive-deps warning by
  capturing debounceTimers.current ref before cleanup

🤖 Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>
TradeDialog.tsx still used the old value/onChange/disabled props from the
pre-accesslayerorg#877 SlippageToleranceSelector. Updated to pass previewPrice (converted
from stroops), side, and onToleranceChange matching the new interface.

Header.tsx referenced a Bookmark icon from lucide-react that was missing
from the import list.

🤖 Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>
…accesslayerorg#846)

The last dev merge pulled in dev's own watchlist hook (from accesslayerorg#861) and
left useWatchlist.ts as the hook implementation while components
(Header, WatchlistButton, CreatorCard, MarketplaceSidebar,
WatchlistPage) still call the wallet-scoped zustand store API, so
`tsc -b` failed and CI went red.

Restore the wallet-scoped store from the previously green commit and
drop the superseded accesslayerorg#861 artifacts that only compile against the
replaced hook API (unused WatchlistToggle component and its tests),
keeping the PR's own watchlist tests.

🤖 Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>
@Seunfunmi-319509

Copy link
Copy Markdown
Contributor Author

@Chucks1093 all checks passed

Seunfunmi-319509 added a commit to Seunfunmi-319509/accesslayer-client that referenced this pull request Sep 4, 2026
…#900)

The last dev merge into feat/recently-viewed-keys-864 carried over
dev's own badly-resolved merge (e498adc in accesslayerorg#898), which left several
files with duplicate, unparseable content that broke `pnpm lint` and
`tsc`:

- slippageTolerance.utils.ts / SlippageToleranceSelector.tsx /
  KeySimulationTool.tsx and their tests were each stitched from two
  generations of the API (accesslayerorg#872-era and accesslayerorg#877/accesslayerorg#887-era). Restore the
  implementations the tree's consumers (TradeDialog, LandingPage,
  CreatorDetailPage) actually use, from the clean pre-merge state.
- WatchlistToggle.tsx and its test (dev accesslayerorg#861 artifacts) cannot compile
  against the wallet-scoped zustand watchlist store used by this
  branch's components; drop them and restore the store from the
  branch's own last good state, matching the accesslayerorg#870 resolution.

Verified locally: pnpm lint clean, pnpm build green, 46 watchlist /
slippage / recently-viewed tests pass.

🤖 Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>
@Chucks1093

Copy link
Copy Markdown
Member

CI is green but this PR has a merge conflict with dev and cannot be auto-merged. Pull the latest dev into your branch with git fetch origin && git checkout your-branch && git merge origin/dev, resolve any conflicts, then run npm run build and npm run lint to confirm everything is clean before pushing.

The dev merge into feat/846-watchlist left SlippageToleranceSelector
referencing an 'activeToleranceText' variable from the older selector
API while rendering the accesslayerorg#872-era component. Display the selected
'value' instead so tsc and the CI build pass.
@Seunfunmi-319509

Copy link
Copy Markdown
Contributor Author

@Chucks1093 all checks passed and no conflicts

@Chucks1093
Chucks1093 merged commit e092dbe into accesslayerorg:dev Sep 5, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add a watchlist feature allowing users to bookmark creator keys and see them on a dedicated page

2 participants