Skip to content

Commit 356edc9

Browse files
committed
Fixed positioning. Updated react
1 parent b403304 commit 356edc9

File tree

13 files changed

+172
-122
lines changed

13 files changed

+172
-122
lines changed

dev/example-app.js

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@ export default class Basic extends Component {
2222
render() {
2323
return (
2424
<div className="container">
25+
<button style={{position: 'absolute', right: 0}} onClick={this.showDateTimeSidePicker} ref="pickerbtn">Show picker</button>
26+
{ this.state.isDateTimeSidePickerShown ? <DateTimePickerSide
27+
target={this.refs.pickerbtn}
28+
onClose={this.resetTimeSidePicker}
29+
timesShown={[1,2,4]} /> : null }
2530
<div className="row">
2631
<div className="col-xs-12">
2732
<h1>React Bootstrap DateTimePicker</h1>
@@ -112,16 +117,6 @@ export default class Basic extends Component {
112117
</pre>
113118
</div>
114119
</div>
115-
<div className="row">
116-
<div className="col-xs-12">
117-
Wrapped el
118-
<button onClick={this.showDateTimeSidePicker} ref="pickerbtn">Show picker</button>
119-
{ this.state.isDateTimeSidePickerShown ? <DateTimePickerSide
120-
target={this.refs.pickerbtn}
121-
onClose={this.resetTimeSidePicker}
122-
timesShown={[1,2,4]} /> : null }
123-
</div>
124-
</div>
125120
</div>
126121
);
127122
}

dist/react-bootstrap-datetimepicker.js

Lines changed: 65 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -857,7 +857,9 @@ return /******/ (function(modules) { // webpackBootstrap
857857
},
858858
_react2["default"].createElement(
859859
"ul",
860-
{ className: "list-unstyled" },
860+
{
861+
styleName: "widget-content",
862+
className: "widget-content list-unstyled" },
861863
_react2["default"].createElement(_componentsModeSwitcherModeSwitcherJs2["default"], { onSwitch: this.props.togglePicker, showTimePicker: this.props.showTimePicker }),
862864
this.renderDatePicker(),
863865
this.renderTimePicker()
@@ -3684,10 +3686,10 @@ return /******/ (function(modules) { // webpackBootstrap
36843686

36853687
var _cssDatepickerCss2 = _interopRequireDefault(_cssDatepickerCss);
36863688

3687-
var DatePicker = (function (_Component) {
3688-
_inherits(DatePicker, _Component);
3689+
var DatesPicker = (function (_Component) {
3690+
_inherits(DatesPicker, _Component);
36893691

3690-
_createClass(DatePicker, null, [{
3692+
_createClass(DatesPicker, null, [{
36913693
key: "propTypes",
36923694
value: {
36933695
subtractMonth: _react.PropTypes.func.isRequired,
@@ -3710,12 +3712,12 @@ return /******/ (function(modules) { // webpackBootstrap
37103712
enumerable: true
37113713
}]);
37123714

3713-
function DatePicker(props) {
3715+
function DatesPicker(props) {
37143716
var _this = this;
37153717

3716-
_classCallCheck(this, _DatePicker);
3718+
_classCallCheck(this, _DatesPicker);
37173719

3718-
_get(Object.getPrototypeOf(_DatePicker.prototype), "constructor", this).call(this, props);
3720+
_get(Object.getPrototypeOf(_DatesPicker.prototype), "constructor", this).call(this, props);
37193721

37203722
this.showMonths = function () {
37213723
return _this.setState({
@@ -3818,7 +3820,7 @@ return /******/ (function(modules) { // webpackBootstrap
38183820
this.state = viewModes[viewMode] || viewModes[_Object$keys(viewModes)[viewMode]] || viewModes.days;
38193821
}
38203822

3821-
_createClass(DatePicker, [{
3823+
_createClass(DatesPicker, [{
38223824
key: "render",
38233825
value: function render() {
38243826
return _react2["default"].createElement(
@@ -3831,12 +3833,12 @@ return /******/ (function(modules) { // webpackBootstrap
38313833
}
38323834
}]);
38333835

3834-
var _DatePicker = DatePicker;
3835-
DatePicker = (0, _reactCssModules2["default"])(_cssDatepickerCss2["default"])(DatePicker) || DatePicker;
3836-
return DatePicker;
3836+
var _DatesPicker = DatesPicker;
3837+
DatesPicker = (0, _reactCssModules2["default"])(_cssDatepickerCss2["default"])(DatesPicker) || DatesPicker;
3838+
return DatesPicker;
38373839
})(_react.Component);
38383840

3839-
exports["default"] = DatePicker;
3841+
exports["default"] = DatesPicker;
38403842
module.exports = exports["default"];
38413843

38423844
/***/ },
@@ -5265,7 +5267,7 @@ return /******/ (function(modules) { // webpackBootstrap
52655267
/***/ function(module, exports) {
52665268

52675269
// removed by extract-text-webpack-plugin
5268-
module.exports = {"widget":"widget__widget___3fXFu","timepicker-sbs":"widget__timepicker-sbs___2jAbM","bottom":"widget__bottom___-6Tde","top":"widget__top___2yTOa","pull-right":"widget__pull-right___1iZ6B","timepicker-hour":"widget__timepicker-hour___yKTId","timepicker-minute":"widget__timepicker-minute___3pdDA","timepicker-second":"widget__timepicker-second___3euia","separator":"widget__separator___q1q2K","datepicker":"widget__datepicker___38_rc","hour":"widget__hour___3NOXy","minute":"widget__minute___16a-Q","second":"widget__second___2EROI","active":"widget__active___3KVz9","disabled":"widget__disabled___3sPo0","old":"widget__old___38IBP","list-unstyled":"widget__list-unstyled___gwHmb","timepicker":"widget__timepicker___3eGjD","timepicker-picker":"widget__timepicker-picker___3Vueh","table-condensed":"widget__table-condensed___O9OoF","wide":"widget__wide___1L6kX","right-side":"widget__right-side___-S7eD"};
5270+
module.exports = {"widget":"widget__widget___3fXFu","widget-content":"widget__widget-content___3payV","timepicker-sbs":"widget__timepicker-sbs___2jAbM","bottom":"widget__bottom___-6Tde","top":"widget__top___2yTOa","pull-right":"widget__pull-right___1iZ6B","timepicker-hour":"widget__timepicker-hour___yKTId","timepicker-minute":"widget__timepicker-minute___3pdDA","timepicker-second":"widget__timepicker-second___3euia","separator":"widget__separator___q1q2K","datepicker":"widget__datepicker___38_rc","hour":"widget__hour___3NOXy","minute":"widget__minute___16a-Q","second":"widget__second___2EROI","active":"widget__active___3KVz9","disabled":"widget__disabled___3sPo0","old":"widget__old___38IBP","list-unstyled":"widget__list-unstyled___gwHmb","timepicker":"widget__timepicker___3eGjD","timepicker-picker":"widget__timepicker-picker___3Vueh","table-condensed":"widget__table-condensed___O9OoF","wide":"widget__wide___1L6kX","right-panel":"widget__right-panel___2bKsh"};
52695271

52705272
/***/ },
52715273
/* 124 */
@@ -5306,40 +5308,40 @@ return /******/ (function(modules) { // webpackBootstrap
53065308
_classCallCheck(this, StickyWrapper);
53075309

53085310
_get(Object.getPrototypeOf(StickyWrapper.prototype), 'constructor', this).apply(this, arguments);
5309-
5310-
this.state = {
5311-
style: {
5312-
background: 'black',
5313-
position: 'absolute'
5314-
}
5315-
};
53165311
}
53175312

53185313
_createClass(StickyWrapper, [{
5319-
key: 'getScrollTop',
5320-
value: function getScrollTop() {
5321-
return window.pageYOffset || (document.documentElement || document.body.parentNode || document.body).scrollTop;
5314+
key: 'getPickerWidth',
5315+
value: function getPickerWidth(node) {
5316+
return _reactDom2['default'].findDOMNode(this).querySelector(this.props.datepickerSelector).clientWidth;
53225317
}
53235318
}, {
5324-
key: 'getOffset',
5325-
value: function getOffset(node) {
5326-
var gBCR = _reactDom2['default'].findDOMNode(node).getBoundingClientRect();
5327-
return {
5328-
left: gBCR.left + window.scrollX,
5329-
top: gBCR.top + window.scrollY
5330-
};
5319+
key: 'getWindowWidth',
5320+
value: function getWindowWidth() {
5321+
return document.getElementsByTagName('body')[0].clientWidth;
53315322
}
5323+
5324+
// Position the element relative to its target
53325325
}, {
53335326
key: 'componentDidMount',
53345327
value: function componentDidMount() {
5335-
var offset = this.getOffset(this.props.target);
5336-
var width = _reactDom2['default'].findDOMNode(this).querySelector(this.props.datepickerSelector).clientWidth;
5337-
this.setState({
5338-
style: (0, _lodash.assign)({}, this.state.style, {
5339-
right: offset.left - width / 2,
5340-
top: 30
5341-
})
5342-
});
5328+
var style = {
5329+
position: 'absolute',
5330+
top: this.props.offset.top || 0
5331+
};
5332+
var targetNode = _reactDom2['default'].findDOMNode(this.props.target);
5333+
var width = this.getPickerWidth();
5334+
var relativeNodeLeft = targetNode.offsetLeft + targetNode.clientWidth;
5335+
var windowWidth = this.getWindowWidth();
5336+
var left = relativeNodeLeft + width / 2 + (this.props.offset.left || 0);
5337+
// Check if the right side is out of bounds
5338+
if (targetNode.getBoundingClientRect().right + width > windowWidth) {
5339+
console.log('whaat');
5340+
style.right = 0;
5341+
} else {
5342+
style.left = left;
5343+
}
5344+
this.setState({ style: style });
53435345
}
53445346
}, {
53455347
key: 'render',
@@ -5353,14 +5355,16 @@ return /******/ (function(modules) { // webpackBootstrap
53535355
}], [{
53545356
key: 'propTypes',
53555357
value: {
5356-
target: _react.PropTypes.node.isRequired,
5357-
datepickerSelector: _react.PropTypes.string
5358+
target: _react.PropTypes.object.isRequired,
5359+
datepickerSelector: _react.PropTypes.string,
5360+
offset: _react.PropTypes.object
53585361
},
53595362
enumerable: true
53605363
}, {
53615364
key: 'defaultProps',
53625365
value: {
5363-
datepickerSelector: '.bootstrap-datetimepicker-widget'
5366+
datepickerSelector: '.bootstrap-datetimepicker-widget',
5367+
offset: { top: 30 }
53645368
},
53655369
enumerable: true
53665370
}]);
@@ -18115,7 +18119,7 @@ return /******/ (function(modules) { // webpackBootstrap
1811518119

1811618120
return _react2["default"].createElement(
1811718121
"li",
18118-
{ className: "pull-left" },
18122+
{ className: "pull-left left-panel" },
1811918123
_react2["default"].createElement(_componentsDatepickerJs2["default"], {
1812018124
addDecade: _this.props.addDecade,
1812118125
addMonth: _this.props.addMonth,
@@ -18146,11 +18150,13 @@ return /******/ (function(modules) { // webpackBootstrap
1814618150
{ styleName: "widget wide", className: (0, _classnames2["default"])(this.props.widgetClasses) },
1814718151
_react2["default"].createElement(
1814818152
"ul",
18149-
{ className: "list-unstyled" },
18153+
{ styleName: "widget-content", className: "widget-content list-unstyled" },
1815018154
this.renderDatePicker(),
1815118155
_react2["default"].createElement(
1815218156
"li",
18153-
{ styleName: "right-side" },
18157+
{
18158+
className: "right-panel",
18159+
styleName: "right-panel" },
1815418160
_react2["default"].createElement(_componentsTimeSidePanelTimeSidePanelJs2["default"], {
1815518161
selectedDate: this.props.selectedDate,
1815618162
timesShown: this.props.timesShown,
@@ -18230,6 +18236,10 @@ return /******/ (function(modules) { // webpackBootstrap
1823018236

1823118237
var _reactCssModules2 = _interopRequireDefault(_reactCssModules);
1823218238

18239+
var _classnames = __webpack_require__(36);
18240+
18241+
var _classnames2 = _interopRequireDefault(_classnames);
18242+
1823318243
var _moment = __webpack_require__(33);
1823418244

1823518245
var _moment2 = _interopRequireDefault(_moment);
@@ -18265,10 +18275,14 @@ return /******/ (function(modules) { // webpackBootstrap
1826518275
'li',
1826618276
{
1826718277
key: index,
18268-
styleName: isSameTime ? 'selected' : '' },
18278+
styleName: isSameTime ? 'selected' : '',
18279+
className: (0, _classnames2['default'])({
18280+
active: isSameTime
18281+
}) },
1826918282
_react2['default'].createElement(
1827018283
'button',
1827118284
{
18285+
styleName: 'btn',
1827218286
className: 'btn btn-link',
1827318287
onClick: _this.onSelectTime.bind(_this, time) },
1827418288
(0, _libConvertMilitaryTimeToAmpmJs2['default'])({ hour: hour, minute: minute })
@@ -18304,8 +18318,7 @@ return /******/ (function(modules) { // webpackBootstrap
1830418318
return _react2['default'].createElement(
1830518319
'ul',
1830618320
{
18307-
styleName: 'side-panel',
18308-
className: 'list-unstyled' },
18321+
className: 'list-unstyled side-panel' },
1830918322
this.renderTimes()
1831018323
);
1831118324
}
@@ -18332,7 +18345,7 @@ return /******/ (function(modules) { // webpackBootstrap
1833218345
/***/ function(module, exports) {
1833318346

1833418347
// removed by extract-text-webpack-plugin
18335-
module.exports = {"side-panel":"time-side-panel__side-panel___2Jhij","selected":"time-side-panel__selected___2UTOt"};
18348+
module.exports = {"selected":"time-side-panel__selected___2UTOt","btn":"time-side-panel__btn___3Ao1N"};
1833618349

1833718350
/***/ },
1833818351
/* 132 */
@@ -18443,7 +18456,7 @@ return /******/ (function(modules) { // webpackBootstrap
1844318456
{ styleName: "widget", className: (0, _classnames2["default"])(this.props.widgetClasses) },
1844418457
_react2["default"].createElement(
1844518458
"ul",
18446-
{ className: "list-unstyled" },
18459+
{ styleName: "widget-content", className: "widget-content list-unstyled" },
1844718460
_react2["default"].createElement(
1844818461
"li",
1844918462
null,
@@ -18568,7 +18581,9 @@ return /******/ (function(modules) { // webpackBootstrap
1856818581
},
1856918582
_react2["default"].createElement(
1857018583
"ul",
18571-
{ className: "list-unstyled" },
18584+
{
18585+
styleName: "widget-content",
18586+
className: "widget-content list-unstyled" },
1857218587
_react2["default"].createElement(
1857318588
"li",
1857418589
null,

dist/styles.css

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -67,13 +67,25 @@
6767
.widget__widget___3fXFu {
6868
top: 0;
6969
left: 0;
70-
margin-top: 1px;
70+
margin-top: 0;
71+
padding-top: 0;
7172
z-index: 99999 !important;
7273
border-radius: 4px;
73-
padding: 15px;
7474
display: block;
7575
}
7676

77+
.widget__widget___3fXFu button {
78+
outline: none;
79+
}
80+
81+
.widget__widget-content___3payV > li {
82+
padding: 15px;
83+
}
84+
85+
.widget__widget-content___3payV > li:first-child {
86+
width: 230px;
87+
}
88+
7789
.widget__widget___3fXFu.widget__timepicker-sbs___2jAbM {
7890
width: 600px;
7991
}
@@ -184,7 +196,6 @@
184196
height: 54px;
185197
line-height: 54px;
186198
float: left;
187-
margin: 2px;
188199
cursor: pointer;
189200
border-radius: 4px;
190201
}
@@ -230,24 +241,25 @@
230241
}
231242

232243
.widget__widget___3fXFu.widget__wide___1L6kX {
233-
width: 420px;
244+
width: 380px;
234245
display: block;
235246
height: 280px;
236247
}
237248

238-
.widget__right-side___-S7eD {
249+
.widget__right-panel___2bKsh {
239250
margin-top: 5px;
240251
padding: 5px;
241252
float: right;
242-
width: 125px;
253+
width: 120px;
243254
overflow: auto;
244255
height: 240px;
245256
}
246-
.time-side-panel__side-panel___2Jhij li {
247-
padding-left: 20px;
248-
}
249-
250-
.time-side-panel__selected___2UTOt {
257+
.time-side-panel__selected___2UTOt button, .time-side-panel__selected___2UTOt button:focus {
251258
background: #eeeeee;
252259
border-radius: 4px;
253260
}
261+
262+
.time-side-panel__btn___3Ao1N:focus, .time-side-panel__btn___3Ao1N:active {
263+
outline: none;
264+
text-decoration: none;
265+
}

package.json

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@
2626
"peerDependencies": {
2727
"react": "^0.14.0",
2828
"react-dom": "^0.14.0",
29-
"react-bootstrap": "^0.16.1",
30-
"moment": "^2.8.2"
29+
"moment": "^2.10.6",
30+
"react-bootstrap": "^0.27.2"
3131
},
3232
"jest": {
3333
"scriptPreprocessor": "<rootDir>/node_modules/babel-jest",
@@ -65,7 +65,6 @@
6565
"html-webpack-plugin": "^1.6.2",
6666
"jest-cli": "^0.5.10",
6767
"jsx-loader": "^0.13.2",
68-
"moment": "^2.10.6",
6968
"react-hot-loader": "^1.3.0",
7069
"style-loader": "^0.13.0",
7170
"webpack": "^1.12.2",
@@ -74,7 +73,11 @@
7473
"dependencies": {
7574
"babel-runtime": "^5.8.25",
7675
"classnames": "^2.2.0",
76+
"moment": "^2.10.6",
7777
"lodash": "^3.10.1",
78-
"react-css-modules": "^3.6.0"
78+
"react-css-modules": "^3.6.0",
79+
"react": "^0.14.0",
80+
"react-dom": "^0.14.0",
81+
"react-bootstrap": "^0.27.2"
7982
}
8083
}

src/DateTimePicker.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,9 @@ class DateTimePicker extends Component {
103103
styleName="widget datepicker"
104104
className={classnames(this.props.widgetClasses)}
105105
>
106-
<ul className="list-unstyled">
106+
<ul
107+
styleName="widget-content"
108+
className="widget-content list-unstyled">
107109
<ModeSwitcher onSwitch={this.props.togglePicker} showTimePicker={this.props.showTimePicker} />
108110
{this.renderDatePicker()}
109111
{this.renderTimePicker()}

0 commit comments

Comments
 (0)