@javiertinc/essentials
Version:
Una librería con variedad de funciones útiles que considero esenciales en la mayoría de los desarrollos web.
75 lines (74 loc) • 3.71 kB
JavaScript
import _cnsl from "./cnsl.js";
import _data from "./data.js";
export default class obsv {
constructor(config) {
this.config = config;
this.cnsl = new _cnsl(this.config);
this.storeName = this.config.data.encrypt ? _data.usid('obsv' + this.config.project.name) : 'obsv' + this.config.project.name;
}
/**
* Obtiene todos los observadores registrados.
* @returns Un array de objetos donde cada objeto contiene el nombre del recurso y un array de observadores.
**/
getAll() {
this.config.debug.obsv && this.cnsl.log('jtEssentials.obsv.getAll() • Obteniendo observadores');
let store = localStorage.getItem(this.storeName);
if (!store) {
this.config.debug.obsv && this.cnsl.warn('jtEssentials.obsv.getAll() • No se encontraron observadores');
return [];
}
return _data.parse(store, this.config.data.encrypt, this.config.data.key) || [];
}
/**
* Obtiene los observadores de un recurso específico.
* @param resourceName - El nombre del recurso del cual se desean obtener los observadores.
* @returns Un array de strings con los nombres de los observadores registrados para el recurso.
**/
get(resourceName) {
this.config.debug.obsv && this.cnsl.log('jtEssentials.obsv.get() • Obteniendo observador', resourceName);
let store = this.getAll();
let resource = store.find((item) => Object.keys(item)[0] === resourceName);
if (!resource) {
this.config.debug.obsv && this.cnsl.warn('jtEssentials.obsv.get() • No se encontró el observador', resourceName);
return [];
}
return resource[resourceName];
}
/**
* Agrega un nuevo observador a un recurso específico.
* @param resourceName - El nombre del recurso al cual se desea agregar el observador.
* @param from - Desde dónde se está agregando el observador (puede ser un nombre de componente, función, etc.).
**/
add(resourceName, from) {
this.config.debug.obsv && this.cnsl.log('jtEssentials.obsv.add() • Agregando observador', resourceName, from);
let store = this.getAll();
let resource = store.find((item) => Object.keys(item)[0] === resourceName);
if (resource) {
resource[resourceName].push(from);
}
else {
store.push({ [resourceName]: [from] });
}
localStorage.setItem(this.storeName, _data.stringify(store, this.config.data.encrypt, this.config.data.key));
}
/**
* Elimina un observador de un recurso específico.
* @param resourceName - El nombre del recurso del cual se desea eliminar el observador.
* @param from - Desde dónde se está eliminando el observador (puede ser un nombre de componente, función, etc.).
**/
remove(resourceName, from) {
this.config.debug.obsv && this.cnsl.log('jtEssentials.obsv.remove() • Eliminando observador', resourceName, from);
let store = this.getAll();
let resource = store.find((item) => Object.keys(item)[0] === resourceName);
if (resource) {
resource[resourceName] = resource[resourceName].filter((item) => item !== from);
if (resource[resourceName].length === 0) {
store = store.filter((item) => Object.keys(item)[0] !== resourceName);
}
localStorage.setItem(this.storeName, _data.stringify(store, this.config.data.encrypt, this.config.data.key));
}
else {
this.config.debug.obsv && this.cnsl.warn('jtEssentials.obsv.remove() • No se encontró el observador', resourceName, from);
}
}
}