| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- //
- // Changeset.swift
- // RxDataSources
- //
- // Created by Krunoslav Zaher on 5/30/15.
- // Copyright © 2015 Krunoslav Zaher. All rights reserved.
- //
- import Foundation
- public struct Changeset<Section: SectionModelType> {
- public typealias Item = Section.Item
- public let reloadData: Bool
- public let originalSections: [Section]
- public let finalSections: [Section]
- public let insertedSections: [Int]
- public let deletedSections: [Int]
- public let movedSections: [(from: Int, to: Int)]
- public let updatedSections: [Int]
- public let insertedItems: [ItemPath]
- public let deletedItems: [ItemPath]
- public let movedItems: [(from: ItemPath, to: ItemPath)]
- public let updatedItems: [ItemPath]
- init(reloadData: Bool = false,
- originalSections: [Section] = [],
- finalSections: [Section] = [],
- insertedSections: [Int] = [],
- deletedSections: [Int] = [],
- movedSections: [(from: Int, to: Int)] = [],
- updatedSections: [Int] = [],
- insertedItems: [ItemPath] = [],
- deletedItems: [ItemPath] = [],
- movedItems: [(from: ItemPath, to: ItemPath)] = [],
- updatedItems: [ItemPath] = []) {
- self.reloadData = reloadData
- self.originalSections = originalSections
- self.finalSections = finalSections
- self.insertedSections = insertedSections
- self.deletedSections = deletedSections
- self.movedSections = movedSections
- self.updatedSections = updatedSections
- self.insertedItems = insertedItems
- self.deletedItems = deletedItems
- self.movedItems = movedItems
- self.updatedItems = updatedItems
- }
- public static func initialValue(_ sections: [Section]) -> Changeset<Section> {
- return Changeset<Section>(
- reloadData: true,
- finalSections: sections,
- insertedSections: Array(0 ..< sections.count) as [Int]
- )
- }
- }
- extension ItemPath
- : CustomDebugStringConvertible {
- public var debugDescription : String {
- return "(\(sectionIndex), \(itemIndex))"
- }
- }
- extension Changeset
- : CustomDebugStringConvertible {
- public var debugDescription : String {
- let serializedSections = "[\n" + finalSections.map { "\($0)" }.joined(separator: ",\n") + "\n]\n"
- return " >> Final sections"
- + " \n\(serializedSections)"
- + (!insertedSections.isEmpty || !deletedSections.isEmpty || !movedSections.isEmpty || !updatedSections.isEmpty ? "\nSections:" : "")
- + (!insertedSections.isEmpty ? "\ninsertedSections:\n\t\(insertedSections)" : "")
- + (!deletedSections.isEmpty ? "\ndeletedSections:\n\t\(deletedSections)" : "")
- + (!movedSections.isEmpty ? "\nmovedSections:\n\t\(movedSections)" : "")
- + (!updatedSections.isEmpty ? "\nupdatesSections:\n\t\(updatedSections)" : "")
- + (!insertedItems.isEmpty || !deletedItems.isEmpty || !movedItems.isEmpty || !updatedItems.isEmpty ? "\nItems:" : "")
- + (!insertedItems.isEmpty ? "\ninsertedItems:\n\t\(insertedItems)" : "")
- + (!deletedItems.isEmpty ? "\ndeletedItems:\n\t\(deletedItems)" : "")
- + (!movedItems.isEmpty ? "\nmovedItems:\n\t\(movedItems)" : "")
- + (!updatedItems.isEmpty ? "\nupdatedItems:\n\t\(updatedItems)" : "")
- }
- }
|