Foros de discusión

Not Getting proper list in custom list screenlet

thumbnail
Prakash Kumar Singh, modificado hace 6 años.

Not Getting proper list in custom list screenlet

Junior Member Mensajes: 85 Fecha de incorporación: 30/01/15 Mensajes recientes
Liferay screen Version 2.0.1

Hi ,
I created custom list screenlet using 2.0.1 . Data is coming in proper form . But during populating data in list i have got some loading dots(....) as i move to down. And when i scroll up , data appeared before is not available there . i am attaching my NewsListView_default.swift code



 import UIKit
import LiferayScreens

public class NewsListView_default: BaseListTableView {
    // types of cell
    static let TYPE_HEADER = 0;
    static let TYPE_ITEM = 1;
    static let TYPE_LOADING = 2;
    static let TYPE_LOAD_COMPLETE = 3;
    static let TYPE_LOAD_FAILED = 4;
    static let TYPE_NEWS_ARTICLE = 5;
    static let TYPE_NO_INTERNET = 6;
    static let TYPE_NONE = 7;
    

    // register cell for nib
    public override func doRegisterCellNibs() {
        
        self.tableView?.registerNib(UINib(nibName: "NewsListHeader", bundle: nil), forCellReuseIdentifier: "mHeaderCell")
        self.tableView?.registerNib(UINib(nibName: "NewsListCell", bundle: nil), forCellReuseIdentifier: "mItemCell")
        self.tableView?.registerNib(UINib(nibName: "NewsListFooter", bundle: nil), forCellReuseIdentifier: "mFooterCell")
        self.tableView?.registerNib(UINib(nibName: "NewsArticleCell", bundle: nil), forCellReuseIdentifier: "mNewsArticleCell")
    }
    
    // override on show
    public override func onShow() {
        super.onShow()
        // if type is news add top and bottom pedding on table view
        if (screenlet as? NewsListScreenlet)?.pageType != MenuModel.TypeNews {
            tableView?.contentInset = UIEdgeInsetsMake(ARTICLE_LIST_TOP_PADDING, 0, ARTICLE_LIST_TOP_PADDING, 0)
        }
    }
    
    //MARK: BaseScreenletView
    
    // progress message
    override public var progressMessages: [String:ProgressMessages] {
        return [
            BaseScreenlet.DefaultAction :
                [.Working : NSLocalizedString("", comment: "")]]
    }
    
    // create progress presenter
    override public func createProgressPresenter() -> ProgressPresenter {
        let presenter = DefaultProgressPresenter()
        presenter.customColor = UIColor.blackColor()
        return presenter
    }
    
    // Fill cell
    override public func doFillLoadedCell(row row: Int, cell: UITableViewCell, object:AnyObject) {
        if let entry = object as? NewsListScreenletEntry {
            
            if let headerCell = cell as? NewsListHeader {
                // Header cell for news
                // set title
                headerCell.titleLabel.text = entry.title
                // set date
                headerCell.dateLabel.text = entry.displayDate;
                // set image
                headerCell.newsImage.image =  nil
                
                var imageUrl=entry.getSmallImageUrl(viewWidth())
                
                if imageUrl.containsString("?"){
                    imageUrl = imageUrl + "&\(Keys.APP_SESSION_ID)=\(SessionId ?? "")"
                } else {
                    imageUrl = imageUrl + "?\(Keys.APP_SESSION_ID)=\(SessionId ?? "")"
                }
                
                if let url =  NSURL(string:imageUrl ) {
                    
                    headerCell.newsImage.setImageWithURL(url)
                }
            } else if let itemCell = cell as? NewsListCell {
                // News cell
                // set title
                itemCell.titleLabel.text = entry.title
                // set date
                itemCell.dateLabel.text = entry.displayDate;
                // set news place holder/ default image
                itemCell.newsImage.image =  UIImage(named: "newsPH")
                // get image from url and set to image view
                var imageUrl=entry.getSmallImageUrl(NEWSLIST_IMAGE_WIDTH)
                
                if imageUrl.containsString("?"){
                    imageUrl = imageUrl + "&\(Keys.APP_SESSION_ID)=\(SessionId ?? "")"
                } else {
                    imageUrl = imageUrl + "?\(Keys.APP_SESSION_ID)=\(SessionId ?? "")"
                }

                if let url =  NSURL(string:imageUrl) {
                    itemCell.newsImage.setImageWithURL(url)
                }
            } else if let newsArticleCell = cell as? NewsArticleCell {
                // Article cell
                // set tilte
                newsArticleCell.titleLabel.text = entry.title
                // set article placeHolde/ default image
                newsArticleCell.newsImage.image =  UIImage(named: "articlePH")
                // get image from url and set to image view
                
                var imageUrl=entry.getSmallImageUrl(NEWSLIST_IMAGE_WIDTH)
                
                if imageUrl.containsString("?"){
                    imageUrl = imageUrl + "&\(Keys.APP_SESSION_ID)=\(SessionId ?? "")"
                } else {
                    imageUrl = imageUrl + "?\(Keys.APP_SESSION_ID)=\(SessionId ?? "")"
                }

                
                if let url =  NSURL(string:imageUrl) {
                    newsArticleCell.newsImage.setImageWithURL(url)
                }
            }
        }
    }
    
