diff options
author | skjnldsv <skjnldsv@protonmail.com> | 2025-07-16 08:29:01 +0200 |
---|---|---|
committer | nextcloud-command <nextcloud-command@users.noreply.github.com> | 2025-07-17 11:05:43 +0000 |
commit | 869e23d66575f0da9728a945a14c7d071b6c7185 (patch) | |
tree | 8606b912e93ec1d81e655c9b19d6fb9eec5a0451 | |
parent | 90c2bba6376e3ce1252d454891bda65047ccb31d (diff) | |
download | nextcloud-server-869e23d66575f0da9728a945a14c7d071b6c7185.tar.gz nextcloud-server-869e23d66575f0da9728a945a14c7d071b6c7185.zip |
feat(files): allow custom setting order
Signed-off-by: skjnldsv <skjnldsv@protonmail.com>
-rw-r--r-- | apps/files/src/models/Setting.js | 21 | ||||
-rw-r--r-- | apps/files/src/views/Settings.vue | 10 |
2 files changed, 30 insertions, 1 deletions
diff --git a/apps/files/src/models/Setting.js b/apps/files/src/models/Setting.js index 66173b7df93..1db1d818e69 100644 --- a/apps/files/src/models/Setting.js +++ b/apps/files/src/models/Setting.js @@ -9,6 +9,7 @@ export default class Setting { _el _name _open + _order /** * Create a new files app setting @@ -19,12 +20,14 @@ export default class Setting { * @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 }) { + 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 = () => {} @@ -33,6 +36,18 @@ export default class Setting { 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() { @@ -51,4 +66,8 @@ export default class Setting { return this._close } + get order() { + return this._order + } + } diff --git a/apps/files/src/views/Settings.vue b/apps/files/src/views/Settings.vue index 50376bcc578..49a348eabc3 100644 --- a/apps/files/src/views/Settings.vue +++ b/apps/files/src/views/Settings.vue @@ -340,6 +340,16 @@ export default { userConfig() { return this.userConfigStore.userConfig }, + + sortedSettings() { + // Sort settings by name + return [...this.settings].sort((a, b) => { + if (a.order && b.order) { + return a.order - b.order + } + return a.name.localeCompare(b.name) + }) + }, }, created() { |