|
| 1 | +import _ from 'lodash'; |
1 | 2 | import React, {Component} from 'react';
|
2 |
| -import {View, Incubator} from 'react-native-ui-lib'; |
3 |
| -import {data} from './MockData'; |
| 3 | +import {Incubator} from 'react-native-ui-lib'; |
| 4 | +import MockServer from './MockServer'; |
4 | 5 |
|
5 | 6 | export default class CalendarScreen extends Component {
|
6 |
| - // constructor(props) { |
7 |
| - // super(props); |
8 |
| - |
9 |
| - // setTimeout(() => { |
10 |
| - // this.setState({date: 1676026748000}); |
11 |
| - // }, 2000); |
12 |
| - // } |
| 7 | + pageIndex = 0; |
13 | 8 |
|
14 | 9 | state = {
|
15 |
| - date: undefined |
| 10 | + date: new Date().getTime(), |
| 11 | + events: [] as any[], |
| 12 | + showLoader: false |
16 | 13 | };
|
17 |
| - |
| 14 | + |
| 15 | + componentDidMount(): void { |
| 16 | + this.loadEvents(this.state.date); |
| 17 | + } |
| 18 | + |
| 19 | + loadEvents = async (date: number) => { |
| 20 | + this.setState({showLoader: true}); |
| 21 | + const {events} = this.state; |
| 22 | + const newEvents = await MockServer.getEvents(date); |
| 23 | + this.pageIndex++; |
| 24 | + this.setState({events: _.uniqBy([...events, ...newEvents], e => e.id), showLoader: false}); |
| 25 | + }; |
| 26 | + |
| 27 | + onChangeDate = (date: number) => { |
| 28 | + console.log('Date change: ', date); |
| 29 | + const {events} = this.state; |
| 30 | + if (date < events[0]?.start || date > _.last(events)?.start) { |
| 31 | + console.log('Load new events'); |
| 32 | + this.loadEvents(date); |
| 33 | + } |
| 34 | + }; |
| 35 | + |
| 36 | + onEndReached = (date: number) => { |
| 37 | + console.log('Reached End: ', date); |
| 38 | + this.loadEvents(date); |
| 39 | + }; |
| 40 | + |
18 | 41 | render() {
|
| 42 | + const {date, events, showLoader} = this.state; |
19 | 43 | return (
|
20 |
| - <View flex> |
21 |
| - <Incubator.Calendar data={data} staticHeader initialDate={this.state.date}> |
22 |
| - <Incubator.Calendar.Agenda/> |
23 |
| - </Incubator.Calendar> |
24 |
| - </View> |
| 44 | + <Incubator.Calendar data={events} initialDate={date} onChangeDate={this.onChangeDate} staticHeader> |
| 45 | + <Incubator.Calendar.Agenda onEndReached={this.onEndReached} showLoader={showLoader}/> |
| 46 | + </Incubator.Calendar> |
25 | 47 | );
|
26 | 48 | }
|
27 | 49 | }
|
0 commit comments