From 491c72db7916e2c14d116067a6a6be98c89e3a4d Mon Sep 17 00:00:00 2001 From: Jorrit Schippers Date: Mon, 28 Jul 2025 09:46:01 +0200 Subject: [PATCH 1/2] fix: warning about uncontrolled to controlled input --- .changeset/itchy-eggs-warn.md | 5 +++++ packages/addons/sitemap/admin/tabs/Settings/index.jsx | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 .changeset/itchy-eggs-warn.md diff --git a/.changeset/itchy-eggs-warn.md b/.changeset/itchy-eggs-warn.md new file mode 100644 index 00000000..21d693be --- /dev/null +++ b/.changeset/itchy-eggs-warn.md @@ -0,0 +1,5 @@ +--- +"webtools-addon-sitemap": patch +--- + +fix: warning about uncontrolled to controlled input diff --git a/packages/addons/sitemap/admin/tabs/Settings/index.jsx b/packages/addons/sitemap/admin/tabs/Settings/index.jsx index 2bd41071..f3b897c6 100644 --- a/packages/addons/sitemap/admin/tabs/Settings/index.jsx +++ b/packages/addons/sitemap/admin/tabs/Settings/index.jsx @@ -50,7 +50,7 @@ const Settings = () => { dispatch(onChangeSettings('hostname', e.target.value))} /> From cdbfa0c494fd89d1748fe96203c0e7b88ad9d09a Mon Sep 17 00:00:00 2001 From: Jorrit Schippers Date: Mon, 28 Jul 2025 09:47:13 +0200 Subject: [PATCH 2/2] fix: improve first use experience of sitemap addon * `sitemapInfo.size` is never 0 as it contains `hasPro` * Use react-intl formatter for date/time --- .changeset/twenty-wombats-burn.md | 5 ++ .../sitemap/admin/components/Info/index.jsx | 48 ++++++++----------- 2 files changed, 25 insertions(+), 28 deletions(-) create mode 100644 .changeset/twenty-wombats-burn.md diff --git a/.changeset/twenty-wombats-burn.md b/.changeset/twenty-wombats-burn.md new file mode 100644 index 00000000..6b061a03 --- /dev/null +++ b/.changeset/twenty-wombats-burn.md @@ -0,0 +1,5 @@ +--- +"webtools-addon-sitemap": patch +--- + +fix: improve first use experience of sitemap addon diff --git a/packages/addons/sitemap/admin/components/Info/index.jsx b/packages/addons/sitemap/admin/components/Info/index.jsx index c10261cf..251a65d3 100644 --- a/packages/addons/sitemap/admin/components/Info/index.jsx +++ b/packages/addons/sitemap/admin/components/Info/index.jsx @@ -1,38 +1,28 @@ import React from 'react'; import { Map } from 'immutable'; -import { useIntl } from 'react-intl'; -import { useSelector, useDispatch } from 'react-redux'; +import { FormattedDate, FormattedTime, useIntl } from 'react-intl'; +import { useDispatch, useSelector } from 'react-redux'; import { useSearchParams } from 'react-router-dom'; import { getFetchClient, useNotification } from '@strapi/strapi/admin'; -import { - Typography, - Box, - Button, - Link, - Flex, -} from '@strapi/design-system'; +import { Box, Button, Flex, Link, Typography } from '@strapi/design-system'; import { generateSitemap } from '../../state/actions/Sitemap'; -import { formatTime } from '../../helpers/timeFormat'; + +const emptyMap = new Map(); const Info = () => { - const hasHostname = useSelector((state) => state.getIn(['sitemap', 'initialData', 'hostname'], Map())); - const sitemapInfo = useSelector((state) => state.getIn(['sitemap', 'info'], Map())); + const hasHostname = useSelector((state) => state.getIn(['sitemap', 'initialData', 'hostname'], emptyMap)); + const sitemapInfo = useSelector((state) => state.getIn(['sitemap', 'info'], emptyMap)); let [, setSearchParams] = useSearchParams(); const dispatch = useDispatch(); const { toggleNotification } = useNotification(); const { get } = getFetchClient(); const { formatMessage } = useIntl(); - const updateDate = new Date(sitemapInfo.get('updateTime')); - - // Format month, day and time. - const month = updateDate.toLocaleString('en', { month: 'numeric' }); - const day = updateDate.toLocaleString('en', { day: 'numeric' }); - const year = updateDate.getFullYear().toString().slice(2); - const time = formatTime(updateDate, true); + const updateTime = sitemapInfo.get('updateTime') ? new Date(sitemapInfo.get('updateTime')) : undefined; + const numberOfSitemaps = sitemapInfo.get('sitemaps') ?? 0; const content = () => { if (!hasHostname) { @@ -60,7 +50,7 @@ const Info = () => { ); } - if (sitemapInfo.size === 0) { + if (!updateTime) { return (
@@ -70,10 +60,11 @@ const Info = () => { {formatMessage({ id: 'sitemap.Info.NoSitemap.Description', defaultMessage: 'Generate your first sitemap XML with the button below.' })} +
+
@@ -87,16 +78,17 @@ const Info = () => { {formatMessage({ id: 'sitemap.Info.SitemapIsPresent.Title', defaultMessage: 'Sitemap XML is present' })} +
{formatMessage({ id: 'sitemap.Info.SitemapIsPresent.LastUpdatedAt', defaultMessage: 'Last updated at:' })} - {`${month}/${day}/${year} - ${time}`} +
- {sitemapInfo.get('sitemaps') === 0 ? ( -
+ {numberOfSitemaps === 0 ? ( +
{formatMessage({ id: 'sitemap.Info.SitemapIsPresent.AmountOfURLs', defaultMessage: 'Amount of URLs:' })} @@ -105,16 +97,16 @@ const Info = () => {
) : ( -
+
- {formatMessage({ id: 'sitemap.Info.SitemapIsPresent.AmountOfSitemaps', defaultMessage: 'Amount of Sitemaps:' })} + {formatMessage({ id: 'sitemap.Info.SitemapIsPresent.AmountOfSitemaps', defaultMessage: 'Amount of sitemaps:' })} - {sitemapInfo.get('sitemaps')} + {numberOfSitemaps}
)} -
+