You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

62 lines
1.9 KiB

  1. // @ts-check
  2. import React from 'react';
  3. import { FormattedMessage } from 'react-intl';
  4. /**
  5. * Returns custom renderer for one of the common counter types
  6. *
  7. * @param {"statuses" | "following" | "followers"} counterType
  8. * Type of the counter
  9. * @param {boolean} isBold Whether display number must be displayed in bold
  10. * @returns {(displayNumber: JSX.Element, pluralReady: number) => JSX.Element}
  11. * Renderer function
  12. * @throws If counterType is not covered by this function
  13. */
  14. export function counterRenderer(counterType, isBold = true) {
  15. /**
  16. * @type {(displayNumber: JSX.Element) => JSX.Element}
  17. */
  18. const renderCounter = isBold
  19. ? (displayNumber) => <strong>{displayNumber}</strong>
  20. : (displayNumber) => displayNumber;
  21. switch (counterType) {
  22. case 'statuses': {
  23. return (displayNumber, pluralReady) => (
  24. <FormattedMessage
  25. id='account.statuses_counter'
  26. defaultMessage='{count, plural, one {{counter} Toot} other {{counter} Toots}}'
  27. values={{
  28. count: pluralReady,
  29. counter: renderCounter(displayNumber),
  30. }}
  31. />
  32. );
  33. }
  34. case 'following': {
  35. return (displayNumber, pluralReady) => (
  36. <FormattedMessage
  37. id='account.following_counter'
  38. defaultMessage='{count, plural, other {{counter} Following}}'
  39. values={{
  40. count: pluralReady,
  41. counter: renderCounter(displayNumber),
  42. }}
  43. />
  44. );
  45. }
  46. case 'followers': {
  47. return (displayNumber, pluralReady) => (
  48. <FormattedMessage
  49. id='account.followers_counter'
  50. defaultMessage='{count, plural, one {{counter} Follower} other {{counter} Followers}}'
  51. values={{
  52. count: pluralReady,
  53. counter: renderCounter(displayNumber),
  54. }}
  55. />
  56. );
  57. }
  58. default: throw Error(`Incorrect counter name: ${counterType}. Ensure it accepted by commonCounter function`);
  59. }
  60. }