From 1bfb26ab447cc0b3ef4c11df91430c5cf88d5e0c Mon Sep 17 00:00:00 2001 From: Mike Cao Date: Thu, 23 Jun 2022 13:44:30 -0700 Subject: [PATCH] Fix display of encoded characters. Closes #1171. --- components/common/FilterLink.js | 3 ++- components/metrics/CountriesTable.js | 17 +++++++++++------ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/components/common/FilterLink.js b/components/common/FilterLink.js index 9401cb13..459a8ae1 100644 --- a/components/common/FilterLink.js +++ b/components/common/FilterLink.js @@ -2,6 +2,7 @@ import React from 'react'; import Link from 'next/link'; import classNames from 'classnames'; import usePageQuery from 'hooks/usePageQuery'; +import { safeDecodeURI } from 'lib/url'; import Icon from './Icon'; import External from 'assets/arrow-up-right-from-square.svg'; import styles from './FilterLink.module.css'; @@ -20,7 +21,7 @@ export default function FilterLink({ id, value, label, externalUrl }) { [styles.active]: active && selected, })} > - {label || value} + {safeDecodeURI(label || value)} {externalUrl && ( diff --git a/components/metrics/CountriesTable.js b/components/metrics/CountriesTable.js index 17d9127a..4a4c6132 100644 --- a/components/metrics/CountriesTable.js +++ b/components/metrics/CountriesTable.js @@ -1,14 +1,21 @@ import React from 'react'; import MetricsTable from './MetricsTable'; import { percentFilter } from 'lib/filters'; -import { FormattedMessage } from 'react-intl'; +import { useIntl, defineMessages } from 'react-intl'; import FilterLink from 'components/common/FilterLink'; import useCountryNames from 'hooks/useCountryNames'; import useLocale from 'hooks/useLocale'; +const messages = defineMessages({ + unknown: { id: 'label.unknown', defaultMessage: 'Unknown' }, + countries: { id: 'label.countries', defaultMessage: 'Countries' }, + visitors: { id: 'label.visitors', defaultMessage: 'Visitors' }, +}); + export default function CountriesTable({ websiteId, onDataLoad, ...props }) { const { locale } = useLocale(); const countryNames = useCountryNames(locale); + const { formatMessage } = useIntl(); function renderLink({ x: code }) { return ( @@ -16,9 +23,7 @@ export default function CountriesTable({ websiteId, onDataLoad, ...props }) { - } + label={countryNames[code] ?? formatMessage(messages.unknown)} /> ); @@ -27,9 +32,9 @@ export default function CountriesTable({ websiteId, onDataLoad, ...props }) { return ( } + title={formatMessage(messages.countries)} type="country" - metric={} + metric={formatMessage(messages.visitors)} websiteId={websiteId} onDataLoad={data => onDataLoad?.(percentFilter(data))} renderLabel={renderLink}