diff --git a/package.components.json b/package.components.json index e0f8a105..09c0cf52 100644 --- a/package.components.json +++ b/package.components.json @@ -1,24 +1,10 @@ { "name": "@umami/components", - "version": "0.116.0", + "version": "0.121.0", "description": "Umami React components.", "author": "Mike Cao ", "license": "MIT", "type": "module", "main": "./index.js", - "types": "./index.d.ts", - "dependencies": { - "chart.js": "^4.5.0", - "chartjs-adapter-date-fns": "^3.0.0", - "colord": "^2.9.2", - "jsonwebtoken": "^9.0.2", - "lucide-react": "^0.542.0", - "pure-rand": "^7.0.1", - "react-simple-maps": "^2.3.0", - "react-use-measure": "^2.0.4", - "react-window": "^1.8.6", - "serialize-error": "^12.0.0", - "thenby": "^1.3.4", - "uuid": "^11.1.0" - } + "types": "./index.d.ts" } diff --git a/src/app/(main)/websites/[websiteId]/WebsiteNav.tsx b/src/app/(main)/websites/[websiteId]/WebsiteNav.tsx index 5f9d8940..8db82a58 100644 --- a/src/app/(main)/websites/[websiteId]/WebsiteNav.tsx +++ b/src/app/(main)/websites/[websiteId]/WebsiteNav.tsx @@ -18,6 +18,7 @@ import { import { useMessages, useNavigation } from '@/components/hooks'; import { SideMenu } from '@/components/common/SideMenu'; import { WebsiteSelect } from '@/components/input/WebsiteSelect'; +import { Text } from '@umami/react-zen'; export function WebsiteNav({ websiteId }: { websiteId: string }) { const { formatMessage, labels } = useMessages(); @@ -147,13 +148,27 @@ export function WebsiteNav({ websiteId }: { websiteId: string }) { router.push(renderUrl(`/websites/${value}`)); }; + const renderValue = (value: any) => { + return ( + + {value?.selectedItem?.name} + + ); + }; + const selectedKey = items .flatMap(e => e.items) .find(({ path }) => path && pathname.endsWith(path.split('?')[0]))?.id; return ( - + ); } diff --git a/src/app/api/me/websites/route.ts b/src/app/api/me/websites/route.ts index 75f8fbe1..2851dab4 100644 --- a/src/app/api/me/websites/route.ts +++ b/src/app/api/me/websites/route.ts @@ -7,6 +7,7 @@ import { parseRequest, getQueryFilters } from '@/lib/request'; export async function GET(request: Request) { const schema = z.object({ ...pagingParams, + includeTeams: z.string().optional(), }); const { auth, query, error } = await parseRequest(request, schema); diff --git a/src/app/api/users/[userId]/websites/route.ts b/src/app/api/users/[userId]/websites/route.ts index 0c10682d..3e81f4f4 100644 --- a/src/app/api/users/[userId]/websites/route.ts +++ b/src/app/api/users/[userId]/websites/route.ts @@ -1,6 +1,6 @@ import { z } from 'zod'; import { unauthorized, json } from '@/lib/response'; -import { getUserWebsites } from '@/queries/prisma/website'; +import { getAllUserWebsitesIncludingTeamOwner, getUserWebsites } from '@/queries/prisma/website'; import { pagingParams, searchParams } from '@/lib/schema'; import { getQueryFilters, parseRequest } from '@/lib/request'; @@ -8,6 +8,7 @@ export async function GET(request: Request, { params }: { params: Promise<{ user const schema = z.object({ ...pagingParams, ...searchParams, + includeTeams: z.string().optional(), }); const { auth, query, error } = await parseRequest(request, schema); @@ -24,7 +25,9 @@ export async function GET(request: Request, { params }: { params: Promise<{ user const filters = await getQueryFilters(query); - const websites = await getUserWebsites(userId, filters); + if (query.includeTeams) { + return json(await getAllUserWebsitesIncludingTeamOwner(auth.user.id, filters)); + } - return json(websites); + return json(await getUserWebsites(userId, filters)); } diff --git a/src/components/input/WebsiteSelect.tsx b/src/components/input/WebsiteSelect.tsx index 572d6d7d..103e5c59 100644 --- a/src/components/input/WebsiteSelect.tsx +++ b/src/components/input/WebsiteSelect.tsx @@ -1,29 +1,25 @@ import { useState } from 'react'; -import { Select, SelectProps, ListItem, Text } from '@umami/react-zen'; -import { - useUserWebsitesQuery, - useWebsiteQuery, - useMessages, - useLoginQuery, -} from '@/components/hooks'; +import { Select, SelectProps, ListItem } from '@umami/react-zen'; +import { useUserWebsitesQuery, useMessages, useLoginQuery } from '@/components/hooks'; import { Empty } from '@/components/common/Empty'; export function WebsiteSelect({ websiteId, teamId, onChange, + includeTeams, ...props }: { websiteId?: string; teamId?: string; + includeTeams?: boolean; } & SelectProps) { const { formatMessage, messages } = useMessages(); const [search, setSearch] = useState(''); - const { data: website } = useWebsiteQuery(websiteId); const { user } = useLoginQuery(); const { data, isLoading } = useUserWebsitesQuery( { userId: user?.id, teamId }, - { search, pageSize: 5 }, + { search, pageSize: 5, includeTeams }, ); const handleSearch = (value: string) => { @@ -37,11 +33,9 @@ export function WebsiteSelect({ return ( diff --git a/src/index.ts b/src/index.ts index f72bece0..ab6f0946 100644 --- a/src/index.ts +++ b/src/index.ts @@ -64,6 +64,10 @@ export * from '@/components/common/SectionHeader'; export * from '@/components/common/SideMenu'; export * from '@/components/common/TypeConfirmationForm'; +export * from '@/components/input/ActionButton'; +export * from '@/components/input/DateFilter'; +export * from '@/components/input/DownloadButton'; +export * from '@/components/input/ExportButton'; export * from '@/components/input/FilterButtons'; export * from '@/components/input/TeamsButton'; export * from '@/components/input/ProfileButton';