diff --git a/WordPress.xcworkspace/xcshareddata/swiftpm/Package.resolved b/WordPress.xcworkspace/xcshareddata/swiftpm/Package.resolved index 86a48ff37081..f1b6c7267345 100644 --- a/WordPress.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/WordPress.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,5 +1,5 @@ { - "originHash" : "deb4f4363dd5a33662b5ec5a3a4f73206abbb0a3392b6d7ead912fb9dc81f6e0", + "originHash" : "e6a9163ae536e498cb3b486db128b446499c8e937abda18922b097bae4378a80", "pins" : [ { "identity" : "alamofire", @@ -392,7 +392,7 @@ "location" : "https://github.com/wordpress-mobile/WordPressKit-iOS", "state" : { "branch" : "wpios-edition", - "revision" : "ed050d069df10d5f3aa35df25641f8c415b1e4a5" + "revision" : "94cbe7ed4ec184f104cc8e3c4c525c26e639c932" } }, { diff --git a/WordPress/Classes/Models/AbstractPost.h b/WordPress/Classes/Models/AbstractPost.h index 41ed30bc1b4d..6178226e463b 100644 --- a/WordPress/Classes/Models/AbstractPost.h +++ b/WordPress/Classes/Models/AbstractPost.h @@ -34,6 +34,7 @@ typedef NS_ENUM(NSUInteger, AbstractPostRemoteStatus) { @property (weak, readonly) AbstractPost *revision; @property (nonatomic, strong) NSSet *comments; @property (nonatomic, strong, nullable) Media *featuredImage; +@property (nonatomic, assign) NSInteger order; /// This array will contain a list of revision IDs. @property (nonatomic, strong, nullable) NSArray *revisions; diff --git a/WordPress/Classes/Models/AbstractPost.m b/WordPress/Classes/Models/AbstractPost.m index 38a344197461..31db065e264b 100644 --- a/WordPress/Classes/Models/AbstractPost.m +++ b/WordPress/Classes/Models/AbstractPost.m @@ -26,6 +26,7 @@ @implementation AbstractPost @dynamic autosaveModifiedDate; @dynamic autosaveIdentifier; @dynamic foreignID; +@dynamic order; @synthesize voiceContent; #pragma mark - Life Cycle Methods diff --git a/WordPress/Classes/Services/PostHelper.m b/WordPress/Classes/Services/PostHelper.m index 9bef9699af0e..859cc61fb75d 100644 --- a/WordPress/Classes/Services/PostHelper.m +++ b/WordPress/Classes/Services/PostHelper.m @@ -34,6 +34,7 @@ + (void)updatePost:(AbstractPost *)post withRemotePost:(RemotePost *)remotePost post.content = remotePost.content; post.status = remotePost.status; post.password = remotePost.password; + post.order = remotePost.order; if (remotePost.postThumbnailID != nil) { post.featuredImage = [Media existingOrStubMediaWithMediaID: remotePost.postThumbnailID inBlog:post.blog]; diff --git a/WordPress/Classes/Utility/PageTree.swift b/WordPress/Classes/Utility/PageTree.swift index 1c92e1613480..049cead400bd 100644 --- a/WordPress/Classes/Utility/PageTree.swift +++ b/WordPress/Classes/Utility/PageTree.swift @@ -2,10 +2,6 @@ final class PageTree { // A node in a tree, which of course is also a tree itself. private class TreeNode { - struct PageData { - var postID: NSNumber? - var parentID: NSNumber? - } let page: Page var children = [TreeNode]() var parentNode: TreeNode? @@ -16,7 +12,7 @@ final class PageTree { func dfsList() -> [Page] { var pages = [Page]() - _ = depthFirstSearch { level, node in + _ = depthFirstSearch(sortByPageOrder: true) { level, node in let page = node.page page.hierarchyIndex = level page.hasVisibleParent = node.parentNode != nil @@ -32,18 +28,19 @@ final class PageTree { /// a boolean value indicate whether the search should be stopped. /// - Returns: `true` if search has been stopped by the closure. @discardableResult - func depthFirstSearch(using closure: (Int, TreeNode) -> Bool) -> Bool { - depthFirstSearch(level: 0, using: closure) + func depthFirstSearch(sortByPageOrder: Bool, using closure: (Int, TreeNode) -> Bool) -> Bool { + depthFirstSearch(level: 0, sortByPageOrder: sortByPageOrder, using: closure) } - private func depthFirstSearch(level: Int, using closure: (Int, TreeNode) -> Bool) -> Bool { + private func depthFirstSearch(level: Int, sortByPageOrder: Bool, using closure: (Int, TreeNode) -> Bool) -> Bool { let shouldStop = closure(level, self) if shouldStop { return true } - for child in children { - let shouldStop = child.depthFirstSearch(level: level + 1, using: closure) + let pages = sortByPageOrder ? children.sorted(using: KeyPathComparator(\TreeNode.page.order)) : children + for child in pages { + let shouldStop = child.depthFirstSearch(level: level + 1, sortByPageOrder: sortByPageOrder, using: closure) if shouldStop { return true } diff --git a/WordPress/Classes/WordPress.xcdatamodeld/WordPress 155.xcdatamodel/contents b/WordPress/Classes/WordPress.xcdatamodeld/WordPress 155.xcdatamodel/contents index 15067bce0b2f..f6c5593bf283 100644 --- a/WordPress/Classes/WordPress.xcdatamodeld/WordPress 155.xcdatamodel/contents +++ b/WordPress/Classes/WordPress.xcdatamodeld/WordPress 155.xcdatamodel/contents @@ -1,5 +1,5 @@ - + @@ -13,6 +13,7 @@ +