diff --git a/src/admin/insights/AdminAppInsightsClient.tsx b/src/admin/insights/AdminAppInsightsClient.tsx index 56fc1016..41d7f028 100644 --- a/src/admin/insights/AdminAppInsightsClient.tsx +++ b/src/admin/insights/AdminAppInsightsClient.tsx @@ -32,6 +32,7 @@ import { IoMdGrid } from 'react-icons/io'; import { RiSpeedMiniLine } from 'react-icons/ri'; import AdminLink from '../AdminLink'; import AdminEmptyState from '../AdminEmptyState'; +import { pluralize } from '@/utility/string'; const DEBUG_COMMIT_SHA = '4cd29ed'; const DEBUG_COMMIT_MESSAGE = 'Long commit message for debugging purposes'; @@ -294,7 +295,7 @@ export default function AdminAppInsightsClient({ className="translate-y-[-2px] text-amber-600" />} // eslint-disable-next-line max-len - content={`${photosCountOutdated || DEBUG_PHOTOS_COUNT_OUTDATED} outdated ${(photosCountOutdated || DEBUG_PHOTOS_COUNT_OUTDATED) === 1 ? 'photo' : 'photos'}`} + content={pluralize(photosCountOutdated || DEBUG_PHOTOS_COUNT_OUTDATED, 'outdated photo')} expandPath={PATH_ADMIN_OUTDATED} />} } content={<> - {photosCount} photos - {photosCountHidden > 0 && - ` (${photosCountHidden} hidden)`} + {pluralize(photosCount, 'photo')} + {photosCountHidden > 0 && ` (${photosCountHidden} hidden)`} } /> } - content={`${tagsCount} tags`} + content={pluralize(tagsCount, 'tag')} /> } - content={`${camerasCount} cameras`} + content={pluralize(camerasCount, 'camera')} /> {filmSimulationsCount > 0 && } - content={`${filmSimulationsCount} film simulations`} + content={pluralize(filmSimulationsCount, 'film simulation')} />} } - content={`${lensesCount} lenses`} + content={pluralize(lensesCount, 'lens', 'lenses')} /> {descriptionWithSpaces && `× ${count}`; +export const pluralize = ( + count: number, + singular: string, + plural?: string, +) => + `${count} ${count === 1 ? singular : plural ?? `${singular}s`}`; + export const formatCountDescriptive = ( count: number, verb = 'found',