| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 | import 'es6-symbol/implement';
import React, { Component } from 'react';
import { AppRegistry, Linking } from 'react-native';
import { App } from './features/app';
/**
 * React Native doesn't support specifying props to the main/root component (in
 * the JS/JSX source code). So create a wrapper React Component (class) around
 * features/app's App instead.
 *
 * @extends Component
 */
class Root extends Component {
    /**
     * {@code Root} component's property types.
     *
     * @static
     */
    static propTypes = {
        /**
         * The URL, if any, with which the app was launched.
         */
        url: React.PropTypes.string,
        /**
         * Whether the Welcome page is enabled. If {@code true}, the Welcome
         * page is rendered when the {@link App} is not at a location (URL)
         * identifying a Jitsi Meet conference/room.
         */
        welcomePageEnabled: React.PropTypes.bool
    };
    /**
     * Initializes a new {@code Root} instance.
     *
     * @param {Object} props - The read-only properties with which the new
     * instance is to be initialized.
     */
    constructor(props) {
        super(props);
        /**
         * The initial state of this Component.
         *
         * @type {{
         *     url: string
         * }}
         */
        this.state = {
            /**
             * The URL, if any, with which the app was launched.
             *
             * @type {string}
             */
            url: this.props.url
        };
        // Handle the URL, if any, with which the app was launched.
        Linking.getInitialURL()
            .then(url => this.setState({ url }))
            .catch(err => {
                console.error('Failed to get initial URL', err);
                // XXX Start with an empty URL if getting the initial URL fails;
                // otherwise, nothing will be rendered.
                if (this.state.url !== null) {
                    this.setState({ url: null });
                }
            });
    }
    /**
     * Implements React's {@link Component#render()}.
     *
     * @inheritdoc
     * @returns {ReactElement}
     */
    render() {
        const { url } = this.state;
        // XXX We don't render the App component until we get the initial URL.
        // Either it's null or some other non-null defined value.
        if (typeof url === 'undefined') {
            return null;
        }
        const {
            // The following props are forked in state:
            url: _, // eslint-disable-line no-unused-vars
            // The remaining props are passed through to App.
            ...props
        } = this.props;
        return (
            <App
                { ...props }
                url = { url } />
        );
    }
}
// Register the main/root Component.
AppRegistry.registerComponent('App', () => Root);
 |