protected override DriverResult Editor(ContentPart part, OptionSetField field, IUpdateModel updater, dynamic shapeHelper) { var viewModel = new OptionSetFieldViewModel { OptionItems = new List <OptionItemEntry>() }; if (updater.TryUpdateModel(viewModel, GetPrefix(field, part), null, null)) { var checkedTerms = viewModel.OptionItems .Where(t => (t.IsChecked || t.Id == viewModel.SingleTermId)) .Select(t => GetOrCreateTerm(t, viewModel.OptionSetId, field)) .Where(t => t != null).ToList(); var settings = field.PartFieldDefinition.Settings.GetModel <OptionSetFieldSettings>(); if (settings.Required && !checkedTerms.Any()) { updater.AddModelError(GetPrefix(field, part), T("The field {0} is mandatory.", T(field.DisplayName))); } else { _optionSetService.UpdateTerms(part.ContentItem, checkedTerms, field.Name); } } return(Editor(part, field, shapeHelper)); }
protected override DriverResult Editor(ContentPart part, OptionSetField field, dynamic shapeHelper) { return(ContentShape("Fields_OptionSetField_Edit", GetDifferentiator(field, part), () => { var settings = field.PartFieldDefinition.Settings.GetModel <OptionSetFieldSettings>(); var appliedTerms = _optionSetService.GetOptionItemsForContentItem(part.ContentItem.Id, field.Name).Distinct(new TermPartComparer()).ToDictionary(t => t.Id, t => t); var optionSet = _optionSetService.GetOptionSet(settings.OptionSetId); var optionItems = optionSet != null ? _optionSetService.GetOptionItems(optionSet.Id).Where(t => !string.IsNullOrWhiteSpace(t.Name)).Select(t => t.CreateTermEntry()).ToList() : new List <OptionItemEntry>(0); optionItems.ForEach(t => t.IsChecked = appliedTerms.ContainsKey(t.Id)); var viewModel = new OptionSetFieldViewModel { Name = field.Name, DisplayName = field.DisplayName, OptionItems = optionItems, Settings = settings, SingleTermId = optionItems.Where(t => t.IsChecked).Select(t => t.Id).FirstOrDefault(), OptionSetId = optionSet != null ? optionSet.Id : 0 }; return shapeHelper.EditorTemplate(TemplateName: "Fields/OptionSetField", Model: viewModel, Prefix: GetPrefix(field, part)); })); }