visitor.js

import User from './user'

/**
 * Visitor class represents information about current website visitor.
 * @extends User
 * @property {string} uuid UUID is unique identifier for user. UUID for visitor sets automatically on starting.
 * Managers have UUID in their account.
 * @property {string} name
 * @property {string} email
 * @property {Field[]} fields custom fiels defined for user
 */
class Visitor extends User {

    /**
     * Visitor constructor
     */
    constructor() {
        super();
        this.fields = {};
    }

    /**
     * Gets visitor's custom fields
     */
    getFields() {
        return this.fields;
    }

    /**
     * Sets custom fields for visitor
     * @param {object} fields Visitor fields object
     */
    setFields(fields) {
        for (let prop in fields) {
            if (typeof fields[prop] === "object") {
                throw new Error("Object nesting is not allowed in visitor fields. Check " + prop + " field. It is an object");
            }
        }
        this.fields = fields;
    }

}

/**
 * Static builder for visitor instance
 *
 * @param {object} data Visitor representation received from API
 * @return {Visitor}
 */
Visitor.buildFromInfo = (data) => {
    let visitor = new Visitor();
    visitor.setUuid(data.uuid);
    visitor.setName(data.name);
    visitor.setEmail(data.email);
    visitor.setIsOnline(data.isOnline);
    visitor.setFields(data.fields);
    return visitor;
};

export default Visitor;