Home Manual Reference Source Repository

src/plugins/easycurrency/MoneySpan.js

import config from './config';
import Money from 'js-money';

/**
 * Represents an element which renders a monetary value.
 */
export default class MoneySpan {
    /**
     * Create a new MoneySpan instance.
     * @param {js-money} money The initial value of the element.
     * @param {src/plugins/easycurrency/main.js~EasyCurrency} easyCurrency EasyCurrency
     */
    constructor(money, easyCurrency) {
        /** @type {DOMNode} */
        this._element = null;
        /** @type {js-money} */
        this._money = money;
        /** @type {src/plugins/easycurrency/main.js~EasyCurrency} */
        this._easyCurrency = easyCurrency;
    }


    /**
     * Retrieves the element this money span is attached to.
     * @return {DOMNode}
     */
    getElement() {
        return this._element;
    }


    /**
     * Attaches this money span to the given element.
     * @param {DOMNode}	el - The element to attach to.
     */
    setElement(el) {
        this._element = el;
    }

    /**
     * Destroys this MoneySpan.
     */
    destroy() {
        this._element = null;
        this._easyCurrency = null;
        this._money = null;
    }

    /**
     * Set an element which this money value will render to when changed.
     * @param {DOMNode} element - The element to render to.
     */
    setRenderElement(element) {
        this._element = element;
        this.render();
    }

    /**
     * Change the value of this MoneySpan.
     * @param {js-money} money
     */
    set(money) {
        this._money = money;
        this.render();
    }

    /**
     * Re-render the element.
     */
    render() {
        if (!this._element) {
            return;
        }

        this._easyCurrency.addTax(this._money)
            .then((v) => this._easyCurrency.convert(v))
            .then((v) => this._easyCurrency.format(v))
            .then((str) => {
                this._element.innerText = str;
            });
    }
}