"use strict"; /** * @typedef {import("../Application/RoutesMaker.ecma.js").RoutesMaker} RoutesMaker */ import {RouteModel} from "../Models/RouteModel.ecma.js"; import {Utils} from "../Utils/Utils.ecma.js"; /** * @class * @constructor * @param {!RoutesMaker} routes_maker * @returns {void} * @access public * @static */ export const RoutesManager = (function(){ /** * @constructs RoutesManager * @param {!RoutesMaker} routes_maker * @returns {void} * @access public * @static */ const RoutesManager = function(routes_maker){ /** @type {Object.} */ const routes = {}; /** * @param {!string} key * @returns {RouteModel|null} * @access public */ this.get = key => routes[key = Utils.to_key(key)] ? routes[key] : null; /** * @param {!string} name * @param {!string} key * @returns {RouteModel} * @access public */ this.add = (name, key = null) => { /** @type {RouteModel|null} */ let route = null; (key || (key = Utils.to_key(name))) && !routes[key] && (route = routes[key] = new RouteModel(routes_maker, name, key)); return route; }; /** * @param {!string} key * @returns {void} * @access public */ this.remove = key => { if(routes[key = Utils.to_key(key)]) delete routes[key]; }; /** * @returns {Object.} * @access public */ this.get_data = () => Object.keys(routes).reduce((dictionary, key) => { dictionary[key] = [routes[key].name, routes[key].dots.map(dot => [dot.longitude, dot.latitude])]; return dictionary; }, {}); /** * @param {!string} name * @returns {void} */ this.select = name => { for(const key in routes){ /** @type {boolean} */ const ok = key == name; routes[key].dots.forEach(dot => { dot.selected(ok); }); }; }; /** * @param {!string} name * @param {!boolean} ok * @returns {void} * @access public */ this.visible = (name, ok) => { routes[name].dots.forEach(dot => { dot.visible(ok); }); }; }; return RoutesManager; })();