1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- // @flow
-
- import { Component } from 'react';
- import { ListView } from 'react-native';
-
- import { appNavigate } from '../../app';
-
- import { getRecentRooms } from '../functions';
-
- /**
- * The type of the React {@code Component} props of {@link AbstractRecentList}
- */
- type Props = {
-
- /**
- * The redux store's {@code dispatch} function.
- */
- dispatch: Dispatch<*>
- };
-
- /**
- * The type of the React {@code Component} state of {@link AbstractRecentList}.
- */
- type State = {
-
- /**
- * The {@code ListView.DataSource} to be used for the {@code ListView}. Its
- * content comes from the native implementation of
- * {@code window.localStorage}.
- */
- dataSource: Object
- };
-
- /**
- * Implements a React {@link Component} which represents the list of conferences
- * recently joined, similar to how a list of last dialed numbers list would do
- * on a mobile device.
- *
- * @extends Component
- */
- export default class AbstractRecentList extends Component<Props, State> {
-
- /**
- * The datasource that backs the {@code ListView}.
- */
- listDataSource = new ListView.DataSource({
- rowHasChanged: (r1, r2) =>
- r1.conference !== r2.conference
- && r1.dateTimeStamp !== r2.dateTimeStamp
- });
-
- /**
- * Initializes a new {@code AbstractRecentList} instance.
- */
- constructor() {
- super();
-
- this.state = {
- dataSource: this.listDataSource.cloneWithRows([])
- };
- }
-
- /**
- * Implements React's {@link Component#componentWillMount()}. Invoked
- * immediately before mounting occurs.
- *
- * @inheritdoc
- */
- componentWillMount() {
- // The following must be done asynchronously because we don't have the
- // storage initiated on app startup immediately.
- getRecentRooms()
- .then(rooms =>
- this.setState({
- dataSource: this.listDataSource.cloneWithRows(rooms)
- }));
- }
-
- /**
- * Joins the selected room.
- *
- * @param {string} room - The selected room.
- * @returns {void}
- */
- _onJoin(room) {
- room && this.props.dispatch(appNavigate(room));
- }
-
- /**
- * Creates a bound onPress action for the list item.
- *
- * @param {string} room - The selected room.
- * @returns {Function}
- */
- _onSelect(room) {
- return this._onJoin.bind(this, room);
- }
- }
|