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',