Snippets

Piotr Szrajber Smart M.App - Simple Event Wrapper

Created by Piotr Szrajber last modified
/**
* Simple event wrapper for internal Smart M.App events
* @class SimpleEventWrapper
* @param emitter {EventSourceMixin} emitter must be an object with "on" and "off" methods like $GP.events.__activeLegendHandle
* @param eventName {String} name of the event. This is not checked in the SimpleEventWrapper - you must know the valid event name
* 2018-06-28 Piotr Szrajber <piotr.szrajber@hexagon.com>
*/

let SimpleEventWrapper = ((window, undefined) => {
    class _SimpleEventWrapper {
        constructor(emitter, eventName) {
            if (typeof emitter.on !== "function" || typeof emitter.off != "function") {
                throw new Error("Emitter is not a valid event source");
            }
            this._emitter = emitter;
            this._eventName = eventName;
            this._handlers = {};
        }

        //RFC4122 version 4 compliant uuid
        uuidv4() {
            return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
                var r = Math.random() * 16 | 0,
                    v = c == 'x' ? r : (r & 0x3 | 0x8);
                return v.toString(16);
            });
        }

        register(handler) {
            const token = this.uuidv4();
            this._handlers[token] = handler;
            this._emitter.on(this._eventName, handler);
            return token;
        }

        unregister(token) {
            if (token in this._handlers) {
                this._emitter.off(this._eventName, this._handlers[token]);
                this._handlers[token] = undefined;
                return true;
            }
            return false;
        }
    };

    return _SimpleEventWrapper;
})(window);

/** usage example - wrap "legendModified" event **/

let legendModified = new SimpleEventWrapper($GP.events.__activeLegendHandle, "legendModified");

let token1 = legendModified.register((eventName, args) => console.log(eventName, args));

// legendModified.unregister(token1);

Comments (0)

HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.