// Copyright (c) 2016 Mattermost, Inc. All Rights Reserved. // See License.txt for license information. import LineChart from './line_chart.jsx'; import StatisticCount from './statistic_count.jsx'; import TableChart from './table_chart.jsx'; import AnalyticsStore from 'stores/analytics_store.jsx'; import * as Utils from 'utils/utils.jsx'; import * as AsyncClient from 'utils/async_client.jsx'; import Constants from 'utils/constants.jsx'; const StatTypes = Constants.StatTypes; import {formatPostsPerDayData, formatUsersWithPostsPerDayData} from './system_analytics.jsx'; import {injectIntl, intlShape, FormattedMessage, FormattedDate} from 'react-intl'; import React from 'react'; class TeamAnalytics extends React.Component { constructor(props) { super(props); this.onChange = this.onChange.bind(this); this.state = {stats: AnalyticsStore.getAllTeam(this.props.team.id)}; } componentDidMount() { AnalyticsStore.addChangeListener(this.onChange); this.getData(this.props.team.id); } getData(id) { AsyncClient.getStandardAnalytics(id); AsyncClient.getPostsPerDayAnalytics(id); AsyncClient.getUsersPerDayAnalytics(id); AsyncClient.getRecentAndNewUsersAnalytics(id); } componentWillUnmount() { AnalyticsStore.removeChangeListener(this.onChange); } componentWillReceiveProps(nextProps) { this.getData(nextProps.team.id); this.setState({stats: AnalyticsStore.getAllTeam(nextProps.team.id)}); } shouldComponentUpdate(nextProps, nextState) { if (!Utils.areObjectsEqual(nextState.stats, this.state.stats)) { return true; } if (!Utils.areObjectsEqual(nextProps.team, this.props.team)) { return true; } return false; } onChange() { this.setState({stats: AnalyticsStore.getAllTeam(this.props.team.id)}); } render() { const stats = this.state.stats; const postCountsDay = formatPostsPerDayData(stats[StatTypes.POST_PER_DAY]); const userCountsWithPostsDay = formatUsersWithPostsPerDayData(stats[StatTypes.USERS_WITH_POSTS_PER_DAY]); const recentActiveUsers = formatRecentUsersData(stats[StatTypes.RECENTLY_ACTIVE_USERS]); const newlyCreatedUsers = formatNewUsersData(stats[StatTypes.NEWLY_CREATED_USERS]); return (

} icon='fa-user' count={stats[StatTypes.TOTAL_USERS]} /> } icon='fa-users' count={stats[StatTypes.TOTAL_PUBLIC_CHANNELS]} /> } icon='fa-globe' count={stats[StatTypes.TOTAL_PRIVATE_GROUPS]} /> } icon='fa-comment' count={stats[StatTypes.TOTAL_POSTS]} />
} data={postCountsDay} width='740' height='225' />
} data={userCountsWithPostsDay} width='740' height='225' />
} data={recentActiveUsers} /> } data={newlyCreatedUsers} />
); } } TeamAnalytics.propTypes = { intl: intlShape.isRequired, team: React.PropTypes.object.isRequired }; export default injectIntl(TeamAnalytics); export function formatRecentUsersData(data) { if (data == null) { return []; } const formattedData = data.map((user) => { const item = {}; item.name = user.username; item.value = ( ); item.tip = user.email; return item; }); return formattedData; } export function formatNewUsersData(data) { if (data == null) { return []; } const formattedData = data.map((user) => { const item = {}; item.name = user.username; item.value = ( ); item.tip = user.email; return item; }); return formattedData; }