Esempio n. 1
0
        private static CrudeButton <EditContext>?GetOnSubmitButton(RenderContext context)
        {
            var methods = ViewModelParser.ParseMethods(context.ViewModel);

            CrudeButton <EditContext>?button = null;

            foreach (var method in methods)
            {
                if (method.Attributes.FirstOrDefault(x => x is CrudeOnSubmitAttribute) is CrudeOnSubmitAttribute crudeOnSubmitAttribute)
                {
                    button = new CrudeButton <EditContext>(
                        context.CreateEvent <EditContext>(ctx => method.MethodInfo.Invoke(context.ViewModel, new object[] { ctx })),
                        crudeOnSubmitAttribute.Name);
                }
            }

            return(button);
        }
Esempio n. 2
0
        private static IEnumerable <CrudeButton> GetOnClickButtons(RenderContext context)
        {
            var methods = ViewModelParser.ParseMethods(context.ViewModel);

            var result = new List <CrudeButton>();

            foreach (var method in methods)
            {
                if (method.Attributes.FirstOrDefault(x => x is CrudeOnButtonClickAttribute) is CrudeOnButtonClickAttribute crudeOnSubmitAttribute)
                {
                    var button = new CrudeButton(
                        context.CreateEvent(() => method.MethodInfo.Invoke(context.ViewModel, new object[] { context.EditContext })),
                        crudeOnSubmitAttribute.Name);

                    result.Add(button);
                }
            }

            return(result);
        }
Esempio n. 3
0
        private static RenderFragment <EditContext> RenderFormContents(RenderContext context, CrudeButton <EditContext>?onSubmit) => ctx => builder =>
        {
            var items = ViewModelParser.ParseProperties(context.ViewModel);

            var seq = 0;

            builder.OpenElement(seq++, "crude-tree");
            builder.OpenElement(seq++, "crude-tree-header");

            builder.OpenComponent <DataAnnotationsValidator>(seq++);
            builder.CloseComponent();

            builder.OpenComponent <ValidationSummary>(seq++);
            builder.CloseComponent();

            builder.CloseElement();

            foreach (var item in items)
            {
                if (item.Type == CrudePropertyType.Field)
                {
                    var fragment = CreateFieldFragment(item);

                    builder.AddContent(seq++, fragment.Render(context));
                }

                if (item.Type == CrudePropertyType.Table)
                {
                    var fragment = CreateTableFragment(item);

                    if (fragment == null)
                    {
                        continue;
                    }

                    builder.AddContent(seq++, fragment.Render(context));
                }
            }

            builder.OpenElement(seq++, "crude-tree-footer");

            if (onSubmit != null)
            {
                builder.OpenElement(seq++, "button");
                builder.AddAttribute(seq++, "type", "submit");
                builder.AddContent(seq++, onSubmit.Name);
                builder.CloseElement();
            }

            foreach (var onButtonClick in GetOnClickButtons(context))
            {
                var button = new ButtonFragment(onButtonClick.Name, onButtonClick.Callback, string.Empty, false);

                builder.AddContent(seq++, button.Render(context));
            }

            builder.CloseElement();
            builder.CloseElement();
        };