AppSuite:Extending the UI (best practices)
From Open-Xchange
API status: In Development
Extension points:
Best practices
Best practices
Abstract
The flexibility of the extension points system usually allows more than one strategy to realize the desired logic. This is a list of solutions for common scenarios showing advantages or disadvantages
Scenarios
hide/show action
simply register a fresh new extension with an index less than the original action extension.
// original extension
new Action('io.ox/mail/actions/compose', {
id: 'compose',
index: 100,
requires: function () {
return true;
},
...
});
// your extension to hide it
ext.point('io.ox/mail/actions/compose').extend({
// must be a different id than used in original extension
id: 'compose_preprocess',
// important: must be smaller than the one used in original extension
index: 50,
requires: function (e) {
// is your condition meet?
if (myCondition = true) {
// stop propagation to suppress execution of
// requires-handlers of extensions with a higher index
e.stopPropagation();
// force hide (or force show with 'return true')
return false;
}
}
});
common pitfalls
use ext.point(...).replace
- original requires function is replaced and can not be accessed anymore
- also copy and paste it contents does not help cause future changes are not carried over automatically
- see documentation for .replace
ext.point('io.ox/mail/actions/compose').replace({
id: 'compose',
requires: function () {
// my custom logic
}
})