Skip to content

Commit e411aeb

Browse files
committed
renaming types
1 parent 4ff312f commit e411aeb

File tree

6 files changed

+59
-58
lines changed

6 files changed

+59
-58
lines changed

example/src/screens/agenda.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import React, {Component} from 'react';
22
import {Alert, StyleSheet, Text, View, TouchableOpacity} from 'react-native';
3-
import {Agenda, DateData, ReservationItemType, ReservationsType} from 'react-native-calendars';
3+
import {Agenda, DateData, AgendaEntry, AgendaSchedule} from 'react-native-calendars';
44
import testIDs from '../testIDs';
55

66
interface State {
7-
items?: ReservationsType;
7+
items?: AgendaSchedule;
88
}
99

1010
export default class AgendaScreen extends Component<State> {
@@ -63,7 +63,7 @@ export default class AgendaScreen extends Component<State> {
6363
}
6464
}
6565

66-
const newItems: ReservationsType = {};
66+
const newItems: AgendaSchedule = {};
6767
Object.keys(items).forEach(key => {
6868
newItems[key] = items[key];
6969
});
@@ -73,7 +73,7 @@ export default class AgendaScreen extends Component<State> {
7373
}, 1000);
7474
}
7575

76-
renderItem = (reservation: ReservationItemType, isFirst: boolean) => {
76+
renderItem = (reservation: AgendaEntry, isFirst: boolean) => {
7777
const fontSize = isFirst ? 16 : 14;
7878
const color = isFirst ? 'black' : '#43515c';
7979

@@ -96,7 +96,7 @@ export default class AgendaScreen extends Component<State> {
9696
);
9797
}
9898

99-
rowHasChanged = (r1: ReservationItemType, r2: ReservationItemType) => {
99+
rowHasChanged = (r1: AgendaEntry, r2: AgendaEntry) => {
100100
return r1.name !== r2.name;
101101
}
102102

src/agenda/index.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import {VelocityTracker} from '../velocityTracker';
2323
import {DateData} from '../types';
2424
import {getCalendarDateString} from '../services';
2525
import styleConstructor from './style';
26-
import {ReservationsType} from '../types';
26+
import {AgendaSchedule} from '../types';
2727
import CalendarList, {CalendarListProps} from '../calendar-list';
2828
import ReservationList, {ReservationListProps} from './reservation-list';
2929

@@ -35,7 +35,7 @@ export type AgendaProps = CalendarListProps & ReservationListProps & {
3535
/** the list of items that have to be displayed in agenda. If you want to render item as empty date
3636
the value of date key has to be an empty array []. If there exists no value for date key it is
3737
considered that the date in question is not yet loaded */
38-
items?: ReservationsType;
38+
items?: AgendaSchedule;
3939
/** callback that gets called when items for a certain month should be loaded (month became visible) */
4040
loadItemsForMonth?: (data: DateData) => void;
4141
/** callback that fires when the calendar is opened or closed */
@@ -344,7 +344,6 @@ export default class Agenda extends Component<AgendaProps, State> {
344344
<ReservationList
345345
{...reservationListProps}
346346
ref={this.list}
347-
items={this.props.items}
348347
selectedDay={this.state.selectedDay}
349348
topDay={this.state.topDay}
350349
onDayChange={this.onDayChange}

src/agenda/reservation-list/index.tsx

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,17 @@ import {sameDate} from '../../dateutils';
1010
import {toMarkingFormat} from '../../interface';
1111
import styleConstructor from './style';
1212
import Reservation, {ReservationProps} from './reservation';
13-
import {ReservationItemType, ReservationsType, DayReservations} from '../../types';
13+
import {AgendaEntry, AgendaSchedule} from '../../types';
1414

1515

1616
export type ReservationListProps = ReservationProps & {
1717
/** the list of items that have to be displayed in agenda. If you want to render item as empty date
1818
the value of date key kas to be an empty array []. If there exists no value for date key it is
1919
considered that the date in question is not yet loaded */
20-
items?: ReservationsType;
20+
items?: AgendaSchedule;
2121
selectedDay?: XDate;
2222
topDay?: XDate;
23-
/** Show items only for the selected day. Default = false */
23+
/** Show items only for the selected date. Default = false */
2424
showOnlySelectedDayItems?: boolean;
2525
/** callback that gets called when day changes while scrolling agenda list */
2626
onDayChange?: (day: XDate) => void;
@@ -46,8 +46,13 @@ export type ReservationListProps = ReservationProps & {
4646
onRefresh?: () => void;
4747
};
4848

49+
interface DayAgenda {
50+
reservation?: AgendaEntry;
51+
date?: XDate;
52+
}
53+
4954
interface State {
50-
reservations: DayReservations[];
55+
reservations: DayAgenda[];
5156
}
5257

5358
class ReservationList extends Component<ReservationListProps, State> {
@@ -61,7 +66,7 @@ class ReservationList extends Component<ReservationListProps, State> {
6166
items: PropTypes.object,
6267
selectedDay: PropTypes.instanceOf(XDate),
6368
topDay: PropTypes.instanceOf(XDate),
64-
/** Show items only for the selected day. Default = false */
69+
/** Show items only for the selected date. Default = false */
6570
showOnlySelectedDayItems: PropTypes.bool,
6671
/** callback that gets called when day changes while scrolling agenda list */
6772
onDayChange: PropTypes.func,
@@ -130,7 +135,7 @@ class ReservationList extends Component<ReservationListProps, State> {
130135
}
131136
}
132137

133-
updateDataSource(reservations: DayReservations[]) {
138+
updateDataSource(reservations: DayAgenda[]) {
134139
this.setState({
135140
reservations
136141
});
@@ -156,18 +161,16 @@ class ReservationList extends Component<ReservationListProps, State> {
156161
const day = iterator.clone();
157162
const res = props.items?.[toMarkingFormat(day)];
158163
if (res && res.length) {
159-
return res.map((reservation: ReservationItemType, i: number) => {
164+
return res.map((reservation: AgendaEntry, i: number) => {
160165
return {
161166
reservation,
162-
date: i ? undefined : day,
163-
day
167+
date: i ? undefined : day
164168
};
165169
});
166170
} else if (res) {
167171
return [
168172
{
169-
date: iterator.clone(),
170-
day
173+
date: iterator.clone()
171174
}
172175
];
173176
} else {
@@ -181,9 +184,10 @@ class ReservationList extends Component<ReservationListProps, State> {
181184
return {reservations: [], scrollPosition: 0};
182185
}
183186

184-
let reservations: DayReservations[] = [];
187+
let reservations: DayAgenda[] = [];
185188
if (this.state.reservations && this.state.reservations.length) {
186-
const iterator = this.state.reservations[0].day.clone();
189+
const iterator = this.state.reservations[0].date?.clone();
190+
if (iterator)
187191
while (iterator.getTime() < selectedDay.getTime()) {
188192
const res = this.getReservationsForDay(iterator, props);
189193
if (!res) {
@@ -235,11 +239,13 @@ class ReservationList extends Component<ReservationListProps, State> {
235239
const row = this.state.reservations[topRow];
236240
if (!row) return;
237241

238-
const day = row.day;
239-
const dateIsSame = this.selectedDay && sameDate(day, this.selectedDay);
240-
if (!dateIsSame && this.scrollOver) {
241-
this.selectedDay = day.clone();
242-
this.props.onDayChange?.(day.clone());
242+
const day = row.date;
243+
if (day) {
244+
const dateIsSame = this.selectedDay && sameDate(day, this.selectedDay);
245+
if (!dateIsSame && this.scrollOver) {
246+
this.selectedDay = day.clone();
247+
this.props.onDayChange?.(day.clone());
248+
}
243249
}
244250
};
245251

@@ -256,17 +262,17 @@ class ReservationList extends Component<ReservationListProps, State> {
256262
return false;
257263
};
258264

259-
renderRow = ({item, index}: {item: DayReservations; index: number}) => {
265+
renderRow = ({item, index}: {item: DayAgenda; index: number}) => {
260266
const reservationProps = extractComponentProps(Reservation, this.props);
261267

262268
return (
263269
<View onLayout={this.onRowLayoutChange.bind(this, index)}>
264-
<Reservation {...reservationProps} item={item} />
270+
<Reservation {...reservationProps} item={item.reservation} date={item.date}/>
265271
</View>
266272
);
267273
};
268274

269-
keyExtractor = (_item: DayReservations, index: number) => String(index);
275+
keyExtractor = (_item: DayAgenda, index: number) => String(index);
270276

271277
render() {
272278
const {items, selectedDay, theme, style} = this.props;

src/agenda/reservation-list/reservation.tsx

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,20 @@ import {isToday} from '../../dateutils';
99
// @ts-expect-error
1010
import {RESERVATION_DATE} from '../../testIDs';
1111
import styleConstructor from './style';
12-
import {Theme, DayReservations, ReservationItemType} from '../../types';
12+
import {Theme, AgendaEntry} from '../../types';
1313

1414

1515
export interface ReservationProps {
16-
item?: DayReservations;
16+
date?: XDate;
17+
item?: AgendaEntry;
1718
/** Specify theme properties to override specific styles for reservation parts. Default = {} */
1819
theme?: Theme;
1920
/** specify your item comparison function for increased performance */
20-
rowHasChanged?: (a: ReservationItemType, b: ReservationItemType) => boolean;
21+
rowHasChanged?: (a: AgendaEntry, b: AgendaEntry) => boolean;
2122
/** specify how each date should be rendered. date can be undefined if the item is not first in that day */
22-
renderDay?: (date?: XDate, item?: ReservationItemType) => React.Component | JSX.Element;
23+
renderDay?: (date?: XDate, item?: AgendaEntry) => React.Component | JSX.Element;
2324
/** specify how each item should be rendered in agenda */
24-
renderItem?: (reservation: ReservationItemType, isFirst: boolean) => React.Component | JSX.Element;
25+
renderItem?: (reservation: AgendaEntry, isFirst: boolean) => React.Component | JSX.Element;
2526
/** specify how empty date content with no items should be rendered */
2627
renderEmptyDate?: (date?: XDate) => React.Component | JSX.Element;
2728
}
@@ -30,6 +31,7 @@ class Reservation extends Component<ReservationProps> {
3031
static displayName = 'Reservation';
3132

3233
static propTypes = {
34+
date: PropTypes.any,
3335
item: PropTypes.any,
3436
/** Specify theme properties to override specific styles for reservation parts. Default = {} */
3537
theme: PropTypes.object,
@@ -51,29 +53,31 @@ class Reservation extends Component<ReservationProps> {
5153
}
5254

5355
shouldComponentUpdate(nextProps: ReservationProps) {
56+
const d1 = this.props.date;
57+
const d2 = nextProps.date;
5458
const r1 = this.props.item;
5559
const r2 = nextProps.item;
5660
let changed = true;
5761

58-
if (!r1 && !r2) {
62+
if (!d1 && !d2) {
5963
changed = false;
60-
} else if (r1 && r2) {
61-
if (r1.day.getTime() !== r2.day.getTime()) {
64+
} else if (d1 && d2) {
65+
if (d1.getTime() !== d2.getTime()) {
6266
changed = true;
63-
} else if (!r1.reservation && !r2.reservation) {
67+
} else if (!r1 && !r2) {
6468
changed = false;
65-
} else if (r1.reservation && r2.reservation) {
66-
if ((!r1.date && !r2.date) || (r1.date && r2.date)) {
69+
} else if (r1 && r2) {
70+
if ((!d1 && !d2) || (d1 && d2)) {
6771
if (isFunction(this.props.rowHasChanged)) {
68-
changed = this.props.rowHasChanged(r1.reservation, r2.reservation);
72+
changed = this.props.rowHasChanged(r1, r2);
6973
}
7074
}
7175
}
7276
}
7377
return changed;
7478
}
7579

76-
renderDate(date?: XDate, item?: ReservationItemType) {
80+
renderDate(date?: XDate, item?: AgendaEntry) {
7781
if (isFunction(this.props.renderDay)) {
7882
return this.props.renderDay(date, item);
7983
}
@@ -98,23 +102,21 @@ class Reservation extends Component<ReservationProps> {
98102
}
99103

100104
render() {
101-
const {item} = this.props;
102-
const reservation = item?.reservation;
103-
const date = item?.date;
105+
const {item, date} = this.props;
104106
let content;
105107

106-
if (reservation) {
108+
if (item) {
107109
const firstItem = date ? true : false;
108110
if (isFunction(this.props.renderItem)) {
109-
content = this.props.renderItem(reservation, firstItem);
111+
content = this.props.renderItem(item, firstItem);
110112
}
111113
} else if (isFunction(this.props.renderEmptyDate)) {
112114
content = this.props.renderEmptyDate(date);
113115
}
114116

115117
return (
116118
<View style={this.style.container}>
117-
{this.renderDate(date, reservation)}
119+
{this.renderDate(date, item)}
118120
<View style={this.style.innerContainer}>{content}</View>
119121
</View>
120122
);

src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,5 @@ export {default as CalendarProvider, CalendarContextProviderProps} from './expan
99
export {default as asCalendarConsumer} from './expandableCalendar/asCalendarConsumer';
1010
export {default as Timeline, TimelineProps} from './timeline/Timeline';
1111
export {default as CalendarUtils} from './services';
12-
export {DateData, ReservationItemType, ReservationsType} from './types';
12+
export {DateData, AgendaEntry, AgendaSchedule} from './types';
1313
export {default as LocaleConfig} from 'xdate';

src/types.ts

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -92,18 +92,12 @@ export interface Theme {
9292
};
9393
}
9494

95-
export type ReservationItemType = {
95+
export type AgendaEntry = {
9696
name: string;
9797
height: number;
9898
day: string;
9999
}
100100

101-
export type ReservationsType = {
102-
[date: string]: ReservationItemType[];
103-
}
104-
105-
export interface DayReservations {
106-
reservation?: ReservationItemType;
107-
date?: XDate;
108-
day: XDate;
101+
export type AgendaSchedule = {
102+
[date: string]: AgendaEntry[];
109103
}

0 commit comments

Comments
 (0)