• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (c) 2022 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16import emitter from '@ohos.events.emitter';
17import { EmitterConst } from '../../common/EmitterConst';
18import Base from '@ohos.base';
19
20class GoodsListInner {
21  id: number = 0
22}
23
24class GoodsList {
25  data: GoodsListInner = {
26    id: 0
27  }
28}
29
30export class CustomEmitter {
31  shoppingCartGoodsList: GoodsList[] = [];
32
33  // 单次订阅回调
34  public showEventsDialog(callback: Base.Callback<emitter.EventData>) {
35    let dialogShowEventsId: emitter.InnerEvent = {
36      eventId: EmitterConst.DIALOG_EVENT_ID
37    };
38    let dialogShowEventsData: emitter.EventData = {
39      data: {
40        id: EmitterConst.DIALOG_EVENT_ID,
41      }
42    };
43    // 单次订阅事件--广告
44    emitter.once(dialogShowEventsId, callback);
45    // 事件发布
46    emitter.emit(dialogShowEventsId, dialogShowEventsData);
47  }
48
49  // 单次订阅回调(eventId为string类型)
50  public closeEventsDialog(callback: Base.Callback<emitter.EventData>) {
51    let dialogCloseEventsData: emitter.EventData = {
52      data: {
53        id: EmitterConst.CLOSE_DIALOG_EVENT_ID
54      }
55    };
56    // 单次订阅事件--关闭广告
57    emitter.once(EmitterConst.CLOSE_DIALOG_EVENT_ID, callback);
58    // 事件发布
59    emitter.emit(EmitterConst.CLOSE_DIALOG_EVENT_ID, dialogCloseEventsData);
60  }
61
62  // 持久化订阅的事件回调
63  public setShoppingCartGoodsList(callback: (eventData: emitter.EventData) => void) {
64    let addGoodDataId: emitter.InnerEvent = {
65      eventId: EmitterConst.ADD_EVENT_ID
66    };
67    // 以持久化方式订阅购物车添加事件并接收事件回调
68    emitter.off(EmitterConst.ADD_EVENT_ID);
69
70    emitter.on(addGoodDataId, (eventData: emitter.EventData) => {
71      callback(eventData);
72    });
73  }
74
75  // 持久化订阅的事件回调(eventId为string类型)
76  public deleteShoppingCartGoodsList(callback: (eventData: emitter.EventData) => void) {
77    // 以持久化方式订阅购物车删除事件并接收事件回调
78    emitter.off(EmitterConst.DELETE_EVENT_ID);
79    emitter.on(EmitterConst.DELETE_EVENT_ID, (eventData: emitter.EventData) => {
80      callback(eventData);
81    });
82  }
83
84  public addGoods(goodId: number) {
85    let addToShoppingCartId: emitter.InnerEvent = {
86      eventId: EmitterConst.ADD_EVENT_ID
87    };
88    let shoppingCartData: emitter.EventData = {
89      data: {
90        id: goodId
91      }
92    };
93    // 持续订阅发布事件
94    emitter.emit(addToShoppingCartId, shoppingCartData);
95  }
96
97  public deleteGoods(listItemId: number) {
98    console.info("setShoppingCartGoodsList goodId" + JSON.stringify(listItemId))
99    let shoppingCartData: emitter.EventData = {
100      data: {
101        id: listItemId,
102      }
103    };
104    // 持续订阅发布事件
105    emitter.emit(EmitterConst.DELETE_EVENT_ID, shoppingCartData);
106  }
107
108  // 以持久化方式订阅购物车购买事件
109  public listenerEvents() {
110    emitter.on(EmitterConst.BUY_EVENT_ID, (eventData: emitter.EventData) => {
111    });
112  }
113
114  // 获取购买事件订阅者数量并将结果返回
115  public getListenerCounts(callback: (counts: number) => void) {
116    callback(emitter.getListenerCount(EmitterConst.BUY_EVENT_ID));
117  }
118
119  // 取消订阅购买事件后将购买事件订阅者数量结果返回
120  public clearListenerCounts(callback: (counts: number) => void) {
121    emitter.off(EmitterConst.BUY_EVENT_ID);
122    callback(emitter.getListenerCount(EmitterConst.BUY_EVENT_ID));
123  }
124}