Source

EditableRegionCollection.js

import { Collection } from "./Collection";
import { EditableRegion } from "./EditableRegion";
import { CallbackType, RequestHelper } from "./helper/module";

/**
 * @extends {Collection<EditableRegion>}
 */
export class EditableRegionCollection extends Collection {

    /**
     * Wrapper für TXTextControl.EditableRegionCollection
     * @param {any} txEditableRegionCollection 
     */
    constructor(txEditableRegionCollection) {
        super(txEditableRegionCollection, (/** @type {EditableRegion} */ txEditableRegion) => new EditableRegion(txEditableRegion));
        this.#bindCallbacks();
    }

    /**
     * binding callback functions
     */
    #bindCallbacks() {
        this._txCollection.remove = this._txCollection.remove.bind(this._txCollection);
        this._txCollection.add = this._txCollection.add.bind(this._txCollection);
    }

    /**
     *  Removes an editable region from the collection
     * @param {EditableRegion} editableRegion
     * @param {boolean=} selectedPart
     * @returns {Promise<boolean>}
     */
    async remove(editableRegion, selectedPart) {
        return RequestHelper.Promise(this._txCollection.remove,
            editableRegion.txEditableRegion,
            selectedPart,
            CallbackType.RequestBooleanCallback,
            CallbackType.ErrorCallback);
    }

    /**
     * Adds a new editable region to the document
     * @param {string} username 
     * @param {number} id 
     * @param {number} start 
     * @param {number} length
     * @returns {Promise<{response, addResult}>}
     */
    async add(username, id, start, length) {
        return RequestHelper.Promise(this._txCollection.add,
            username, id, start, length,
            CallbackType.AddEditableRegionCallback,
            CallbackType.ErrorCallback);
    }
}