Exemple #1
0
        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();
            }
        }