[Campaign Launcher UI] Redesign Dashboard and Campaigns pages#782
[Campaign Launcher UI] Redesign Dashboard and Campaigns pages#782KirillKirill wants to merge 15 commits intodevelopfrom
Conversation
dfdd836 to
89e138e
Compare
ebb93fd to
28c8e4d
Compare
There was a problem hiding this comment.
Pull request overview
This PR overhauls the Campaign Launcher client UI layout and navigation, introducing new dashboard/campaign browsing experiences and mobile-first components to support the redesigned app shell.
Changes:
- Added a dedicated
/campaignsroute and new Campaigns page with tabs, filters UI, and grid/table feed views. - Replaced legacy dashboard stats/how-to-launch sections with new widget + informational sections and a mobile bottom nav.
- Updated wallet connection UX (connectors/assets) and introduced timeline/target helpers for campaign presentation.
Reviewed changes
Copilot reviewed 52 out of 59 changed files in this pull request and generated 10 comments.
Show a summary per file
| File | Description |
|---|---|
| campaign-launcher/client/src/utils/index.ts | Adds getTargetInfo helper for campaign target label/value. |
| campaign-launcher/client/src/utils/dayjs.ts | Enables Day.js advanced format support. |
| campaign-launcher/client/src/types/index.ts | Adds CampaignsTabFilter enum for new tabs. |
| campaign-launcher/client/src/theme.ts | Updates button sizing/typography theme overrides. |
| campaign-launcher/client/src/providers/WagmiProvider.tsx | Adds MetaMask connector to wagmi config. |
| campaign-launcher/client/src/pages/LaunchCampaign/index.tsx | Removes page title from launch campaign page layout. |
| campaign-launcher/client/src/pages/Dashboard/index.tsx | Rebuilds dashboard page using new widgets/feed/FAQ/About sections. |
| campaign-launcher/client/src/pages/Campaigns/index.tsx | New campaigns browsing page with tabs/filters/view toggle and feed. |
| campaign-launcher/client/src/pages/CampaignDetails/index.tsx | Renames component/export and removes joined/how-to sections from details page. |
| campaign-launcher/client/src/icons/index.tsx | Adds multiple new SVG icons used by redesigned UI. |
| campaign-launcher/client/src/hooks/usePagination.ts | Adjusts default page size and adds mobile-aware page sizing. |
| campaign-launcher/client/src/hooks/useCampaigns.ts | Extends useCampaigns API (enabled option + mobile placeholder behavior). |
| campaign-launcher/client/src/hooks/useCampaignTimeline.ts | New hook to compute campaign timeline label/value + countdown. |
| campaign-launcher/client/src/hooks/useBreakpoints.ts | Expands “mobile” to include sm breakpoint. |
| campaign-launcher/client/src/hooks/recording-oracle/campaign.ts | Adds enabled option + sets joined-campaigns query staleTime. |
| campaign-launcher/client/src/constants/index.ts | Adds /campaigns route constant and new paging/mobile nav constants. |
| campaign-launcher/client/src/components/TotalVolume/index.tsx | Removes legacy dashboard total volume component. |
| campaign-launcher/client/src/components/StretchedLink/index.tsx | Removes legacy stretched-link helper component. |
| campaign-launcher/client/src/components/PageWrapper/index.tsx | Adjusts wrapper padding/elevation for new design. |
| campaign-launcher/client/src/components/MyCampaigns/index.tsx | Removes legacy “My Campaigns” table view component. |
| campaign-launcher/client/src/components/MobileBottomNav/index.tsx | Adds mobile bottom navigation for Dashboard/Campaigns. |
| campaign-launcher/client/src/components/Layout/index.tsx | Integrates mobile bottom nav + passes visibility to footer. |
| campaign-launcher/client/src/components/LaunchCampaignButton/index.tsx | Simplifies launch CTA and removes staking/tooltips gating logic. |
| campaign-launcher/client/src/components/JoinedCampaigns/index.tsx | Removes legacy joined campaigns table component. |
| campaign-launcher/client/src/components/HowToLaunch/index.tsx | Removes legacy “How to launch” section. |
| campaign-launcher/client/src/components/Header/index.tsx | Rebuilds header nav links/styles and updates connect wallet sizing. |
| campaign-launcher/client/src/components/Footer/index.tsx | Updates footer layout and adds bottom padding when mobile nav is visible. |
| campaign-launcher/client/src/components/FAQ/index.tsx | Adds new FAQ accordion section. |
| campaign-launcher/client/src/components/ExchangeSelect/index.tsx | Removes legacy exchange select component. |
| campaign-launcher/client/src/components/DashboardWidgets/index.tsx | Adds new dashboard widgets (rewards pool, volume, wallet/CTA). |
| campaign-launcher/client/src/components/DashboardStats/index.tsx | Removes legacy dashboard stats section. |
| campaign-launcher/client/src/components/CryptoPairEntity/index.tsx | Minor typography prop change for symbol rendering. |
| campaign-launcher/client/src/components/CryptoEntity/index.tsx | Minor typography prop change for label rendering. |
| campaign-launcher/client/src/components/ConnectWallet/index.tsx | Redesigns connect wallet UX; switches icon assets; adds mobile drawer. |
| campaign-launcher/client/src/components/CampaignsViewToggle/index.tsx | Adds grid/table toggle control for campaigns feed. |
| campaign-launcher/client/src/components/CampaignsViewDropdown/index.tsx | Removes legacy campaigns view dropdown. |
| campaign-launcher/client/src/components/CampaignsTabs/index.tsx | Adds new tab strip for Active/Joined/Hosted/History. |
| campaign-launcher/client/src/components/CampaignsTable/index.tsx | Redesigns campaigns table columns/CTA/actions. |
| campaign-launcher/client/src/components/CampaignsFilters/index.tsx | Adds new filter drawer UI (network/type/exchange). |
| campaign-launcher/client/src/components/CampaignsFeed/index.tsx | Adds feed wrapper to render cards (grid) or table view. |
| campaign-launcher/client/src/components/Campaigns/index.tsx | Removes legacy campaigns section container component. |
| campaign-launcher/client/src/components/CampaignTimeline/index.tsx | Adds timeline display component powered by new hook. |
| campaign-launcher/client/src/components/CampaignSymbol/index.tsx | Tweaks symbol style sizes/weights. |
| campaign-launcher/client/src/components/CampaignStatusChip/index.tsx | Adds new status chip component (colors currently placeholder). |
| campaign-launcher/client/src/components/CampaignCard/index.tsx | Adds new campaign card layout for grid view. |
| campaign-launcher/client/src/components/CampaignCard/SkeletonView.tsx | Adds skeleton card for loading state. |
| campaign-launcher/client/src/components/CampaignAddress/index.tsx | Updates address display to a link-based design with optional copy. |
| campaign-launcher/client/src/components/AllCampaigns/index.tsx | Removes legacy all-campaigns table/pagination component. |
| campaign-launcher/client/src/components/ActiveCampaignsFilter/index.tsx | Removes legacy “active only” filter toggle component. |
| campaign-launcher/client/src/components/Account/index.tsx | Adjusts account button sizing/padding for redesign. |
| campaign-launcher/client/src/components/AboutHuFi/index.tsx | Adds “About HuFi” informational section + docs link. |
| campaign-launcher/client/src/assets/walletconnect.svg | Removes old SVG asset (WalletConnect). |
| campaign-launcher/client/src/assets/walletConnect.png | Adds new WalletConnect PNG asset. |
| campaign-launcher/client/src/assets/metamask.png | Adds new MetaMask PNG asset. |
| campaign-launcher/client/src/assets/coinbase.svg | Removes old SVG asset (Coinbase). |
| campaign-launcher/client/src/assets/coinbase.png | Adds new Coinbase PNG asset. |
| campaign-launcher/client/src/App.tsx | Adds /campaigns route and updates campaign details page import. |
| campaign-launcher/client/public/tableImage.png | Included in PR (no diff shown). |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
You can also share your feedback on Copilot code review. Take the survey.
| {isConnected && !isAlreadyJoined && ( | ||
| <Button | ||
| variant="contained" | ||
| size="large" | ||
| color="primary" | ||
| fullWidth | ||
| sx={{ | ||
| color: 'white', | ||
| bgcolor: 'error.main', | ||
| }} | ||
| > | ||
| Join | ||
| </Button> | ||
| )} |
There was a problem hiding this comment.
The "Join" button is displayed when connected and not already joined, but there’s no click handler/action. This makes the primary CTA non-functional; either hook it up to the join mutation flow or navigate to a screen where the user can complete joining.
There was a problem hiding this comment.
will be implemented later
| const FAQ_ITEMS: FaqItem[] = [ | ||
| { | ||
| question: 'How do I add an API key?', | ||
| answer: 'How do I add an API key?', | ||
| }, | ||
| { | ||
| question: 'How do I add an API key?', | ||
| answer: 'How do I add an API key?', | ||
| }, | ||
| { | ||
| question: 'How do I add an API key?', | ||
| answer: 'How do I add an API key?', | ||
| }, | ||
| ]; |
There was a problem hiding this comment.
FAQ_ITEMS currently contains repeated placeholder entries where the answer is identical to the question. If this is meant to be production UI, populate with real content or source it from configuration; otherwise consider adding a TODO and hiding the section until content is available to avoid shipping misleading UX.
There was a problem hiding this comment.
will be changed later
campaign-launcher/client/src/components/CampaignsTable/index.tsx
Outdated
Show resolved
Hide resolved
| {isConnected && ( | ||
| <Button | ||
| variant="contained" | ||
| size="large" | ||
| color="error" | ||
| sx={{ width: 120 }} | ||
| > | ||
| Join | ||
| </Button> | ||
| )} |
There was a problem hiding this comment.
The new "Join" button is rendered for connected users, but it has no onClick / action, so it’s a dead control. Wire this up to the join flow (e.g., useJoinCampaign) or change it to a navigation action (e.g., to the campaign details join section) until joining is implemented here.
There was a problem hiding this comment.
will be implemented later
| const queryParams = filterFalsyQueryParams({ | ||
| chain_id: appliedFilters.network, | ||
| status: tabFilter === TabFilter.ACTIVE ? CampaignStatus.ACTIVE : undefined, | ||
| launcher: tabFilter === TabFilter.HOSTED ? activeAddress : undefined, | ||
| limit, | ||
| skip, | ||
| }) as CampaignsQueryParams; |
There was a problem hiding this comment.
The filters UI tracks campaignTypes and exchanges, but these selections are never applied to the campaigns query (only chain_id, status, and launcher are used). As-is, applying filters will change UI state/count without changing results; either include these filters in queryParams (and ensure the API supports them) or remove/disable the unused filter sections until supported.
There was a problem hiding this comment.
will be implemented later
campaign-launcher/client/src/components/ConnectWallet/index.tsx
Outdated
Show resolved
Hide resolved
d6dce53 to
ad8d991
Compare
1391bcf to
f1681d1
Compare
6cc3b9a to
ce85888
Compare
63d9cca to
69eacd4
Compare
69eacd4 to
26c831e
Compare
…nent based on viewport
79efe33 to
c10f9f1
Compare
…More button (without logic)
Issue tracking
Context behind the change
How has this been tested?
Release plan
Potential risks; What to monitor; Rollback plan