function createDialog()

in Node/core/src/dialogs/retrieve-favorite-location-dialog.ts [17:69]


function createDialog(apiKey: string) {
     return common.createBaseDialog()
        .onBegin(function (session, args) {
            session.dialogData.args = args;
            const favoritesManager = new  FavoritesManager(session.userData);
            const userFavorites = favoritesManager.getFavorites();

           // If the user has no favorite locations, switch to a normal location retriever dialog
           if (userFavorites.length == 0) {
               session.send(session.gettext(Strings.NoFavoriteLocationsFound));
               session.replaceDialog('retrieve-location-dialog',  session.dialogData.args);
               return;
           }

           session.dialogData.userFavorites = userFavorites;

           let locations: RawLocation[] = [];
           let names: string[] = [];
           for (let i = 0; i < userFavorites.length; i++) {
               locations.push(userFavorites[i].location);
               names.push(userFavorites[i].name);
           }
           
           session.send(new LocationCardBuilder(apiKey).createHeroCards(session, locations, true, names));
           session.send(session.gettext(Strings.SelectFavoriteLocationPrompt)).sendBatch();
        }).onDefault((session) => {
            const text: string = session.message.text;
            if (text === session.gettext(Strings.OtherComand)) {
                session.replaceDialog('retrieve-location-dialog',  session.dialogData.args);
            }
            else {
                const selection = tryParseCommandSelection(session.userData, text, session.dialogData.userFavorites.length);
                if ( selection.command === "select" ) {
                    // complete required fields
                    session.replaceDialog('require-fields-dialog', {
                                place: selection.selectedFavorite.location,
                                requiredFields: session.dialogData.args.requiredFields
                            });
                }
                else if (selection.command === session.gettext(Strings.DeleteCommand) ) {
                     session.dialogData.args.toBeDeleted = selection.selectedFavorite;
                     session.replaceDialog('delete-favorite-location-dialog',  session.dialogData.args);
                }
                else if (selection.command === session.gettext(Strings.EditCommand)) {
                    session.dialogData.args.toBeEditted = selection.selectedFavorite;
                    session.replaceDialog('edit-favorite-location-dialog',  session.dialogData.args);
                }
                else {
                    session.send(session.gettext(Strings.InvalidFavoriteLocationSelection, text)).sendBatch();
                }
            }
        });
}