diff --git a/app/src/components/ConfigPanel.vue b/app/src/components/ConfigPanel.vue
index 367b64c2..d4dad0da 100644
--- a/app/src/components/ConfigPanel.vue
+++ b/app/src/components/ConfigPanel.vue
@@ -1,7 +1,7 @@
@@ -35,6 +35,7 @@
diff --git a/app/src/components/globals/formItems/ButtonItem.vue b/app/src/components/globals/formItems/ButtonItem.vue
new file mode 100644
index 00000000..9f890444
--- /dev/null
+++ b/app/src/components/globals/formItems/ButtonItem.vue
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
diff --git a/app/src/helpers/commons.js b/app/src/helpers/commons.js
index b52a7e9c..fd2fff76 100644
--- a/app/src/helpers/commons.js
+++ b/app/src/helpers/commons.js
@@ -63,6 +63,19 @@ export function flattenObjectLiteral (obj, flattened = {}) {
}
+/**
+ * Returns an new Object filtered with passed filter function.
+ * Each entry `[key, value]` will be forwarded to the `filter` function.
+ *
+ * @param {Object} obj - object to filter.
+ * @param {Function} filter - the filter function to call for each entry.
+ * @return {Object}
+ */
+export function filterObject (obj, filter) {
+ return Object.fromEntries(Object.entries(obj).filter((...args) => filter(...args)))
+}
+
+
/**
* Returns an new array containing items that are in first array but not in the other.
*
diff --git a/app/src/helpers/yunohostArguments.js b/app/src/helpers/yunohostArguments.js
index f0cc4d08..6f5893c5 100644
--- a/app/src/helpers/yunohostArguments.js
+++ b/app/src/helpers/yunohostArguments.js
@@ -229,6 +229,12 @@ export function formatYunoHostArgument (arg) {
name: 'MarkdownItem',
props: ['label:ask'],
renderSelf: true
+ },
+ {
+ types: ['button'],
+ name: 'ButtonItem',
+ props: ['type:style', 'label:ask', 'icon', 'enabled', 'args'],
+ renderSelf: true
}
]
@@ -328,6 +334,10 @@ export function formatYunoHostArguments (args, forms) {
if ('visible' in arg && ![false, '"false"'].includes(arg.visible)) {
addEvaluationGetter('visible', field, arg.visible, forms)
}
+
+ if ('enabled' in arg) {
+ addEvaluationGetter('enabled', field.props, arg.enabled, forms)
+ }
}
return { form, fields, validations, errors }
@@ -354,6 +364,7 @@ export function formatYunoHostConfigPanels (data) {
for (const _section of sections) {
const section = {
id: _section.id,
+ isActionSection: _section.is_action_section,
visible: [undefined, true, '"true"'].includes(_section.visible)
}
if (_section.help) section.help = formatI18nField(_section.help)