    // override fill in progress cell
    override public func doFillInProgressCell(row row: Int, cell: UITableViewCell) {
        cell.textLabel?.text = "..."
        cell.accessoryType = .None
        
        if let image = NSBundle.imageInBundles(
            name: "default-hourglass",
            currentClass: self.dynamicType) {
                
                cell.accessoryView = UIImageView(image: image)
                cell.accessoryView?.frame = CGRectMake(0, 0, image.size.width, image.size.height)
        }
    }
    
    public  override func doDequeueReusableCell(row row: Int, object: AnyObject?) -> UITableViewCell {
        
        
        //Get type of cell  and dequeue
        switch(getItemViewType(row)) {
            
        case NewsListView_default.TYPE_HEADER:
            return tableView!.dequeueReusableCellWithIdentifier("mHeaderCell")!;
            
        case NewsListView_default.TYPE_ITEM:
            return tableView!.dequeueReusableCellWithIdentifier("mItemCell")!;
            
        case NewsListView_default.TYPE_LOADING:
            let cell = tableView!.dequeueReusableCellWithIdentifier("mFooterCell")!;
            if let itemCell = cell as? NewsListFooter {
                itemCell.markLoadingCell();
            }
            return cell
            
        case NewsListView_default.TYPE_LOAD_COMPLETE:
            let cell = tableView!.dequeueReusableCellWithIdentifier("mFooterCell")!;
            if let itemCell = cell as? NewsListFooter {
                itemCell.markLoadCompleteCell(rowCount, type: (screenlet as? NewsListScreenlet)?.pageType ?? "")
                }
            return cell
            
        case NewsListView_default.TYPE_NO_INTERNET:
            let cell = tableView!.dequeueReusableCellWithIdentifier("mFooterCell")!;
            if let itemCell = cell as? NewsListFooter {
                itemCell.markNoInternetCell()
            }
            return cell
            
        case NewsListView_default.TYPE_NEWS_ARTICLE:
            return tableView!.dequeueReusableCellWithIdentifier("mNewsArticleCell")!;
            
        default:
            return super.doDequeueReusableCell(row: row, object: object)
            
        }
        
    }
    
