UNPKG

@uiw/react-xml-reader

Version:

React component that handles xml file input and its parsing.

62 lines (61 loc) 2.66 kB
"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;