public IViewComponentResult Invoke(
            string label,
            IEnumerable <CheckboxListItemViewModel> checkboxes,
            bool populateWithCurrentValues,
            string?hintText
            )
        {
            var checkboxList = checkboxes.Select(
                c => new CheckboxItemViewModel(
                    c.AspFor,
                    c.AspFor,
                    c.Label,
                    GetValueFromModel(c.AspFor, populateWithCurrentValues),
                    c.HintText,
                    null
                    )
                );

            var viewModel = new CheckboxesViewModel(
                label,
                string.IsNullOrEmpty(hintText) ? null : hintText,
                checkboxList
                );

            return(View(viewModel));
        }
 public static IHtmlContent GovUkCheckboxes(
     this IHtmlHelper htmlHelper,
     CheckboxesViewModel checkboxesViewModel)
 {
     return(htmlHelper.Partial("/GovUkDesignSystemComponents/Checkboxes.cshtml", checkboxesViewModel));
 }
 public CheckboxesView()
 {
     InitializeComponent();
     BindingContext = new CheckboxesViewModel();
 }
        public static IHtmlContent GenerateHtml <TModel, TPropertyListItem>(
            IHtmlHelper <TModel> htmlHelper,
            Expression <Func <TModel, List <TPropertyListItem> > > propertyLambdaExpression,
            FieldsetViewModel fieldsetOptions = null,
            HintViewModel hintOptions         = null,
            Dictionary <TPropertyListItem, Func <object, object> > conditionalOptions = null)
            where TModel : GovUkViewModel
            where TPropertyListItem : struct, IConvertible
        {
            PropertyInfo property = ExpressionHelpers.GetPropertyFromExpression(propertyLambdaExpression);

            ThrowIfPropertyTypeIsNotListOfEnums <TPropertyListItem>(property);
            string propertyName = property.Name;

            TModel model = htmlHelper.ViewData.Model;
            List <TPropertyListItem> currentlySelectedValues =
                ExpressionHelpers.GetPropertyValueFromModelAndExpression(model, propertyLambdaExpression);

            List <TPropertyListItem> allEnumValues =
                Enum.GetValues(typeof(TPropertyListItem))
                .Cast <TPropertyListItem>()
                .ToList();

            List <ItemViewModel> checkboxes = allEnumValues
                                              .Select(enumValue =>
            {
                var isEnumValueInListOfCurrentlySelectedValues =
                    currentlySelectedValues != null && currentlySelectedValues.Contains(enumValue);

                string checkboxLabelText = GetCheckboxLabelText(enumValue);

                var checkboxItemViewModel = new CheckboxItemViewModel
                {
                    Value   = enumValue.ToString(),
                    Id      = $"GovUk_Checkbox_{propertyName}_{enumValue}",
                    Checked = isEnumValueInListOfCurrentlySelectedValues,
                    Label   = new LabelViewModel
                    {
                        Text = checkboxLabelText
                    }
                };

                if (conditionalOptions != null && conditionalOptions.TryGetValue(enumValue, out Func <object, object> conditionalHtml))
                {
                    checkboxItemViewModel.Conditional = new Conditional {
                        Html = conditionalHtml
                    };
                }

                return(checkboxItemViewModel);
            })
                                              .Cast <ItemViewModel>()
                                              .ToList();

            var checkboxesViewModel = new CheckboxesViewModel
            {
                Name     = $"GovUk_Checkbox_{propertyName}",
                IdPrefix = $"GovUk_{propertyName}",
                Items    = checkboxes,
                Fieldset = fieldsetOptions,
                Hint     = hintOptions
            };

            if (model.HasErrorFor(property))
            {
                checkboxesViewModel.ErrorMessage = new ErrorMessageViewModel
                {
                    Text = model.GetErrorFor(property)
                };
            }

            return(htmlHelper.Partial("/GovUkDesignSystemComponents/Checkboxes.cshtml", checkboxesViewModel));
        }
Ejemplo n.º 5
0
 public static IHtmlContent GovUkCheckboxes(
     this IHtmlHelper htmlHelper,
     CheckboxesViewModel checkboxesViewModel)
 {
     return(htmlHelper.Partial("~/Partials/Checkboxes.cshtml", checkboxesViewModel));
 }