import React from 'react'; import { Form, Button, IconButton, HelpText } from 'UI'; import FilterSeries from '../FilterSeries'; import { connect } from 'react-redux'; import { edit as editMetric, save, addSeries, removeSeries, remove } from 'Duck/customMetrics'; import CustomMetricWidgetPreview from 'App/components/Dashboard/Widgets/CustomMetricsWidgets/CustomMetricWidgetPreview'; import { confirm } from 'UI/Confirmation'; import { toast } from 'react-toastify'; import cn from 'classnames'; import DropdownPlain from '../../DropdownPlain'; import { metricTypes, metricOf, issueOptions } from 'App/constants/filterOptions'; import { FilterKey } from 'Types/filter/filterType'; interface Props { metric: any; editMetric: (metric, shouldFetch?) => void; save: (metric) => Promise; loading: boolean; addSeries: (series?) => void; onClose: () => void; remove: (id) => Promise; removeSeries: (seriesIndex) => void; } function CustomMetricForm(props: Props) { const { metric, loading } = props; // const metricOfOptions = metricOf.filter(i => i.key === metric.metricType); const timeseriesOptions = metricOf.filter(i => i.type === 'timeseries'); const tableOptions = metricOf.filter(i => i.type === 'table'); const isTable = metric.metricType === 'table'; const isTimeSeries = metric.metricType === 'timeseries'; const _issueOptions = [{ text: 'All', value: 'all' }].concat(issueOptions); const addSeries = () => { props.addSeries(); } const removeSeries = (index) => { props.removeSeries(index); } const write = ({ target: { value, name } }) => props.editMetric({ [ name ]: value }, false); const writeOption = (e, { value, name }) => { props.editMetric({ [ name ]: value }, false); if (name === 'metricValue') { props.editMetric({ metricValue: [value] }, false); } if (name === 'metricOf') { if (value === FilterKey.ISSUE) { props.editMetric({ metricValue: ['all'] }, false); } } if (name === 'metricType') { if (value === 'timeseries') { props.editMetric({ metricOf: timeseriesOptions[0].value, viewType: 'lineChart' }, false); } else if (value === 'table') { props.editMetric({ metricOf: tableOptions[0].value, viewType: 'table' }, false); } } }; // const changeConditionTab = (e, { name, value }) => { // props.editMetric({[ 'viewType' ]: value }); // }; const save = () => { props.save(metric).then(() => { toast.success(metric.exists() ? 'Updated succesfully.' : 'Created succesfully.'); props.onClose() }); } const deleteHandler = async () => { if (await confirm({ header: 'Custom Metric', confirmButton: 'Delete', confirmation: `Are you sure you want to delete ${metric.name}` })) { props.remove(metric.metricId).then(() => { toast.success('Deleted succesfully.'); props.onClose(); }); } } return (
{metric.metricType === 'timeseries' && ( <> of )} {metric.metricType === 'table' && ( <> of )} {metric.metricOf === FilterKey.ISSUE && ( <> issue type )} {metric.metricType === 'table' && ( <> showing )}
{metric.series && metric.series.size > 0 && metric.series.take(isTable ? 1 : metric.series.size).map((series: any, index: number) => (
removeSeries(index)} canDelete={metric.series.size > 1} emptyMessage={isTable ? 'Filter data using any event or attribute. Use Add Step button below to do so.' : 'Add user event or filter to define the series by clicking Add Step.' } />
))}
{ isTimeSeries && (
2})}>
)}
{ metric.exists() && }
); } export default connect(state => ({ metric: state.getIn(['customMetrics', 'instance']), loading: state.getIn(['customMetrics', 'saveRequest', 'loading']), }), { editMetric, save, addSeries, remove, removeSeries })(CustomMetricForm);