WikiEducationFoundation/WikiEduDashboard

View on GitHub
app/assets/javascripts/components/user_profiles/user_profile.jsx

Summary

Maintainability
A
1 hr
Test Coverage
A
100%
import React, { useEffect, useState } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import ContributionStats from './contribution_stats.jsx';
import CourseDetails from './course_details.jsx';
import UserUploads from './user_uploads.jsx';
import { fetchStats } from '../../actions/user_profile_actions.js';
import { fetchUserTrainingStatus } from '../../actions/training_status_actions';
import Loading from '../common/loading.jsx';
import UserTrainingStatus from './user_training_status.jsx';
import request from '../../utils/request';
import { useParams } from 'react-router-dom';

const UserProfile = () => {
  const dispatch = useDispatch();
  const stats = useSelector(state => state.userProfile.stats);
  const isLoading = useSelector(state => state.userProfile.isLoading);
  const userTrainingStatus = useSelector(state => state.userTrainingStatus);

  const [statsGraphsData, setStatsGraphsData] = useState();

  const params = useParams();
  const username = encodeURIComponent(params.username);

  const getData = () => {
    const statsdataUrl = `/stats_graphs.json?username=${username}`;
    request(statsdataUrl)
      .then(resp => resp.json())
      .then((data) => {
        setStatsGraphsData(data);
      });
  };

  useEffect(() => {
    dispatch(fetchUserTrainingStatus(username));
    dispatch(fetchStats(username));
    getData();
  }, []);

  if (isLoading) {
    return <Loading />;
  }

  return (
    <div>
      <ContributionStats params={params} stats={stats} statsGraphsData={statsGraphsData} />
      <CourseDetails courses={stats.courses_details} />
      <UserUploads uploads={stats.user_recent_uploads} />
      <UserTrainingStatus trainingModules={userTrainingStatus} />
    </div>
  );
};

export default UserProfile;