public override async Task <IViewProviderResult> BuildEditAsync(Topic topic, IViewProviderContext updater) { List <int> selectedLabels; // Persist state on post back if (_request.Method == "POST") { selectedLabels = await GetLabelsToAddAsync(); } else { // Get entity labels var labels = await GetEntityLabelsByEntityIdAsync(topic.Id); selectedLabels = labels?.Select(l => l.LabelId).ToList(); } var viewModel = new LabelDropDownViewModel() { Options = new LabelIndexOptions() { FeatureId = await GetFeatureIdAsync() }, HtmlName = LabelHtmlName, SelectedLabels = selectedLabels?.ToArray() }; return(Views( View <LabelDropDownViewModel>("Topic.Labels.Edit.Sidebar", model => viewModel).Zone("sidebar") .Order(2) )); }
public async Task <IViewComponentResult> InvokeAsync(LabelDropDownViewModel model) { if (model.SelectedLabels == null) { model.SelectedLabels = new int[0]; } var labels = await BuildSelectionsAsync(model); if (labels != null) { model.LabelsJson = labels.Serialize(); } return(View(model)); }
private async Task <IEnumerable <LabelApiResult> > BuildSelectionsAsync(LabelDropDownViewModel model) { if (model.SelectedLabels == null) { return(new List <LabelApiResult>()); } if (((int[])model.SelectedLabels).Length == 0) { return(new List <LabelApiResult>()); } // Get all labels for selected ids var labels = await _labelStore.QueryAsync() .Select <LabelQueryParams>(q => { q.Id.IsIn(model.SelectedLabels.ToArray()); }) .OrderBy("TotalEntities", OrderBy.Desc) .ToList(); // Build results var results = new List <LabelApiResult>(); if (labels?.Data != null) { foreach (var label in labels.Data) { results.Add(new LabelApiResult() { Id = label.Id, Name = label.Name, Description = label.Description, ForeColor = label.ForeColor, BackColor = label.BackColor }); } } return(results); }