protected async onContinueDialog()

in sdk/typescript/libraries/bot-solutions/src/dialogs/routerDialog.ts [27:93]


    protected async onContinueDialog(innerDc: DialogContext): Promise<DialogTurnResult> {
        const status: InterruptionAction = await this.onInterruptDialog(innerDc);

        if (status === InterruptionAction.Resume) {
            // Resume the waiting dialog after interruption
            await innerDc.repromptDialog();

            return Dialog.EndOfTurn;
        } else if (status === InterruptionAction.Waiting) {
            // Stack is already waiting for a response, shelve inner stack
            return Dialog.EndOfTurn;
        } else {
            const activity: Activity = innerDc.context.activity;

            if (ActivityEx.isStartActivity(activity)) {
                await this.onStart(innerDc);
            }

            switch (activity.type) {
                case ActivityTypes.Message: {
                    // Note: This check is a workaround for adaptive card buttons that should map to an event
                    // (i.e. startOnboarding button in intro card)
                    if (activity.value) {
                        await this.onEvent(innerDc);
                    } else {
                        const result: DialogTurnResult = await innerDc.continueDialog();

                        switch (result.status) {
                            case DialogTurnStatus.empty: {
                                await this.route(innerDc);
                                break;
                            }
                            case DialogTurnStatus.complete: {
                                // End active dialog
                                await innerDc.endDialog();
                                break;
                            }
                            default:
                        }
                    }

                    // If the active dialog was ended on this turn (either on single-turn dialog, or on continueDialogAsync)
                    // run CompleteAsync method.
                    if (innerDc.activeDialog === undefined) {
                        await this.complete(innerDc);
                    }

                    break;
                }
                case ActivityTypes.Event: {
                    await this.onEvent(innerDc);
                    break;
                }
                case ActivityTypes.Invoke: {
                    // Used by Teams for Authentication scenarios.
                    await innerDc.continueDialog();
                    break;
                }
                default: {
                    await this.onSystemMessage(innerDc);
                    break;
                }
            }

            return Dialog.EndOfTurn;
        }
    }