AuthorInfo.jsx 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import { userPageRoot } from '@commons/util/path-utils';
  4. import { format } from 'date-fns';
  5. import UserPicture from '../User/UserPicture';
  6. const formatType = 'yyyy/MM/dd HH:mm';
  7. const AuthorInfo = (props) => {
  8. const {
  9. mode, user, date, locate,
  10. } = props;
  11. const infoLabelForSubNav = mode === 'create'
  12. ? 'Created by'
  13. : 'Updated by';
  14. const infoLabelForFooter = mode === 'create'
  15. ? 'Created at'
  16. : 'Last revision posted at';
  17. const userLabel = user != null
  18. ? <a href={userPageRoot(user)}>{user.name}</a>
  19. : <i>Unknown</i>;
  20. if (locate === 'footer') {
  21. return <p>{infoLabelForFooter} {format(new Date(date), formatType)} by <UserPicture user={user} size="sm" /> {userLabel}</p>;
  22. }
  23. return (
  24. <div className="d-flex align-items-center">
  25. <div className="mr-2">
  26. <UserPicture user={user} size="sm" />
  27. </div>
  28. <div>
  29. <div>{infoLabelForSubNav} {userLabel}</div>
  30. <div className="text-muted text-date">{format(new Date(date), formatType)}</div>
  31. </div>
  32. </div>
  33. );
  34. };
  35. AuthorInfo.propTypes = {
  36. date: PropTypes.string.isRequired,
  37. user: PropTypes.object,
  38. mode: PropTypes.oneOf(['create', 'update']),
  39. locate: PropTypes.oneOf(['subnav', 'footer']),
  40. };
  41. AuthorInfo.defaultProps = {
  42. mode: 'create',
  43. locate: 'subnav',
  44. };
  45. export default AuthorInfo;