PageViewModel.ets 4.18 KB
import { Logger, ResourcesUtils } from 'wdKit';
import { ResponseDTO, } from 'wdNetwork';
import { PageRepository } from '../repository/PageRepository';
import { NavigationBodyDTO } from '../repository/bean/NavigationBodyDTO';
import { PageDTO } from '../repository/bean/PageDTO';
import { BaseViewModel } from './BaseViewModel';

const TAG = 'PageViewModel';
/**
 * mock数据开关,默认关。
 * mock数据是本地json数据,可自行修改内容(‘entry\src\main\resources\rawfile\’目录)
 */
const mock_switch = true;

/**
 * 处理返回后的数据
 */
export class PageViewModel extends BaseViewModel {
  getLogTag() {
    return TAG;
  }

  /**
   * get Nav Data from Resource .
   *
   * @return BottomNavBean[] Nav Data List
   */
  async getBottomNavData(context?: Context): Promise<NavigationBodyDTO> {
    Logger.info(TAG, `getBottomNavData start`);
    if (mock_switch) {
      return this.getBottomNavDataMock(context);
    }
    return this.getNavData();
  }

  async getBottomNavDataMock(context?: Context): Promise<NavigationBodyDTO> {
    Logger.info(TAG, `getBottomNavDataMock start`);
    let compRes: ResponseDTO<NavigationBodyDTO> | null = await ResourcesUtils.getResourcesJson<ResponseDTO<NavigationBodyDTO>>('bottom_nav.json', context);
    if (!compRes || !compRes.data) {
      Logger.info(TAG, `getBottomNavDataMock compRes bottomNavList is empty`);
      return null
    }
    Logger.info(TAG, `getBottomNavDataMock getResourcesJsonSync compRes : ${JSON.stringify(compRes)}`);
    return compRes.data
  }

  private getNavData(): Promise<NavigationBodyDTO> {
    return new Promise<NavigationBodyDTO>((success, error) => {
      Logger.info(TAG, `getNavData start`);
      PageRepository.fetchNavigationDataApi().then((navResDTO: ResponseDTO<NavigationBodyDTO>) => {
        if (this.isRespondsInvalid(navResDTO, 'getNavData')) {
          error("page data invalid");
          return
        }
        Logger.info(TAG, "getNavData then,navResDTO.timeStamp:" + navResDTO.timestamp);
        let navigationBean = navResDTO.data
        success(navigationBean);
      }).catch((err: Error) => {
        Logger.error(TAG, `fetchNavigationDataApi catch, error.name : ${err.name},  error.message:${err.message}`);
        error(err);
      })
    })
  }

  /**
   * Get PageDTO data.
   *
   * @return {GroupDTO} compRes.data
   */
  private async getPageData1(context?: Context): Promise<PageDTO> {
    let compRes: ResponseDTO<PageDTO> | null = await ResourcesUtils.getResourcesJson<ResponseDTO<PageDTO>>('comp_list0.json', context);
    if (!compRes || !compRes.data) {
      Logger.info(TAG, `getCompList compRes is empty`);
      return {} as PageDTO
    }
    Logger.info(TAG, `getCompList getResourcesJson compRes : ${JSON.stringify(compRes)}`);
    return compRes.data
  }

  /**
   * Get Group data.
   *
   * @return {GroupDTO} compRes.data
   * @deprecated
   */
  private async getPageData2(context?: Context): Promise<PageDTO> {
    let compRes: ResponseDTO<PageDTO> | null = await ResourcesUtils.getResourcesJson<ResponseDTO<PageDTO>>('comp_list2.json');
    if (!compRes || !compRes.data) {
      Logger.info(TAG, `getCompList compRes is empty`);
      return {} as PageDTO
    }
    // router.push('')
    Logger.info(TAG, `getCompList getResourcesJson compRes : ${JSON.stringify(compRes)}`);
    return compRes.data
  }

  async getPageData(pageId: string, groupId: string, channelId: string, context?: Context): Promise<PageDTO> {
    Logger.error(TAG, 'getPageData pageId: ' + pageId);
    if (mock_switch) {
      return this.getPageData1(context);
    }
    return new Promise<PageDTO>((success, error) => {
      PageRepository.fetchPageData(pageId, groupId, channelId).then((resDTO: ResponseDTO<PageDTO>) => {
        if (this.isRespondsInvalid(resDTO, 'getPageData')) {
          error("page data invalid");
          return
        }
        Logger.info(TAG, "getPageData then,resDTO.timeStamp:" + resDTO.timestamp);
        success(resDTO.data);
      }).catch((err: Error) => {
        Logger.error(TAG, `getPageData catch, error.name : ${err.name},  error.message:${err.message}`);
        error(err);
      })
    })
  }
}


let pageViewModel = new PageViewModel();

export default pageViewModel as PageViewModel;