/* * Copyright (C) 2022 Red Hat, Inc. * SPDX-License-Identifier: LGPL-2.1-or-later */ import cockpit from "cockpit"; import React, { cloneElement, useContext, useEffect, useRef, useState } from "react"; import { Alert } from "@patternfly/react-core/dist/esm/components/Alert/index.js"; import { Title } from "@patternfly/react-core/dist/esm/components/Title/index.js"; import { Stack } from "@patternfly/react-core/dist/esm/layouts/Stack/index.js"; import { error } from "../helpers/log.js"; import { OsReleaseContext, PageContext } from "../contexts/Common.jsx"; const _ = cockpit.gettext; export const AnacondaPage = ({ children, isFirstScreen, showStorage, step, title, usePageInit, }) => { const { isFormDisabled = false, setIsFormDisabled, stepNotification, } = useContext(PageContext) ?? {}; const [showPage, setShowPage] = useState(!isFormDisabled); const showPageRef = useRef(showPage); // If there is usePageInit custom hook for the page, call it usePageInit?.(); // Otherwise just set the form to enabled so that the user can interact with it useEffect(() => { if (!usePageInit) { setIsFormDisabled(false); } }, [setIsFormDisabled, usePageInit]); useEffect(() => { if (!stepNotification?.message) { return; } error(stepNotification?.step, stepNotification?.title, stepNotification?.message); }, [stepNotification?.step, stepNotification?.message, stepNotification?.title]); useEffect(() => { if (!isFormDisabled && !showPageRef.current) { showPageRef.current = true; setShowPage(true); } }, [isFormDisabled]); // Don't try to render anything while cockpit storage mode is active // as background API calls might cause UnknownDeviceError if (!showPage || showStorage) { return null; } const titleElem = isFirstScreen ? : title; return ( {titleElem && {titleElem}} {stepNotification?.step === step && {stepNotification.title && stepNotification.message} } {cloneElement(children, { idPrefix: step })} ); }; const InitialPageTitle = () => { const osRelease = useContext(OsReleaseContext); return cockpit.format(_("Welcome. Let's install $0 now."), osRelease.NAME); };