wechaty-redux
Version:
Wechaty Redux Plugin Powered By Ducks
63 lines • 2.57 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
/**
* Wechaty Open Source Software - https://github.com/wechaty
*
* @copyright 2016 Huan LI (李卓桓) <https://github.com/huan>, and
* Wechaty Contributors <https://github.com/wechaty>.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
const redux_1 = require("redux");
const redux_observable_1 = require("redux-observable");
const wechaty_1 = require("wechaty");
const mod_js_1 = require("../src/mod.js"); // 'wechaty-redux'
async function main() {
/**
* 1. Configure Store with RxJS Epic Middleware for Wechaty Ducks API
*/
const epicMiddleware = (0, redux_observable_1.createEpicMiddleware)();
const origStore = (0, redux_1.createStore)(mod_js_1.Duck.default, (0, redux_1.applyMiddleware)(epicMiddleware));
const store = {
...origStore,
dispatch: (action) => {
console.info('action:', action);
return origStore.dispatch(action);
},
};
const rootEpic = (0, redux_observable_1.combineEpics)(...Object.values(mod_js_1.Duck.epics));
epicMiddleware.run(rootEpic);
/**
* 2. Instantiate Wechaty and Install Redux Plugin
*/
const bot = wechaty_1.WechatyBuilder.build({ puppet: 'wechaty-puppet-mock' });
bot.use((0, mod_js_1.WechatyRedux)({
store,
}));
/**
* 3. Using Redux Store with Wechaty Ducks API!
*/
store.subscribe(() => console.info(store.getState()));
await bot.start();
// store.dispatch(Duck.actions.dingCommand(bot.puppet.id, 'dispatch a ding action'))
// The above code 👆 is exactly do the same thing with the following code 👇 :
// Duck.operations.ding(store.dispatch)(bot.puppet.id, 'call ding from operations')
// await new Promise(setImmediate)
await new Promise(resolve => setTimeout(resolve, 1));
await bot.stop();
console.info('Vanilla Redux Example finished.');
}
main()
.catch(console.error);
//# sourceMappingURL=vanilla-redux.js.map