1/*
2 * Copyright (c) 2023 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 { Log } from '../../utils/Log';
17import type { ActionData } from '../actions/Action';
18import { EventBusManager } from '../../worker/eventbus/EventBusManager';
19import type { Middleware } from '../core';
20import type { Dispatch } from '../store';
21
22const TAG = '[reduxWorkerMiddle]:';
23const ACTION_LENGTH: number = 2;
24
25/**
26 * Middleware to emit async operation like switching camera and so on.
27 *
28 * @param store the created old store
29 * @returns (next: Dispatch) => (action: AnyAction) => anyAction
30 */
31export const eventBusMiddle: Middleware = () => (next: Dispatch) => (action: ActionData) => {
32  const uiAction = { type: action.type,
33    data: action.data };
34
35  //  EventBusManager.getInstance().getEventBus().emit(action.type, [action.data])
36  const result = next(uiAction);
37  if (Object.keys(action).length >= ACTION_LENGTH && action.isEvent) {
38    EventBusManager.getInstance().getEventBus().emit(action.type, [action.data]);
39  }
40  Log.info(`${TAG} logger: new state`);
41  return result;
42};