* Copyright (C) 2015 Red Hat, Inc.
* SPDX-License-Identifier: LGPL-2.1-or-later
*/
import '../lib/patternfly/patternfly-6-cockpit.scss';
import 'polyfills';
import 'cockpit-dark-theme';
import cockpit from "cockpit";
import React from "react";
import { createRoot } from 'react-dom/client';
import { ExclamationCircleIcon } from "@patternfly/react-icons";
import { EmptyStatePanel } from "cockpit-components-empty-state.jsx";
import { PlotState } from "plot.js";
import client from "./client";
import { update_plot_state } from "./plot.jsx";
import { StoragePage } from "./pages.jsx";
import "./storage.scss";
const _ = cockpit.gettext;
class Application extends React.Component {
constructor() {
super();
this.state = { inited: false, slow_init: false, path: cockpit.location.path };
this.plot_state = new PlotState();
this.on_client_changed = () => { if (!client.busy) this.setState({}); };
this.on_navigate = () => { this.setState({ path: cockpit.location.path }) };
}
componentDidMount() {
client.addEventListener("changed", this.on_client_changed);
cockpit.addEventListener("locationchanged", this.on_navigate);
client.init(() => { this.setState({ inited: true }) });
window.setTimeout(() => { if (!this.state.inited) this.setState({ slow_init: true }); }, 1000);
}
componentWillUnmount() {
client.removeEventListener("changed", this.on_client_changed);
cockpit.removeEventListener("locationchanged", this.on_navigate);
}
render() {
const { inited, slow_init, path } = this.state;
if (!inited) {
if (slow_init)
return <EmptyStatePanel loading title={ _("Loading...") } />;
else
return null;
}
if (client.features === false || client.younger_than("2.6"))
return <EmptyStatePanel icon={ExclamationCircleIcon} title={ _("Storage can not be managed on this system.") } />;
update_plot_state(this.plot_state, client);
return <StoragePage location={path} plot_state={this.plot_state} />;
}
}
function init() {
const root = createRoot(document.getElementById('storage'));
root.render(<Application />);
document.body.removeAttribute("hidden");
window.addEventListener('beforeunload', event => {
if (client.busy) {
event.preventDefault();
event.returnValue = '';
return '';
}
});
}
document.addEventListener("DOMContentLoaded", init);