@uiw/react-xml-reader
Version:
React component that handles xml file input and its parsing.
50 lines • 1.74 kB
JavaScript
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;