Skip to content

Commit fbe844a

Browse files
committed
fix: 🐛 解决wheel选择器没有12月的问题!
1 parent 0af1b05 commit fbe844a

File tree

11 files changed

+24798
-17738
lines changed

11 files changed

+24798
-17738
lines changed

.gitignore

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,4 +70,11 @@ android/keystores/debug.keystore
7070
lib/
7171

7272
.env
73-
web-build
73+
web-build
74+
.yarn/*
75+
!.yarn/patches
76+
!.yarn/plugins
77+
!.yarn/releases
78+
!.yarn/sdks
79+
!.yarn/versions
80+
example/.yarn/*

.yarnrc.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
nodeLinker: node-modules

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
# react-native-date-picker
66

77
[![styled with prettier](https://img.shields.io/badge/styled_with-prettier-ff69b4.svg)](https://github.com/prettier/prettier)
8-
[![license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/limintao/react-native-date-picker/blob/main/LICENSE)
9-
[![npm version](https://img.shields.io/npm/v/eact-native-date-picker.svg?style=flat)](https://www.npmjs.com/package/eact-native-date-picker)
10-
[![npm](https://img.shields.io/npm/dt/eact-native-date-picker.svg)](https://www.npmjs.com/package/eact-native-date-picker)
8+
[![license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/limintao/react-native-dates-picker/blob/main/LICENSE)
9+
[![npm version](https://img.shields.io/npm/v/react-native-dates-picker.svg?style=flat)](https://www.npmjs.com/package/react-native-dates-picker)
10+
[![npm](https://img.shields.io/npm/dt/react-native-dates-picker.svg)](https://www.npmjs.com/package/react-native-dates-picker)
1111

1212
React Native 的 DateTimePicker 组件,允许你创建一个可自定义的日期和时间选择器。该组件使用 [Day.js](https://day.js.org/) 库,并包含一组样式属性,使你可以根据自己的 UI 设计更改日历的每一项。
1313

example/src/App.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -214,11 +214,11 @@ export default function App() {
214214
dates={dates}
215215
displayFullDays
216216
timePicker={timePicker}
217-
// minDate={dayjs().startOf('second')}
218-
// maxDate={dayjs().add(4, 'day').endOf('second')}
217+
// minDate={range.startDate}
218+
// maxDate={new Date()}
219219
//firstDayOfWeek={1}
220220
// columns={['year', 'month', 'day', 'hour', 'minute', 'second']}
221-
onChange={onChange}
221+
// onChange={onChange}
222222
headerButtonColor={theme?.mainColor}
223223
selectedItemColor={theme?.mainColor}
224224
// eslint-disable-next-line react-native/no-inline-styles

example/yarn.lock

Lines changed: 12159 additions & 8646 deletions
Large diffs are not rendered by default.

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "react-native-dates-picker",
3-
"version": "0.0.5",
3+
"version": "0.0.6",
44
"description": "Customizable date picker for React Native",
55
"main": "lib/commonjs/index",
66
"module": "lib/module/index",
@@ -31,7 +31,7 @@
3131
"lint": "eslint .",
3232
"prepack": "bob build",
3333
"release": "release-it",
34-
"example": "yarn --cwd example",
34+
"example": "cd example && yarn start",
3535
"bootstrap": "yarn example && yarn install"
3636
},
3737
"keywords": [

src/DateTimePicker.tsx

Lines changed: 66 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -209,57 +209,72 @@ const DateTimePicker = (
209209

210210
const onSelectDate = useCallback(
211211
(datetime: DateType) => {
212-
if (onChange)
213-
if (mode === 'single') {
214-
const newDate = timePicker ? datetime : getStartOfDay(datetime);
215-
216-
dispatch({
217-
type: CalendarActionKind.CHANGE_CURRENT_DATE,
218-
payload: newDate,
219-
});
220-
221-
(onChange as SingleChange)({
222-
date: newDate,
223-
});
224-
} else if (mode === 'range') {
225-
const sd = state.startDate;
226-
const ed = state.endDate;
227-
let isStart: boolean = true;
228-
229-
if (sd && !ed && dateToUnix(datetime) >= dateToUnix(sd!))
230-
isStart = false;
231-
232-
(onChange as RangeChange)({
233-
startDate: isStart ? getStartOfDay(datetime) : sd,
234-
endDate: !isStart ? getEndOfDay(datetime) : undefined,
235-
});
236-
} else if (mode === 'multiple') {
237-
const safeDates = (state.dates as DateType[]) || [];
238-
const newDate = getStartOfDay(datetime);
239-
240-
const exists = safeDates.some((ed) => areDatesOnSameDay(ed, newDate));
241-
242-
const newDates = exists
243-
? safeDates.filter((ed) => !areDatesOnSameDay(ed, newDate))
244-
: [...safeDates, newDate];
245-
246-
newDates.sort((a, b) => (dayjs(a).isAfter(dayjs(b)) ? 1 : -1));
247-
248-
(onChange as MultiChange)({
249-
dates: newDates,
250-
datePressed: newDate,
251-
change: exists ? 'removed' : 'added',
252-
});
253-
} else if (mode === 'wheel') {
254-
dispatch({
255-
type: CalendarActionKind.CHANGE_CURRENT_DATE,
256-
payload: datetime,
257-
});
258-
259-
(onChange as SingleChange)({
260-
date: datetime,
261-
});
262-
}
212+
if (mode === 'single') {
213+
const newDate = timePicker ? datetime : getStartOfDay(datetime);
214+
215+
dispatch({
216+
type: CalendarActionKind.CHANGE_CURRENT_DATE,
217+
payload: newDate,
218+
});
219+
220+
(onChange as SingleChange)?.({
221+
date: newDate,
222+
});
223+
} else if (mode === 'range') {
224+
const sd = state.startDate;
225+
const ed = state.endDate;
226+
let isStart: boolean = true;
227+
228+
if (sd && !ed && dateToUnix(datetime) >= dateToUnix(sd!))
229+
isStart = false;
230+
231+
const newDateRang = {
232+
startDate: isStart ? getStartOfDay(datetime) : sd,
233+
endDate: !isStart ? getEndOfDay(datetime) : undefined,
234+
};
235+
236+
dispatch({
237+
type: CalendarActionKind.CHANGE_SELECTED_RANGE,
238+
payload: newDateRang,
239+
});
240+
241+
(onChange as RangeChange)?.(newDateRang);
242+
} else if (mode === 'multiple') {
243+
const safeDates = (state.dates as DateType[]) || [];
244+
const newDate = getStartOfDay(datetime);
245+
246+
const exists = safeDates.some((ed) => areDatesOnSameDay(ed, newDate));
247+
248+
const newDates = exists
249+
? safeDates.filter((ed) => !areDatesOnSameDay(ed, newDate))
250+
: [...safeDates, newDate];
251+
252+
newDates.sort((a, b) => (dayjs(a).isAfter(dayjs(b)) ? 1 : -1));
253+
254+
const newDatesObj = {
255+
dates: newDates,
256+
datePressed: newDate,
257+
change: (exists
258+
? 'removed'
259+
: 'added') as Parameters<MultiChange>[0]['change'],
260+
};
261+
262+
dispatch({
263+
type: CalendarActionKind.CHANGE_SELECTED_MULTIPLE,
264+
payload: newDatesObj,
265+
});
266+
267+
(onChange as MultiChange)?.(newDatesObj);
268+
} else if (mode === 'wheel') {
269+
dispatch({
270+
type: CalendarActionKind.CHANGE_CURRENT_DATE,
271+
payload: datetime,
272+
});
273+
274+
(onChange as SingleChange)?.({
275+
date: datetime,
276+
});
277+
}
263278
},
264279
[onChange, mode, timePicker, state.startDate, state.endDate, state.dates]
265280
);

src/components/DatePicker.tsx

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import {
1414
function createNumberList(start: number, end: number) {
1515
return new Array(end - start)
1616
.fill(0)
17-
.map((_, index) => String(index + start).padStart(2, '0'));
17+
.map((_, index) => String(index + 1 + start).padStart(2, '0'));
1818
}
1919

2020
const DatePicker = () => {
@@ -41,15 +41,16 @@ const DatePicker = () => {
4141

4242
const { year: startYear, month: startMonth } = getParsedDate(minDate);
4343
const { year: endYear, month: endMonth } = getParsedDate(maxDate);
44-
const years = createNumberList(startYear, endYear + 1);
44+
const years = createNumberList(startYear, endYear);
4545
const months = useMemo(
4646
() =>
4747
createNumberList(
48-
startYear === year ? startMonth + 1 : 1,
49-
endYear === year ? endMonth + 2 : 12
48+
startYear === year ? startMonth : 0,
49+
endYear === year ? endMonth + 1 : 12
5050
),
5151
[endMonth, endYear, startMonth, startYear, year]
5252
);
53+
5354
const days = useMemo(
5455
() => getDaysNumInMonth(year, month + 1, minDate, maxDate),
5556
[year, month, minDate, maxDate]

src/components/DaySelector.tsx

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ const DaySelector = () => {
117117
if (inRange && !leftCrop && !rightCrop) isSelected = false;
118118
}
119119
} else if (mode === 'single')
120-
isSelected = areDatesOnSameDay(day.date, date);
120+
isSelected = areDatesOnSameDay(day.date, currentDate);
121121

122122
return {
123123
...day,
@@ -143,6 +143,7 @@ const DaySelector = () => {
143143
startDate,
144144
endDate,
145145
dates,
146+
currentDate,
146147
]
147148
);
148149

@@ -165,8 +166,8 @@ const DaySelector = () => {
165166
))}
166167
</View>
167168
<View style={[styles.daysContainer, theme.daysPanelStyle]}>
168-
{daysGrid?.map((day, index) => {
169-
return day ? (
169+
{daysGrid?.map((day, index) =>
170+
day ? (
170171
<Day
171172
key={index}
172173
date={day.date}
@@ -184,8 +185,8 @@ const DaySelector = () => {
184185
/>
185186
) : (
186187
<EmptyDay key={index} height={height} />
187-
);
188-
})}
188+
)
189+
)}
189190
</View>
190191
</View>
191192
);

src/components/YearSelector.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ import { useCalendarContext } from '../CalendarContext';
1111
import { getDateYear, getYearRange } from '../utils';
1212

1313
const YearSelector = () => {
14-
const { currentDate, currentYear, date, onSelectYear, theme } =
14+
const { currentDate, currentYear, onSelectYear, theme } =
1515
useCalendarContext();
16-
const selectedYear = getDateYear(date);
16+
const selectedYear = getDateYear(currentDate);
1717

1818
const generateCells = useCallback(() => {
1919
const years = getYearRange(currentYear);

0 commit comments

Comments
 (0)