internal ILazyObservable <FolderListItemCollection> LoadItems(ListDetail listDetail, ContentTypeDetail contentTypeDetail) { if (contentTypeDetail == null || listDetail == null) { Fields = null; DisposeItems(); return(null); } if (this.contentTypeDetail != contentTypeDetail || this.listDetail != listDetail) { Fields = null; DisposeItems(); this.contentTypeDetail = contentTypeDetail; this.listDetail = listDetail; if (ParentFolder.ParentList.BaseType == BaseType.DocumentLibrary) { Field fileSizeDisplay = null; int count = contentTypeDetail.Fields.Count; if (contentTypeDetail.Fields.TryGetFieldById(BuiltInFields.FileSizeDisplay.ID) == null) { fileSizeDisplay = listDetail.Fields.TryGetFieldById(BuiltInFields.FileSizeDisplay.ID) ?? BuiltInFields.FileSizeDisplay; count++; } if (count != contentTypeDetail.Fields.Count) { Field[] fields = new Field[count]; contentTypeDetail.Fields.CopyTo(fields, 0); count = contentTypeDetail.Fields.Count; if (fileSizeDisplay != null) { fields[count++] = fileSizeDisplay; } Fields = fields; } } else if (ParentFolder.ParentList.EnableAttachments) { Field[] fields = new Field[contentTypeDetail.Fields.Count + 1]; fields[0] = listDetail.Fields.TryGetFieldById(BuiltInFields.Attachments.ID); contentTypeDetail.Fields.CopyTo(fields, 1); Fields = fields; } if (Fields == null) { Fields = contentTypeDetail.Fields; } Refresh(); } return(items); }
internal static async void Show(EditAction editAction) { ListItem listItem = null; ObservableList <ListContentType> affectedContentTypes = null; ListContentType contentType = null; if (await LazyWindow.ShowWaiting( async delegate(CancellationToken cancellationToken) { switch (editAction.EditMode) { case EditMode.Edit: listItem = await editAction.ListItem.ParentList.GetItemById(editAction.ListItem.ID, cancellationToken); break; case EditMode.Copy: listItem = await editAction.ListItem.ParentList.GetItemById(editAction.ListItem.ID, cancellationToken); break; case EditMode.AddItem: listItem = editAction.TargetList.Add(FileSystemObjectType.File); listItem.MoveTo(editAction.TargetFolder); break; case EditMode.AddFolder: listItem = editAction.TargetList.Add(FileSystemObjectType.Folder); listItem.MoveTo(editAction.TargetFolder); break; default: throw new ApplicationException("Unexpected"); } ObservableList <ListContentType> contentTypes = await editAction.TargetList.ContentTypes.GetAsync(cancellationToken); affectedContentTypes = new ObservableList <ListContentType>(); foreach (ListContentType hit in contentTypes) { if (hit.ID.StartsWith(BuiltInContentTypeIds.Folder) == (listItem.FileSystemObjectType == FileSystemObjectType.Folder)) { affectedContentTypes.Add(hit); if (hit.ID == listItem.ContentTypeId) { contentType = hit; } } } if (contentType == null && affectedContentTypes.Count != 0) { contentType = affectedContentTypes[0]; listItem.ContentTypeId = contentType.ID; } contentType.NotNull("Unknown content type"); if (editAction.EditMode == EditMode.Copy) { ContentTypeDetail contentTypeDetail = await contentType.Detail.GetAsync(cancellationToken); ListItem newListItem = listItem.ParentList.Add(listItem.FileSystemObjectType); newListItem.ContentTypeId = listItem.ContentTypeId; for (int i = 0; i < contentTypeDetail.Fields.Count; i++) { Field field = contentTypeDetail.Fields[i]; if (field.ShowInEditForm && !field.ReadOnly) { newListItem[field] = listItem[field]; } } newListItem.MoveTo(editAction.TargetFolder); listItem.Dispose(); listItem = newListItem; } })) { new ListItemEditor(editAction, listItem, affectedContentTypes, contentType); } else { listItem?.Dispose(); } }