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) });
}
}
];
}