mirror of
https://github.com/warmbly/warmbly.git
synced 2026-09-07 16:02:16 +00:00
Audited every visible button across the dashboard. Most were rendered
with no onClick — clicking them did nothing and there was no signal
that the action was unreached. Fixed in two passes:
Real wiring (already had hooks behind them):
- Campaigns:
* New campaign → opens NewCampaignDialog (useCreateCampaign,
navigates to the new campaign on success).
* Folders → setFoldersEdit(true) (the existing FoldersModal).
* Sort dropdown → backs by sort state (newest / oldest / name);
list re-orders client-side from useMemo so we don't pay another
fetch.
* Row pause/play→ useStartCampaign / useStopCampaign behind a
confirm.show() prompt; toast.promise surfaces status.
* Empty-state "New campaign" → same dialog.
- Contacts:
* New contact → NewContactDialog (useAddContacts, single-row).
* Export → client-side CSV from the loaded page, downloads
a contacts-YYYY-MM-DD.csv with the standard columns.
* Embedded "Add lead" inside campaign leads view → same dialog.
- Emails:
* Fire (warmup) row icon → now opens the inbox detail panel; was
a no-op button.
New brae-density dialogs:
- NewCampaignDialog: center-aligned modal, 48px header band,
hairline footer, slate-900 primary. Name + description fields.
- NewContactDialog: same chrome, email (required) + first/last/
company/phone. Toast.promise feedback.
Placeholder wiring for surfaces whose backend or flow isn't built yet:
- Templates / API keys / CRM (deals, pipelines, tasks) / Team /
Billing upgrade / Settings save → all surface a clear "X is
coming soon." toast (icon 🚧) via the new comingSoon() helper.
Clear signal that the click registered, no more silent dead
buttons.
- Contacts "Import CSV" surfaces the same coming-soon notice
(export ships, import is the harder path).
Refactor:
- web/src/lib/helper/comingSoon.ts — tiny shared toast helper so
each placeholder doesn't reinvent the wording.
- Settings page now displays the actual user email instead of a
placeholder string.
- Billing "View all plans" anchor is now a real Link to /#pricing.