PageHelper.ets 4.99 KB
import { PageDTO, CompDTO, PageInfoDTO } from 'wdBean';
import { ViewType } from 'wdConstant/Index';
import { DateTimeUtils, Logger } from 'wdKit';
import { closeRefresh } from '../utils/PullDownRefresh';
import PageModel from './PageModel';
import PageViewModel from './PageViewModel';
import { promptAction } from '@kit.ArkUI';

const TAG = 'PageHelper';

/**
 * 处理返回后的数据
 * @deprecated
 */
export class PageHelper {
  async refreshUI(pageModel: PageModel) {
    pageModel.loadStrategy = 2
    this.parseGroup(pageModel)
  }

  async loadMore(pageModel: PageModel) {
    pageModel.loadStrategy = 3
    // 暂只支持comp分页加载,节目分页加载的得完善框架(如直播回看节目数据分页)
    this.compLoadMore(pageModel)
  }

  async parseGroup(pageModel: PageModel) {
    let pageInfo: PageInfoDTO = pageModel.pageInfo
    pageModel.groupList = []
    pageModel.groupList.push(...pageInfo.groups)
    for (const group of pageInfo.groups) {
      pageModel.isRecGroup = group.groupStrategy === 1;
      pageModel.groupId = group.id;
      if (pageModel.isRecGroup) {
        pageModel.pageSize = 10
      } else {
        pageModel.pageSize = 20
      }
      pageModel.groupData = group
      // await,确保groups接口顺序执行
      let pageDto = await PageViewModel.getPageData(pageModel.bizCopy())
      let index = pageInfo.groups.indexOf(group)
      if (index == 0) {
        // 清空comp列表
        pageModel.compList.clear()
      }
      this.getGroupData(pageModel, pageDto, index == pageInfo.groups.length - 1)
    }
    if (pageModel.compList.isEmpty()) {
      // 没数据,展示空页面
      Logger.debug(TAG, 'aboutToAppear, data response page ' + pageModel.pageId + ', comp list is empty.');
      pageModel.viewType = ViewType.EMPTY;
    }
  }

  private async getGroupData(pageModel: PageModel, pageDto: PageDTO, isLastGroup: boolean) {
    pageModel.timestamp = DateTimeUtils.getTimeStamp().toString()
    if (pageDto && pageDto.compList && pageDto.compList.length > 0) {
      pageModel.viewType = ViewType.LOADED;
      let sizeBefore: number = pageModel.compList.size();
      pageModel.compList.push(...pageDto.compList)
      if (pageDto.compList.length === pageModel.pageSize) {
        pageModel.currentPage++;
        pageModel.hasMore = true;
      } else {
        pageModel.hasMore = false;
      }
      // 二次请求,批查互动数据
      PageViewModel.getInteractData(pageDto.compList).then((data: CompDTO[]) => {
        // 刷新,替换所有数据
        // pageModel.compList.replaceAll(...data)
        pageModel.compList.updateItems(sizeBefore, data)
        pageModel.timestamp = DateTimeUtils.getTimeStamp().toString()
      })
      // TODO 待优化,解决content级别的展现加载
      if (isLastGroup) {
        closeRefresh(pageModel, true);
        //   // 最后一个楼层,特殊处理
        //   // 检测楼层最后一个组件业务数据是否需要通过访问接口获取
        //   let comp: CompDTO = pageDto.compList[pageDto.compList.length - 1]
        //   let compSize = CollectionUtils.getListSize(comp.operDataList)
        //   // 直播回放,需要二次请求数据
        //   if (compSize <= 0 && comp.dataSourceType == 'LIVE_END') {
        //     let liveReviewDTO = await PageViewModel.getLiveReviewUrl(pageModel.currentPage, pageModel.pageSize)
        //     // content数据回来,塞给comp
        //     comp.operDataList.push(...liveReviewDTO.list)
        //   }
      }
    }
  }

  /**
   * 获取直播回看数据
   */
  private async getLiveEnd(pageModel: PageModel) {
    let liveReviewDTO = await PageViewModel.getLiveReviewUrl(pageModel.currentPage, pageModel.pageSize)
    Logger.debug(TAG, 'aboutToAppear, getPreviewData ' + liveReviewDTO.hasNext);
  }

  /**
   * comp加载更多,分页加载
   */
  private compLoadMore(pageModel: PageModel) {
    PageViewModel.getPageData(pageModel.bizCopy())
      .then((data: PageDTO) => {
        pageModel.timestamp = DateTimeUtils.getTimeStamp().toString()
        if (data == null || data.compList == null || data.compList.length == 0) {
          pageModel.hasMore = false;
        } else {
          if (data.compList.length == pageModel.pageSize) {
            pageModel.currentPage++;
            pageModel.hasMore = true;
          } else {
            pageModel.hasMore = false;
          }
          let sizeBefore: number = pageModel.compList.size();
          pageModel.compList.push(...data.compList)
          PageViewModel.getInteractData(data.compList).then((data: CompDTO[]) => {
            // 刷新,替换所有数据
            pageModel.compList.updateItems(sizeBefore, data)
            pageModel.timestamp = DateTimeUtils.getTimeStamp().toString()
          })
        }
      }).catch((err: string | Resource) => {
      promptAction.showToast({ message: err });
    })
  }

  /**
   * 节目数据分页加载
   * TODO 待完善框架
   */
  private contentLoadMore() {

  }
}


let pageHelper = new PageHelper();

export default pageHelper as PageHelper;