"use strict"; const api = require("../api.js"); const uri = require("../util/uri.js"); const events = require("../events.js"); class PoolCategory extends events.EventTarget { constructor() { super(); this._name = ""; this._color = "#000000"; this._poolCount = 0; this._isDefault = false; this._origName = null; this._origColor = null; } get name() { return this._name; } get color() { return this._color; } get poolCount() { return this._poolCount; } get isDefault() { return this._isDefault; } get isTransient() { return !this._origName; } set name(value) { this._name = value; } set color(value) { this._color = value; } static fromResponse(response) { const ret = new PoolCategory(); ret._updateFromResponse(response); return ret; } save() { const detail = { version: this._version }; if (this.name !== this._origName) { detail.name = this.name; } if (this.color !== this._origColor) { detail.color = this.color; } if (!Object.keys(detail).length) { return Promise.resolve(); } let promise = this._origName ? api.put( uri.formatApiLink("pool-category", this._origName), detail ) : api.post(uri.formatApiLink("pool-categories"), detail); return promise.then((response) => { this._updateFromResponse(response); this.dispatchEvent( new CustomEvent("change", { detail: { poolCategory: this, }, }) ); return Promise.resolve(); }); } delete() { return api .delete(uri.formatApiLink("pool-category", this._origName), { version: this._version, }) .then((response) => { this.dispatchEvent( new CustomEvent("delete", { detail: { poolCategory: this, }, }) ); return Promise.resolve(); }); } _updateFromResponse(response) { this._version = response.version; this._name = response.name; this._color = response.color; this._isDefault = response.default; this._poolCount = response.usages; this._origName = this.name; this._origColor = this.color; } } module.exports = PoolCategory;