umami/src/app/(app)/reports/FilterSelectForm.js

44 lines
1.1 KiB
JavaScript
Raw Normal View History

2023-08-05 18:09:54 +02:00
import { useState } from 'react';
import FieldSelectForm from './FieldSelectForm';
import FieldFilterForm from './FieldFilterForm';
import { useApi } from 'components/hooks';
2023-08-09 00:29:59 +02:00
import { Loading } from 'react-basics';
2023-08-05 18:09:54 +02:00
2023-08-09 00:29:59 +02:00
function useValues(websiteId, type) {
const { get, useQuery } = useApi();
const { data, error, isLoading } = useQuery(
['websites:values', websiteId, type],
() =>
get(`/websites/${websiteId}/values`, {
type,
}),
{ enabled: !!(websiteId && type) },
);
return { data, error, isLoading };
}
2023-08-27 23:15:02 +02:00
export default function FilterSelectForm({ websiteId, items, onSelect, allowFilterSelect }) {
2023-08-05 18:09:54 +02:00
const [field, setField] = useState();
2023-08-09 00:29:59 +02:00
const { data, isLoading } = useValues(websiteId, field?.name);
2023-08-05 18:09:54 +02:00
if (!field) {
2023-08-10 18:31:25 +02:00
return <FieldSelectForm items={items} onSelect={setField} showType={false} />;
2023-08-05 18:09:54 +02:00
}
2023-08-09 00:29:59 +02:00
if (isLoading) {
2023-08-10 00:06:19 +02:00
return <Loading position="center" icon="dots" />;
2023-08-09 00:29:59 +02:00
}
2023-08-10 00:06:19 +02:00
return (
<FieldFilterForm
name={field?.name}
label={field?.label}
2023-08-10 18:31:25 +02:00
type={field?.type}
2023-08-10 00:06:19 +02:00
values={data}
onSelect={onSelect}
2023-08-27 23:15:02 +02:00
allowFilterSelect={allowFilterSelect}
2023-08-10 00:06:19 +02:00
/>
);
2023-08-05 18:09:54 +02:00
}