elf-sync-state-yomo
Version:
Syncs elf store state across tabs
24 lines (16 loc) • 2.28 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('rxjs'), require('rxjs/operators'), require('lodash-es'), require('@yomo/presencejs')) :
typeof define === 'function' && define.amd ? define(['exports', 'rxjs', 'rxjs/operators', 'lodash-es', '@yomo/presencejs'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.ElfSyncState = {}, global.Rx, global.Rx, global["lodash-es"], global.Presence));
})(this, (function (exports, rxjs, operators, lodashEs, Presence) { 'use strict';
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var Presence__default = /*#__PURE__*/_interopDefaultLegacy(Presence);
function includeKeys(a){return rxjs.pipe(operators.map(b=>Object.keys(b).reduce((c,d)=>(a.includes(d)&&(c[d]=b[d]),c),{})))}
function syncState(a,b){const c={channel:`${a.name}@store`,source:a=>a.asObservable(),preUpdate:a=>a.data,runGuard:()=>"undefined"!=typeof window&&"undefined"!=typeof window.BroadcastChannel},d=Object.assign(Object.assign({},c),b);if(!d.runGuard())return;let e;const f=()=>e.asObservable(),g=a=>{console.log("setValue: ",a),e.next(a);};// const stateChannel = new BroadcastChannel(merged.channel);
let i=null;return null===i&&(console.log("girdim"),e=new rxjs.BehaviorSubject({}),i=new Presence__default["default"]("https://prsc.yomo.dev",{auth:{// Certification Type
type:"token",// Api for getting access token
endpoint:"https://ae59-159-146-14-53.ngrok.io/api/presence-auth"}}),i.on("connected",()=>{console.log("Connected to server: ",i.host);})),i.on("connected",()=>{i.on("updateData",b=>{console.log("data :",b),a.update(a=>Object.assign(Object.assign({},a),b));});}),i.on("connected",()=>{f().subscribe(a=>{console.log("getValue: ",a),i.send("updateData",a);});}),d.source(a).pipe(rxjs.skip(1),rxjs.distinctUntilChanged(lodashEs.isEqual),rxjs.tap(a=>{(console.log("PostMessage: ",a),g(a));}),rxjs.finalize(()=>{i.close(),i.on("closed",()=>{console.log("Closed the connection");});})).subscribe(),i}
exports.includeKeys = includeKeys;
exports.syncState = syncState;
Object.defineProperty(exports, '__esModule', { value: true });
}));