import * as React from "react"; import * as System from "~/components/system"; import * as Constants from "~/common/constants"; import * as Actions from "~/common/actions"; import * as Strings from "~/common/strings"; import { css } from "@emotion/react"; import { LoaderSpinner } from "~/components/system/components/Loaders"; import { SecondaryTabGroup } from "~/components/core/TabGroup"; import ScenePage from "~/components/core/ScenePage"; import ScenePageHeader from "~/components/core/ScenePageHeader"; import SceneSettings from "~/scenes/SceneSettings"; import SceneDeals from "~/scenes/SceneDeals"; import SceneWallet from "~/scenes/SceneWallet"; import SceneSentinel from "~/scenes/SceneSentinel"; import SceneMiners from "~/scenes/SceneMiners"; const STYLES_SPINNER_CONTAINER = css` width: 100%; height: 40vh; display: flex; align-items: center; justify-content: center; `; let mounted = false; export default class SceneArchive extends React.Component { state = { deals: [], dealsLoaded: false, tab: 0, networkViewer: null, allow_filecoin_directory_listing: this.props.viewer.allow_filecoin_directory_listing, allow_automatic_data_storage: this.props.viewer.allow_automatic_data_storage, allow_encrypted_data_storage: this.props.viewer.allow_encrypted_data_storage, }; async componentDidMount() { if (mounted) { return null; } mounted = true; let networkViewer; try { const response = await fetch("/api/network"); const json = await response.json(); networkViewer = json.data; } catch (e) {} this.setState({ networkViewer, }); let deals = []; try { const response = await fetch("/api/network-deals"); const json = await response.json(); deals = json.data.deals; } catch (e) {} if (!deals || !deals.length) { this.setState({ dealsLoaded: true }); } this.setState({ deals, dealsLoaded: true }); let routes; try { const response = await fetch("https://sentinel.slate.host/api"); const json = await response.json(); routes = json.data; } catch (e) {} this.setState({ routes }); let miners = []; try { const response = await fetch("https://sentinel.slate.host/api/mapped-static-global-miners"); const json = await response.json(); const sources = json.data; sources.forEach((group) => { miners = [...group.minerAddresses, ...miners]; }); } catch (e) {} this.setState({ miners }); } _handleCheckboxChange = (e) => { this.setState({ [e.target.name]: e.target.value }); }; _handleSaveFilecoin = async (e) => { this.setState({ changingFilecoin: true }); await Actions.updateViewer({ data: { allow_filecoin_directory_listing: this.state.allow_filecoin_directory_listing, allow_automatic_data_storage: this.state.allow_automatic_data_storage, allow_encrypted_data_storage: this.state.allow_encrypted_data_storage, }, }); this.setState({ changingFilecoin: false }); }; componentWillUnmount() { mounted = false; } render() { return ( {/* Use this section to archive all of your data on to Filecoin through a storage deal. You must have at last 100MB stored to make an archive storage deal.
*/}
this.setState({ tab: value })} /> {this.state.networkViewer ? ( {this.state.tab === 0 ? ( Archive all of your data onto the Filecoin Network with a storage deal using your default settings.
this.props.onAction({ type: "SIDEBAR", value: "SIDEBAR_FILECOIN_ARCHIVE", }) } > Archive your data Show your successful deals on a directory page where others can retrieve them. Allow Slate to make archive storage deals on your behalf to the Filecoin Network. You will get a receipt in the Filecoin section. Force encryption on archive storage deals (only you can see retrieved data from the Filecoin network).
Save archiving settings


) : null} {this.state.tab === 1 ? (

{this.state.dealsLoaded ? ( ) : (
)}
) : null} {this.state.tab === 2 ? ( {this.state.routes ? ( ) : (
)}
) : null} {this.state.tab === 3 ? ( {this.state.miners ? ( ) : (
)}
) : null}
) : (
)}
); } }