From 14981717b90375ca8b120f93bc7d8d0e656251ef Mon Sep 17 00:00:00 2001 From: Mike Cao Date: Fri, 10 Oct 2025 17:28:53 -0700 Subject: [PATCH] Responsive updates. --- src/app/(main)/App.tsx | 11 +- src/app/(main)/SideNav.tsx | 70 ++++--- .../[websiteId]/WebsiteExpandedMenu.tsx | 177 +++++++++++++++++ .../[websiteId]/WebsiteExpandedView.tsx | 180 +----------------- src/components/common/Panel.tsx | 5 +- 5 files changed, 231 insertions(+), 212 deletions(-) create mode 100644 src/app/(main)/websites/[websiteId]/WebsiteExpandedMenu.tsx diff --git a/src/app/(main)/App.tsx b/src/app/(main)/App.tsx index c3f88c5b..04ef1b5f 100644 --- a/src/app/(main)/App.tsx +++ b/src/app/(main)/App.tsx @@ -1,5 +1,5 @@ 'use client'; -import { Grid, Loading, Column } from '@umami/react-zen'; +import { Grid, Loading, Column, Row } from '@umami/react-zen'; import Script from 'next/script'; import { UpdateNotice } from './UpdateNotice'; import { SideNav } from '@/app/(main)/SideNav'; @@ -28,11 +28,14 @@ export function App({ children }) { } return ( - - + + + oh hi + + - + {children} diff --git a/src/app/(main)/SideNav.tsx b/src/app/(main)/SideNav.tsx index 4a4985fd..32e3e397 100644 --- a/src/app/(main)/SideNav.tsx +++ b/src/app/(main)/SideNav.tsx @@ -49,41 +49,39 @@ export function SideNav(props: SidebarProps) { }; return ( - - - setIsCollapsed(false)}> - : } - style={{ maxHeight: 40 }} - > - {!isCollapsed && !hasNav && } - - - - - - - {links.map(({ id, path, label, icon }) => { - return ( - - - - ); - })} - - - - - - - - - + + setIsCollapsed(false)}> + : } + style={{ maxHeight: 40 }} + > + {!isCollapsed && !hasNav && } + + + + + + + {links.map(({ id, path, label, icon }) => { + return ( + + + + ); + })} + + + + + + + + ); } diff --git a/src/app/(main)/websites/[websiteId]/WebsiteExpandedMenu.tsx b/src/app/(main)/websites/[websiteId]/WebsiteExpandedMenu.tsx new file mode 100644 index 00000000..f2d653d5 --- /dev/null +++ b/src/app/(main)/websites/[websiteId]/WebsiteExpandedMenu.tsx @@ -0,0 +1,177 @@ +import { useMessages, useNavigation } from '@/components/hooks'; +import { SideMenu } from '@/components/common/SideMenu'; +import { + LogOut, + LogIn, + Search, + Type, + SquareSlash, + Share2, + Megaphone, + Earth, + Globe, + Landmark, + MapPin, + AppWindow, + Laptop, + Languages, + Monitor, + Cpu, + Network, + Tag, +} from '@/components/icons'; +import { Lightning } from '@/components/svg'; + +export function WebsiteExpandedMenu({ excludedIds = [] }: { excludedIds?: string[] }) { + const { formatMessage, labels } = useMessages(); + const { + updateParams, + query: { view }, + } = useNavigation(); + + const filterExcluded = (item: { id: string }) => !excludedIds.includes(item.id); + + const items = [ + { + label: 'URL', + items: [ + { + id: 'path', + label: formatMessage(labels.path), + path: updateParams({ view: 'path' }), + icon: , + }, + { + id: 'entry', + label: formatMessage(labels.entry), + path: updateParams({ view: 'entry' }), + icon: , + }, + { + id: 'exit', + label: formatMessage(labels.exit), + path: updateParams({ view: 'exit' }), + icon: , + }, + { + id: 'title', + label: formatMessage(labels.title), + path: updateParams({ view: 'title' }), + icon: , + }, + { + id: 'query', + label: formatMessage(labels.query), + path: updateParams({ view: 'query' }), + icon: , + }, + ].filter(filterExcluded), + }, + { + label: formatMessage(labels.sources), + items: [ + { + id: 'referrer', + label: formatMessage(labels.referrer), + path: updateParams({ view: 'referrer' }), + icon: , + }, + { + id: 'channel', + label: formatMessage(labels.channel), + path: updateParams({ view: 'channel' }), + icon: , + }, + { + id: 'domain', + label: formatMessage(labels.domain), + path: updateParams({ view: 'domain' }), + icon: , + }, + ].filter(filterExcluded), + }, + { + label: formatMessage(labels.location), + items: [ + { + id: 'country', + label: formatMessage(labels.country), + path: updateParams({ view: 'country' }), + icon: , + }, + { + id: 'region', + label: formatMessage(labels.region), + path: updateParams({ view: 'region' }), + icon: , + }, + { + id: 'city', + label: formatMessage(labels.city), + path: updateParams({ view: 'city' }), + icon: , + }, + ].filter(filterExcluded), + }, + { + label: formatMessage(labels.environment), + items: [ + { + id: 'browser', + label: formatMessage(labels.browser), + path: updateParams({ view: 'browser' }), + icon: , + }, + { + id: 'os', + label: formatMessage(labels.os), + path: updateParams({ view: 'os' }), + icon: , + }, + { + id: 'device', + label: formatMessage(labels.device), + path: updateParams({ view: 'device' }), + icon: , + }, + { + id: 'language', + label: formatMessage(labels.language), + path: updateParams({ view: 'language' }), + icon: , + }, + { + id: 'screen', + label: formatMessage(labels.screen), + path: updateParams({ view: 'screen' }), + icon: , + }, + ].filter(filterExcluded), + }, + { + label: formatMessage(labels.other), + items: [ + { + id: 'event', + label: formatMessage(labels.event), + path: updateParams({ view: 'event' }), + icon: , + }, + { + id: 'hostname', + label: formatMessage(labels.hostname), + path: updateParams({ view: 'hostname' }), + icon: , + }, + { + id: 'tag', + label: formatMessage(labels.tag), + path: updateParams({ view: 'tag' }), + icon: , + }, + ].filter(filterExcluded), + }, + ]; + + return ; +} diff --git a/src/app/(main)/websites/[websiteId]/WebsiteExpandedView.tsx b/src/app/(main)/websites/[websiteId]/WebsiteExpandedView.tsx index b90a6da0..3fc6a1de 100644 --- a/src/app/(main)/websites/[websiteId]/WebsiteExpandedView.tsx +++ b/src/app/(main)/websites/[websiteId]/WebsiteExpandedView.tsx @@ -1,28 +1,7 @@ import { Grid, Column } from '@umami/react-zen'; import { useMessages, useNavigation } from '@/components/hooks'; import { MetricsExpandedTable } from '@/components/metrics/MetricsExpandedTable'; -import { SideMenu } from '@/components/common/SideMenu'; -import { - LogOut, - LogIn, - Search, - Type, - SquareSlash, - Share2, - Megaphone, - Earth, - Globe, - Landmark, - MapPin, - AppWindow, - Laptop, - Languages, - Monitor, - Cpu, - Network, - Tag, -} from '@/components/icons'; -import { Lightning } from '@/components/svg'; +import { WebsiteExpandedMenu } from '@/app/(main)/websites/[websiteId]/WebsiteExpandedMenu'; export function WebsiteExpandedView({ websiteId, @@ -35,158 +14,19 @@ export function WebsiteExpandedView({ }) { const { formatMessage, labels } = useMessages(); const { - updateParams, query: { view }, } = useNavigation(); - const filterExcluded = (item: { id: string }) => !excludedIds.includes(item.id); - - const items = [ - { - label: 'URL', - items: [ - { - id: 'path', - label: formatMessage(labels.path), - path: updateParams({ view: 'path' }), - icon: , - }, - { - id: 'entry', - label: formatMessage(labels.entry), - path: updateParams({ view: 'entry' }), - icon: , - }, - { - id: 'exit', - label: formatMessage(labels.exit), - path: updateParams({ view: 'exit' }), - icon: , - }, - { - id: 'title', - label: formatMessage(labels.title), - path: updateParams({ view: 'title' }), - icon: , - }, - { - id: 'query', - label: formatMessage(labels.query), - path: updateParams({ view: 'query' }), - icon: , - }, - ].filter(filterExcluded), - }, - { - label: formatMessage(labels.sources), - items: [ - { - id: 'referrer', - label: formatMessage(labels.referrer), - path: updateParams({ view: 'referrer' }), - icon: , - }, - { - id: 'channel', - label: formatMessage(labels.channel), - path: updateParams({ view: 'channel' }), - icon: , - }, - { - id: 'domain', - label: formatMessage(labels.domain), - path: updateParams({ view: 'domain' }), - icon: , - }, - ].filter(filterExcluded), - }, - { - label: formatMessage(labels.location), - items: [ - { - id: 'country', - label: formatMessage(labels.country), - path: updateParams({ view: 'country' }), - icon: , - }, - { - id: 'region', - label: formatMessage(labels.region), - path: updateParams({ view: 'region' }), - icon: , - }, - { - id: 'city', - label: formatMessage(labels.city), - path: updateParams({ view: 'city' }), - icon: , - }, - ].filter(filterExcluded), - }, - { - label: formatMessage(labels.environment), - items: [ - { - id: 'browser', - label: formatMessage(labels.browser), - path: updateParams({ view: 'browser' }), - icon: , - }, - { - id: 'os', - label: formatMessage(labels.os), - path: updateParams({ view: 'os' }), - icon: , - }, - { - id: 'device', - label: formatMessage(labels.device), - path: updateParams({ view: 'device' }), - icon: , - }, - { - id: 'language', - label: formatMessage(labels.language), - path: updateParams({ view: 'language' }), - icon: , - }, - { - id: 'screen', - label: formatMessage(labels.screen), - path: updateParams({ view: 'screen' }), - icon: , - }, - ].filter(filterExcluded), - }, - { - label: formatMessage(labels.other), - items: [ - { - id: 'event', - label: formatMessage(labels.event), - path: updateParams({ view: 'event' }), - icon: , - }, - { - id: 'hostname', - label: formatMessage(labels.hostname), - path: updateParams({ view: 'hostname' }), - icon: , - }, - { - id: 'tag', - label: formatMessage(labels.tag), - path: updateParams({ view: 'tag' }), - icon: , - }, - ].filter(filterExcluded), - }, - ]; - return ( - - - + + + - {formatMessage(labels.maximize)}