From 2a12e7d0fbfb9e2491f5a7966cd5661f0cd2070c Mon Sep 17 00:00:00 2001 From: Rye Pasaporte Date: Thu, 27 Feb 2025 12:42:49 +0100 Subject: [PATCH 01/10] fix format error Signed-off-by: Rye Pasaporte --- .../src/components/FailedEntities.tsx | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/plugins/catalog-unprocessed-entities/src/components/FailedEntities.tsx b/plugins/catalog-unprocessed-entities/src/components/FailedEntities.tsx index 65e6eb731e..0e62751566 100644 --- a/plugins/catalog-unprocessed-entities/src/components/FailedEntities.tsx +++ b/plugins/catalog-unprocessed-entities/src/components/FailedEntities.tsx @@ -93,17 +93,11 @@ const RenderErrorContext = ({ * easily understand the times. */ const convertTimeToLocalTimezone = (strDateTime: string | Date) => { - const dateTime = DateTime.fromFormat( - strDateTime.toLocaleString(), - 'yyyy-MM-dd hh:mm:ss', - { - zone: 'UTC', - }, - ); + const dateTime = DateTime.fromISO(strDateTime.toString(), { zone: 'UTC' }); const dateTimeLocalTz = dateTime.setZone(DateTime.local().zoneName); - return dateTimeLocalTz.toFormat('yyyy-MM-dd hh:mm:ss ZZZZ'); + return dateTimeLocalTz.toFormat('M/d/yyyy, h:mm:ss a'); }; export const FailedEntities = () => { From 2479827e3baade25f95196fb5c355071125b73e4 Mon Sep 17 00:00:00 2001 From: Rye Pasaporte Date: Thu, 27 Feb 2025 15:59:14 +0100 Subject: [PATCH 02/10] add changeset Signed-off-by: Rye Pasaporte --- .changeset/sweet-maps-invent.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/sweet-maps-invent.md diff --git a/.changeset/sweet-maps-invent.md b/.changeset/sweet-maps-invent.md new file mode 100644 index 0000000000..81c36352b8 --- /dev/null +++ b/.changeset/sweet-maps-invent.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-unprocessed-entities': patch +--- + +Fixed the `convertTimeToLocalTimezone` function in the FailedEntities compoent to correctly parse ISO 8601 date strings and format them as `M/d/yyyy, h:mm:ss a`. From e859147fb9f2f1ca300e35f27601e7c15a404ef6 Mon Sep 17 00:00:00 2001 From: Rye Pasaporte Date: Thu, 27 Feb 2025 16:15:00 +0100 Subject: [PATCH 03/10] use toLocaleString to use user locale settings Signed-off-by: Rye Pasaporte --- .../src/components/FailedEntities.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/catalog-unprocessed-entities/src/components/FailedEntities.tsx b/plugins/catalog-unprocessed-entities/src/components/FailedEntities.tsx index 0e62751566..5d615ebf4b 100644 --- a/plugins/catalog-unprocessed-entities/src/components/FailedEntities.tsx +++ b/plugins/catalog-unprocessed-entities/src/components/FailedEntities.tsx @@ -93,7 +93,9 @@ const RenderErrorContext = ({ * easily understand the times. */ const convertTimeToLocalTimezone = (strDateTime: string | Date) => { - const dateTime = DateTime.fromISO(strDateTime.toString(), { zone: 'UTC' }); + const dateTime = DateTime.fromISO(strDateTime.toLocaleString(), { + zone: 'UTC', + }); const dateTimeLocalTz = dateTime.setZone(DateTime.local().zoneName); From ed4917b9ad0eec56756e8d0a17e601fc0663e015 Mon Sep 17 00:00:00 2001 From: Rye Pasaporte Date: Thu, 27 Feb 2025 16:36:04 +0100 Subject: [PATCH 04/10] typo fix Signed-off-by: Rye Pasaporte --- .changeset/sweet-maps-invent.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/sweet-maps-invent.md b/.changeset/sweet-maps-invent.md index 81c36352b8..0c2f0b8035 100644 --- a/.changeset/sweet-maps-invent.md +++ b/.changeset/sweet-maps-invent.md @@ -2,4 +2,4 @@ '@backstage/plugin-catalog-unprocessed-entities': patch --- -Fixed the `convertTimeToLocalTimezone` function in the FailedEntities compoent to correctly parse ISO 8601 date strings and format them as `M/d/yyyy, h:mm:ss a`. +Fixed the `convertTimeToLocalTimezone` function in the FailedEntities component to correctly parse ISO 8601 date strings and format them as `M/d/yyyy, h:mm:ss a`. From 9f74383f9cdf9a2bc40c96af6fe8653ac4793b81 Mon Sep 17 00:00:00 2001 From: Rye Pasaporte Date: Fri, 28 Feb 2025 11:42:31 +0100 Subject: [PATCH 05/10] revert format to work in europe Signed-off-by: Rye Pasaporte --- .changeset/sweet-maps-invent.md | 2 +- .../src/components/FailedEntities.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.changeset/sweet-maps-invent.md b/.changeset/sweet-maps-invent.md index 0c2f0b8035..d0da1e6c48 100644 --- a/.changeset/sweet-maps-invent.md +++ b/.changeset/sweet-maps-invent.md @@ -2,4 +2,4 @@ '@backstage/plugin-catalog-unprocessed-entities': patch --- -Fixed the `convertTimeToLocalTimezone` function in the FailedEntities component to correctly parse ISO 8601 date strings and format them as `M/d/yyyy, h:mm:ss a`. +Fixed the `convertTimeToLocalTimezone` function in the FailedEntities component to correctly parse ISO 8601 date strings. diff --git a/plugins/catalog-unprocessed-entities/src/components/FailedEntities.tsx b/plugins/catalog-unprocessed-entities/src/components/FailedEntities.tsx index 5d615ebf4b..5ea16ba02f 100644 --- a/plugins/catalog-unprocessed-entities/src/components/FailedEntities.tsx +++ b/plugins/catalog-unprocessed-entities/src/components/FailedEntities.tsx @@ -99,7 +99,7 @@ const convertTimeToLocalTimezone = (strDateTime: string | Date) => { const dateTimeLocalTz = dateTime.setZone(DateTime.local().zoneName); - return dateTimeLocalTz.toFormat('M/d/yyyy, h:mm:ss a'); + return dateTimeLocalTz.toFormat('yyyy-MM-dd hh:mm:ss ZZZZ'); }; export const FailedEntities = () => { From 97abc96bb89eeae7ee6cf834e475aa027d505132 Mon Sep 17 00:00:00 2001 From: Rye Pasaporte Date: Fri, 28 Feb 2025 12:52:45 +0100 Subject: [PATCH 06/10] update function to use local timezone and use original format Signed-off-by: Rye Pasaporte --- .changeset/sweet-maps-invent.md | 2 +- .../src/components/FailedEntities.tsx | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/.changeset/sweet-maps-invent.md b/.changeset/sweet-maps-invent.md index d0da1e6c48..390ce57dc7 100644 --- a/.changeset/sweet-maps-invent.md +++ b/.changeset/sweet-maps-invent.md @@ -2,4 +2,4 @@ '@backstage/plugin-catalog-unprocessed-entities': patch --- -Fixed the `convertTimeToLocalTimezone` function in the FailedEntities component to correctly parse ISO 8601 date strings. +Fixed the `convertTimeToLocalTimezone` function in the FailedEntities component to correctly parse ISO 8601 date strings and set the timezone to the current local timezone. diff --git a/plugins/catalog-unprocessed-entities/src/components/FailedEntities.tsx b/plugins/catalog-unprocessed-entities/src/components/FailedEntities.tsx index 5ea16ba02f..0e13869528 100644 --- a/plugins/catalog-unprocessed-entities/src/components/FailedEntities.tsx +++ b/plugins/catalog-unprocessed-entities/src/components/FailedEntities.tsx @@ -94,12 +94,10 @@ const RenderErrorContext = ({ */ const convertTimeToLocalTimezone = (strDateTime: string | Date) => { const dateTime = DateTime.fromISO(strDateTime.toLocaleString(), { - zone: 'UTC', + zone: DateTime.local().zoneName, }); - const dateTimeLocalTz = dateTime.setZone(DateTime.local().zoneName); - - return dateTimeLocalTz.toFormat('yyyy-MM-dd hh:mm:ss ZZZZ'); + return dateTime.toFormat('yyyy-MM-dd hh:mm:ss ZZZZ'); }; export const FailedEntities = () => { From 4cbc613848eb4e9095976871c2651317eedc6b76 Mon Sep 17 00:00:00 2001 From: Rye Pasaporte Date: Fri, 21 Mar 2025 10:25:31 +0100 Subject: [PATCH 07/10] add initial test Signed-off-by: Rye Pasaporte --- .../src/plugin.test.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/plugins/catalog-unprocessed-entities/src/plugin.test.ts b/plugins/catalog-unprocessed-entities/src/plugin.test.ts index add3d677f0..7012f52dd9 100644 --- a/plugins/catalog-unprocessed-entities/src/plugin.test.ts +++ b/plugins/catalog-unprocessed-entities/src/plugin.test.ts @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import { convertTimeToLocalTimezone } from './components/FailedEntities'; import { catalogUnprocessedEntitiesPlugin } from './plugin'; describe('catalog-unprocessed-entities', () => { @@ -20,3 +21,17 @@ describe('catalog-unprocessed-entities', () => { expect(catalogUnprocessedEntitiesPlugin).toBeDefined(); }); }); + +describe('components/FailedEntities/convertTimeToLocalTimezone', () => { + it('should correctly a UTC ISO string to local time', () => { + const utcTime = '2024-09-03T08:15:08.088Z'; + const localTime = convertTimeToLocalTimezone(utcTime); + expect(localTime).toBe('2024-09-03 08:15:08 UTC'); + }); + + it('should correctly convert a UTC Date object to local time', () => { + const utcTime = new Date('2024-09-03T08:15:08.088Z'); + const localTime = convertTimeToLocalTimezone(utcTime); + expect(localTime).toBe('2024-09-03 08:15:08 UTC'); + }); +}); From 8a84064b851388a27c34e3092e3f8ea9d261afd4 Mon Sep 17 00:00:00 2001 From: Rye Pasaporte Date: Fri, 21 Mar 2025 10:27:07 +0100 Subject: [PATCH 08/10] typo Signed-off-by: Rye Pasaporte --- .../src/components/FailedEntities.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/catalog-unprocessed-entities/src/components/FailedEntities.tsx b/plugins/catalog-unprocessed-entities/src/components/FailedEntities.tsx index 0e13869528..0f553986fc 100644 --- a/plugins/catalog-unprocessed-entities/src/components/FailedEntities.tsx +++ b/plugins/catalog-unprocessed-entities/src/components/FailedEntities.tsx @@ -92,7 +92,7 @@ const RenderErrorContext = ({ * Converts input datetime which lacks timezone info into user's local time so that they can * easily understand the times. */ -const convertTimeToLocalTimezone = (strDateTime: string | Date) => { +export const convertTimeToLocalTimezone = (strDateTime: string | Date) => { const dateTime = DateTime.fromISO(strDateTime.toLocaleString(), { zone: DateTime.local().zoneName, }); From 0a96d69434b2bf3f3b1c3009a7de083ce865e868 Mon Sep 17 00:00:00 2001 From: Rye Pasaporte Date: Fri, 21 Mar 2025 10:43:16 +0100 Subject: [PATCH 09/10] update function to contain only reading string rather than reading Date Signed-off-by: Rye Pasaporte --- .../src/components/FailedEntities.tsx | 2 +- .../src/plugin.test.ts | 14 ++++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/plugins/catalog-unprocessed-entities/src/components/FailedEntities.tsx b/plugins/catalog-unprocessed-entities/src/components/FailedEntities.tsx index 0f553986fc..7120728050 100644 --- a/plugins/catalog-unprocessed-entities/src/components/FailedEntities.tsx +++ b/plugins/catalog-unprocessed-entities/src/components/FailedEntities.tsx @@ -92,7 +92,7 @@ const RenderErrorContext = ({ * Converts input datetime which lacks timezone info into user's local time so that they can * easily understand the times. */ -export const convertTimeToLocalTimezone = (strDateTime: string | Date) => { +export const convertTimeToLocalTimezone = (strDateTime: string) => { const dateTime = DateTime.fromISO(strDateTime.toLocaleString(), { zone: DateTime.local().zoneName, }); diff --git a/plugins/catalog-unprocessed-entities/src/plugin.test.ts b/plugins/catalog-unprocessed-entities/src/plugin.test.ts index 7012f52dd9..8201dd97a8 100644 --- a/plugins/catalog-unprocessed-entities/src/plugin.test.ts +++ b/plugins/catalog-unprocessed-entities/src/plugin.test.ts @@ -29,9 +29,15 @@ describe('components/FailedEntities/convertTimeToLocalTimezone', () => { expect(localTime).toBe('2024-09-03 08:15:08 UTC'); }); - it('should correctly convert a UTC Date object to local time', () => { - const utcTime = new Date('2024-09-03T08:15:08.088Z'); - const localTime = convertTimeToLocalTimezone(utcTime); - expect(localTime).toBe('2024-09-03 08:15:08 UTC'); + it('should return "Invalid Date" for an invalid date string', () => { + const invalidTime = 'invalid-date-string'; + const localTime = convertTimeToLocalTimezone(invalidTime); + expect(localTime).toBe('Invalid DateTime'); + }); + + it('should handle empty string input', () => { + const emptyString = ''; + const localTime = convertTimeToLocalTimezone(emptyString); + expect(localTime).toBe('Invalid DateTime'); }); }); From 83e9e1ecfb164b4969d29c05ce54d3ff1aec4ca0 Mon Sep 17 00:00:00 2001 From: Rye Pasaporte Date: Fri, 21 Mar 2025 11:03:06 +0100 Subject: [PATCH 10/10] revert accepting Date Signed-off-by: Rye Pasaporte --- .../src/components/FailedEntities.tsx | 9 ++++++--- plugins/catalog-unprocessed-entities/src/plugin.test.ts | 6 ++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/plugins/catalog-unprocessed-entities/src/components/FailedEntities.tsx b/plugins/catalog-unprocessed-entities/src/components/FailedEntities.tsx index 7120728050..0a8e63bd03 100644 --- a/plugins/catalog-unprocessed-entities/src/components/FailedEntities.tsx +++ b/plugins/catalog-unprocessed-entities/src/components/FailedEntities.tsx @@ -92,12 +92,15 @@ const RenderErrorContext = ({ * Converts input datetime which lacks timezone info into user's local time so that they can * easily understand the times. */ -export const convertTimeToLocalTimezone = (strDateTime: string) => { - const dateTime = DateTime.fromISO(strDateTime.toLocaleString(), { +export const convertTimeToLocalTimezone = (dateTime: string | Date) => { + const isoDateTime = + typeof dateTime === 'string' ? dateTime : dateTime.toISOString(); + + const strDateTime = DateTime.fromISO(isoDateTime, { zone: DateTime.local().zoneName, }); - return dateTime.toFormat('yyyy-MM-dd hh:mm:ss ZZZZ'); + return strDateTime.toFormat('yyyy-MM-dd hh:mm:ss ZZZZ'); }; export const FailedEntities = () => { diff --git a/plugins/catalog-unprocessed-entities/src/plugin.test.ts b/plugins/catalog-unprocessed-entities/src/plugin.test.ts index 8201dd97a8..ebeb24f4ab 100644 --- a/plugins/catalog-unprocessed-entities/src/plugin.test.ts +++ b/plugins/catalog-unprocessed-entities/src/plugin.test.ts @@ -29,6 +29,12 @@ describe('components/FailedEntities/convertTimeToLocalTimezone', () => { expect(localTime).toBe('2024-09-03 08:15:08 UTC'); }); + it('should correctly convert a UTC Date object to local time', () => { + const utcTime = new Date('2024-09-03T08:15:08.088Z'); + const localTime = convertTimeToLocalTimezone(utcTime); + expect(localTime).toBe('2024-09-03 08:15:08 UTC'); + }); + it('should return "Invalid Date" for an invalid date string', () => { const invalidTime = 'invalid-date-string'; const localTime = convertTimeToLocalTimezone(invalidTime);