Skip to content

Commit f3c9d89

Browse files
prayerslayeraij
authored andcommitted
Optional moment.js Part 1 (Hacker0x01#1046)
* Remove moment from datepicker.jsx * Remove moment from calendar.jsx * Remove moment from time.jsx * Remove moment from month.jsx * Remove moment from week.jsx * Refactor: Do not export fns that take date units * Remove moment from day.jsx * Remove moment from month_dropdown.jsx * Remove moment from year_dropdown.jsx * Order date_utils, remove more moment calls from datepicker.jsx
1 parent db64f07 commit f3c9d89

File tree

9 files changed

+399
-110
lines changed

9 files changed

+399
-110
lines changed

src/calendar.jsx

Lines changed: 49 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,37 @@
1-
import moment from 'moment'
21
import YearDropdown from './year_dropdown'
32
import MonthDropdown from './month_dropdown'
43
import Month from './month'
54
import Time from './time'
65
import React from 'react'
76
import PropTypes from 'prop-types'
87
import classnames from 'classnames'
9-
import { isSameDay, allDaysDisabledBefore, allDaysDisabledAfter, getEffectiveMinDate, getEffectiveMaxDate } from './date_utils'
8+
import {
9+
getUTCOffset,
10+
newDateWithOffset,
11+
setMonth,
12+
getMonth,
13+
addMonths,
14+
subtractMonths,
15+
getStartOfWeek,
16+
getStartOfDate,
17+
addDays,
18+
cloneDate,
19+
formatDate,
20+
localizeDate,
21+
setYear,
22+
getYear,
23+
isBefore,
24+
isAfter,
25+
getLocaleData,
26+
getWeekdayShortInLocale,
27+
getWeekdayMinInLocale,
28+
29+
isSameDay,
30+
allDaysDisabledBefore,
31+
allDaysDisabledAfter,
32+
getEffectiveMinDate,
33+
getEffectiveMaxDate
34+
} from './date_utils'
1035

1136
const DROPDOWN_FOCUS_CLASSNAMES = [
1237
'react-datepicker__year-select',
@@ -75,7 +100,7 @@ export default class Calendar extends React.Component {
75100
static get defaultProps () {
76101
return {
77102
onDropdownFocus: () => {},
78-
utcOffset: moment.utc().utcOffset(),
103+
utcOffset: getUTCOffset(),
79104
monthsShown: 1,
80105
forceShowMonthNavigation: false
81106
}
@@ -84,7 +109,7 @@ export default class Calendar extends React.Component {
84109
constructor (props) {
85110
super(props)
86111
this.state = {
87-
date: this.localizeMoment(this.getDateInView()),
112+
date: this.localizeDate(this.getDateInView()),
88113
selectingDate: null,
89114
monthContainer: this.monthContainer
90115
}
@@ -102,11 +127,11 @@ export default class Calendar extends React.Component {
102127
componentWillReceiveProps (nextProps) {
103128
if (nextProps.preSelection && !isSameDay(nextProps.preSelection, this.props.preSelection)) {
104129
this.setState({
105-
date: this.localizeMoment(nextProps.preSelection)
130+
date: this.localizeDate(nextProps.preSelection)
106131
})
107132
} else if (nextProps.openToDate && !isSameDay(nextProps.openToDate, this.props.openToDate)) {
108133
this.setState({
109-
date: this.localizeMoment(nextProps.openToDate)
134+
date: this.localizeDate(nextProps.openToDate)
110135
})
111136
}
112137
}
@@ -125,31 +150,31 @@ export default class Calendar extends React.Component {
125150
const { preSelection, selected, openToDate, utcOffset } = this.props
126151
const minDate = getEffectiveMinDate(this.props)
127152
const maxDate = getEffectiveMaxDate(this.props)
128-
const current = moment.utc().utcOffset(utcOffset)
153+
const current = newDateWithOffset(utcOffset)
129154
const initialDate = openToDate || selected || preSelection
130155
if (initialDate) {
131156
return initialDate
132157
} else {
133-
if (minDate && current.isBefore(minDate)) {
158+
if (minDate && isBefore(current, minDate)) {
134159
return minDate
135-
} else if (maxDate && current.isAfter(maxDate)) {
160+
} else if (maxDate && isAfter(current, maxDate)) {
136161
return maxDate
137162
}
138163
}
139164
return current
140165
}
141166

142-
localizeMoment = date => date.clone().locale(this.props.locale || moment.locale())
167+
localizeDate = date => localizeDate(date, this.props.locale)
143168

144169
increaseMonth = () => {
145170
this.setState({
146-
date: this.state.date.clone().add(1, 'month')
171+
date: addMonths(cloneDate(this.state.date), 1)
147172
}, () => this.handleMonthChange(this.state.date))
148173
}
149174

150175
decreaseMonth = () => {
151176
this.setState({
152-
date: this.state.date.clone().subtract(1, 'month')
177+
date: subtractMonths(cloneDate(this.state.date), 1)
153178
}, () => this.handleMonthChange(this.state.date))
154179
}
155180

@@ -167,18 +192,18 @@ export default class Calendar extends React.Component {
167192

168193
changeYear = (year) => {
169194
this.setState({
170-
date: this.state.date.clone().set('year', year)
195+
date: setYear(cloneDate(this.state.date), year)
171196
})
172197
}
173198

174199
changeMonth = (month) => {
175200
this.setState({
176-
date: this.state.date.clone().set('month', month)
201+
date: setMonth(cloneDate(this.state.date), month)
177202
}, () => this.handleMonthChange(this.state.date))
178203
}
179204

180205
header = (date = this.state.date) => {
181-
const startOfWeek = date.clone().startOf('week')
206+
const startOfWeek = getStartOfWeek(cloneDate(date))
182207
const dayNames = []
183208
if (this.props.showWeekNumbers) {
184209
dayNames.push(
@@ -188,10 +213,11 @@ export default class Calendar extends React.Component {
188213
)
189214
}
190215
return dayNames.concat([0, 1, 2, 3, 4, 5, 6].map(offset => {
191-
const day = startOfWeek.clone().add(offset, 'days')
216+
const day = addDays(cloneDate(startOfWeek), offset)
217+
const localeData = getLocaleData(day)
192218
const weekDayName = this.props.useWeekdaysShort
193-
? day.localeData().weekdaysShort(day)
194-
: day.localeData().weekdaysMin(day)
219+
? getWeekdayShortInLocale(localeData, day)
220+
: getWeekdayMinInLocale(localeData, day)
195221
return (
196222
<div key={offset} className="react-datepicker__day-name">
197223
{weekDayName}
@@ -238,7 +264,7 @@ export default class Calendar extends React.Component {
238264
}
239265
return (
240266
<div className={classes.join(' ')}>
241-
{date.format(this.props.dateFormat)}
267+
{formatDate(date, this.props.dateFormat)}
242268
</div>
243269
)
244270
}
@@ -253,7 +279,7 @@ export default class Calendar extends React.Component {
253279
onChange={this.changeYear}
254280
minDate={this.props.minDate}
255281
maxDate={this.props.maxDate}
256-
year={this.state.date.year()}
282+
year={getYear(this.state.date)}
257283
scrollableYearDropdown={this.props.scrollableYearDropdown}
258284
yearDropdownItemNumber={this.props.yearDropdownItemNumber} />
259285
)
@@ -269,7 +295,7 @@ export default class Calendar extends React.Component {
269295
locale={this.props.locale}
270296
dateFormat={this.props.dateFormat}
271297
onChange={this.changeMonth}
272-
month={this.state.date.month()} />
298+
month={getMonth(this.state.date)} />
273299
)
274300
}
275301

@@ -280,7 +306,7 @@ export default class Calendar extends React.Component {
280306
return (
281307
<div
282308
className="react-datepicker__today-button"
283-
onClick={e => this.props.onSelect(moment.utc().utcOffset(this.props.utcOffset).startOf('date'), e)}>
309+
onClick={e => this.props.onSelect(getStartOfDate(newDateWithOffset(this.props.utcOffset)), e)}>
284310
{this.props.todayButton}
285311
</div>
286312
)
@@ -289,7 +315,7 @@ export default class Calendar extends React.Component {
289315
renderMonths = () => {
290316
var monthList = []
291317
for (var i = 0; i < this.props.monthsShown; ++i) {
292-
var monthDate = this.state.date.clone().add(i, 'M')
318+
var monthDate = addMonths(cloneDate(this.state.date), i)
293319
var monthKey = `month-${i}`
294320
monthList.push(
295321
<div key={monthKey} ref={div => { this.monthContainer = div }} className="react-datepicker__month-container">

0 commit comments

Comments
 (0)