umami/src/components/input/WebsiteSelect.tsx
Mike Cao 45c9ea9c22 Merge branch 'dev' into jajaja
# 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
2025-07-23 23:39:28 -07:00

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>
);
}