11import * as Tabs from "@radix-ui/react-tabs" ;
2- import { LinkIcon , SquareArrowOutUpRightIcon } from "lucide-react" ;
2+ import { ArrowDownIcon , LinkIcon , PinIcon , SquareArrowOutUpRightIcon } from "lucide-react" ;
33import styles from "./dimensions.module.css" ;
44
55import { type Dimension , type DimensionTableRow , dimensionNames , metricNames , useDimension } from "../../api" ;
@@ -9,6 +9,7 @@ import { cls, countryCodeToFlag, formatHost, formatPath, getHref, tryParseUrl }
99import { DetailsModal } from "./modal" ;
1010import { formatMetricVal } from "../../utils" ;
1111import type { ProjectQuery } from "../project" ;
12+ import { useState } from "react" ;
1213
1314export const cardStyles = styles . card ;
1415
@@ -46,6 +47,67 @@ export const DimensionTabsCard = ({
4647 ) ;
4748} ;
4849
50+ export const DimensionDropdownCard = ( {
51+ dimensions,
52+ query,
53+ onSelect,
54+ } : {
55+ dimensions : Dimension [ ] ;
56+ query : ProjectQuery ;
57+ onSelect : ( value : DimensionTableRow , dimension : Dimension ) => void ;
58+ } ) => {
59+ return (
60+ < article className = { styles . card } >
61+ < DimensionDropdown dimensions = { dimensions } query = { query } onSelect = { onSelect } />
62+ </ article >
63+ ) ;
64+ } ;
65+
66+ export const DimensionDropdown = ( {
67+ dimensions,
68+ query,
69+ onSelect,
70+ } : {
71+ dimensions : Dimension [ ] ;
72+ query : ProjectQuery ;
73+ onSelect : ( value : DimensionTableRow , dimension : Dimension ) => void ;
74+ } ) => {
75+ const [ selectedDimension , setSelectedDimension ] = useState ( dimensions [ 0 ] ) ;
76+
77+ return (
78+ < Tabs . Root
79+ className = { styles . tabs }
80+ value = { selectedDimension }
81+ onValueChange = { ( value ) => setSelectedDimension ( value as Dimension ) }
82+ >
83+ < Tabs . List className = { styles . tabsList } >
84+ < select
85+ className = { styles . dimensionSelect }
86+ value = { selectedDimension }
87+ onChange = { ( e ) => setSelectedDimension ( e . target . value as Dimension ) }
88+ >
89+ { dimensions . map ( ( dimension ) => (
90+ < option key = { dimension } value = { dimension } >
91+ { dimensionNames [ dimension ] }
92+ </ option >
93+ ) ) }
94+ </ select >
95+ { /* {Object.entries(dimensions).map(([key, value]) => (
96+ <Tabs.Trigger key={key} value={value}>
97+ {dimensionNames[value]}
98+ </Tabs.Trigger>
99+ ))} */ }
100+ < div > { metricNames [ query . metric ] } </ div >
101+ </ Tabs . List >
102+ { dimensions . map ( ( dimension ) => (
103+ < Tabs . Content key = { dimension } value = { dimension } className = { styles . tabsContent } >
104+ < DimensionTable dimension = { dimension } query = { query } onSelect = { ( value ) => onSelect ( value , dimension ) } />
105+ </ Tabs . Content >
106+ ) ) }
107+ </ Tabs . Root >
108+ ) ;
109+ } ;
110+
49111export const DimensionTabs = ( {
50112 dimensions,
51113 query,
@@ -125,6 +187,36 @@ const DimensionValueButton = ({
125187) ;
126188
127189const dimensionLabels : Record < Dimension , ( value : DimensionTableRow , onSelect : ( ) => void ) => React . ReactNode > = {
190+ utm_campaign : ( value , onSelect ) => (
191+ < >
192+ < PinIcon size = { 24 } />
193+ < DimensionValueButton onSelect = { onSelect } > { value . dimensionValue || "Unknown/None" } </ DimensionValueButton >
194+ </ >
195+ ) ,
196+ utm_content : ( value , onSelect ) => (
197+ < >
198+ < PinIcon size = { 24 } />
199+ < DimensionValueButton onSelect = { onSelect } > { value . dimensionValue || "Unknown/None" } </ DimensionValueButton >
200+ </ >
201+ ) ,
202+ utm_medium : ( value , onSelect ) => (
203+ < >
204+ < PinIcon size = { 24 } />
205+ < DimensionValueButton onSelect = { onSelect } > { value . dimensionValue || "Unknown/None" } </ DimensionValueButton >
206+ </ >
207+ ) ,
208+ utm_source : ( value , onSelect ) => (
209+ < >
210+ < PinIcon size = { 24 } />
211+ < DimensionValueButton onSelect = { onSelect } > { value . dimensionValue || "Unknown/None" } </ DimensionValueButton >
212+ </ >
213+ ) ,
214+ utm_term : ( value , onSelect ) => (
215+ < >
216+ < PinIcon size = { 24 } />
217+ < DimensionValueButton onSelect = { onSelect } > { value . dimensionValue || "Unknown/None" } </ DimensionValueButton >
218+ </ >
219+ ) ,
128220 platform : ( value , onSelect ) => (
129221 < >
130222 < OSIcon os = { value . dimensionValue } size = { 24 } />
0 commit comments