    // return type of cell
    func getItemViewType(position: Int) -> Int {
        
        let size = rowCount
        if (position >= size) {
            if (position >= rowCount) {
                // if all items visible on screen at once don't show end list message
                if rowCount > 0 && (rowCount < 5 || tableView?.contentOffset.y <= 10){
                    return NewsListView_default.TYPE_NONE;
                }
                return NewsListView_default.TYPE_LOAD_COMPLETE;
            } else {

                return NewsListView_default.TYPE_LOADING
            }
        } else {
            //Check if type is news return news cell    
            if let currentScreenLet = screenlet as? NewsListScreenlet{
                if currentScreenLet.pageType == MenuModel.TypeNews {
                    if (position == 0) {
                        // if first item return news header cell
                        return NewsListView_default.TYPE_HEADER;
                    } else {
                        // return news cell
                        return NewsListView_default.TYPE_ITEM;
                    }
                }
                else {
                    //Article type return article cell
                    return NewsListView_default.TYPE_NEWS_ARTICLE;
                }
            }
            else {
                if (position == 0) {
                    return NewsListView_default.TYPE_HEADER;
                } else {
                    return NewsListView_default.TYPE_ITEM;
                }
            }
        
        }
    }
    // return height of cell for different type
    public func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        
        switch(getItemViewType(indexPath.row)) {
            
        case NewsListView_default.TYPE_HEADER:
            return newsListHeaderHeight() + 8
            
        case NewsListView_default.TYPE_ITEM:
            return newsListCellHeight()
            
        case NewsListView_default.TYPE_NEWS_ARTICLE:
            return newsListCellHeight()
            
        case NewsListView_default.TYPE_NONE:
            return 0
            
        default:
            return 46
        }

    }
    
    // return row count of table
    override public func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        print("rows count1 ",rows.count + 1)
        print("rows count 2",rowCount)
        print("rows count 3",rowsForSectionIndex(section).count)
        return rowsForSectionIndex(section).count
    }
    
    override public func tableView(tableView: UITableView,
        cellForRowAtIndexPath
        indexPath: NSIndexPath)
        -> UITableViewCell {
            
            
            print("rows position ",indexPath.row)
            print("rows count new",rows.count)

            
            let rowsForSection = rowsForSectionIndex(indexPath.section)
            let object: AnyObject? = rowsForSection[indexPath.row]
            
            let cell = doDequeueReusableCell(row: indexPath.row, object: object)

            
            let position = indexPath.row
            if (position < 274) {
                
                if let row: AnyObject = rowsForSection[indexPath.row] {
                    doFillLoadedCell(row: indexPath.row, cell: cell, object: row)
                }
                
            } else if (position < rowCount) {
                fetchPageForRow?(indexPath.row)
            }
            
            
            return cell
            
            
//            let rowsForSection = rowsForSectionIndex(indexPath.section)
//            
//            let object: AnyObject? = rowsForSection[indexPath.row]
//            let cell = doDequeueReusableCell(row: indexPath.row, object: object)
//            
//            if let object = object {
//                doFillLoadedCell(row: indexPath.row, cell: cell, object: object)
//            }
//            else {
//                doFillInProgressCell(row: indexPath.row, cell: cell)
//                
//                let streamMode = (screenlet as! BaseListScreenlet).streamMode
//                
//                if !streamMode {
//                    fetchPageForRow?(indexPath.row)
//                }
//            }
//            
//            return cell

            
            
            
            
    }
    
    // On selection of row
    override public func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

//        if(indexPath.row < rows.count) {
//            super.tableView(tableView, didSelectRowAtIndexPath: indexPath)
//        }
        
        tableView.deselectRowAtIndexPath(indexPath, animated: false)
        
        let rowsForSection = rowsForSectionIndex(indexPath.section)
        
        if let row:AnyObject = rowsForSection[indexPath.row] {
            onSelectedRowClosure?(row)
        }

        
        
    }
 
    

    
    // on start interaction
    public override func onStartInteraction() {
        if(rowCount == 0) {
            self.hidden = true
        }
    }
    
    // on finish interaction
    public override func onFinishInteraction(result: AnyObject?, error: NSError?) {
        self.hidden = false
        super.onFinishInteraction(result, error: error)
    }
}


                       



//  NewsListPageLoadInteractor.swift

import UIKit
import LiferayScreens

public class NewsListPageLoadInteractor : BaseListPageLoadInteractor {
    
    private let groupId: Int64
    private let newsType: String?
    private let newsLocale: String?
    
    // init screenlet
    init(screenlet: BaseListScreenlet,
        page: Int,
        computeRowCount: Bool,
        groupId: Int64,
        newsType: String?,
        newsLocale: String?) {
            
            self.groupId = groupId
            self.newsType = newsType
            self.newsLocale = newsLocale
            
            super.init(screenlet: screenlet, page: page, computeRowCount: computeRowCount)
    }
    
    // override create operation
    public override func createListPageConnector() -> NewsListPageOperation {
        let pager = (self.screenlet as! BaseListScreenlet).firstRowForPage
        
        let operation = ContentListPageConnector(
            startRow: pager(self.page),
            endRow: pager(self.page + 1),
            computeRowCount: self.computeRowCount)
        
        operation.groupId = LiferayServerContext.groupId
        operation.newsType = self.newsType
        
        operation.newsLocale = self.newsLocale
        
        return operation;
    }
    
    
    
    
    
    // override convert result function
    override public func convertResult(serverResult: [String:AnyObject]) -> AnyObject {
        return NewsListScreenletEntry(attributes: serverResult)
    }
    
