From 1b400da7b2684d086372ef13a98d0f6ef0bb1c3f Mon Sep 17 00:00:00 2001 From: Mike Cao Date: Thu, 25 Sep 2025 11:21:44 -0700 Subject: [PATCH] Fixed share page. Updated device detect. Updated teams fetch. --- package.json | 3 +- pnpm-lock.yaml | 47 ++++++++++++-- src/app/(main)/SideNav.tsx | 8 +-- src/app/(main)/settings/SettingsLayout.tsx | 1 - .../[websiteId]/WebsiteExpandedView.tsx | 2 +- .../websites/[websiteId]/WebsiteNav.tsx | 2 +- src/app/api/auth/verify/route.ts | 5 +- src/app/share/[...shareId]/Footer.tsx | 2 +- src/app/share/[...shareId]/Header.tsx | 19 +++--- src/app/share/[...shareId]/SharePage.tsx | 17 ++--- .../input/{TeamsButton.tsx => NavButton.tsx} | 21 +++---- src/components/input/PreferencesButton.tsx | 17 +++-- src/index.ts | 2 +- src/lib/detect.ts | 62 ++----------------- src/queries/prisma/team.ts | 18 +++++- src/styles/global.css | 1 - 16 files changed, 118 insertions(+), 109 deletions(-) rename src/components/input/{TeamsButton.tsx => NavButton.tsx} (81%) diff --git a/package.json b/package.json index 455dff95..44ec9f08 100644 --- a/package.json +++ b/package.json @@ -82,7 +82,7 @@ "@react-spring/web": "^10.0.1", "@svgr/cli": "^8.1.0", "@tanstack/react-query": "^5.85.5", - "@umami/react-zen": "^0.184.0", + "@umami/react-zen": "^0.186.0", "@umami/redis-client": "^0.29.0", "bcryptjs": "^3.0.2", "chalk": "^5.6.0", @@ -130,6 +130,7 @@ "semver": "^7.5.4", "serialize-error": "^12.0.0", "thenby": "^1.3.4", + "ua-parser-js": "^2.0.5", "uuid": "^11.1.0", "zod": "^4.1.5", "zustand": "^5.0.8" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4db6756b..1f3fdc90 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -45,8 +45,8 @@ importers: specifier: ^5.85.5 version: 5.85.5(react@19.1.1) '@umami/react-zen': - specifier: ^0.184.0 - version: 0.184.0(@babel/core@7.28.3)(@types/react@19.1.12)(babel-plugin-react-compiler@19.1.0-rc.2)(immer@10.1.1)(use-sync-external-store@1.5.0(react@19.1.1)) + specifier: ^0.186.0 + version: 0.186.0(@babel/core@7.28.3)(@types/react@19.1.12)(babel-plugin-react-compiler@19.1.0-rc.2)(immer@10.1.1)(use-sync-external-store@1.5.0(react@19.1.1)) '@umami/redis-client': specifier: ^0.29.0 version: 0.29.0 @@ -188,6 +188,9 @@ importers: thenby: specifier: ^1.3.4 version: 1.3.4 + ua-parser-js: + specifier: ^2.0.5 + version: 2.0.5 uuid: specifier: ^11.1.0 version: 11.1.0 @@ -364,6 +367,8 @@ importers: specifier: ^5.9.2 version: 5.9.2 + dist: {} + packages: '@ampproject/remapping@2.3.0': @@ -2733,8 +2738,8 @@ packages: '@prisma/client': ^6.1.0 '@prisma/extension-read-replicas': ^0.4.1 - '@umami/react-zen@0.184.0': - resolution: {integrity: sha512-XfxTiP4ljumflx02ymDMXLnhcJW+mOxxKCPEVEjuDrQfR6VUlbHg0EdH04S4gvCJZJC/WnP6guyO2eabhJL88Q==} + '@umami/react-zen@0.186.0': + resolution: {integrity: sha512-s+x4cJK5UTHQ0l2TTUb3zX8P2U6bMw35NRjIqG+OJvljJf5NNdRo6WChZOvnh/08XxGI30jntFhUYdup255rFg==} '@umami/redis-client@0.29.0': resolution: {integrity: sha512-Jaqh++jskqDB7ny75pfC02OvKp1JTS4asGDsFrRL3qy8sxL3PAl9+/mybCJe4/6vWrXDJKqpgkSfUDJq2bFjyw==} @@ -3695,6 +3700,9 @@ packages: detect-browser@5.3.0: resolution: {integrity: sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==} + detect-europe-js@0.1.2: + resolution: {integrity: sha512-lgdERlL3u0aUdHocoouzT10d9I89VVhk0qNRmll7mXdGfJT1/wqZ2ZLA4oJAjeACPY5fT1wsbq2AT+GkuInsow==} + detect-indent@6.1.0: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} @@ -4719,6 +4727,9 @@ packages: resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} engines: {node: '>= 0.4'} + is-standalone-pwa@0.1.1: + resolution: {integrity: sha512-9Cbovsa52vNQCjdXOzeQq5CnCbAcRk05aU62K20WO372NrTv0NxibLFCK6lQ4/iZEFdEA3p3t2VNOn8AJ53F5g==} + is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} @@ -7202,6 +7213,13 @@ packages: engines: {node: '>=14.17'} hasBin: true + ua-is-frozen@0.1.2: + resolution: {integrity: sha512-RwKDW2p3iyWn4UbaxpP2+VxwqXh0jpvdxsYpZ5j/MLLiQOfbsV5shpgQiw93+KMYQPcteeMQ289MaAFzs3G9pw==} + + ua-parser-js@2.0.5: + resolution: {integrity: sha512-sZErtx3rhpvZQanWW5umau4o/snfoLqRcQwQIZ54377WtRzIecnIKvjpkd5JwPcSUMglGnbIgcsQBGAbdi3S9Q==} + hasBin: true + ufo@1.6.1: resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} @@ -7217,6 +7235,10 @@ packages: undici-types@7.10.0: resolution: {integrity: sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==} + undici@7.16.0: + resolution: {integrity: sha512-QEg3HPMll0o3t2ourKwOeUAZ159Kn9mx5pnzHRQO8+Wixmh88YdZRiIwat0iNzNNXn0yoEtXJqFpyW7eM8BV7g==} + engines: {node: '>=20.18.1'} + unicorn-magic@0.3.0: resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} engines: {node: '>=18'} @@ -10321,7 +10343,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@umami/react-zen@0.184.0(@babel/core@7.28.3)(@types/react@19.1.12)(babel-plugin-react-compiler@19.1.0-rc.2)(immer@10.1.1)(use-sync-external-store@1.5.0(react@19.1.1))': + '@umami/react-zen@0.186.0(@babel/core@7.28.3)(@types/react@19.1.12)(babel-plugin-react-compiler@19.1.0-rc.2)(immer@10.1.1)(use-sync-external-store@1.5.0(react@19.1.1))': dependencies: '@fontsource/jetbrains-mono': 5.2.8 '@internationalized/date': 3.9.0 @@ -11398,6 +11420,8 @@ snapshots: detect-browser@5.3.0: {} + detect-europe-js@0.1.2: {} + detect-indent@6.1.0: {} detect-libc@2.0.4: @@ -12606,6 +12630,8 @@ snapshots: dependencies: call-bound: 1.0.4 + is-standalone-pwa@0.1.1: {} + is-stream@2.0.1: {} is-string@1.1.1: @@ -15546,6 +15572,15 @@ snapshots: typescript@5.9.2: {} + ua-is-frozen@0.1.2: {} + + ua-parser-js@2.0.5: + dependencies: + detect-europe-js: 0.1.2 + is-standalone-pwa: 0.1.1 + ua-is-frozen: 0.1.2 + undici: 7.16.0 + ufo@1.6.1: {} uglify-js@3.19.3: @@ -15560,6 +15595,8 @@ snapshots: undici-types@7.10.0: {} + undici@7.16.0: {} + unicorn-magic@0.3.0: {} universalify@0.1.2: {} diff --git a/src/app/(main)/SideNav.tsx b/src/app/(main)/SideNav.tsx index 6e67465c..a50f0c1f 100644 --- a/src/app/(main)/SideNav.tsx +++ b/src/app/(main)/SideNav.tsx @@ -10,7 +10,7 @@ import { } from '@umami/react-zen'; import { Globe, LinkIcon, LogoSvg, Grid2x2, PanelLeft } from '@/components/icons'; import { useMessages, useNavigation, useGlobalState } from '@/components/hooks'; -import { TeamsButton } from '@/components/input/TeamsButton'; +import { NavButton } from '@/components/input/NavButton'; import { PanelButton } from '@/components/input/PanelButton'; import { Key } from 'react'; import { SettingsButton } from '@/components/input/SettingsButton'; @@ -48,8 +48,8 @@ export function SideNav(props: SidebarProps) { }; return ( - - + + setIsCollapsed(false)}> - + {links.map(({ id, path, label, icon }) => { diff --git a/src/app/(main)/settings/SettingsLayout.tsx b/src/app/(main)/settings/SettingsLayout.tsx index 31d6cfed..5af26fa5 100644 --- a/src/app/(main)/settings/SettingsLayout.tsx +++ b/src/app/(main)/settings/SettingsLayout.tsx @@ -53,7 +53,6 @@ export function SettingsLayout({ children }: { children: ReactNode }) { title={formatMessage(labels.settings)} selectedKey={selectedKey} allowMinimize={false} - muteItems={false} /> diff --git a/src/app/(main)/websites/[websiteId]/WebsiteExpandedView.tsx b/src/app/(main)/websites/[websiteId]/WebsiteExpandedView.tsx index a9a5edc6..115b5d26 100644 --- a/src/app/(main)/websites/[websiteId]/WebsiteExpandedView.tsx +++ b/src/app/(main)/websites/[websiteId]/WebsiteExpandedView.tsx @@ -182,7 +182,7 @@ export function WebsiteExpandedView({ return ( - + path && pathname.endsWith(path.split('?')[0]))?.id; return ( - + + umami {`v${CURRENT_VERSION}`} diff --git a/src/app/share/[...shareId]/Header.tsx b/src/app/share/[...shareId]/Header.tsx index 88da5bec..d01adb38 100644 --- a/src/app/share/[...shareId]/Header.tsx +++ b/src/app/share/[...shareId]/Header.tsx @@ -1,20 +1,19 @@ import { Row, Icon, Text, ThemeButton } from '@umami/react-zen'; -import Link from 'next/link'; import { LanguageButton } from '@/components/input/LanguageButton'; import { PreferencesButton } from '@/components/input/PreferencesButton'; -import { Logo } from '@/components/icons'; +import { LogoSvg } from '@/components/icons'; export function Header() { return ( - - - - - + + + + + - umami - - + umami + + diff --git a/src/app/share/[...shareId]/SharePage.tsx b/src/app/share/[...shareId]/SharePage.tsx index ae2be609..0fa3c0bf 100644 --- a/src/app/share/[...shareId]/SharePage.tsx +++ b/src/app/share/[...shareId]/SharePage.tsx @@ -1,4 +1,5 @@ 'use client'; +import { Column } from '@umami/react-zen'; import { WebsiteProvider } from '@/app/(main)/websites/WebsiteProvider'; import { WebsitePage } from '@/app/(main)/websites/[websiteId]/WebsitePage'; import { useShareTokenQuery } from '@/components/hooks'; @@ -14,12 +15,14 @@ export function SharePage({ shareId }) { } return ( - -
- - - -