diff --git a/web/src/components/apps/AppVersionHistory.tsx b/web/src/components/apps/AppVersionHistory.tsx index 2f170331a6..b37215a2a8 100644 --- a/web/src/components/apps/AppVersionHistory.tsx +++ b/web/src/components/apps/AppVersionHistory.tsx @@ -2,13 +2,11 @@ import { ChangeEvent, Component, Fragment, createRef } from "react"; import { Link } from "react-router-dom"; import dayjs from "dayjs"; import relativeTime from "dayjs/plugin/relativeTime"; -import Modal from "react-modal"; import find from "lodash/find"; import isEmpty from "lodash/isEmpty"; import get from "lodash/get"; import MountAware from "../shared/MountAware"; import Loader from "../shared/Loader"; -import MarkdownRenderer from "@src/components/shared/MarkdownRenderer"; import VersionDiff from "@src/features/VersionDiff/VersionDiff"; import ShowDetailsModal from "@src/components/modals/ShowDetailsModal"; import ShowLogsModal from "@src/components/modals/ShowLogsModal"; @@ -44,6 +42,7 @@ import ConfirmDeploymentModal from "@components/modals/ConfirmDeploymentModal"; import DisplayKotsUpdateModal from "@components/modals/DisplayKotsUpdateModal"; import NoChangesModal from "@components/modals/NoChangesModal"; import UpgradeServiceModal from "@components/modals/UpgradeServiceModal"; +import AvailableUpdatesComponent from "./AvailableUpdatesComponent"; dayjs.extend(relativeTime); @@ -1031,6 +1030,7 @@ class AppVersionHistory extends Component { this.setState({ shouldShowUpgradeServiceModal: false, upgradeService: { + ...this.state.upgradeService, isLoading: false, error: response.currentMessage, }, @@ -1546,95 +1546,6 @@ class AppVersionHistory extends Component { this._mounted = true; }; - renderAvailableUpdates = (updates: AvailableUpdate[]) => { - return ( - <> -

- Available Updates -

-
- {updates.map((update, index) => ( -
-
-
-
-

- {update.versionLabel} -

- {update.isRequired && ( - - {" "} - Required{" "} - - )} -
- {update.upstreamReleasedAt && ( -

- {" "} - Released{" "} - - {Utilities.dateFormat( - update.upstreamReleasedAt, - "MM/DD/YY @ hh:mm a z" - )} - -

- )} -
-
- {update?.releaseNotes && ( - <> - - this.showReleaseNotes(update?.releaseNotes) - } - data-tip="View release notes" - className="u-marginRight--5 clickable" - /> - - - )} - - -
-
- {this.state.upgradeService?.error && - this.state.upgradeService?.versionLabel === - update.versionLabel && ( -
- - {this.state.upgradeService.error} - -
- )} -
- ))} -
- - ); - }; - renderAppVersionHistoryRow = (version: Version, index?: number) => { if ( !version || @@ -2175,9 +2086,14 @@ class AppVersionHistory extends Component { this.state.availableUpdates.length > 0 && this.props.outletContext.isEmbeddedCluster && (
- {this.renderAvailableUpdates( - this.state.availableUpdates - )} +
) )} diff --git a/web/src/components/apps/AvailableUpdatesComponent.tsx b/web/src/components/apps/AvailableUpdatesComponent.tsx new file mode 100644 index 0000000000..4867a8bbdc --- /dev/null +++ b/web/src/components/apps/AvailableUpdatesComponent.tsx @@ -0,0 +1,103 @@ +import Icon from "@components/Icon"; +import { Utilities } from "@src/utilities/utilities"; +import { AvailableUpdate } from "@types"; +import ReactTooltip from "react-tooltip"; + +const AvailableUpdatesComponent = ({ + updates, + showReleaseNotes, + upgradeService, + startUpgraderService, +}: { + updates: AvailableUpdate[]; + showReleaseNotes: (releaseNotes: string) => void; + upgradeService: { + versionLabel?: string; + isLoading?: boolean; + error?: string; + } | null; + startUpgraderService: (version: AvailableUpdate) => void; +}) => { + return ( + <> +

+ Available Updates +

+
+ {updates.map((update, index) => ( +
+
+
+
+

+ {update.versionLabel} +

+ {update.isRequired && ( + + {" "} + Required{" "} + + )} +
+ {update.upstreamReleasedAt && ( +

+ {" "} + Released{" "} + + {Utilities.dateFormat( + update.upstreamReleasedAt, + "MM/DD/YY @ hh:mm a z" + )} + +

+ )} +
+
+ {update?.releaseNotes && ( + <> + showReleaseNotes(update?.releaseNotes)} + data-tip="View release notes" + className="u-marginRight--5 clickable" + /> + + + )} + + +
+
+ {upgradeService?.error && + upgradeService?.versionLabel === update.versionLabel && ( +
+ + {upgradeService.error} + +
+ )} +
+ ))} +
+ + ); +}; + +export default AvailableUpdatesComponent; diff --git a/web/src/components/modals/UpgradeServiceModal.tsx b/web/src/components/modals/UpgradeServiceModal.tsx index 1325f58515..d8f583d364 100644 --- a/web/src/components/modals/UpgradeServiceModal.tsx +++ b/web/src/components/modals/UpgradeServiceModal.tsx @@ -13,7 +13,7 @@ const UpgradeServiceModal = ({ return ( onRequestClose()} contentLabel="KOTS Upgrade Service Modal" ariaHideApp={false} className="Modal UpgradeServiceModal" @@ -28,7 +28,7 @@ const UpgradeServiceModal = ({ }} className="tw-pt-4 tw-top-0 tw-right-6 tw-absolute tw-overflow-auto" > - + onRequestClose()} size={15} /> {isStartingUpgradeService ? (