umami/src/app/(main)/reports/[reportId]/BaseParameters.tsx

64 lines
1.8 KiB
TypeScript
Raw Normal View History

2023-10-08 01:55:14 +00:00
import { useContext } from 'react';
2023-06-03 06:10:59 +00:00
import { FormRow } from 'react-basics';
2023-10-08 01:55:14 +00:00
import { parseDateRange } from 'lib/date';
2023-06-03 06:10:59 +00:00
import DateFilter from 'components/input/DateFilter';
import WebsiteSelect from 'components/input/WebsiteSelect';
2024-02-05 02:03:26 +00:00
import { useMessages, useTeamUrl } from 'components/hooks';
2024-02-06 08:38:33 +00:00
import { ReportContext } from './Report';
2023-06-03 06:10:59 +00:00
2023-12-03 11:07:03 +00:00
export interface BaseParametersProps {
showWebsiteSelect?: boolean;
allowWebsiteSelect?: boolean;
showDateSelect?: boolean;
allowDateSelect?: boolean;
}
2023-08-16 17:50:28 +00:00
export function BaseParameters({
showWebsiteSelect = true,
allowWebsiteSelect = true,
showDateSelect = true,
allowDateSelect = true,
2023-12-03 11:07:03 +00:00
}: BaseParametersProps) {
2023-06-03 06:10:59 +00:00
const { report, updateReport } = useContext(ReportContext);
const { formatMessage, labels } = useMessages();
2024-02-05 02:03:26 +00:00
const { teamId } = useTeamUrl();
2023-06-03 06:10:59 +00:00
const { parameters } = report || {};
const { websiteId, dateRange } = parameters || {};
const { value, startDate, endDate } = dateRange || {};
2023-12-03 11:07:03 +00:00
const handleWebsiteSelect = (websiteId: string) => {
2023-06-05 10:08:43 +00:00
updateReport({ websiteId, parameters: { websiteId } });
2023-06-03 06:10:59 +00:00
};
2023-12-03 11:07:03 +00:00
const handleDateChange = (value: string) => {
2023-06-03 06:10:59 +00:00
updateReport({ parameters: { dateRange: { ...parseDateRange(value) } } });
};
return (
<>
2023-08-16 17:50:28 +00:00
{showWebsiteSelect && (
<FormRow label={formatMessage(labels.website)}>
{allowWebsiteSelect && (
2024-02-03 05:06:55 +00:00
<WebsiteSelect teamId={teamId} websiteId={websiteId} onSelect={handleWebsiteSelect} />
2023-08-16 17:50:28 +00:00
)}
</FormRow>
)}
{showDateSelect && (
<FormRow label={formatMessage(labels.dateRange)}>
{allowDateSelect && (
<DateFilter
value={value}
startDate={startDate}
endDate={endDate}
onChange={handleDateChange}
/>
)}
</FormRow>
)}
2023-06-03 06:10:59 +00:00
</>
);
}
export default BaseParameters;