UNPKG

11.6 kBSource Map (JSON)View Raw
1{"version":3,"file":"react-svg.cjs.development.js","sources":["../compiled/shallow-differs.js","../compiled/ReactSVG.js"],"sourcesContent":["// Hat-tip: https://github.com/developit/preact-compat/blob/master/src/index.js#L402.\nconst shallowDiffers = (a, b) => {\n for (const i in a) {\n if (!(i in b)) {\n return true;\n }\n }\n for (const i in b) {\n if (a[i] !== b[i]) {\n return true;\n }\n }\n return false;\n};\nexport default shallowDiffers;\n","import { SVGInjector } from '@tanem/svg-injector';\nimport * as PropTypes from 'prop-types';\nimport * as React from 'react';\nimport shallowDiffers from './shallow-differs';\nconst svgNamespace = 'http://www.w3.org/2000/svg';\nconst xlinkNamespace = 'http://www.w3.org/1999/xlink';\nexport class ReactSVG extends React.Component {\n static defaultProps = {\n afterInjection: () => undefined,\n beforeInjection: () => undefined,\n evalScripts: 'never',\n fallback: null,\n loading: null,\n renumerateIRIElements: true,\n useRequestCache: true,\n wrapper: 'div',\n };\n static propTypes = {\n afterInjection: PropTypes.func,\n beforeInjection: PropTypes.func,\n evalScripts: PropTypes.oneOf(['always', 'once', 'never']),\n fallback: PropTypes.oneOfType([\n PropTypes.func,\n PropTypes.object,\n PropTypes.string,\n ]),\n loading: PropTypes.oneOfType([\n PropTypes.func,\n PropTypes.object,\n PropTypes.string,\n ]),\n renumerateIRIElements: PropTypes.bool,\n src: PropTypes.string.isRequired,\n useRequestCache: PropTypes.bool,\n wrapper: PropTypes.oneOf(['div', 'span', 'svg']),\n };\n initialState = {\n hasError: false,\n isLoading: true,\n };\n state = this.initialState;\n _isMounted = false;\n reactWrapper;\n nonReactWrapper;\n refCallback = (reactWrapper) => {\n this.reactWrapper = reactWrapper;\n };\n renderSVG() {\n /* istanbul ignore else */\n if (this.reactWrapper instanceof Node) {\n const { beforeInjection, evalScripts, renumerateIRIElements, src, useRequestCache, } = this.props;\n /* eslint-disable @typescript-eslint/no-non-null-assertion */\n const afterInjection = this.props.afterInjection;\n const wrapper = this.props.wrapper;\n /* eslint-enable @typescript-eslint/no-non-null-assertion */\n let nonReactWrapper;\n let nonReactTarget;\n if (wrapper === 'svg') {\n nonReactWrapper = document.createElementNS(svgNamespace, wrapper);\n nonReactWrapper.setAttribute('xmlns', svgNamespace);\n nonReactWrapper.setAttribute('xmlns:xlink', xlinkNamespace);\n nonReactTarget = document.createElementNS(svgNamespace, wrapper);\n }\n else {\n nonReactWrapper = document.createElement(wrapper);\n nonReactTarget = document.createElement(wrapper);\n }\n nonReactWrapper.appendChild(nonReactTarget);\n nonReactTarget.dataset.src = src;\n this.nonReactWrapper = this.reactWrapper.appendChild(nonReactWrapper);\n const afterEach = (error, svg) => {\n if (error) {\n this.removeSVG();\n if (!this._isMounted) {\n afterInjection(error);\n return;\n }\n }\n // TODO (Tane): It'd be better to cleanly unsubscribe from SVGInjector\n // callbacks instead of tracking a property like this.\n if (this._isMounted) {\n this.setState(() => ({\n hasError: !!error,\n isLoading: false,\n }), () => {\n afterInjection(error, svg);\n });\n }\n };\n SVGInjector(nonReactTarget, {\n afterEach,\n beforeEach: beforeInjection,\n cacheRequests: useRequestCache,\n evalScripts,\n renumerateIRIElements,\n });\n }\n }\n removeSVG() {\n if (this.nonReactWrapper?.parentNode) {\n this.nonReactWrapper.parentNode.removeChild(this.nonReactWrapper);\n this.nonReactWrapper = null;\n }\n }\n componentDidMount() {\n this._isMounted = true;\n this.renderSVG();\n }\n componentDidUpdate(prevProps) {\n if (shallowDiffers(prevProps, this.props)) {\n this.setState(() => this.initialState, () => {\n this.removeSVG();\n this.renderSVG();\n });\n }\n }\n componentWillUnmount() {\n this._isMounted = false;\n this.removeSVG();\n }\n render() {\n /* eslint-disable @typescript-eslint/no-unused-vars */\n const { afterInjection, beforeInjection, evalScripts, fallback: Fallback, loading: Loading, renumerateIRIElements, src, useRequestCache, wrapper, ...rest } = this.props;\n /* eslint-enable @typescript-eslint/no-unused-vars */\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const Wrapper = wrapper;\n return (React.createElement(Wrapper, { ...rest, ref: this.refCallback, ...(wrapper === 'svg'\n ? {\n xmlns: svgNamespace,\n xmlnsXlink: xlinkNamespace,\n }\n : {}) },\n this.state.isLoading && Loading && React.createElement(Loading, null),\n this.state.hasError && Fallback && React.createElement(Fallback, null)));\n }\n}\n"],"names":["shallowDiffers","a","b","i","svgNamespace","xlinkNamespace","ReactSVG","initialState","hasError","isLoading","state","_isMounted","reactWrapper","nonReactWrapper","refCallback","renderSVG","Node","props","beforeInjection","evalScripts","renumerateIRIElements","src","useRequestCache","afterInjection","wrapper","nonReactTarget","document","createElementNS","setAttribute","createElement","appendChild","dataset","afterEach","error","svg","removeSVG","setState","SVGInjector","beforeEach","cacheRequests","parentNode","removeChild","componentDidMount","componentDidUpdate","prevProps","componentWillUnmount","render","Fallback","fallback","Loading","loading","rest","Wrapper","React","ref","xmlns","xmlnsXlink","Component","defaultProps","undefined","propTypes","PropTypes","func","oneOf","oneOfType","object","string","bool","isRequired"],"mappings":"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"}
\No newline at end of file