import * as React from "react"; import * as Constants from "~/common/constants"; import * as Strings from "~/common/strings"; import * as System from "~/components/system"; import * as Validations from "~/common/validations"; import * as SVG from "~/common/svg"; import { css } from "@emotion/react"; import { DataMeterBar } from "~/components/core/DataMeter"; import { dispatchCustomEvent } from "~/common/custom-events"; const STYLES_FILE_HIDDEN = css` height: 1px; width: 1px; opacity: 0; visibility: hidden; position: fixed; top: -1px; left: -1px; `; const STYLES_FOCUS = css` font-size: ${Constants.typescale.lvl1}; font-family: ${Constants.font.medium}; overflow-wrap: break-word; width: 100%; strong { font-family: ${Constants.font.semiBold}; font-weight: 400; } `; const STYLES_SUBTEXT = css` margin-top: 8px; font-size: 12px; `; const STYLES_ITEM = css` margin-top: 16px; `; const STYLES_IMAGE_PREVIEW = css` display: block; width: 100%; margin-top: 48px; `; const STYLES_STRONG = css` display: block; margin: 16px 0 4px 0; font-weight: 400; font-family: ${Constants.font.medium}; font-size: 0.8rem; oveflow-wrap: break-word; `; const STYLES_PERFORMANCE = css` font-family: ${Constants.font.code}; font-size: 12px; display: block; margin: 0 0 8px 0; `; const STYLES_ICONS = css` display: flex; flex-direction: row; justify-content: center; margin: 64px 0; `; export default class SidebarAddFileToBucket extends React.Component { _handleUpload = async (e) => { e.persist(); let files = []; let fileLoading = {}; for (let i = 0; i < e.target.files.length; i++) { let file = e.target.files[i]; if (!file) { alert("We could not find any files to upload."); continue; } const isAllowed = Validations.isFileTypeAllowed(file.type); if (!isAllowed) { alert( `We currently do not accept ${file.type} yet but may in the future.` ); continue; } files.push(file); fileLoading[`${file.lastModified}-${file.name}`] = { name: file.name, loaded: 0, total: file.size, }; } if (!files.length) { alert("We could not find any files to upload."); return this.props.onRegisterFileLoading({ fileLoading: null }); } this.props.onRegisterFileLoading({ fileLoading }); for (let i = 0; i < files.length; i++) { const file = files[i]; const slate = this.props.data && this.props.data.id ? { id: this.props.data.id } : null; const response = await this.props.onUploadFile({ file, slate, }); if (!response) { alert( "Something went wrong with saving your new file. Please refresh your browser." ); continue; } if (response.error) { alert( "Something went wrong with saving your new file. Please refresh your browser." ); continue; } } await this.props.onRehydrate({ resetFiles: true }); dispatchCustomEvent({ name: "remote-update-slate-screen", detail: {}, }); }; render() { return ( Upload Data
Click below or drop a file anywhere on the page to upload a file {this.props.data && (this.props.data.slatename || (this.props.data.data && this.props.data.data.name)) ? ( {" "} to{" "} {this.props.data.data.name || this.props.data.slatename} ) : ( "" )} . {!this.props.fileLoading ? ( Add file ) : null}
{this.props.fileLoading ? Object.keys(this.props.fileLoading).map((timestamp) => { const p = this.props.fileLoading[timestamp]; return ( {p.name} {Strings.bytesToSize(p.loaded)} /{" "} {Strings.bytesToSize(p.total)} ); }) : null}
); } }