From 6385033246aa4032bbfc2d4d512ab37a3be0160a Mon Sep 17 00:00:00 2001 From: Aleh Zasypkin Date: Fri, 8 Dec 2023 02:03:12 +0100 Subject: [PATCH] feat(web-scraping): switch to the server-side web page content diff --- .../web_page_content_tracker_revision.tsx | 32 +++++++------------ .../web_page_content_trackers.tsx | 8 ++--- .../web_scraping/web_page_tracker_history.tsx | 14 ++------ 3 files changed, 17 insertions(+), 37 deletions(-) diff --git a/src/pages/workspace/utils/web_scraping/web_page_content_tracker_revision.tsx b/src/pages/workspace/utils/web_scraping/web_page_content_tracker_revision.tsx index ffd4430..9617c60 100644 --- a/src/pages/workspace/utils/web_scraping/web_page_content_tracker_revision.tsx +++ b/src/pages/workspace/utils/web_scraping/web_page_content_tracker_revision.tsx @@ -1,34 +1,26 @@ -import { EuiCodeBlock, useEuiTextDiff } from '@elastic/eui'; +import { EuiCodeBlock } from '@elastic/eui'; import type { WebPageContentRevision } from './web_page_data_revision'; export interface WebPageContentTrackerRevisionProps { revision: WebPageContentRevision; - previousRevision?: WebPageContentRevision; showDiff?: boolean; } -function getTextToRender(text: string): [string, string | undefined] { - const parsedData = JSON.parse(text) as string | object; - if (parsedData && typeof parsedData === 'object') { - return [JSON.stringify(parsedData, null, 2), 'json']; +export function WebPageContentTrackerRevision({ revision, showDiff }: WebPageContentTrackerRevisionProps) { + let dataToRender; + try { + dataToRender = JSON.parse(revision.data) as string | object; + if (typeof dataToRender !== 'string') { + dataToRender = JSON.stringify(dataToRender, null, 2); + } + } catch { + dataToRender = revision.data; } - return [parsedData, undefined]; -} - -export function WebPageContentTrackerRevision({ - revision, - previousRevision, - showDiff, -}: WebPageContentTrackerRevisionProps) { - const [afterText, language] = getTextToRender(revision.data); - const [beforeText] = previousRevision && showDiff ? getTextToRender(previousRevision.data) : [afterText]; - - const [textToRender] = useEuiTextDiff({ beforeText, afterText }); return ( - - {!showDiff || afterText === beforeText ? afterText : textToRender} + + {dataToRender} ); } diff --git a/src/pages/workspace/utils/web_scraping/web_page_content_trackers.tsx b/src/pages/workspace/utils/web_scraping/web_page_content_trackers.tsx index 2b7a15a..438d191 100644 --- a/src/pages/workspace/utils/web_scraping/web_page_content_trackers.tsx +++ b/src/pages/workspace/utils/web_scraping/web_page_content_trackers.tsx @@ -154,12 +154,8 @@ export default function WebPageContentTrackers() { } else { itemIdToExpandedRowMapValues[tracker.name] = ( - {(revision, previousRevision, showDiff) => ( - + {(revision, showDiff) => ( + )} ); diff --git a/src/pages/workspace/utils/web_scraping/web_page_tracker_history.tsx b/src/pages/workspace/utils/web_scraping/web_page_tracker_history.tsx index d25ee09..aede043 100644 --- a/src/pages/workspace/utils/web_scraping/web_page_tracker_history.tsx +++ b/src/pages/workspace/utils/web_scraping/web_page_tracker_history.tsx @@ -25,11 +25,7 @@ import { useWorkspaceContext } from '../../hooks'; export interface WebPageTrackerHistoryProps { tracker: WebPageTracker; kind: 'content' | 'resources'; - children: ( - revision: WebPageDataRevision, - previousRevision: WebPageDataRevision | undefined, - showDiff: boolean, - ) => ReactNode; + children: (revision: WebPageDataRevision, showDiff: boolean) => ReactNode; } export function WebPageTrackerHistory({ kind, tracker, children }: WebPageTrackerHistoryProps) { @@ -59,7 +55,7 @@ export function WebPageTrackerHistory({ kind, tracker, children }: WebPageTracke setRevisions({ status: 'succeeded', data: response.data }); // Reset revision index only if it's not set or doesn't exist in the new data. - if (revisionIndex === null || revisionIndex >= response.data.length) { + if (refresh || revisionIndex === null || revisionIndex >= response.data.length) { setRevisionIndex(response.data.length > 0 ? response.data.length - 1 : null); } }, @@ -167,11 +163,7 @@ export function WebPageTrackerHistory({ kind, tracker, children }: WebPageTracke /> ); } else if (revisionIndex !== null) { - history = children( - revisions.data[revisionIndex], - revisionIndex > 0 ? revisions.data[revisionIndex - 1] : undefined, - showDiff, - ); + history = children(revisions.data[revisionIndex], showDiff); } else { const updateButton = (