Ejemplo n.º 1
0
        public async Task <UiFlowScreenModel> RefreshStepDataAsync(IUiFlowContextData contextData,
                                                                   UiFlowScreenModel originalScreenModel, IDictionary <string, object> stepViewCustomizations = null)
        {
            TraceBegin(nameof(RefreshStepDataAsync), contextData);

            var result = originalScreenModel;

            if (!_stepDataLoaded)
            {
                await _syncLock.AsyncCriticalSection(async() =>
                {
                    if (!_stepDataLoaded)
                    {
                        LifecycleStage  = ScreenLifecycleStage.RefreshingStepData;
                        _stepDataLoaded = true;

                        var onRefreshStepDataAsync =
                            await OnRefreshModelAsync(contextData, originalScreenModel, stepViewCustomizations);
                        await OnScreenLoadCompletedAsync(contextData);
                        result         = onRefreshStepDataAsync;
                        LifecycleStage = ScreenLifecycleStage.RefreshStepDataCompleted;
                    }
                }
                                                     );
            }
            TraceEnd(nameof(RefreshStepDataAsync), contextData);

            return(result);
        }
Ejemplo n.º 2
0
        public async Task <IDictionary <string, object> > ResolveContainedFlowStartInfo(IUiFlowContextData contextData,
                                                                                        IDictionary <string, object> stepViewCustomizations)
        {
            LifecycleStage = ScreenLifecycleStage.ResolvingContainedFlowStartInfo;
            var startInfo = await OnResolveContainedFlowStartInfo(contextData, stepViewCustomizations);

            LifecycleStage = ScreenLifecycleStage.ResolveContainedFlowStartInfoCompleted;
            return(startInfo);
        }
Ejemplo n.º 3
0
        private void ThrowIfMustFail(IUiFlowContextData contextData, ScreenLifecycleStage stage)
        {
            var root = contextData.GetStepData <FlowInitializer.StartScreenModel>();

            if (root != null && (ScreenName)root.FailOnStep == ScreenNameId && root.FailOnEvent == stage)
            {
                throw new Exception($"Failing on {ScreenNameId}.{stage}");
            }
        }
Ejemplo n.º 4
0
        public bool ValidateTransitionAttempt(ScreenEvent triggeredEvent,
                                              IUiFlowContextData contextData, out string errorMessage)
        {
            TraceBegin(nameof(HandleStepEvent), contextData, triggeredEvent);
            LifecycleStage = ScreenLifecycleStage.ValidatingTransition;
            var isValid = OnValidate(triggeredEvent, contextData, out errorMessage);

            LifecycleStage = isValid
                                ? ScreenLifecycleStage.ValidateTransitionCompleted
                                : ScreenLifecycleStage.ValidateTransitionCompletedWithErrors;
            TraceEnd(nameof(HandleStepEvent), contextData, triggeredEvent);
            return(isValid);
        }
Ejemplo n.º 5
0
        public async Task <UiFlowScreenModel> CreateStepDataAsync(IUiFlowContextData contextData)
        {
            TraceBegin(nameof(CreateStepDataAsync), contextData);
            LifecycleStage = ScreenLifecycleStage.CreatingStepData;
            var result = await OnCreateModelAsync(contextData);

            _stepDataLoaded = true;
            await OnScreenLoadCompletedAsync(contextData);

            LifecycleStage = ScreenLifecycleStage.CreateStepDataCompleted;
            TraceEnd(nameof(CreateStepDataAsync), contextData);

            return(result);
        }
Ejemplo n.º 6
0
        public IScreenFlowConfigurator DefineActionHandlersOnCurrentScreen(IScreenFlowConfigurator screenConfiguration,
                                                                           IUiFlowContextData contextData)
        {
            TraceBegin(nameof(DefineActionHandlersOnCurrentScreen), contextData);
            LifecycleStage = ScreenLifecycleStage.DefiningTransitionsFromCurrentScreen;
            var cfg = OnRegisterUserActions(screenConfiguration, contextData);
            var internalScreenFlowConfigurator = ((IInternalScreenFlowConfigurator)cfg);

            internalScreenFlowConfigurator.AddErrorTransitionIfUndefined();
            this.Transitions    = internalScreenFlowConfigurator.Transitions;
            this._eventHandlers = internalScreenFlowConfigurator.Handlers;
            LifecycleStage      = ScreenLifecycleStage.DefineTransitionsFromCurrentScreenCompleted;
            TraceEnd(nameof(DefineActionHandlersOnCurrentScreen), contextData);
            return(cfg);
        }
Ejemplo n.º 7
0
        public async Task HandleStepEvent(ScreenEvent triggeredEvent, IUiFlowContextData contextData)
        {
            TraceBegin(nameof(HandleStepEvent), contextData, triggeredEvent);
            LifecycleStage = ScreenLifecycleStage.HandlingEvent;
            //TDO: inline next
            await OnHandlingStepEvent(triggeredEvent, contextData);

            var uiFlowStepData = contextData.GetCurrentStepData <UiFlowScreenModel>();

            if (uiFlowStepData != null)
            {
                uiFlowStepData.Errors = new List <UiFlowUserInputError>();
            }
            LifecycleStage = ScreenLifecycleStage.HandleEventCompleted;
            TraceEnd(nameof(HandleStepEvent), contextData, triggeredEvent);
        }