    // override cache key function
    override public func cacheKey(op: PaginationLiferayConnector) -> String {
        return "\(newsType!)-\(newsLocale!)"
    }
    
    // override completed operation
    override public func completedConnector(op: ServerConnector) {
        
        if let pageOp = op as? PaginationLiferayConnector {
            processLoadPageResult(pageOp.resultPageContent ?? [], rowCount: pageOp.resultRowCount)
        }
    }
    
   }



thumbnail
Victor Galan, modificado hace 6 años.

RE: Not Getting proper list in custom list screenlet

Regular Member Mensajes: 144 Fecha de incorporación: 14/06/16 Mensajes recientes
Hi!
is this always happening? or only sometimes?
how many items do you have?

Regards
thumbnail
Prakash Kumar Singh, modificado hace 6 años.

RE: Not Getting proper list in custom list screenlet

Junior Member Mensajes: 85 Fecha de incorporación: 30/01/15 Mensajes recientes
Hi
Yes this always happens. And i noticed that there is another behavior that is after loading 50 contents it happens.
thumbnail
Victor Galan, modificado hace 6 años.

RE: Not Getting proper list in custom list screenlet

Regular Member Mensajes: 144 Fecha de incorporación: 14/06/16 Mensajes recientes
Prakash Kumar Singh:
Hi
Yes this always happens. And i noticed that there is another behavior that is after loading 50 contents it happens.


Hey!

What's the other behaviour?
We are going to try to reproduce this to fix it

Thanks for the reporting

Regards
thumbnail
Prakash Kumar Singh, modificado hace 6 años.

RE: Not Getting proper list in custom list screenlet

Junior Member Mensajes: 85 Fecha de incorporación: 30/01/15 Mensajes recientes
Victor Galan:
Prakash Kumar Singh:
Hi
Yes this always happens. And i noticed that there is another behavior that is after loading 50 contents it happens.


Hey!

What's the other behaviour?
We are going to try to reproduce this to fix it

Thanks for the reporting

Regards



1. First Behavior is when i scroll up list , list appeared before is not available there.
2. Second Behavior is when i scroll down list after 50 contents , some dots (.......) appears in place of content as shown in below image.
thumbnail
Victor Galan, modificado hace 6 años.

RE: Not Getting proper list in custom list screenlet

Regular Member Mensajes: 144 Fecha de incorporación: 14/06/16 Mensajes recientes
Hi!

I was reviewing your code and I have some suggestions:

- You should not override the behaviour of tableView(tableView: _ cellForRowAtIndexPath)
- If you want the row count use rowCount, not rows.count because rows is a map with the sections and their entries

Can you tried again applying this suggestions and let me if the error its still there?

Thanks!

Regards
thumbnail
Prakash Kumar Singh, modificado hace 6 años.

RE: Not Getting proper list in custom list screenlet

Junior Member Mensajes: 85 Fecha de incorporación: 30/01/15 Mensajes recientes
Victor Galan:
Hi!

I was reviewing your code and I have some suggestions:

- You should not override the behaviour of tableView(tableView: _ cellForRowAtIndexPath)
- If you want the row count use rowCount, not rows.count because rows is a map with the sections and their entries

Can you tried again applying this suggestions and let me if the error its still there?

Thanks!

Regards


Hi !
As you suggested i done . but problem is still exist.
and i checked that below code returning total number of rows .Is this behavior right ?
 
override public func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return rowsForSectionIndex(section).count
    }
 
thumbnail
Prakash Kumar Singh, modificado hace 6 años.

RE: Not Getting proper list in custom list screenlet

Junior Member Mensajes: 85 Fecha de incorporación: 30/01/15 Mensajes recientes
Any Help ??
thumbnail
Victor Galan, modificado hace 6 años.

RE: Not Getting proper list in custom list screenlet

Regular Member Mensajes: 144 Fecha de incorporación: 14/06/16 Mensajes recientes
Sorry I thought that I'd answered you earlier

Can you send more code from the VC and the Screenlet class?

(for both forum threads)

Thanks
thumbnail
Prakash Kumar Singh, modificado hace 6 años.

RE: Not Getting proper list in custom list screenlet

Junior Member Mensajes: 85 Fecha de incorporación: 30/01/15 Mensajes recientes
Victor Galan:
Sorry I thought that I'd answered you earlier

Can you send more code from the VC and the Screenlet class?

