LegoService.ets 3.15 KB
/**
 * 数据模块队外接口服务
 */
import { ItemBean } from '../bean/ItemBean';
import { ItemDTO } from '../bean/ItemDTO';
import { IGroupFilter } from '../layout/filter/IGroupFilter';
import { WDComp } from '../layout/WDComp';
import { WDGroup } from '../layout/WDGroup';
import { WDPage } from '../layout/WDPage';
import { LegoRequest } from './LegoRequest';

export namespace Lego {
  /**
   * 乐高数据服务
   */
  export class LegoService {
    pageId: string;
    page: WDPage;
    initParams: Map<string, Object> = new Map<string, Object>();
    groupFilters: IGroupFilter[];
    legoRequest: LegoRequest;

    constructor(builder: Builder) {
      this.pageId = builder.pageId;
      this.initParams = builder.initParams;
      this.groupFilters = builder.groupFilters;

      // 创建MGPage对象
      if (!builder.page) {
        this.page = new WDPage(this.pageId, this.initParams, this.groupFilters);
      } else {
        this.page = builder.page;
      }
      this.legoRequest = new LegoRequest(this.page);
    }

    /**
     * 数据请求
     * @param isRefresh 是否为刷新
     * @param callback 回调
     */
    public request(isRefresh: boolean, callback: Lego.Callback) {
      // TODO: 通过LegoRequest#request发出请求
      this.legoRequest.request(isRefresh, callback);
    }
  }

  export class Builder {
    pageId: string = '';
    contentId: string = '';
    page?: WDPage;
    initParams: Map<string, Object> = new Map<string, Object>();
    groupFilters: IGroupFilter[] = [];

    setPageId(pageId: string) {
      this.pageId = pageId;
      return this;
    }

    setContentId(contentId: string) {
      this.contentId = contentId;
      return this;
    }

    setPage(page: WDPage) {
      this.page = page
      return this;
    }

    setParams(initParams: Map<string, Object>) {
      this.initParams = initParams
      return this;
    }

    setGroupFilters(...groupFilters: IGroupFilter[]) {
      this.groupFilters = groupFilters
      return this;
    }

    public build(): LegoService {
      return new LegoService(this);
    }
  }

  /**
   * 数据请求回调接口
   */
  export interface Callback {
    /**
     * 一次数据请求成功的回调
     * @param group Group实例
     */
    onLoaded: (group: WDGroup) => void;

    /**
     * 一次数据请求失败的回调
     * @param group 本次请求的Group
     * @param msg 失败描述
     */
    onFailed: (group: WDGroup, msg: String) => void;

    /**
     * Page级错误回调,Page请求异常无法进行后续流程。
     * @param page Page实例
     * @param msg 错误描述
     */
    onError: (page: WDPage, msg: String) => void;

    /**
     * 整个Page已全部请求完成的回调
     * @param page Page实例
     */
    onCompleted: (page: WDPage) => void;

    /**
     * Page接口请求成功的回调
     * @param page Page实例
     */
    onPageLoaded: (page: WDPage) => void;

    /**
     * Group数据更新的回调
     * @param group Group实例
     */
    onGroupUpdate: (group: WDGroup) => void;

    /**
     * Comp数据更新的回调
     * @param comp Comp实例
     */
    onCompUpdate: (comp: WDComp<ItemBean, ItemDTO>) => void;
  }
}