/* eslint-env browser */ import * as React from "react"; import Dropzone from "react-dropzone"; import styled from "styled-components"; import { Button } from "./editor-modal"; import { ImportData, parseImport } from "./lib/importer"; const ImportComponentContent = styled.div` position: relative; display: flex; flex-direction: column; width: 100%; pointer-events: auto; background-color: #fff; background-clip: padding-box; border-radius: 0.3rem; outline: 0; `; const ImportContent = styled.div` width: auto; height: auto; `; const ImportSelect = styled.div` display: flex; padding: 0.75rem 0.75rem 0rem 0.75rem; `; const ImportArea = styled.div` box-sizing: border-box; display: block; width: auto; height: auto; min-height: 300px; padding: 0rem 1rem; `; const ImportTextArea = styled.textarea` padding: 0px; width: 100%; resize: vertical; min-height: 250px; max-height: 450px; border: 1px solid #386fa4; border-radius: 0.3rem; font-family: -apple-system, system-ui, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 1rem; font-weight: 400; `; const ImportDropArea = styled.div` padding: 0px; width: 100%; min-height: 250px; height: 100%; border: 1px solid #386fa4; border-radius: 0.3rem; fontfamily: -apple-system, system-ui, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans" sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 1rem; font-weight: 400; `; const ImportInfo = styled.div` display: block; padding: 0rem 1rem; `; const FooterRow = styled.div` display: flex; justify-content: flex-end; padding: 0.75rem 0.75rem; border-top: 1px solid #386fa4; `; export type ImportComponentProps = { onImport: (arg0: any) => unknown; onValidate?: (arg0: any) => unknown; onCancel: () => unknown; additionalInputs?: React.ReactNode; }; export function ImportComponent(props: ImportComponentProps) { const [isImportText, setIsImportText] = React.useState(true); const [text, setText] = React.useState(""); const [importFile, setImportFile] = React.useState(null); const [parseResult, setParseResult] = React.useState({ valid: false, validationErrors: [] }); React.useEffect(() => { async function parseData() { if (isImportText) { setParseResult(await parseImport(text)); } else if (importFile !== null) { setParseResult(await parseImport(importFile)); } } parseData(); }, [isImportText, text, importFile]); function flush() { setImportFile(null); setText(""); props.onCancel(); } function isDataSet() { return (isImportText && text) || (!isImportText && importFile); } // Check validity (and call custom validation callback if present) const valid = isDataSet() && parseResult.valid && (!props.onValidate || props.onValidate(parseResult.features)); return ( {isImportText && ( setText(event.target.value)} value={text} /> )} {!isImportText && ( setImportFile(importFiles[0])}> {({ getRootProps, getInputProps }) => ( {importFile ? (

{!parseResult.valid ? "Ongeldig" : ""} Geselecteerd bestand: {importFile.name}.
Sleep en drop of klik nogmaals om het bestand te wijzigen.

) : (

Sleep uw bestand hierheen, of klik om een bestand te selecteren.

)}
)}
)} {isDataSet() && !parseResult.valid && // @ts-ignore parseResult.validationErrors.map((err, i) =>
{err}
)}
Ondersteunde formaten:
{props.additionalInputs || null}
); }