(for both forum threads)

Thanks


Hi,

ViewController.swift


import UIKit
import LiferayScreens

class NewsListViewController: BaseViewController, NewsListScreenletDelegate 
{
    var menuItem : MenuModel!
    
    @IBOutlet weak var newsListScreenlet: NewsListScreenlet!
    var presenter: MBProgressHUDPresenter?
    
    // view did load
    override func viewDidLoad() {
        super.viewDidLoad()

        // set title
        self.setNavigationTitle((menuItem?.menuName)!)
        // init presenter
        presenter = MBProgressHUDPresenter()
        
        newsListScreenlet.delegate = self
        getAppDelegate().viewWidth = self.view.frame.size.width
        getAppDelegate().newsListCellHeight = NEWSLIST_CELL_HEIGHT
        getAppDelegate().newsListHeaderHeight = viewWidth() * NEWSLIST_HEADER_HEIGHT_RATIO        
        
        // check friendly url and load list
        if let type = menuItem.friendlyURL {
            loadList(type, pageType: menuItem.pageType)
        }
    }

    // Load list
    func loadList(contentType: String, pageType : String) {
        newsListScreenlet.newsType = contentType
        newsListScreenlet.pageType = menuItem?.pageType
        newsListScreenlet.loadList()
    }
    
    // On List item selection
    func screenlet(screenlet: NewsListScreenlet,
        onNewsSelectedEntry entry: NewsListScreenletEntry) {
        
        print(entry.articleId)
        
      //   open page view controller
        let mainStoryBoard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
        let viewController : PageViewController = mainStoryBoard.instantiateViewControllerWithIdentifier("PageViewController") as! PageViewController
        let rows = (screenlet.screenletView as? BaseListView)?.rows
        print("selectedrows" , rows)
        // viewController.rows = rows
        if let rowCount = (screenlet.screenletView as? BaseListView)?.rowCount {
            viewController.rowCount = rowCount
        } else {
            viewController.rowCount = rows?.count ?? 0
        }
        
        viewController.selectedEntry = entry
        viewController.pageType = menuItem.pageType
        viewController.contentType = menuItem.friendlyURL
       
        
        
        
//        let mainStoryBoard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
//        let viewController : NewsDetailViewController = mainStoryBoard.instantiateViewControllerWithIdentifier("NewsDetailViewController") as! NewsDetailViewController
//        viewController.entry = entry
//        viewController.pageIndex = 1
//       // viewController.pageType = entry.pageType
//        self.navigationController?.pushViewController(viewController, animated: true)

        
        
        
        
    }
    
    // On error in loading list
    func screenlet(screenlet: NewsListScreenlet, onNewsListError error: NSError) {
        //Show error message
        showNetworkErrorPage(presenter, view: self.view)
    }
    
    // on load news completed
    func screenlet(screenlet: NewsListScreenlet, onNewsListResponseEntries entries: [NewsListScreenletEntry]) {
    }
}


      

NewsListPageLoadInteractor .swift

import UIKit
import LiferayScreens

public class NewsListPageLoadInteractor : BaseListPageLoadInteractor {
    
    private let groupId: Int64
    private let newsType: String?
    private let newsLocale: String?
    
    // init screenlet
    init(screenlet: BaseListScreenlet,
        page: Int,
        computeRowCount: Bool,
        groupId: Int64,
        newsType: String?,
        newsLocale: String?) {
            
            self.groupId = groupId
            self.newsType = newsType
            self.newsLocale = newsLocale
            
            super.init(screenlet: screenlet, page: page, computeRowCount: computeRowCount)
    }
    
    // override create operation
    public override func createListPageConnector() -> NewsListPageOperation {
        let pager = (self.screenlet as! BaseListScreenlet).firstRowForPage
        
        let operation = ContentListPageConnector(
            startRow: pager(self.page),
            endRow: pager(self.page + 1),
            computeRowCount: self.computeRowCount)
        
        operation.groupId = LiferayServerContext.groupId
        operation.newsType = self.newsType
        
        operation.newsLocale = self.newsLocale
        
        return operation;
    }
    
    
    
    
    
    // override convert result function
    override public func convertResult(serverResult: [String:AnyObject]) -> AnyObject {
        return NewsListScreenletEntry(attributes: serverResult)
    }
    
