/// <summary> /// Creates a new Checkbox control. /// </summary> /// <param name="requestContext">The request helper.</param> /// <param name="model">The current model.</param> /// <param name="metadata">The model metadata.</param> /// <param name="datasource">The checkbox datasource.</param> public FWCheckboxControl(FWRequestContext requestContext, object model, ModelMetadata metadata, IEnumerable <FWDatasourceItem> datasource) : base(requestContext, model, metadata) { _values = new Dictionary <string, string>(); foreach (var item in datasource) { _values.Add(item.Id, item.Value); } if (FWReflectionHelper.IsCollection(metadata.ModelType)) { var list = model as IEnumerable; foreach (var item in list) { _selected.Add(item.ToString()); } } else { if (model != null) { _selected.Add(model.ToString()); } } }
/// <summary> /// Initializes a new instance of the <see cref="FWListController" />. /// </summary> /// <param name="memoryCache">The memory cache service reference.</param> /// <param name="serviceProvider">The service provider.</param> /// <param name="urlHelperFactory">The url helper factory.</param> /// <param name="actionAccessor">The action accessor.</param> /// <param name="metadataProvider">The model metadata provider.</param> public FWListController(IMemoryCache memoryCache, IServiceProvider serviceProvider, IUrlHelperFactory urlHelperFactory, IActionContextAccessor actionAccessor, IModelMetadataProvider metadataProvider) { _memoryCache = memoryCache; _serviceProvider = serviceProvider; _requestContext = new FWRequestContext(urlHelperFactory, actionAccessor, metadataProvider); }
/// <summary> /// Creates a new Radio control. /// </summary> /// <param name="requestContext">The request helper.</param> /// <param name="model">The current model.</param> /// <param name="metadata">The model metadata.</param> public FWRadioControl(FWRequestContext requestContext, object model, ModelMetadata metadata) : base(requestContext, model, metadata) { if (FWReflectionHelper.CheckType <bool>(metadata.ModelType)) { _isBoolean = true; _values = new Dictionary <string, string> { { "true", GetModelResource("TRUE") }, { "false", GetModelResource("FALSE") } }; if (model != null) { _selected = model.ToString(); } } else if (FWReflectionHelper.IsEnum(metadata.ModelType)) { var enumDictionary = FWEnumHelper.GetEnumAsDictonary(metadata.ModelType); _values = new Dictionary <string, string>(); // Gets the resource values for the enum items. foreach (var item in enumDictionary) { _values.Add(item.Key, GetModelResource(item.Value)); } _selected = FWEnumHelper.GetValues(model as Enum).FirstOrDefault(); } else { throw new FWMissingDatasourceException(Id); } }
/// <summary> /// Creates a new control. /// </summary> /// <param name="requestContext">The request helper.</param> /// <param name="model">The current model.</param> /// <param name="metadata">The model metadata.</param> public FWInputControlFactory(FWRequestContext requestContext, object model, ModelMetadata metadata) { _requestContext = requestContext; _modelType = FWReflectionHelper.GetUnderlyingType(metadata.ModelType); _model = model; _metadata = metadata; }
/// <summary> /// Creates a new Currency control. /// </summary> /// <param name="requestContext">The request helper.</param> /// <param name="model">The current model.</param> /// <param name="metadata">The model metadata.</param> public FWCurrencyControl(FWRequestContext requestContext, object model, ModelMetadata metadata) : base(requestContext, model, metadata) { if (ModelType != FWKnownTypes.Decimal) { throw new ArgumentException("Currency must use decimal properties."); } }
/// <summary> /// Creates a new Display control. /// </summary> /// <param name="requestContext">The request helper.</param> /// <param name="model">The current model.</param> /// <param name="metadata">The model metadata.</param> public FWDisplayControl(FWRequestContext requestContext, object model, ModelMetadata metadata) : base(metadata) { Name = metadata.PropertyName; _requestContext = requestContext; _modelType = FWReflectionHelper.GetUnderlyingType(metadata.ModelType); _model = model; _metadata = metadata; }
/// <summary> /// Creates a new List control. /// </summary> /// <param name="requestContext">The request helper.</param> /// <param name="metadata">The model metadata.</param> /// <param name="model">The current model.</param> public FWListControl(FWRequestContext requestContext, ModelMetadata metadata, IEnumerable model) { RequestContext = requestContext; Data = model; if (model is IFWPagination pagination) { _paginator = new FWPaginator(pagination); } }
/// <summary> /// Creates a new DetailTable control. /// </summary> /// <param name="requestContext">The request helper.</param> /// <param name="model">The current model.</param> /// <param name="metadata">The model metadata.</param> public FWDetailTableControl(FWRequestContext requestContext, IEnumerable model, ModelMetadata metadata) : base(requestContext, model, metadata) { // Sets the sizes of columns of the table to be defined by the user. AutoSizeColumns = false; if (_model == null) { _model = Activator.CreateInstance(metadata.ModelType.GetGenericArguments()[0]); } }
/// <summary> /// Initializes a new instance of the <see cref="FWInputControl" />. /// </summary> /// <param name="requestContext">The request helper.</param> /// <param name="model">The current model.</param> /// <param name="metadata">The model metadata.</param> protected FWInputControl(FWRequestContext requestContext, object model, ModelMetadata metadata) : base(metadata) { RequestContext = requestContext; Name = metadata.PropertyName; Model = model; DisplayName = metadata.DisplayName; ModelType = FWReflectionHelper.GetUnderlyingType(metadata.ModelType); ContainerType = metadata.ContainerType; IsRequired = metadata.IsRequired(); IsReadOnly = metadata.IsReadOnly; }
/// <summary> /// Creates a new Grid control. /// </summary> /// <param name="requestContext">The request helper.</param> /// <param name="metadata">The model metadata.</param> /// <param name="options">Initialization options for the grid.</param> public FWGridControl(FWRequestContext requestContext, ModelMetadata metadata, FWGridOptions options) : base(requestContext, null, metadata, options.Id) { _fullRender = true; _cacheKey = options.CacheKey; // Checks if the filter has a pagination. if (_pagination.IsAssignableFrom(options.FilterType)) { var dataOptions = Activator.CreateInstance(options.FilterType); InitializeDataFiltering(dataOptions as IFWPagination); } }
/// <summary> /// Creates a new Grid control. /// </summary> /// <param name="requestContext">The request helper.</param> /// <param name="metadata">The model metadata.</param> /// <param name="model">The current model.</param> public FWGridControl(FWRequestContext requestContext, ModelMetadata metadata, IEnumerable model) : base(requestContext, model, metadata) { if (model is IFWPagination pagination) { InitializeDataFiltering(pagination); } if (model is IFWSelectable selectable) { _selection = selectable.Selected; } }
/// <summary> /// Creates a new Table. /// </summary> /// <param name="requestContext">The request helper.</param> /// <param name="model">The current model.</param> /// <param name="metadata">The model metadata.</param> /// <param name="id">The control id.</param> public FWTableControl(FWRequestContext requestContext, IEnumerable model, ModelMetadata metadata, string id) : base(id) { //if (!FWReflectionHelper.IsCollection(metadata.ModelType)) // throw new FWInvalidPropertyTypeException(metadata.PropertyName, FWKnownTypes.IEnumerable); Metadata = metadata; Data = model; RequestContext = requestContext; ListType = metadata.ModelType.GetGenericArguments().First(); ParentType = metadata.ContainerType ?? metadata.ModelType; }
/// <summary> /// Creates a new Radio control. /// </summary> /// <param name="requestContext">The request helper.</param> /// <param name="model">The current model.</param> /// <param name="metadata">The model metadata.</param> /// <param name="datasource">The radiobutton datasource.</param> public FWRadioControl(FWRequestContext requestContext, object model, ModelMetadata metadata, IEnumerable <FWDatasourceItem> datasource) : base(requestContext, model, metadata) { _values = new Dictionary <string, string>(); foreach (var item in datasource) { _values.Add(item.Id, item.Value); } if (model != null) { _selected = model.ToString(); } }
/// <summary> /// Creates a new DetailGrid control. /// </summary> /// <param name="requestContext">The request helper.</param> /// <param name="model">The current model.</param> /// <param name="metadata">The model metadata.</param> public FWDetailGridControl(FWRequestContext requestContext, IEnumerable model, ModelMetadata metadata) : base(requestContext, model, metadata) { _listType = metadata.ModelType.GenericTypeArguments.FirstOrDefault(); if (_listType == null) { throw new FWInvalidModelException("Detail Grid model must be a generic list."); } _properties = FWReflectionHelper.GetPublicProperties(_listType).Where(f => !f.IsDefined(typeof(FWDatasourceAttribute))); _modelPrefix = metadata.PropertyName; _parentType = metadata.ContainerType ?? metadata.ModelType; }
/// <summary> /// Gets the column text value. /// </summary> /// <param name="requestContext">The request helper.</param> /// <param name="item">The column object item.</param> /// <param name="index">The line index.</param> /// <returns>The column text value.</returns> public override string GetValue(FWRequestContext requestContext, object item, object index) { HtmlContentBuilder builder = new HtmlContentBuilder(); foreach (var template in _templates) { // Formats the template the the object values. Dictionary <string, string> dictionary = item.GetType().GetProperties() .ToDictionary(x => x.Name, x => x.GetValue(item)?.ToString() ?? ""); dictionary.Add("FWTemplateIndex", index.ToString()); var html = Smart.Format(template, dictionary); builder.AppendHtml(html); } return(builder.GetContent()); }
/// <summary> /// Creates a new List control. /// </summary> /// <param name="requestContext">The request helper.</param> /// <param name="metadata">The model metadata.</param> /// <param name="options">Initialization options for the list.</param> public FWListControl(FWRequestContext requestContext, ModelMetadata metadata, FWListOptions options) : base(options.Id) { _fullRender = true; _cacheKey = options.CacheKey; RequestContext = requestContext; ListType = metadata.ModelType.GetGenericArguments().First(); ParentType = metadata.ContainerType ?? metadata.ModelType; if (_paginationInterface.IsAssignableFrom(options.FilterType)) { _paginator = new FWPaginator(Activator.CreateInstance(options.FilterType) as IFWPagination); } }
/// <summary> /// Creates a new Textbox control. /// </summary> /// <param name="requestContext">The request helper.</param> /// <param name="model">The current model.</param> /// <param name="metadata">The model metadata.</param> public FWTextboxControl(FWRequestContext requestContext, object model, ModelMetadata metadata) : base(requestContext, model, metadata) { if (metadata.AdditionalValues.ContainsKey(nameof(FWMaskAttribute))) { var mask = (metadata.AdditionalValues[nameof(FWMaskAttribute)] as FWMaskAttribute); _mask = mask.Mask; _reversemask = mask.Reverse; } if (_regexPattern == null) { if (FWReflectionHelper.IsNumeric(ModelType)) { _regexPattern = (FWReflectionHelper.IsIntegral(ModelType)) ? @"^\d+$" : $@"^[0-9]\d*(\{CultureInfo.CurrentUICulture.NumberFormat.NumberDecimalSeparator}\d*)?$"; } } }
/// <summary> /// Gets the column text value. /// </summary> /// <param name="requestContext">The request helper.</param> /// <param name="item">The column object item.</param> /// <param name="index">The line index.</param> /// <returns>The column text value.</returns> public virtual string GetValue(FWRequestContext requestContext, object item, object index) { var model = Property.GetValue(item); if (model != null) { try { var label = new FWDisplayControl(requestContext, model, Metadata); // Clears the sizes of the internal controls. label.Sizes.Clear(); label.Attributes.Add("data-type", "fw-cell-text"); return(label.ToString()); } catch (FWMissingDatasourceException) { return(model.ToString()); } } return(string.Empty); }
/// <summary> /// Creates a new Checkbox control. /// </summary> /// <param name="requestContext">The request helper.</param> /// <param name="model">The current model.</param> /// <param name="metadata">The model metadata.</param> public FWCheckboxControl(FWRequestContext requestContext, object model, ModelMetadata metadata) : base(requestContext, model, metadata) { if (FWReflectionHelper.CheckType <bool>(metadata.ModelType)) { _isBoolean = true; _values = new Dictionary <string, string> { { "true", DisplayName } }; if (model != null) { _selected.Add(model.ToString()); } //If the property is boolean, there is no sense in being required. if (metadata.ModelType == FWKnownTypes.Bool) { IsRequired = false; } HideLabel(); } else if (FWReflectionHelper.IsEnum(metadata.ModelType)) { var enumDictionary = FWEnumHelper.GetEnumAsDictonary(metadata.ModelType); _values = new Dictionary <string, string>(); // Gets the resource values for the enum items. foreach (var item in enumDictionary) { _values.Add(item.Key, GetModelResource(item.Value)); } _selected = FWEnumHelper.GetValues(model as Enum).ToList(); } else { throw new FWMissingDatasourceException(Id); } }
/// <summary> /// Gets the column text value. /// </summary> /// <param name="requestContext">The request helper.</param> /// <param name="item">The column object item.</param> /// <param name="index">The line index.</param> /// <returns>The column text value.</returns> public override string GetValue(FWRequestContext requestContext, object item, object index) { var model = Property.GetValue(item); var div = new FWDivElement { DataType = "fw-cell-model" }; var factory = new FWInputControlFactory(requestContext, model, Metadata) { Container = item }; var control = factory.CreateControl(); // Clears the sizes of the internal controls. control.Sizes.Clear(); control.Name = $"{ModelPrefix}[{index}].{Metadata.PropertyName}"; control.Id = $"{ModelPrefix}_{Metadata.PropertyName}{index}"; if (control.DataBind) { // Do not set a prefix for templates if (int.TryParse(index.ToString(), out int result)) { // Sets the bind prefix. control.DataBind.BindPrefix = $"{ModelPrefix}()[{index}]."; } } control.DisplayLabel = false; div.Add(control.ToString()); return(div.ToString()); }
/// <summary> /// Creates a new Textarea control. /// </summary> /// <param name="requestContext">The request helper.</param> /// <param name="model">The current model.</param> /// <param name="metadata">The model metadata.</param> public FWTextareaControl(FWRequestContext requestContext, object model, ModelMetadata metadata) : base(requestContext, model, metadata) { }
/// <summary> /// Creates a new Table. /// </summary> /// <param name="requestContext">The request helper.</param> /// <param name="model">The current model.</param> /// <param name="metadata">The model metadata.</param> public FWTableControl(FWRequestContext requestContext, IEnumerable model, ModelMetadata metadata) : this(requestContext, model, metadata, metadata.PropertyName ?? metadata.ModelType.GetGenericArguments().FirstOrDefault()?.Name) { }
/// <summary> /// Creates a new <see cref="FWTimelineControl"/> control. /// </summary> /// <param name="id">The control id.</param> /// <param name="entries">The timeline entries.</param> /// <param name="requestContext">The request context.</param> public FWTimelineControl(string id, IEnumerable <FWTimelineEntry> entries, FWRequestContext requestContext) : base(id) { _requestContext = requestContext; _entries = entries.OrderByDescending(o => o.Date).GroupBy(g => g.Date.Date); }
/// <summary> /// Creates a new DatePicker control. /// </summary> /// <param name="requestContext">The request helper.</param> /// <param name="model">The current model.</param> /// <param name="metadata">The model metadata.</param> public FWDatepickerControl(FWRequestContext requestContext, object model, ModelMetadata metadata) : base(requestContext, model, metadata) { }
/// <summary> /// Creates a new Select control. /// </summary> /// <param name="requestContext">The request helper.</param> /// <param name="model">The current model.</param> /// <param name="metadata">The model metadata.</param> /// <param name="container">The model container object.</param> public FWSelectControl(FWRequestContext requestContext, object model, ModelMetadata metadata, object container = null) : base(requestContext, model, metadata) { if (metadata.UnderlyingOrModelType == FWKnownTypes.Bool) { _datasource = new List <IFWDatasourceItem> { new FWDatasourceItem() { Id = "true", Value = GetModelResource("TRUE") }, new FWDatasourceItem() { Id = "false", Value = GetModelResource("FALSE") } }; if (model != null) { _selected = model.ToString(); } } else if (FWReflectionHelper.IsEnum(metadata.ModelType)) { var enumDictionary = FWEnumHelper.GetEnumAsDictonary(metadata.ModelType); var datasource = new List <IFWDatasourceItem>(); // Gets the resource values for the enum items. foreach (var item in enumDictionary) { datasource.Add(new FWDatasourceItem() { Id = item.Key, Value = GetModelResource(item.Value) }); } _datasource = datasource; _selected = FWEnumHelper.GetValues(model as Enum).FirstOrDefault(); } else { // Looks for the datasource inside the view model. _datasource = FWDatasourceHelper.GetDatasourceFromModel(_datasourceName, requestContext.Model); // If the datasource is not found, try to look for it inside the container object. if (_datasource == null) { _datasource = FWDatasourceHelper.GetDatasourceFromModel(_datasourceName, container); } if (model != null) { _selected = model.ToString(); } } if (DataBind) { requestContext.HttpContext.AddDatasource(metadata.PropertyName, metadata.ContainerMetadata.ModelType, _datasource); _datasourceName = metadata.PropertyName; } _allowClear = !IsRequired; }