Files
warmbly/web/src/lib/helper
Matthew Meszaros 9628878be2 feat(web): wire every button in the dashboard, add new-campaign + new-contact dialogs
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.
2026-05-23 08:50:25 +00:00
..