import React, { useState, useCallback, Fragment, useEffect, useMemo } from 'react'; import PropTypes from 'prop-types'; import cx from 'classnames'; import { NavLink, Redirect, Route, Switch, useHistory, useParams } from 'react-router-dom'; import { Button, DropdownItem, DropdownMenu, DropdownToggle, UncontrolledDropdown } from 'reactstrap'; import { IoIosTrash } from 'react-icons/io'; import { Results, Performance, Influencers, Sentiment, Themes, Demographics // WorldMap } from './Tabs'; import AlertDialog from './AlertDialog'; import reduxConnect from '../../../../../redux/utils/connect'; import translate from 'react-i18next/dist/commonjs/translate'; import { compose } from 'redux'; import { getAnalyticDetailsAPI } from '../../../../../api/analytics/createAnalytics'; import useIsMounted from '../../../../common/hooks/useIsMounted'; import { setDocumentData } from '../../../../../common/helper'; import { Interpolate } from 'react-i18next'; // exported for routing export const subChartCategories = [ { title: 'Overview', transKey: 'overview', path: 'overview', component: Results }, { title: 'Performance', transKey: 'performance', path: 'performance', component: Performance }, { title: 'Influencers', transKey: 'influencers', path: 'influencers', component: Influencers }, { title: 'Sentiment', transKey: 'sentiment', path: 'sentiment', component: Sentiment }, { title: 'Themes', transKey: 'themes', path: 'themes', component: Themes }, { title: 'Demographics', transKey: 'demographics', path: 'demographics', component: Demographics } // { title: 'World Map', transKey: 'worldMap', path: 'worldmap', component: WorldMap } ]; function ShowCharts({ analyze, actions, t }) { const isMounted = useIsMounted(); const history = useHistory(); const params = useParams(); const [chartData, setChartData] = useState({}); const [alertModal, setAlertModal] = useState(false); const [fetching, setFetching] = useState(true); const [feedData, setFeedData] = useState(null); const { removeAlertChart, resetAlertChart } = actions; const { alertCharts } = analyze; useEffect(() => { setDocumentData('title', 'View Analysis | Analyze'); return () => { setDocumentData('title'); }; }, []); useEffect(() => { if (!params.id || isNaN(params.id)) { history.push('/app/analyze/saved'); } else { getAnalyticData(); } return () => resetAlertChart(); // reset store }, [params.id]); const updateResult = useCallback((data, chartName) => { setChartData((prev) => ({ ...prev, [chartName]: data })); }, []); const subChartRoutes = useMemo(() => { return subChartCategories.map(({ path, component: SubChart }) => ( )); }, [updateResult, chartData, feedData, params.id]); function getAnalyticData() { setFetching(true); getAnalyticDetailsAPI(params.id).then((res) => { if (!isMounted.current) { return; } if (res.error || !res.data || !res.data.context) { setFetching(false); res.data ? actions.addAlert(res.data) : actions.addAlert({ type: 'error', transKey: 'somethingWrong' }); history.push('/app/analyze/saved'); return; } const { context } = res.data; const date = context && context.rawFilters && context.rawFilters.date; setFeedData({ feeds: context.feeds.map((item) => ({ feed: item.name, id: item.id })), startDate: date && date.start, endDate: date && date.end }); setFetching(false); }); } function toggleModal() { setAlertModal((prev) => !prev); } if (fetching) { return 'Loading...'; } const isRTL = document.documentElement.dir === 'rtl'; return ( {alertCharts && alertCharts.length > 0 && ( {t('analyzeTab.selectedCharts')} {alertCharts.map((chart, i) => ( {chart.name} {isNaN(chart.id) ? '' : ` (#${chart.id})`} ))} {t('analyzeTab.createAlertBtn')} )} {/* Save */} {subChartCategories.map((cat, i, arr) => ( {t(`analyzeTab.overviewCharts.${cat.transKey}`)} ))} {subChartRoutes} ); } ShowCharts.propTypes = { t: PropTypes.func.isRequired, analyze: PropTypes.object, actions: PropTypes.object }; const applyDecorators = compose( reduxConnect('analyze', ['appState', 'analyze']), translate(['tabsContent'], { wait: true }) ); export default applyDecorators(ShowCharts);