    // override cache key function
    override public func cacheKey(op: PaginationLiferayConnector) -> String {
        return "\(newsType!)-\(newsLocale!)"
    }
    
    // override completed operation
    override public func completedConnector(op: ServerConnector) {
        
        if let pageOp = op as? PaginationLiferayConnector {
            processLoadPageResult(pageOp.resultPageContent ?? [], rowCount: pageOp.resultRowCount)
        }
    }
    
   }



NewsListScreenlet.swift


import UIKit
import LiferayScreens

// newslist screenlet delgate
@objc public protocol NewsListScreenletDelegate : BaseScreenletDelegate {
    
    optional func screenlet(screenlet: NewsListScreenlet,
        onNewsListResponseEntries entries: [NewsListScreenletEntry])
    
    optional func screenlet(screenlet: NewsListScreenlet,
        onNewsListError error: NSError)
    
    optional func screenlet(screenlet: NewsListScreenlet,
        onNewsSelectedEntry entry: NewsListScreenletEntry)
    
}

// newslist screenlet entry
@objc public class NewsListScreenletEntry : NSObject {
    
    public let attributes:[String:AnyObject]
    
    public var title: String? {
        return attributes[Keys.KEY_TITLE] as? String
    }
    
    public var displayDate: String? {
        return attributes[Keys.KEY_DISPLAYDATE] as? String
    }
    
    public var articleId: String? {
        return attributes[Keys.KEY_ARTICLE_ID] as? String
    }
    
    public var smallImageUrl: String {
        return LiferayServerContext.server + (attributes[Keys.KEY_IMAGEURL] as! String)
    }
    
    public func  getSmallImageUrl(width : CGFloat) -> String {
        return "\(smallImageUrl)\(Keys.KEY_WIDTH)\(width*UIScreen.mainScreen().scale)"
    }
    
    public var groupId: Int64? {
        return (attributes[Keys.KEY_GROUP_ID] as? NSNumber)?.longLongValue
    }
    
    //MARK: Init
    
    public init(attributes:[String:AnyObject]) {
        self.attributes = attributes
    }
    
    public var pageType: String!
}

// newslist screenlet
@IBDesignable public class NewsListScreenlet: BaseListScreenlet {
    
    @IBInspectable public var groupId: Int64 = 0
    @IBInspectable public var newsType: String?
    @IBInspectable public var pageType : String?
    @IBInspectable public var offlinePolicy: String? = CacheStrategyType.RemoteFirst.rawValue
    
    
    public var newsListDelegate: NewsListScreenletDelegate? {
        return delegate as? NewsListScreenletDelegate
    }
    
    //MARK: BaseListScreenlet
    // override create page load interactor
    override public func createPageLoadInteractor(
        page page: Int,
        computeRowCount: Bool)
        -> BaseListPageLoadInteractor {
            
            let interactor = NewsListPageLoadInteractor(
                screenlet: self,
                page: page,
                computeRowCount: computeRowCount,
                groupId: self.groupId,
                newsType: self.newsType,
                newsLocale: LOCALE)
            
            interactor.cacheStrategy = CacheStrategyType(rawValue: self.offlinePolicy ?? "") ?? .RemoteFirst
            
            return interactor
    }

    // override on load page error
    override public func onLoadPageError(page page: Int, error: NSError) {
        super.onLoadPageError(page: page, error: error)
        
        newsListDelegate?.screenlet?(self, onNewsListError: error)
    }
    
    // override on load page result
    override public func onLoadPageResult(page page: Int, rows: [AnyObject], rowCount: Int) {
        super.onLoadPageResult(page: page, rows: rows, rowCount: rowCount)
        let newsEntries = rows as! [NewsListScreenletEntry]
   
        newsListDelegate?.screenlet?(self, onNewsListResponseEntries: newsEntries)
    }
    
    // override selected row
    override public func onSelectedRow(row: AnyObject) {
        newsListDelegate?.screenlet?(self, onNewsSelectedEntry: row as! NewsListScreenletEntry)
    }    
}


NewsListPageOperation.swift

import UIKit
import LiferayScreens

public class NewsListPageOperation: PaginationLiferayConnector {
    
