@uiw/react-xml-reader
Version:
React component that handles xml file input and its parsing.
62 lines (61 loc) • 2.66 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
var _react = require("react");
var _fastXmlParser = require("fast-xml-parser");
var _jsxRuntime = require("react/jsx-runtime");
var _excluded = ["accept", "encoding", "onError", "parserOptions", "onFileLoaded", "onChange", "strict"];
var XMLReader = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
var _props$accept = props.accept,
accept = _props$accept === void 0 ? '.xml, text/xml' : _props$accept,
_props$encoding = props.encoding,
encoding = _props$encoding === void 0 ? 'UTF-8' : _props$encoding,
_props$onError = props.onError,
onError = _props$onError === void 0 ? function () {} : _props$onError,
_props$parserOptions = props.parserOptions,
parserOptions = _props$parserOptions === void 0 ? {} : _props$parserOptions,
onFileLoaded = props.onFileLoaded,
onChange = props.onChange,
_props$strict = props.strict,
strict = _props$strict === void 0 ? false : _props$strict,
reset = (0, _objectWithoutProperties2["default"])(props, _excluded);
var handleChangeFile = function 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 '".concat(_fileInfo.type, "' but not in '").concat(accept, "'")));
return;
}
reader.onload = function (_event) {
var parser = new _fastXmlParser.XMLParser(parserOptions);
var xmlData = parser.parse(reader.result);
onFileLoaded && onFileLoaded(xmlData || {}, _fileInfo, files[0], reader.result);
};
reader.readAsText(files[0], encoding);
}
};
return /*#__PURE__*/(0, _jsxRuntime.jsx)("input", (0, _objectSpread2["default"])((0, _objectSpread2["default"])({
type: "file",
name: "w-xml-reader-input"
}, reset), {}, {
onChange: handleChangeFile,
accept: accept,
ref: ref
}));
});
var _default = XMLReader;
exports["default"] = _default;
module.exports = exports.default;