HandleState JS

Documentation

Voici la courte documentation de HandleState JS.

class: HandleState

HandleState.prototype.constructor()

Permet de gérer un état rendant les fonction connectées à chaque changement d'état

@param {any} initialValue=null

get value

Obtenir la valeur de l'état

@return {any}

HandleState.prototype.set()

Définir la valeur de l'état

@param {any} v

@return {void}

HandleState.prototype.connect()

Connecter une fonction aux changements d'état

@param {Function} render

@param {boolean} firstRender=true

@return {void}

HandleState.prototype.disconnect()

Déconnecter une fonction aux changements d'état

@param {Function} render

@return {void}

Code Source

/**
 * Voir la doc {@link https://handlestatejs.garoux.ovh HandleStateJS}
 * et {@link https://github.com/Lou-du-Poitou/handlestatejs GitHub}
 * @license WTFPL
 * @author lou_du_poitou
 */

/**
 * Permet de gérer un état rendant les fonction 
 * connectées à chaque changement d'état
 * 
 * Get:
 * value
 * 
 * Méthodes d'instance:
 * set()
 * connect()
 * disconnect()
 * 
 * @param {any} initialValue
 * @property {any} value
 */
class HandleState {
    #value
    #connected = new Set();

    constructor(initialValue = null) {
        this.#value = initialValue;
    }

    /**
     * Obtenir la valeur de l'état
     * 
     * @return {any}
     */
    get value() {
        return this.#value;
    }

    /**
     * Définir la valeur de l'état
     * 
     * @param {any | Function} v
     * @return {void}
     */
    set(v) {
        if (v instanceof Function && arguments.length > 0) {
            this.#value = v(this.#value);
        } else {
            // Ne pas mettre à jour si les objets sont les mêmes
            if (Object.is(this.value, v)) return;

            this.#value = v;
        }

        this.#connected.forEach(render => render());
    }

    /**
     * Connecter une fonction aux
     * changements d'état
     * 
     * @param {Function} render 
     * @param {boolean} firstRender
     * @return {void}
     */
    connect(render, firstRender=true) {
        this.#connected.add(render);
        if (firstRender) {
            render();
        }
    }

    /**
     * Déconnecter une fonction aux
     * changements d'état
     * 
     * @param {Function} render 
     * @return {void}
     */
    disconnect(render) {
        this.#connected.delete(render);
    }
}

export default HandleState;
/sources/handlestate.mjs