From a42fe4d3502e0b15df44422f31e5355802f8b139 Mon Sep 17 00:00:00 2001 From: Ben Senescu <44480372+bensenescu@users.noreply.github.com> Date: Mon, 4 May 2026 14:04:44 -0400 Subject: [PATCH] keywords: consolidate export buttons into dropdown (#147) --- .../page/KeywordResearchDesktopResults.tsx | 64 +++++++++++++------ .../page/KeywordResearchMobileResults.tsx | 63 +++++++++++++----- 2 files changed, 92 insertions(+), 35 deletions(-) diff --git a/src/client/features/keywords/page/KeywordResearchDesktopResults.tsx b/src/client/features/keywords/page/KeywordResearchDesktopResults.tsx index d72bace..42d24ab 100644 --- a/src/client/features/keywords/page/KeywordResearchDesktopResults.tsx +++ b/src/client/features/keywords/page/KeywordResearchDesktopResults.tsx @@ -1,12 +1,15 @@ import { + ChevronDown, + Download, FileDown, Globe, RotateCcw, Save, + Sheet, SlidersHorizontal, } from "lucide-react"; -import { ExportToSheetsButton } from "@/client/components/table/ExportToSheetsButton"; import { KEYWORD_RESEARCH_HEADERS } from "@/client/features/keywords/state/keywordControllerActions"; +import { exportTableToSheets } from "@/client/lib/exportToSheets"; import { AreaTrendChart, KeywordRow, @@ -121,6 +124,15 @@ function DesktopTableCard({ controller }: Props) { ? `Showing ${filteredRows.length} of ${rows.length} keywords` : `Showing ${filteredRows.length} keywords`; + const canExport = filteredRows.length > 0; + const handleExportToSheets = () => { + void exportTableToSheets({ + headers: KEYWORD_RESEARCH_HEADERS, + rows: sheetsExportRows, + feature: "keyword_research", + }); + }; + return (
@@ -149,20 +161,34 @@ function DesktopTableCard({ controller }: Props) { Save Keywords - - +
+
+ + Export + +
+
    +
  • + +
  • +
  • + +
  • +
+
{showFilters ? : null} @@ -330,9 +356,9 @@ function DesktopSerpPanel({ controller }: Props) { : "Last 12 available months"; return ( -
+
{overviewKeyword && overviewKeyword.trend.length > 0 ? ( -
+

Search Trends{" "} @@ -343,7 +369,7 @@ function DesktopSerpPanel({ controller }: Props) {

) : null} -
+

@@ -355,7 +381,7 @@ function DesktopSerpPanel({ controller }: Props) { ) : null}

-
+
0; + const handleExportToSheets = () => { + void exportTableToSheets({ + headers: KEYWORD_RESEARCH_HEADERS, + rows: sheetsExportRows, + feature: "keyword_research", + }); + }; + return (
{controller.showApproximateMatchNotice ? ( @@ -113,20 +130,34 @@ function MobileKeywordCards({ controller }: Props) { > - - +
+
+ + +
+
    +
  • + +
  • +
  • + +
  • +
+
{showFilters ? : null}