@@ -19,18 +19,18 @@ class ZLCommitInfoController: ZMTableViewController {
1919 @objc var repoName : String ?
2020 @objc var ref : String ?
2121
22-
23-
2422 // model
2523 var model : ZLGithubCommitModel ?
24+
25+ var lastIndex : Int = 0
26+
27+ var per_page : Int = 10
2628
2729
2830 @objc init ( ) {
29- super. init ( )
31+ super. init ( style : . plain )
3032 }
3133
32-
33-
3434 required init ? ( coder: NSCoder ) {
3535 fatalError ( " init(coder:) has not been implemented " )
3636 }
@@ -52,13 +52,17 @@ class ZLCommitInfoController: ZMTableViewController {
5252
5353 self . zmNavigationBar. addRightView ( moreButton)
5454
55- tableView. contentInset = UIEdgeInsets ( top: 10 , left: 0 , bottom: 20 , right: 0 )
55+ tableView. contentInset = UIEdgeInsets ( top: 0 , left: 0 , bottom: 0 , right: 0 )
5656 tableView. register ( ZLCommitInfoHeaderCell . self,
5757 forCellReuseIdentifier: " ZLCommitInfoHeaderCell " )
5858 tableView. register ( ZLCommitInfoPatchCell . self,
5959 forCellReuseIdentifier: " ZLCommitInfoPatchCell " )
60+ tableView. register ( ZLCommitInfoFilePathHeaderView . self,
61+ forHeaderFooterViewReuseIdentifier: " ZLCommitInfoFilePathHeaderView " )
62+ tableView. register ( ZLCommonSectionHeaderFooterView . self,
63+ forHeaderFooterViewReuseIdentifier: " ZLCommonSectionHeaderFooterView " )
6064
61- self . setRefreshViews ( types: [ . header] )
65+ self . setRefreshViews ( types: [ . header, . footer ] )
6266 }
6367
6468 lazy var moreButton : UIButton = {
@@ -80,6 +84,10 @@ class ZLCommitInfoController: ZMTableViewController {
8084 requestCommitInfo ( )
8185 }
8286
87+ override func refreshLoadMoreData( ) {
88+ generateMoreFileData ( )
89+ }
90+
8391
8492}
8593
@@ -96,7 +104,7 @@ extension ZLCommitInfoController {
96104}
97105
98106
99- //
107+ // MARK: - Request
100108extension ZLCommitInfoController {
101109
102110 func requestCommitInfo( ) {
@@ -111,21 +119,21 @@ extension ZLCommitInfoController {
111119 if resultModel. result,
112120 let data = resultModel. data as? ZLGithubCommitModel {
113121 self . model = data
122+ self . lastIndex = 0
114123
115- var cellDatas : [ ZMBaseTableViewCellViewModel ] = [ ZLCommitInfoHeaderCellData ( model: data) ]
116-
117- cellDatas. append ( contentsOf: data. files. map ( { model in
118- return ZLCommitInfoPatchCellData ( model: model, cellHeight: nil )
119- } ) )
124+ let sectionDatas = self . generateFirstPageSectionDatas ( data: data)
120125
121- DispatchQueue . main. asyncAfter ( deadline: DispatchTime . now ( ) + DispatchTimeInterval. milliseconds ( 400 ) , execute: {
122- self . zm_addSubViewModels ( cellDatas)
126+ DispatchQueue . main. asyncAfter ( deadline: DispatchTime . now ( ) + DispatchTimeInterval. milliseconds ( 200 ) , execute: {
123127
124128 self . sectionDataArray. forEach { $0. zm_removeFromSuperViewModel ( ) }
125- self . sectionDataArray = [ ZMBaseTableViewSectionData ( cellDatas: cellDatas) ]
129+
130+ sectionDatas. forEach { $0. zm_addSuperViewModel ( self ) }
131+
132+
133+ self . sectionDataArray = sectionDatas
126134
127135 self . tableView. reloadData ( )
128- self . endRefreshViews ( noMoreData: true )
136+ self . endRefreshViews ( noMoreData: data . files . count <= self . lastIndex )
129137 self . viewStatus = self . tableViewProxy. isEmpty ? . empty : . normal
130138 } )
131139
@@ -139,28 +147,81 @@ extension ZLCommitInfoController {
139147 } )
140148 }
141149
142- // func requestCommitDiffInfo() {
143- //
144- //
145- // ZLRepoServiceShared()?.getRepoCommitDiff(withLogin: login ?? "",
146- // repoName: repoName ?? "",
147- // ref: ref ?? "",
148- // serialNumber: NSString.generateSerialNumber(),
149- // completeHandle: { [weak self](resultModel: ZLOperationResultModel) in
150- // guard let self else { return }
151- //
152- // if resultModel.result,
153- // let data = resultModel.data as? String {
154- //
155- // let cellData = ZLCommitInfoPatchCellData(patchStr: data, cellHeight: nil)
156- // self.zm_addSubViewModels([cellData])
157- // self.sectionDataArray.first?.cellDatas.append(cellData)
158- // self.tableView.reloadData()
159- //
160- // }
161- //
162- // })
163- // }
150+ func generateMoreFileData( ) {
151+ let sectionDatas = self . generateNextPageFileData ( )
152+
153+ DispatchQueue . main. asyncAfter ( deadline: DispatchTime . now ( ) + DispatchTimeInterval. milliseconds ( 200 ) , execute: {
154+
155+
156+ sectionDatas. forEach { $0. zm_addSuperViewModel ( self ) }
157+
158+
159+ self . sectionDataArray. append ( contentsOf: sectionDatas)
160+
161+ self . tableView. reloadData ( )
162+
163+ self . endRefreshViews ( noMoreData: ( self . model? . files. count ?? 0 ) <= self . lastIndex)
164+ } )
165+ }
164166
165167}
166168
169+ // MARK: - generate Data
170+ extension ZLCommitInfoController {
171+
172+ @objc dynamic func generateFirstPageSectionDatas( data: ZLGithubCommitModel ) -> [ ZMBaseTableViewSectionData ] {
173+ var sectionDatas : [ ZMBaseTableViewSectionData ] = [ ]
174+
175+ sectionDatas. append ( ZMBaseTableViewSectionData (
176+ cellDatas: [ ZLCommitInfoHeaderCellData ( model: data) ] ,
177+ headerData: ZLCommonSectionHeaderFooterViewDataV2 ( backColor: . clear, viewHeight: 8 ) ,
178+ footerData: ZLCommonSectionHeaderFooterViewDataV2 ( backColor: . clear, viewHeight: 8 ) ) )
179+
180+
181+ var files = data. files
182+ if files. count > per_page {
183+ files = Array ( files [ 0 ..< per_page] )
184+ self . lastIndex = per_page
185+ } else {
186+ self . lastIndex = files. count
187+ }
188+
189+
190+ let fileSectionDatas = files. map ( { fileModel in
191+ let sectionData = ZMBaseTableViewSectionData ( )
192+ sectionData. headerData = ZLCommitInfoFilePathHeaderViewData ( filePath: fileModel. filename)
193+ sectionData. cellDatas = [ ZLCommitInfoPatchCellData ( model: fileModel,
194+ cellHeight: nil ) ]
195+ return sectionData
196+ } )
197+ sectionDatas. append ( contentsOf: fileSectionDatas)
198+
199+ return sectionDatas
200+ }
201+
202+ @objc dynamic func generateNextPageFileData( ) -> [ ZMBaseTableViewSectionData ] {
203+ guard let model else { return [ ] }
204+
205+ var files = model. files
206+ let newLastIndex = self . lastIndex + self . per_page
207+ if files. count > newLastIndex {
208+ files = Array ( files [ self . lastIndex..< newLastIndex] )
209+ self . lastIndex = newLastIndex
210+ } else {
211+ files = Array ( files [ self . lastIndex..< files. count] )
212+ self . lastIndex = model. files. count
213+ }
214+
215+ let fileSectionDatas = files. map ( { fileModel in
216+ let sectionData = ZMBaseTableViewSectionData ( )
217+ sectionData. headerData = ZLCommitInfoFilePathHeaderViewData ( filePath: fileModel. filename)
218+ sectionData. cellDatas = [ ZLCommitInfoPatchCellData ( model: fileModel,
219+ cellHeight: nil ) ]
220+ return sectionData
221+ } )
222+
223+ return fileSectionDatas
224+ }
225+ }
226+
227+
0 commit comments