function getLocationPickerPrompt()

in Node/core/src/botbuilder-location.ts [64:126]


function getLocationPickerPrompt() {
    return [
        // handle different ways of retrieving a location (favorite, other, etc)
        (session: Session, args: ILocationPromptOptions, next: (results?: IDialogResult<any>) => void) => {
            session.dialogData.args = args;

            if (!args.skipFavorites && (new  FavoritesManager(session.userData)).getFavorites().length > 0) {
                session.beginDialog('start-hero-card-dialog');
            }
            else {
                next();
            }
        },
        // retrieve location
        (session: Session, results: IDialogResult<any>, next: (results?: IDialogResult<any>) => void) => {
            if (results && results.response && results.response.entity === session.gettext(Strings.FavoriteLocations)) {
                session.beginDialog('retrieve-favorite-location-dialog', session.dialogData.args);
            }
            else {
                session.beginDialog('retrieve-location-dialog', session.dialogData.args);
            }
        },
         // make final confirmation
        (session: Session, results: IDialogResult<any>, next: (results?: IDialogResult<any>) => void) => {
            if (results.response && results.response.place) {
                session.dialogData.place =  results.response.place;
                if (session.dialogData.args.skipConfirmationAsk) {
                    next({ response: { confirmed: true }});
                }
                else {
                    var separator = session.gettext(Strings.AddressSeparator);
                    var promptText = session.gettext(Strings.ConfirmationAsk, common.getFormattedAddressFromLocation(results.response.place, separator));
                    session.beginDialog('confirm-dialog' , { confirmationPrompt: promptText });
                }
            }
            else {
                next(results);
            }
        },
        // offer add to favorites, if applicable
        (session: Session, results: IDialogResult<any>, next: (results?: IDialogResult<any>) => void) => {
            session.dialogData.confirmed =  results.response.confirmed;
            if(results.response && results.response.confirmed && !session.dialogData.args.skipFavorites) {
                session.beginDialog('add-favorite-location-dialog', { place : session.dialogData.place });
            }
            else {
                 next(results);
            }
        },
        (session: Session, results: IDialogResult<any>, next: (results?: IDialogResult<any>) => void) => {
            if (results.response && results.response.cancel) {
                session.endDialogWithResult(null);
            }
            else if ( !session.dialogData.confirmed || (results.response && results.response.reset)) {
                session.send(Strings.ResetPrompt);
                session.replaceDialog('locationPickerPrompt', session.dialogData.args);
            }
            else {
                next({ response: common.processLocation(session.dialogData.place) });
            }
        }
    ];
}