@fpxfd/next
Version:
A configurable component library for web built on React.
158 lines (121 loc) • 6.09 kB
JavaScript
'use strict';
exports.__esModule = true;
exports.ConfigConsumer = exports.ConfigContext = undefined;
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _inherits2 = require('babel-runtime/helpers/inherits');
var _inherits3 = _interopRequireDefault(_inherits2);
var _class, _temp2;
var _classnames = require('classnames');
var _classnames2 = _interopRequireDefault(_classnames);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _react = require('react');
var React = _interopRequireWildcard(_react);
var _reactLifecyclesCompat = require('react-lifecycles-compat');
var _configProvider = require('../config-provider');
var _configProvider2 = _interopRequireDefault(_configProvider);
var _context = require('./context');
var _context2 = _interopRequireDefault(_context);
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var ConfigContext = exports.ConfigContext = React.createContext({
// We provide a default function for Context without provider
});
var ConfigConsumer = exports.ConfigConsumer = ConfigContext.Consumer;
var AnchorLink = (_temp2 = _class = function (_React$Component) {
(0, _inherits3.default)(AnchorLink, _React$Component);
function AnchorLink() {
var _temp, _this, _ret;
(0, _classCallCheck3.default)(this, AnchorLink);
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return _ret = (_temp = (_this = (0, _possibleConstructorReturn3.default)(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.handleClick = function (e) {
var _this$context = _this.context,
scrollTo = _this$context.scrollTo,
onClick = _this$context.onClick;
var _this$props = _this.props,
href = _this$props.href,
title = _this$props.title;
onClick && onClick(e, { title: title, href: href });
scrollTo(href);
}, _this.renderAnchorLink = function () {
var _classNames, _classNames2;
var _this$props2 = _this.props,
href = _this$props2.href,
title = _this$props2.title,
className = _this$props2.className,
target = _this$props2.target,
allowFold = _this$props2.allowFold,
isOpen = _this$props2.isOpen,
isSub = _this$props2.isSub,
style = _this$props2.style;
var prefixCls = 'next-anchor';
var active = _this.context.activeLink === href;
var wrapperClassName = (0, _classnames2.default)(prefixCls + '-link ' + (allowFold ? prefixCls + '-link-allowFold' : ''), (_classNames = {}, _classNames[prefixCls + '-link-active'] = active, _classNames), prefixCls + '-link-allowFold-' + (isOpen ? 'open' : 'close'), '' + (isSub ? prefixCls + '-link-sub' : ''), className);
var titleClassName = (0, _classnames2.default)(prefixCls + '-link-title', (_classNames2 = {}, _classNames2[prefixCls + '-link-title-active'] = active, _classNames2));
return React.createElement(
'div',
{ onClick: _this.handleClick, className: wrapperClassName, style: style || {} },
React.createElement(
'a',
{
className: titleClassName,
href: href,
title: typeof title === 'string' ? title : '',
target: target,
style: style || {}
},
isOpen ? title : ''
)
);
}, _temp), (0, _possibleConstructorReturn3.default)(_this, _ret);
}
AnchorLink.prototype.componentDidMount = function componentDidMount() {
if (!this.props.isParent) {
this.context.registerLink(this.props.href);
}
};
AnchorLink.prototype.componentDidUpdate = function componentDidUpdate(_ref) {
var prevHref = _ref.href;
var href = this.props.href;
if (prevHref !== href) {
this.context.unregisterLink(prevHref);
if (!this.props.isParent) {
this.context.registerLink(href);
}
this.context.registerLink(href);
}
};
AnchorLink.prototype.componentWillUnmount = function componentWillUnmount() {
this.context.unregisterLink(this.props.href);
};
AnchorLink.prototype.render = function render() {
return React.createElement(
ConfigConsumer,
null,
this.renderAnchorLink
);
};
return AnchorLink;
}(React.Component), _class.propTypes = {
prefixCls: _propTypes2.default.string,
href: _propTypes2.default.string,
target: _propTypes2.default.string,
title: _propTypes2.default.string,
className: _propTypes2.default.string,
allowFold: _propTypes2.default.bool,
isOpen: _propTypes2.default.bool,
isSub: _propTypes2.default.bool,
isParent: _propTypes2.default.bool,
style: _propTypes2.default.any
}, _class.defaultProps = {
prefixCls: 'next-',
href: '#',
allowFold: false
}, _class.contextType = _context2.default, _temp2);
AnchorLink.displayName = 'AnchorLink';
exports.default = _configProvider2.default.config((0, _reactLifecyclesCompat.polyfill)(AnchorLink));