UNPKG

@uiw/react-xml-reader

Version:

React component that handles xml file input and its parsing.

50 lines 1.74 kB
import _extends from "@babel/runtime/helpers/extends"; import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/objectWithoutPropertiesLoose"; var _excluded = ["accept", "encoding", "onError", "parserOptions", "onFileLoaded", "onChange", "strict"]; import { forwardRef } from 'react'; import { XMLParser } from 'fast-xml-parser'; import { jsx as _jsx } from "react/jsx-runtime"; var XMLReader = /*#__PURE__*/forwardRef((props, ref) => { var { accept = '.xml, text/xml', encoding = 'UTF-8', onError = () => {}, parserOptions = {}, onFileLoaded, onChange, strict = false } = props, reset = _objectWithoutPropertiesLoose(props, _excluded); var handleChangeFile = event => { onChange && onChange(event); var reader = new FileReader(); var files = event.target.files; if (files.length > 0) { var _fileInfo = { name: files[0].name, size: files[0].size, type: files[0].type, modifiedAt: files[0].lastModified }; if (strict && accept.indexOf(_fileInfo.type) <= 0) { onError(new Error("[strict mode] Accept type not respected: got '" + _fileInfo.type + "' but not in '" + accept + "'")); return; } reader.onload = _event => { var parser = new XMLParser(parserOptions); var xmlData = parser.parse(reader.result); onFileLoaded && onFileLoaded(xmlData || {}, _fileInfo, files[0], reader.result); }; reader.readAsText(files[0], encoding); } }; return /*#__PURE__*/_jsx("input", _extends({ type: "file", name: "w-xml-reader-input" }, reset, { onChange: handleChangeFile, accept: accept, ref: ref })); }); export default XMLReader;