    public var groupId: Int64?
    public var newsType: String?
    public var newsLocale: String?
    
    
    //MARK: ServerOperation
    // override validatedata
    override public func validateData() -> ValidationError? {
        let error = super.validateData()
        
        if error == nil {
            if groupId == nil {
                return ValidationError("newslist-screenlet", "undefined-group")
            }
            if newsType == nil {
                return ValidationError("newslist-screenlet", "undefined-newstype")
            }
            if newsLocale == nil {
                return ValidationError("newslist-screenlet", "undefined-newslocale")
            }
        }
        
        return error
    }
    
    
    
    
    
    override public func doRun(session session: LRSession) {
  
         super.doRun(session: session)
    }
    
    
    override public func doAddPageRowsServiceCall(
        session session: LRBatchSession,
                startRow: Int,
                endRow: Int,
                obc: LRJSONObjectWrapper?) {
        
        doGetPageRows(session: session, startRow: startRow, endRow: endRow)
    }
    
    override public func doAddRowCountServiceCall(session session: LRBatchSession) {
   
        doGetRowCount(session: session, startRow: startRow, endRow: endRow)
    }
    
    public func doGetEntries(session: LRSession, rowCount: Int32) throws -> [[String:AnyObject]]? {
        return nil
    }
    
    public func doGetPageRows(session session: LRBatchSession ,startRow: Int,endRow: Int) {
        
        
    }
    
    public func doGetRowCount(session session: LRBatchSession, startRow: Int,endRow: Int) {
        
           
    }
    
}

   

public class ContentListPageConnector: NewsListPageOperation {
    

    override public func doGetPageRows(session session: LRBatchSession, startRow: Int, endRow: Int) {
        
        session.headers = [Keys.APP_SESSION_ID:SessionId ?? ""]
        let service = LRContentlistService_v62(session: session)
        let currentUserId = SessionContext.currentContext?.userId
        do {
            // Replace ocuuerance of "-_ with "_"
            let newStructureKey = newsType
            print(startRow)
            print(endRow)
            try service.getListWithUserId(currentUserId!,groupId: groupId!, friendlyURL:newStructureKey, locale: newsLocale, start: Int32(startRow), end: Int32(endRow))
            
        }
        catch let error as NSError {
            print("Error: \(error)")
        }
        
    }
    
    override public func doGetRowCount(session session: LRBatchSession, startRow: Int, endRow: Int) {
        session.headers = [Keys.APP_SESSION_ID:SessionId ?? ""]
        let service = LRContentlistService_v62(session: session)
        let currentUserId = SessionContext.currentContext?.userId
        do {
            // Replace ocuuerance of "-_ with "_"
            let newStructureKey = newsType
            try service.getListCountWithUserId(currentUserId!, groupId: groupId!, friendlyURL: newStructureKey)
            
        }
        catch let error as NSError {
            print("Error: \(error)")
        }
    }


}

thumbnail
Victor Galan, modificado hace 6 años.

RE: Not Getting proper list in custom list screenlet

Regular Member Mensajes: 144 Fecha de incorporación: 14/06/16 Mensajes recientes
Thank you so much!

Let me check them, I'll try to reproduce it and let you know emoticon
thumbnail
Prakash Kumar Singh, modificado hace 6 años.

RE: Not Getting proper list in custom list screenlet

Junior Member Mensajes: 85 Fecha de incorporación: 30/01/15 Mensajes recientes
Any update ?
thumbnail
Victor Galan, modificado hace 6 años.

RE: Not Getting proper list in custom list screenlet

Regular Member Mensajes: 144 Fecha de incorporación: 14/06/16 Mensajes recientes
Hey

I've been unable to reproduce this, I think it has something to do with the Liferay service you're using. I've tried with almost 300 elements, tweaking the connectors but it is working fine.

Anyways there is a workaround possible, you have to add this line into your `NewsListPageLoadInteractor`:

open override func sectionForRowObject(_ object: AnyObject) -> String? {
		return " "
}


and in you `NewsListView_default`:

public func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
		return UIView(frame: CGRect.zero)
	}


This will change the view to only to not display the "..." instead of that It will show a loading in the bottom of the table while the next page it's being loaded.

If you can create a simple project that shows this strange behavior, we will fix it emoticon

Regards,

Víctor
thumbnail
Prakash Kumar Singh, modificado hace 6 años.

RE: Not Getting proper list in custom list screenlet

Junior Member Mensajes: 85 Fecha de incorporación: 30/01/15 Mensajes recientes
Thanks @Victor

I will update you very soon . I wish these two tweakings will solve my problem.