private async Task <DialogTurnResult> GetIntentSwitchingResult(WaterfallStepContext sc, CalendarLuis.Intent topIntent, CalendarSkillState state) { var newFlowOptions = new CalendarSkillDialogOptions() { SubFlowMode = false }; if (topIntent == CalendarLuis.Intent.DeleteCalendarEntry || topIntent == CalendarLuis.Intent.AcceptEventEntry) { return(await sc.BeginDialogAsync(Actions.ChangeEventStatus)); } else if (topIntent == CalendarLuis.Intent.ChangeCalendarEntry) { return(await sc.BeginDialogAsync(Actions.UpdateEvent)); } else if (topIntent == CalendarLuis.Intent.CheckAvailability) { state.Clear(); return(await sc.ReplaceDialogAsync(nameof(CheckPersonAvailableDialog), newFlowOptions)); } else if (topIntent == CalendarLuis.Intent.ConnectToMeeting) { return(await sc.BeginDialogAsync(Actions.ConnectToMeeting)); } else if (topIntent == CalendarLuis.Intent.CreateCalendarEntry) { state.Clear(); return(await sc.ReplaceDialogAsync(nameof(CreateEventDialog), newFlowOptions)); } else if (topIntent == CalendarLuis.Intent.FindCalendarDetail || topIntent == CalendarLuis.Intent.FindCalendarEntry || topIntent == CalendarLuis.Intent.FindCalendarWhen || topIntent == CalendarLuis.Intent.FindCalendarWhere || topIntent == CalendarLuis.Intent.FindCalendarWho || topIntent == CalendarLuis.Intent.FindDuration || topIntent == CalendarLuis.Intent.FindMeetingRoom) { state.Clear(); return(await sc.ReplaceDialogAsync(nameof(ShowEventsDialog), new ShowMeetingsDialogOptions(ShowMeetingsDialogOptions.ShowMeetingReason.FirstShowOverview, newFlowOptions))); } else if (topIntent == CalendarLuis.Intent.TimeRemaining) { state.Clear(); return(await sc.ReplaceDialogAsync(nameof(TimeRemainingDialog), newFlowOptions)); } return(null); }