import React from 'react';
import UserProfileBase from './UserProfileBase';
// import UserLevelExperience from './UserLevelExperience';
import './UserProfile.css';
import UserStatusChecker from './UserStatusChecker';

const UserProfile = () => {
  const [userId, setUserId] = React.useState(null);

  const loadExperienceInfo = (id) => {
    setUserId(id);
  };

  return (
    <div>
      <UserProfileBase onLoadExperienceInfo={loadExperienceInfo} />
      {/* {userId && <UserLevelExperience userId={userId} />} */}
      {/* <UserStatusChecker /> */}
    </div>
  );
};

export default UserProfile;  