AppSuite:Extending the UI (best practices)

From Open-Xchange
Revision as of 10:19, 12 August 2015 by Frank.paczynski (talk | contribs) (Created page with "{{Stability-experimental}} <div class="title">Extension points:<br> Best practices</div> '''Abstract''' ''The flexibility of the extension points system usually allows more...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

API status: In Development

Extension points:
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
       } 

})