rmwc
Version:
A thin React wrapper for Material Design (Web) Components
248 lines (198 loc) • 9.03 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Drawer = exports.DrawerDrawer = exports.DrawerRoot = exports.DrawerContent = exports.DrawerToolbarSpacer = exports.DrawerHeader = exports.DrawerHeaderContent = exports.DrawerHeaderRoot = undefined;
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = require('react');
var React = _interopRequireWildcard(_react);
var _Base = require('../Base');
var _List = require('../List');
var _mdc = require('@material/drawer/dist/mdc.drawer');
var _withFoundation2 = require('../Base/withFoundation');
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 _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
/***************************************************************************************
* Drawer Headers
***************************************************************************************/
var DrawerHeaderRoot = exports.DrawerHeaderRoot = (0, _Base.simpleTag)({
displayName: 'DrawerHeaderRoot',
classNames: 'mdc-drawer__header'
});
var DrawerHeaderContent = exports.DrawerHeaderContent = (0, _Base.simpleTag)({
displayName: 'DrawerHeaderContent',
classNames: 'mdc-drawer__header-content'
});
/** A Header for Drawers */
var DrawerHeader = exports.DrawerHeader = function (_React$Component) {
_inherits(DrawerHeader, _React$Component);
function DrawerHeader() {
_classCallCheck(this, DrawerHeader);
return _possibleConstructorReturn(this, (DrawerHeader.__proto__ || Object.getPrototypeOf(DrawerHeader)).apply(this, arguments));
}
_createClass(DrawerHeader, [{
key: 'render',
value: function render() {
var _props = this.props,
children = _props.children,
rest = _objectWithoutProperties(_props, ['children']);
return React.createElement(
DrawerHeaderRoot,
rest,
React.createElement(
DrawerHeaderContent,
null,
children
)
);
}
}]);
return DrawerHeader;
}(React.Component);
/** If you are using fixed a Toolbar, this provides space for it. */
var DrawerToolbarSpacer = exports.DrawerToolbarSpacer = (0, _Base.simpleTag)({
displayName: 'DrawerToolbarSpacer',
classNames: 'mdc-drawer__toolbar-spacer'
});
/***************************************************************************************
* Drawer Content
***************************************************************************************/
/** Content for Drawers. Please note this is an instance of mdc-list by default. You can change this to a a non list container by specifying the tag as 'div' or anything else. */
var DrawerContent = exports.DrawerContent = (0, _Base.simpleTag)({
displayName: 'DrawerContent',
tag: _List.List,
classNames: 'mdc-drawer__content'
});
/***************************************************************************************
* Drawers
***************************************************************************************/
var DrawerRoot = exports.DrawerRoot = (0, _Base.simpleTag)({
displayName: 'DrawerRoot',
tag: 'aside',
classNames: function classNames(props) {
return ['mdc-drawer', {
'mdc-drawer--permanent': props.permanent,
'mdc-drawer--persistent': props.persistent,
'mdc-drawer--temporary': props.temporary
}];
},
consumeProps: ['permanent', 'persistent', 'temporary']
});
var DrawerDrawer = exports.DrawerDrawer = (0, _Base.simpleTag)({
displayName: 'DrawerDrawer',
tag: 'nav',
classNames: 'mdc-drawer__drawer'
});
var slidableDrawerFactory = function slidableDrawerFactory(MDCConstructor, displayName) {
var _class, _temp;
return _temp = _class = function (_withFoundation) {
_inherits(_class, _withFoundation);
function _class() {
_classCallCheck(this, _class);
return _possibleConstructorReturn(this, (_class.__proto__ || Object.getPrototypeOf(_class)).apply(this, arguments));
}
_createClass(_class, [{
key: 'syncWithProps',
value: function syncWithProps(nextProps) {
var _this3 = this;
// Open
// MDC calls notify change before actually setting the Open value
// which causes an infinite loop for reacts uni-directional data flow
// The set timeout gives us a frame before we re-evaluate whether we are open
setTimeout(function () {
_this3.foundation_ && (0, _withFoundation2.syncFoundationProp)(nextProps.open, _this3.open, function () {
return _this3.open = nextProps.open;
});
});
}
}, {
key: 'render',
value: function render() {
var _props2 = this.props,
children = _props2.children,
onOpen = _props2.onOpen,
onClose = _props2.onClose,
open = _props2.open,
rest = _objectWithoutProperties(_props2, ['children', 'onOpen', 'onClose', 'open']);
var root_ = this.foundationRefs.root_;
return React.createElement(
DrawerRoot,
Object.assign({ elementRef: root_ }, rest),
React.createElement(
DrawerDrawer,
null,
children
)
);
}
}]);
return _class;
}((0, _withFoundation2.withFoundation)({
constructor: MDCConstructor,
adapter: {}
})), Object.defineProperty(_class, 'displayName', {
enumerable: true,
writable: true,
value: displayName
}), Object.defineProperty(_class, 'defaultProps', {
enumerable: true,
writable: true,
value: {
open: false,
onOpen: _Base.noop,
onClose: _Base.noop
}
}), _temp;
};
var TemporaryDrawer = slidableDrawerFactory(_mdc.MDCTemporaryDrawer, 'TemporaryDrawer');
var PersistentDrawer = slidableDrawerFactory(_mdc.MDCPersistentDrawer, 'PersistentDrawer');
var PermanentDrawer = function (_React$Component2) {
_inherits(PermanentDrawer, _React$Component2);
function PermanentDrawer() {
_classCallCheck(this, PermanentDrawer);
return _possibleConstructorReturn(this, (PermanentDrawer.__proto__ || Object.getPrototypeOf(PermanentDrawer)).apply(this, arguments));
}
_createClass(PermanentDrawer, [{
key: 'render',
value: function render() {
var _props3 = this.props,
children = _props3.children,
onOpen = _props3.onOpen,
onClose = _props3.onClose,
rest = _objectWithoutProperties(_props3, ['children', 'onOpen', 'onClose']);
return React.createElement(
DrawerRoot,
rest,
children
);
}
}]);
return PermanentDrawer;
}(React.Component);
Object.defineProperty(PermanentDrawer, 'displayName', {
enumerable: true,
writable: true,
value: 'PermanentDrawer'
});
Object.defineProperty(PermanentDrawer, 'defaultProps', {
enumerable: true,
writable: true,
value: {
open: false,
onOpen: _Base.noop,
onClose: _Base.noop
}
});
var Drawer = exports.Drawer = function Drawer(props) {
if (props.persistent) {
return React.createElement(PersistentDrawer, props);
}
if (props.temporary) {
return React.createElement(TemporaryDrawer, props);
}
return React.createElement(PermanentDrawer, props);
};
Drawer.displayName = 'Drawer';
;