import { useContext, useRef } from 'react'; import { useFormat, useMessages, useFilters } from 'hooks'; import { Form, FormRow, FormButtons, SubmitButton, PopupTrigger, Icon, Popup, TooltipPopup, } from 'react-basics'; import { ReportContext } from 'components/pages/reports/Report'; import Icons from 'components/icons'; import BaseParameters from '../BaseParameters'; import ParameterList from '../ParameterList'; import styles from './InsightsParameters.module.css'; import PopupForm from '../PopupForm'; import FilterSelectForm from '../FilterSelectForm'; import FieldSelectForm from '../FieldSelectForm'; export function InsightsParameters() { const { report, runReport, updateReport, isRunning } = useContext(ReportContext); const { formatMessage, labels } = useMessages(); const { formatValue } = useFormat(); const { filterLabels } = useFilters(); const ref = useRef(null); const { parameters } = report || {}; const { websiteId, dateRange, fields, filters } = parameters || {}; const { startDate, endDate } = dateRange || {}; const parametersSelected = websiteId && startDate && endDate; const queryEnabled = websiteId && dateRange && (fields?.length || filters?.length); const fieldOptions = [ { name: 'url', type: 'string', label: formatMessage(labels.url) }, { name: 'title', type: 'string', label: formatMessage(labels.pageTitle) }, { name: 'referrer', type: 'string', label: formatMessage(labels.referrer) }, { name: 'query', type: 'string', label: formatMessage(labels.query) }, { name: 'browser', type: 'string', label: formatMessage(labels.browser) }, { name: 'os', type: 'string', label: formatMessage(labels.os) }, { name: 'device', type: 'string', label: formatMessage(labels.device) }, { name: 'country', type: 'string', label: formatMessage(labels.country) }, { name: 'region', type: 'string', label: formatMessage(labels.region) }, { name: 'city', type: 'string', label: formatMessage(labels.city) }, ]; const parameterGroups = [ { id: 'fields', label: formatMessage(labels.fields) }, { id: 'filters', label: formatMessage(labels.filters) }, ]; const parameterData = { fields, filters, }; const handleSubmit = values => { runReport(values); }; const handleAdd = (id, value) => { const data = parameterData[id]; if (!data.find(({ name }) => name === value.name)) { updateReport({ parameters: { [id]: data.concat(value) } }); } }; const handleRemove = (id, index) => { const data = [...parameterData[id]]; data.splice(index, 1); updateReport({ parameters: { [id]: data } }); }; const AddButton = ({ id }) => { return ( {(close, element) => { return ( {id === 'fields' && ( )} {id === 'filters' && ( )} ); }} ); }; return (
{parametersSelected && parameterGroups.map(({ id, label }) => { return ( }> handleRemove(id, index)}> {({ name, filter, value, label }) => { return (
{id === 'fields' && ( <>
{label}
)} {id === 'filters' && ( <>
{fieldOptions.find(f => f.name === name)?.label}
{filterLabels[filter]}
{formatValue(value, name)}
)}
); }}
); })} {formatMessage(labels.runQuery)} ); } export default InsightsParameters;