import { BaseViewModel } from "@core/base";
import { RequestHelper, NetworkPageData } from "@core/network";
import { ToastUtils } from "@core/util";
import { Goods } from "@shared/types";
import { GoodsRepositoryImpl } from "../services/GoodsRepositoryImpl";
import { IGoodsRepository } from "../services/IGoodsRepository";
import { GoodsSearchRequest } from "../models/GoodsSearchRequest";
/**
* @file 通用网络请求示例页 ViewModel
* @author Joker.X
*/
@ObservedV2
export default class NetworkRequestViewModel extends BaseViewModel {
/**
* GET 请求加载状态
*/
@Trace
getLoading: boolean = false;
/**
* POST 请求加载状态
*/
@Trace
postLoading: boolean = false;
/**
* 商品仓库
*/
private repository: IGoodsRepository = new GoodsRepositoryImpl();
/**
* 发起 GET 请求(商品详情)
*/
requestGoodsDetail() {
RequestHelper.from<Goods>(this.repository.getGoodsInfo("1"))
.start((): void => {
this.getLoading = true;
})
.execute()
.then((data: Goods): void => {
const goods: Goods = new Goods(data);
ToastUtils.showSuccess($r("app.string.demo_network_request_get_success", goods.title));
})
.finally((): void => {
this.getLoading = false;
});
}
/**
* 发起 POST 请求(商品列表)
*/
requestGoodsList() {
const params: GoodsSearchRequest = new GoodsSearchRequest();
params.page = 1;
params.size = 20;
RequestHelper.from<NetworkPageData<Goods>>(this.repository.getGoodsPage(params))
.start((): void => {
this.postLoading = true;
})
.execute()
.then((): void => {
ToastUtils.showSuccess($r("app.string.demo_network_request_post_success"));
})
.finally((): void => {
this.postLoading = false;
});
}
}