public async Task <AppMetadata.FlowMetadata.FlowStepMetadata> GetMetadata(IUiFlowInitializationStep initializationStep)
 {
     return(new AppMetadata.FlowMetadata.FlowStepMetadata
     {
         Data = await ResolveScreenDataMetadata(initializationStep),
         Navigations = await ResolveUserNavigationsMetadata(initializationStep)
     });
 }
Пример #2
0
        internal FlowInitializerWithLifecycleAdapter(IUiFlowInitializationStep target)
        {
            _target = target;
            SetRegistry();
            _uiFlowContextData = new UiFlowContextData
            {
                CurrentScreenStep = ScreenName.PreStart
            };

            void SetRegistry()
            {
                var items = typeof(TInitializer).Namespace.Split('.').SkipLast(2);
                var flowsRootNamespace = string.Join('.', items);

                _target.SetPropertyValueFast(nameof(UiFlowScreen.Registry),
                                             new FlowsRegistry(typeof(TInitializer).Assembly, flowsRootNamespace, string.Empty));
            }
        }
Пример #3
0
 public FlowRuntimeInfo(IUiFlowInitializationStep initializationStep,
                        IReadOnlyDictionary <ScreenName, IUiFlowScreen> screens)
 {
     InitializationStep = initializationStep;
     Screens            = screens;
 }
        private async Task <AppMetadata.FlowMetadata.ScreenDataModelMetadata> ResolveScreenDataMetadata(IUiFlowInitializationStep uiFlowScreen)
        {
            var  type     = uiFlowScreen.GetType();
            Type dataType = null;

            while (type != null && (dataType = type.GetNestedTypes().SingleOrDefault(x => x.BaseTypes().Contains(typeof(InitialFlowScreenModel)))) == null)
            {
                type = type.BaseType;
            }

            AppMetadata.FlowMetadata.ScreenDataModelMetadata resolveScreenDataMetadata = null;
            if (dataType != null)
            {
                resolveScreenDataMetadata = new AppMetadata.FlowMetadata.ScreenDataModelMetadata
                {
                    TypeName   = dataType.FullName,
                    Properties = dataType.GetProperties(BindingFlags.Instance | BindingFlags.Public |
                                                        BindingFlags.GetProperty | BindingFlags.SetProperty | BindingFlags.DeclaredOnly)
                                 .Select(x => new AppMetadata.FlowMetadata.ScreenDataModelMetadata.ScreenProperty
                    {
                        TypeName     = x.PropertyType.FullName,
                        Name         = x.Name,
                        IsSerialized = x.GetCustomAttribute <JsonIgnoreAttribute>() == null
                    }).ToArray()
                };
            }
            return(resolveScreenDataMetadata);
        }
 private async Task <IEnumerable <AppMetadata.FlowMetadata.NavigationMetadata> > ResolveUserNavigationsMetadata(IUiFlowInitializationStep uiFlowScreen)
 {
     throw new NotSupportedException("navigations metadata resolver needs to be implemented first");
     return(new AppMetadata.FlowMetadata.NavigationMetadata[0]);
 }
 public TestFlowCreateStepDataConfigurator(IUiFlowInitializationStep initializationTarget) : base(ScreenName.PreStart)
 {
     _initializationTarget = initializationTarget;
 }