- {options.map(({ value, label }) => {
- const isSelected = value === selected
- return (
-
- )
- })}
-
- )
-}
diff --git a/assets/js/dashboard/components/tabs.tsx b/assets/js/dashboard/components/tabs.tsx
index 23ad648c85d3..f3c71152ecd6 100644
--- a/assets/js/dashboard/components/tabs.tsx
+++ b/assets/js/dashboard/components/tabs.tsx
@@ -2,7 +2,7 @@ import { Popover, Transition } from '@headlessui/react'
import classNames from 'classnames'
import React, { ReactNode, useRef, useEffect } from 'react'
import { ChevronDownIcon } from '@heroicons/react/20/solid'
-import { popover, BlurMenuButtonOnEscape } from './popover'
+import { popover, BlurMenuButtonOnEscape, SelectedCheckmark } from './popover'
import { useSearchableItems } from '../hooks/use-searchable-items'
import { SearchInput } from './search-input'
import { EllipsisHorizontalIcon } from '@heroicons/react/24/solid'
@@ -16,7 +16,7 @@ export const TabWrapper = ({
}) => (
@@ -175,19 +175,17 @@ const Items = ({ options, searchable, closeDropdown }: ItemsProps) => {
}, [searchable, showSearch, searchRef])
return (
- <>
+
{searchable && showSearch && (
-
-
-
+
)}
{showableData.map(({ selected, label, onClick }, index) => {
return (
@@ -201,6 +199,7 @@ const Items = ({ options, searchable, closeDropdown }: ItemsProps) => {
className={itemClassName}
>
{label}
+
)
})}
@@ -213,24 +212,22 @@ const Items = ({ options, searchable, closeDropdown }: ItemsProps) => {
)}
>
{`Show ${countOfMoreToShow} more`}
-
+
)}
{searching && !filteredData.length && (
-
- >
+
)
}
diff --git a/assets/js/dashboard/extra/exploration/exploration-column.tsx b/assets/js/dashboard/extra/exploration/exploration-column.tsx
index 7ae7700da1a8..0a62221d6fb1 100644
--- a/assets/js/dashboard/extra/exploration/exploration-column.tsx
+++ b/assets/js/dashboard/extra/exploration/exploration-column.tsx
@@ -8,7 +8,7 @@ import {
roundedNumberFormatter
} from '../../util/number-formatter'
import { CursorIcon, FolderIcon } from '../../components/icons'
-import { popover } from '../../components/popover'
+import { popover, SelectedCheckmark } from '../../components/popover'
import {
ChevronUpDownIcon,
EllipsisHorizontalIcon
@@ -69,7 +69,7 @@ function DirectionDropdown({
{open && (
{DIRECTION_OPTIONS.map(({ value, label }) => (
{label}
+
))}
diff --git a/assets/js/dashboard/nav-menu/dashboard-options-menu.tsx b/assets/js/dashboard/nav-menu/dashboard-options-menu.tsx
index b9a0390ea4fb..f844fda6f7e9 100644
--- a/assets/js/dashboard/nav-menu/dashboard-options-menu.tsx
+++ b/assets/js/dashboard/nav-menu/dashboard-options-menu.tsx
@@ -15,6 +15,7 @@ import { isModifierPressed, isTyping, Keybind } from '../keybinding'
import { useMatch } from 'react-router-dom'
import { rootRoute } from '../router'
import { CsvExport, ExportStatus } from '../stats/csv-export/csv-export'
+import { MenuSeparator } from './nav-menu-components'
function ImportedSwitchItem({ disabled }: { disabled: boolean }) {
const { dashboardState } = useDashboardStateContext()
@@ -41,7 +42,11 @@ function ImportedSwitchItem({ disabled }: { disabled: boolean }) {
)
}
-function DashboardOptionsMenuItems() {
+function DashboardOptionsMenuItems({
+ closeDropdown
+}: {
+ closeDropdown: () => void
+}) {
const { dashboardState } = useDashboardStateContext()
const { selectedInterval, onIntervalClick, availableIntervals } =
useGraphIntervalContext()
@@ -95,17 +100,20 @@ function DashboardOptionsMenuItems() {
className={classNames(popover.transition.classNames.right, 'mt-2')}
>
{showIntervalSection && (
-
+ <>
+ {
+ onIntervalClick(interval)
+ closeDropdown()
+ }}
+ options={availableIntervals}
+ />
+
+ >
)}
- {() => }
+ {({ close }) => }
)
}
diff --git a/assets/js/dashboard/nav-menu/query-periods/comparison-period-menu.tsx b/assets/js/dashboard/nav-menu/query-periods/comparison-period-menu.tsx
index cace8bd9bc0c..40d5c3f86271 100644
--- a/assets/js/dashboard/nav-menu/query-periods/comparison-period-menu.tsx
+++ b/assets/js/dashboard/nav-menu/query-periods/comparison-period-menu.tsx
@@ -17,7 +17,11 @@ import {
getSearchToApplyCustomComparisonDates
} from '../../dashboard-time-periods'
import { Popover, Transition } from '@headlessui/react'
-import { popover, BlurMenuButtonOnEscape } from '../../components/popover'
+import {
+ popover,
+ BlurMenuButtonOnEscape,
+ SelectedCheckmark
+} from '../../components/popover'
import {
DateMenuCalendarIcon,
PopoverMenuProps,
@@ -69,6 +73,9 @@ export const ComparisonPeriodMenuItems = ({
onClick={closeDropdown}
>
{COMPARISON_MODES[comparisonMode]}
+
))}
{COMPARISON_MODES[ComparisonMode.custom]}
+
{dashboardState.comparison !== ComparisonMode.custom && (
<>
@@ -89,6 +99,9 @@ export const ComparisonPeriodMenuItems = ({
onClick={closeDropdown}
>
{COMPARISON_MATCH_MODE_LABELS[ComparisonMatchMode.MatchDayOfWeek]}
+
{COMPARISON_MATCH_MODE_LABELS[ComparisonMatchMode.MatchExactDate]}
+
>
)}
diff --git a/assets/js/dashboard/nav-menu/query-periods/dashboard-period-menu.tsx b/assets/js/dashboard/nav-menu/query-periods/dashboard-period-menu.tsx
index 0ca5bbabe696..9616250369d3 100644
--- a/assets/js/dashboard/nav-menu/query-periods/dashboard-period-menu.tsx
+++ b/assets/js/dashboard/nav-menu/query-periods/dashboard-period-menu.tsx
@@ -25,7 +25,11 @@ import {
import { useMatch } from 'react-router-dom'
import { rootRoute } from '../../router'
import { Popover, Transition } from '@headlessui/react'
-import { popover, BlurMenuButtonOnEscape } from '../../components/popover'
+import {
+ popover,
+ BlurMenuButtonOnEscape,
+ SelectedCheckmark
+} from '../../components/popover'
import {
DateMenuCalendarIcon,
PopoverMenuProps,
@@ -198,15 +202,19 @@ const DashboardPeriodMenuInner = ({
{ search, isActive, onEvent, hidden }
]) => {
if (!hidden) {
+ const selected = isActive({ site, dashboardState })
return (
onEvent(e))}
>
- {label}
+
+ {label}
+
+
{!!keyboardKey && (
{keyboardKey}
)}
diff --git a/assets/js/dashboard/nav-menu/segments/segment-pill-menu.tsx b/assets/js/dashboard/nav-menu/segments/segment-pill-menu.tsx
index 1db2f26c8173..fb338644284b 100644
--- a/assets/js/dashboard/nav-menu/segments/segment-pill-menu.tsx
+++ b/assets/js/dashboard/nav-menu/segments/segment-pill-menu.tsx
@@ -61,7 +61,7 @@ const SegmentFilters = ({ segment }: { segment: SavedSegments[number] }) => (
const SegmentTitle = ({ segment }: { segment: SavedSegments[number] }) => {
const user = useUserContext()
return (
-
+
{segment.name}
diff --git a/assets/js/dashboard/nav-menu/segments/segments-submenu.tsx b/assets/js/dashboard/nav-menu/segments/segments-submenu.tsx
index 1b4b4a207817..12a8d905e348 100644
--- a/assets/js/dashboard/nav-menu/segments/segments-submenu.tsx
+++ b/assets/js/dashboard/nav-menu/segments/segments-submenu.tsx
@@ -16,7 +16,7 @@ import { AppNavigationLink } from '../../navigation/use-app-navigate'
import { Role, useUserContext } from '../../user-context'
import { useSegmentsContext } from '../../filtering/segments-context'
import { useSearchableItems } from '../../hooks/use-searchable-items'
-import { popover } from '../../components/popover'
+import { popover, SelectedCheckmark } from '../../components/popover'
const mutedRowClassName = classNames(
popover.items.classNames.iconRow,
@@ -80,7 +80,7 @@ export const SegmentsSubmenu = ({
})
return (
- <>
+
{showSearch && (
{`Show ${countOfMoreToShow} more`}
-
+
)}
@@ -114,7 +116,7 @@ export const SegmentsSubmenu = ({
No segments found. Clear search to show all.
)}
- >
+
)
}
@@ -166,6 +168,7 @@ const SegmentLink = ({
+