roadmap.md - Describe follow-up modules
[civicrm-core.git] / ext / afform / docs / roadmap.md
1 # Roadmap
2
3 The `afform` extension is a proof-of-concept. It aims to demonstrate the core model/concept in which AngularJS
4 provides the standard data-format and component-model shared by developers (working in code files) and administrators
5 (working in a programmatic GUI).
6
7 As a proof-of-concept, it is necessarily incomplete. In particular: (a) some functionality is envisioned for
8 additional extensions and (b) within this extension, there are known issues.
9
10 ## Suite of Extensions
11
12 This extension is expected to be the base for a suite of related extensions:
13
14 * `afform`: Base framework and runtime. Provides APIs for developers.
15 * `afform_html`: Present web-based editor for customizing forms in HTML notation. Use Monaco or ACE.
16 (In the near term, it's a simple demonstration that forms can be edited by users in a browser; in the
17 long term, it occupies a smaller niche as a developer/power-admin tool.)
18 * `afform_gui`: Present a web-based editor for customizing forms with drag-drop/multi-pane UX.
19 (In the long term, this is the main UI for admins.)
20 * `afform_auditor`: Report on upgrade compatibility. Test changesets. Highlight dangerous/unknown/unsupported form elements.
21 Score maintainability of the system.
22
23 ## Known Issues (`org.civicrm.afform`)
24
25 * There are several `FIXME`/`TODO` declarations in the code for checking pre-conditions, reporting errors, handling edge-cases, etc.
26 * Although afforms are can be used in AngularJS, they don't fully support tooling like `cv ang:html:list`
27 and `hook_civicrm_alterAngular` changesets. We'll need a core patch to allow that. (Ex: Define partials via callback.)
28 * We generally need to provide more services for managing/accessing data (e.g. `crm-api3`).
29 * We need a formal way to enumerate the library of available tags/directives/attributes. This, in turn, will drive the
30 drag-drop UI and any validation/auditing.
31 * Need to implement the `Afform.revert` API to undo local customizations.
32 * Haven't decided if we should support a `client_route` property (i.e. defining a skeletal controller and route for any form).
33 On the plus side, make it easier to add items to the `civicrm/a` base-page. On the flipside, we don't currently have
34 a strong use-case, and developers can get the same effect with `civix generate:angular-page` and embedding `<div afform-helloworld/>`.