mirror of
https://github.com/umami-software/umami.git
synced 2025-12-06 01:18:00 +01:00
# Conflicts: # db/mysql/schema.prisma # package.json # pnpm-lock.yaml # src/app/(main)/reports/[reportId]/ReportBody.tsx # src/app/(main)/reports/[reportId]/ReportPage.tsx # src/app/(main)/reports/utm/UTMView.tsx # src/app/(main)/websites/[websiteId]/WebsiteMetricsBar.tsx # src/app/(main)/websites/[websiteId]/WebsiteTableView.tsx # src/app/(main)/websites/[websiteId]/events/EventsPage.tsx # src/app/api/reports/[reportId]/route.ts # src/app/api/websites/[websiteId]/metrics/route.ts # src/components/hooks/queries/useReport.ts # src/components/icons.ts # src/components/messages.ts # src/components/metrics/MetricsTable.module.css # src/components/metrics/MetricsTable.tsx # src/queries/sql/events/getEventMetrics.ts # src/queries/sql/reports/getUTM.ts
50 lines
1.3 KiB
TypeScript
50 lines
1.3 KiB
TypeScript
import { useState } from 'react';
|
|
import { Select, SelectProps, ListItem, Text } from '@umami/react-zen';
|
|
import { useUserWebsitesQuery, useWebsiteQuery, useNavigation } from '@/components/hooks';
|
|
import { ButtonProps } from 'react-basics';
|
|
|
|
export function WebsiteSelect({
|
|
websiteId,
|
|
teamId,
|
|
buttonProps,
|
|
...props
|
|
}: {
|
|
websiteId?: string;
|
|
teamId?: string;
|
|
buttonProps?: ButtonProps;
|
|
} & SelectProps) {
|
|
const { router, renderUrl } = useNavigation();
|
|
const [search, setSearch] = useState('');
|
|
const { data: website } = useWebsiteQuery(websiteId);
|
|
const { data, isLoading } = useUserWebsitesQuery({ teamId }, { search, pageSize: 5 });
|
|
|
|
const handleSelect = (value: any) => {
|
|
router.push(renderUrl(`/websites/${value}`));
|
|
};
|
|
|
|
const handleSearch = (value: string) => {
|
|
setSearch(value);
|
|
};
|
|
|
|
return (
|
|
<Select
|
|
{...props}
|
|
placeholder=""
|
|
items={data?.['data'] || []}
|
|
value={websiteId}
|
|
isLoading={isLoading}
|
|
buttonProps={buttonProps}
|
|
allowSearch={true}
|
|
searchValue={search}
|
|
onSearch={handleSearch}
|
|
onChange={handleSelect}
|
|
renderValue={() => (
|
|
<Text truncate style={{ maxWidth: 160 }}>
|
|
{website?.name}
|
|
</Text>
|
|
)}
|
|
>
|
|
{({ id, name }: any) => <ListItem key={id}>{name}</ListItem>}
|
|
</Select>
|
|
);
|
|
}
|