aboutsummaryrefslogtreecommitdiffstats
path: root/apps/files/src/models/Setting.js
diff options
context:
space:
mode:
Diffstat (limited to 'apps/files/src/models/Setting.js')
-rw-r--r--apps/files/src/models/Setting.js73
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
+ }
+
+}