server/src/assets/js/mtdc-tracking.js
author durandn
Wed, 05 Oct 2016 14:24:32 +0200
changeset 124 983e72b4bc45
parent 112 2ec47574a371
permissions -rw-r--r--
Added tag 00.00.21 for changeset 15724968d6e6

/* Tracking module that listens to Renkan events */
/* globals Rkns */
/* eslint no-console: 0 */

Rkns.mtdcTracking = function(_renkan, _trackingWorker) {

    var _proj = _renkan.project;

    function prepareObjData(node) {
        var objData = node.toJSON(),
            p = node.get('project');
        objData.project = { id: p.get('id'), title: p.get('title')};
        objData.origin = node.get('origin', -1);
        return objData;
    }

    function registerNode(_node) {
        _node.on('remove', function(_n) {
            var nodeData = prepareObjData(_n);
            _trackingWorker.deleteNode(nodeData);
        });
        _node.on('change', function(_n) {
            var nodeData = prepareObjData(_n);
            var dataChanged = _n.changed;
            var previousData = Rkns._.mapValues(_n.changed, function(v,k) { return _n.previous(k); });
            _trackingWorker.updateNode(nodeData, dataChanged, previousData);
        });
    }

    function registerEdge(_edge) {
        _edge.on('remove', function(_e) {
            var edgeData = prepareObjData(_e);
            _trackingWorker.deleteEdge(edgeData);
        });
        _edge.on('change', function(_e) {
            var edgeData = prepareObjData(_e);
            var dataChanged = _e.changed;
            var previousData = Rkns._.mapValues(_e.changed, function(v,k) { return _e.previous(k); });
            _trackingWorker.updateEdge(edgeData, dataChanged, previousData);
        });
    }

    function registerView(_view) {
        _view.on('remove', function(_v) {
            var viewData = prepareObjData(_v);
            _trackingWorker.deleteView(viewData);
        });
        _view.on('change', function(_v) {
            var viewData = prepareObjData(_v);
            var dataChanged = _v.changed;
            var previousData = Rkns._.mapValues(_v.changed, function(v,k) { return _v.previous(k); });
            _trackingWorker.updateView(viewData, dataChanged, previousData);
        });
    }


    _proj.on('change:loadingStatus', function(_p) {
        if(_p.get('loadingStatus')) {
            return;
        }
        // -> track open for editing

        _p.on('add:nodes', function(_node) {
            var nodeData = prepareObjData(_node);
            registerNode(_node);
            _trackingWorker.addNode(nodeData);
        });

        _p.on('add:edges', function(_edge) {
            var edgeData = prepareObjData(_edge);
            registerEdge(_edge);
            _trackingWorker.addEdge(edgeData);
        });

        _p.on('add:views', function(_view) {
            var viewData = prepareObjData(_view);
            registerView(_view);
            _trackingWorker.addView(viewData);
        });

        _proj.get('nodes').each(function(_node) {
            registerNode(_node);
        });

        _proj.get('edges').each(function(_edge) {
            registerEdge(_edge);
        });

        _proj.get('views').each(function(_view) {
            registerView(_view);
        });

    });

    Rkns.$('.Rk-GraphSearch-Field').on('input', Rkns._.debounce(function() {
        var val = Rkns.$('.Rk-GraphSearch-Field').val();
        if(val && val.length >= 2) {
            _trackingWorker.searchProject();
        }
    }, 1000));

    Rkns.$(window).on('beforeunload', function() {
        _trackingWorker.closeProject();
    });

};