);
    }
    _isAddDisabled: () => boolean;
    /**
     * Indicates if the Add button should be disabled.
     *
     * @private
     * @returns {boolean} - True to indicate that the Add button should
     * be disabled, false otherwise.
     */
    _isAddDisabled() {
        return !this.state.inviteItems.length
            || this.state.addToCallInProgress;
    }
    _onItemSelected: (Object) => Object;
    /**
     * Callback invoked when a selection has been made but before it has been
     * set as selected.
     *
     * @param {Object} item - The item that has just been selected.
     * @private
     * @returns {Object} The item to display as selected in the input.
     */
    _onItemSelected(item) {
        if (item.item.type === 'phone') {
            item.content = item.item.number;
        }
        return item;
    }
    _onSelectionChange: (Map<*, *>) => void;
    /**
     * Handles a selection change.
     *
     * @param {Map} selectedItems - The list of selected items.
     * @private
     * @returns {void}
     */
    _onSelectionChange(selectedItems) {
        this.setState({
            inviteItems: selectedItems
        });
    }
    _onSubmit: () => void;
    /**
     * Invite people and numbers to the conference. The logic works by inviting
     * numbers, people/rooms, and videosipgw in parallel. All invitees are
     * stored in an array. As each invite succeeds, the invitee is removed
     * from the array. After all invites finish, close the modal if there are
     * no invites left to send. If any are left, that means an invite failed
     * and an error state should display.
     *
     * @private
     * @returns {void}
     */
    _onSubmit() {
        const { inviteItems } = this.state;
        const invitees = inviteItems.map(({ item }) => item);
        const inviteTypeCounts = getInviteTypeCounts(invitees);
        sendAnalytics(createInviteDialogEvent(
            'clicked', 'inviteButton', {
                ...inviteTypeCounts,
                inviteAllowed: this._isAddDisabled()
            }));
        if (this._isAddDisabled()) {
            return;
        }
        this.setState({
            addToCallInProgress: true
        });
        const { dispatch } = this.props;
        dispatch(invite(invitees))
            .then(invitesLeftToSend => {
                // If any invites are left that means something failed to send
                // so treat it as an error.
                if (invitesLeftToSend.length) {
                    const erroredInviteTypeCounts
                        = getInviteTypeCounts(invitesLeftToSend);
                    logger.error(`${invitesLeftToSend.length} invites failed`,
                        erroredInviteTypeCounts);
                    sendAnalytics(createInviteDialogEvent(
                        'error', 'invite', {
                            ...erroredInviteTypeCounts
                        }));
                    this.setState({
                        addToCallInProgress: false,
                        addToCallError: true
                    });
                    const unsentInviteIDs
                        = invitesLeftToSend.map(invitee =>
                            invitee.id || invitee.number);
                    const itemsToSelect
                        = inviteItems.filter(({ item }) =>
                            unsentInviteIDs.includes(item.id || item.number));
                    if (this._multiselect) {
                        this._multiselect.setSelectedItems(itemsToSelect);
                    }
                    return;
                }
                this.setState({
                    addToCallInProgress: false
                });
                dispatch(hideDialog());
            });
    }
    _parseQueryResults: (Array