diff options
Diffstat (limited to 'apps/files/src/models/Setting.js')
-rw-r--r-- | apps/files/src/models/Setting.js | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/apps/files/src/models/Setting.js b/apps/files/src/models/Setting.js new file mode 100644 index 00000000000..1db1d818e69 --- /dev/null +++ b/apps/files/src/models/Setting.js @@ -0,0 +1,73 @@ +/** + * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +export default class Setting { + + _close + _el + _name + _open + _order + + /** + * Create a new files app setting + * + * @since 19.0.0 + * @param {string} name the name of this setting + * @param {object} component the component + * @param {Function} component.el function that returns an unmounted dom element to be added + * @param {Function} [component.open] callback for when setting is added + * @param {Function} [component.close] callback for when setting is closed + * @param {number} [component.order] the order of this setting, lower numbers are shown first + */ + constructor(name, { el, open, close, order }) { + this._name = name + this._el = el + this._open = open + this._close = close + this._order = order || 0 + + if (typeof this._open !== 'function') { + this._open = () => {} + } + + if (typeof this._close !== 'function') { + this._close = () => {} + } + + if (typeof this._el !== 'function') { + throw new Error('Setting must have an `el` function that returns a DOM element') + } + + if (typeof this._name !== 'string') { + throw new Error('Setting must have a `name` string') + } + + if (typeof this._order !== 'number') { + throw new Error('Setting must have an `order` number') + } + } + + get name() { + return this._name + } + + get el() { + return this._el + } + + get open() { + return this._open + } + + get close() { + return this._close + } + + get order() { + return this._order + } + +} |