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
62 lines
1.9 KiB
// @ts-check |
|
import React from 'react'; |
|
import { FormattedMessage } from 'react-intl'; |
|
|
|
/** |
|
* Returns custom renderer for one of the common counter types |
|
* |
|
* @param {"statuses" | "following" | "followers"} counterType |
|
* Type of the counter |
|
* @param {boolean} isBold Whether display number must be displayed in bold |
|
* @returns {(displayNumber: JSX.Element, pluralReady: number) => JSX.Element} |
|
* Renderer function |
|
* @throws If counterType is not covered by this function |
|
*/ |
|
export function counterRenderer(counterType, isBold = true) { |
|
/** |
|
* @type {(displayNumber: JSX.Element) => JSX.Element} |
|
*/ |
|
const renderCounter = isBold |
|
? (displayNumber) => <strong>{displayNumber}</strong> |
|
: (displayNumber) => displayNumber; |
|
|
|
switch (counterType) { |
|
case 'statuses': { |
|
return (displayNumber, pluralReady) => ( |
|
<FormattedMessage |
|
id='account.statuses_counter' |
|
defaultMessage='{count, plural, one {{counter} Post} other {{counter} Posts}}' |
|
values={{ |
|
count: pluralReady, |
|
counter: renderCounter(displayNumber), |
|
}} |
|
/> |
|
); |
|
} |
|
case 'following': { |
|
return (displayNumber, pluralReady) => ( |
|
<FormattedMessage |
|
id='account.following_counter' |
|
defaultMessage='{count, plural, one {{counter} Following} other {{counter} Following}}' |
|
values={{ |
|
count: pluralReady, |
|
counter: renderCounter(displayNumber), |
|
}} |
|
/> |
|
); |
|
} |
|
case 'followers': { |
|
return (displayNumber, pluralReady) => ( |
|
<FormattedMessage |
|
id='account.followers_counter' |
|
defaultMessage='{count, plural, one {{counter} Follower} other {{counter} Followers}}' |
|
values={{ |
|
count: pluralReady, |
|
counter: renderCounter(displayNumber), |
|
}} |
|
/> |
|
); |
|
} |
|
default: throw Error(`Incorrect counter name: ${counterType}. Ensure it accepted by commonCounter function`); |
|
} |
|
}
|
|
|