UNPKG

@roderickhsiao/react-i13n

Version:

[Experiment] React I13n provides a performant and scalable solution to application instrumentation.

138 lines (104 loc) 6.96 kB
"use strict"; exports.__esModule = true; exports["default"] = void 0; var _react = _interopRequireWildcard(require("react")); var _hoistNonReactStatics = _interopRequireDefault(require("hoist-non-react-statics")); var _getDisplayName = _interopRequireDefault(require("../utils/getDisplayName")); var _warnAndPrintTrace = _interopRequireDefault(require("../utils/warnAndPrintTrace")); var _CoreComponent = _interopRequireDefault(require("../components/core/CoreComponent")); var _I13nContext = _interopRequireDefault(require("../components/core/I13nContext")); var _useI13nNode2 = _interopRequireDefault(require("../hooks/useI13nNode")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; } var isFunctionalComponent = function isFunctionalComponent(TargetComponent) { return typeof TargetComponent === 'function'; }; // && !(TargetComponent.prototype && TargetComponent.prototype.isReactComponent); /** * createI13nNode higher order function to create a Component with I13nNode functionality * @param {Object|String} Component the component you want to create a i13nNode * @param {Object} defaultProps default props * @param {Object} options * @param {String} options.displayName display name * @param {String} options.refToWrappedComponent ref name to wrapped component * @param {Boolean} options.skipUtilFunctionsByProps true to prevent i13n util function to be passed via props.i13n * @method createI13nNode */ function createI13nNode(Component, defaultProps, options) { var _options$displayName; if (options === void 0) { options = {}; } if (!Component) { (0, _warnAndPrintTrace["default"])('You are passing a null component into createI13nNode'); return null; } var componentName = (0, _getDisplayName["default"])(Component); var componentIsFunction = isFunctionalComponent(Component); var _options = options, refToWrappedComponent = _options.refToWrappedComponent; var I13nComponentWrapper = function I13nComponentWrapper(props) { var bindClickEvent = props.bindClickEvent, follow = props.follow, i13n = props.i13n, i13nModel = props.i13nModel, isLeafNode = props.isLeafNode, scanLinks = props.scanLinks, shouldFollowLink = props.shouldFollowLink, children = props.children, restProps = _objectWithoutPropertiesLoose(props, ["bindClickEvent", "follow", "i13n", "i13nModel", "isLeafNode", "scanLinks", "shouldFollowLink", "children"]); var _useContext = (0, _react.useContext)(_I13nContext["default"]), executeEvent = _useContext.executeEvent, i13nInstance = _useContext.i13nInstance, parentI13nNode = _useContext.i13nNode; var i13nProps = _objectSpread({ bindClickEvent: bindClickEvent, componentIsFunction: componentIsFunction, follow: follow, i13n: i13n, i13nModel: i13nModel, isLeafNode: isLeafNode, scanLinks: scanLinks, shouldFollowLink: shouldFollowLink }, refToWrappedComponent ? { ref: refToWrappedComponent // @TODO, won't work here, need to forwardRef } : {}); var node = /*#__PURE__*/_react["default"].createElement(_CoreComponent["default"], i13nProps, /*#__PURE__*/_react["default"].createElement(Component, restProps, children)); var _useI13nNode = (0, _useI13nNode2["default"])({ parentI13nNode: parentI13nNode, i13nInstance: i13nInstance, isLeafNode: isLeafNode, i13nModel: i13nModel }), i13nNode = _useI13nNode.i13nNode; // overrides node/parent node var contextValue = (0, _react.useMemo)(function () { return { executeEvent: executeEvent, i13nInstance: i13nInstance, i13nNode: i13nNode, parentI13nNode: parentI13nNode }; }, [executeEvent, i13nInstance, i13nNode, parentI13nNode]); return /*#__PURE__*/_react["default"].createElement(_I13nContext["default"].Provider, { value: contextValue }, node); }; I13nComponentWrapper.displayName = (_options$displayName = options.displayName) !== null && _options$displayName !== void 0 ? _options$displayName : "I13n" + componentName; I13nComponentWrapper.defaultProps = _objectSpread({ i13nModel: undefined, isLeafNode: false, bindClickEvent: false, follow: false, scanLinks: undefined }, defaultProps); if (componentIsFunction) { return (0, _hoistNonReactStatics["default"])(I13nComponentWrapper, Component); } return I13nComponentWrapper; } var _default = createI13nNode; exports["default"] = _default;