Skip to content

Commit

Permalink
fix(website): fix locales for toLocaleString (#2932)
Browse files Browse the repository at this point in the history
* fix locales for toLocaleString
* Factor our locale string to constant defined in settings
* Refactor number formatting

---------

Co-authored-by: Loculus bot <[email protected]>
Co-authored-by: Cornelius Roemer <[email protected]>
  • Loading branch information
3 people authored Oct 2, 2024
1 parent 7eeddb8 commit 35bb851
Show file tree
Hide file tree
Showing 6 changed files with 26 additions and 14 deletions.
8 changes: 4 additions & 4 deletions website/src/components/IndexPage/OrganismCard.astro
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
import type { OrganismStatistics } from './getOrganismStatistics';
import { routes } from '../../routes/routes';
import { formatNumberWithDefaultLocale } from '../../utils/formatNumber';
interface Props {
key: string;
Expand All @@ -11,8 +12,6 @@ interface Props {
}
const { key, image, displayName, organismStatistics, numberDaysAgoStatistics } = Astro.props;
const formatNumber = (num: number) => new Intl.NumberFormat('en-US').format(num);
---

<a
Expand All @@ -22,8 +21,9 @@ const formatNumber = (num: number) => new Intl.NumberFormat('en-US').format(num)
{image !== undefined && <img src={image} class='h-32 mx-auto mb-4' alt={displayName} />}
<h3 class='font-semibold'>{displayName}</h3>
<p class='text-sm'>
{formatNumber(organismStatistics.totalSequences)} sequences<br />
(+{formatNumber(organismStatistics.recentSequences)} in last {numberDaysAgoStatistics} days)<br />
{formatNumberWithDefaultLocale(organismStatistics.totalSequences)} sequences<br />
(+{formatNumberWithDefaultLocale(organismStatistics.recentSequences)} in last {numberDaysAgoStatistics} days)<br
/>
<span class='hidden'
>{
organismStatistics.lastUpdatedAt && <>Last updated {organismStatistics.lastUpdatedAt.toRelative()}</>
Expand Down
19 changes: 11 additions & 8 deletions website/src/components/SearchPage/SearchFullUI.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import {
import { type OrderBy } from '../../types/lapis.ts';
import type { ReferenceGenomesSequenceNames } from '../../types/referencesGenomes.ts';
import type { ClientConfig } from '../../types/runtimeConfig.ts';
import { formatNumberWithDefaultLocale } from '../../utils/formatNumber.tsx';
import {
getFieldValuesFromQuery,
getColumnVisibilitiesFromQuery,
Expand Down Expand Up @@ -51,6 +52,15 @@ interface QueryState {
[key: string]: string;
}

const buildSequenceCountText = (totalSequences: number | undefined, oldCount: number | null, initialCount: number) => {
const sequenceCount = totalSequences !== undefined ? totalSequences : oldCount !== null ? oldCount : initialCount;

const formattedCount = formatNumberWithDefaultLocale(sequenceCount);
const pluralSuffix = sequenceCount === 1 ? '' : 's';

return `Search returned ${formattedCount} sequence${pluralSuffix}`;
};

export const InnerSearchFullUI = ({
accessToken,
referenceGenomesSequenceNames,
Expand Down Expand Up @@ -303,14 +313,7 @@ export const InnerSearchFullUI = ({
>
<div className='text-sm text-gray-800 mb-6 justify-between flex md:px-6 items-baseline'>
<div className='mt-auto'>
Search returned{' '}
{totalSequences !== undefined
? totalSequences.toLocaleString()
: oldCount !== null
? oldCount.toLocaleString()
: initialCount.toLocaleString()}{' '}
sequence
{totalSequences === 1 ? '' : 's'}
{buildSequenceCountText(totalSequences, oldCount, initialCount)}
{detailsHook.isLoading ||
aggregatedHook.isLoading ||
!firstClientSideLoadOfCountCompleted ||
Expand Down
3 changes: 2 additions & 1 deletion website/src/components/SearchPage/Table.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import { Tooltip } from 'react-tooltip';
import { routes } from '../../routes/routes.ts';
import type { Schema } from '../../types/config.ts';
import type { Metadatum, OrderBy } from '../../types/lapis.ts';
import { formatNumberWithDefaultLocale } from '../../utils/formatNumber.tsx';
import MdiTriangle from '~icons/mdi/triangle';
import MdiTriangleDown from '~icons/mdi/triangle-down';

Expand All @@ -19,7 +20,7 @@ function formatField(value: any, maxLength: number, type: string): string {
if (type === 'timestamp') {
return new Date(value * 1000).toISOString().slice(0, 10);
}
return value.toLocaleString('en-US');
return formatNumberWithDefaultLocale(value);
} else if (typeof value === 'boolean') {
return value ? 'True' : 'False';
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import { TextField } from './TextField.tsx';
import { getClientLogger } from '../../../clientLogger.ts';
import { lapisClientHooks } from '../../../services/serviceHooks.ts';
import { type GroupedMetadataFilter, type MetadataFilter, type SetAFieldValue } from '../../../types/config.ts';
import { formatNumberWithDefaultLocale } from '../../../utils/formatNumber.tsx';

type AutoCompleteFieldProps = {
field: MetadataFilter | GroupedMetadataFilter;
Expand Down Expand Up @@ -156,7 +157,9 @@ export const AutoCompleteField = ({
<span className={`inline-block ${selected ? 'font-medium' : 'font-normal'}`}>
{option.option}
</span>
<span className='inline-block ml-1'>({option.count.toLocaleString()})</span>
<span className='inline-block ml-1'>
({formatNumberWithDefaultLocale(option.count)})
</span>
{selected && (
<span
className={`absolute inset-y-0 left-0 flex items-center pl-3 ${
Expand Down
2 changes: 2 additions & 0 deletions website/src/settings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,5 @@ export const DATA_USE_TERMS_FIELD = 'dataUseTerms';
export const VERSION_COMMENT_FIELD = 'versionComment';

export const metadataDefaultDownloadDataFormat = 'tsv';

export const DEFAULT_LOCALE = 'en-US';
3 changes: 3 additions & 0 deletions website/src/utils/formatNumber.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { DEFAULT_LOCALE } from '../settings';

export const formatNumberWithDefaultLocale = (num: number) => new Intl.NumberFormat(DEFAULT_LOCALE).format(num);

0 comments on commit 35bb851

Please sign in to comment.