Ref T2222. This introduces two small new concepts:
- expandTransactions(): allows a transaction to expand into several transactions. For example, "resign" adds a "remove reviewers" transaction.
- We have some other cases which could use this, but currently hard-code things outside of the Editor.
- One example is that in Maniphest, closing a task implies claiming it if it is unowned.
- We have some other cases which could use this, but currently hard-code things outside of the Editor.
- setIgnoreOnNoEffect(): The whole Editor can be set to continue or stop if any transactions have no effect, but this allows the behavior to be refined at the individual transaction level. This is primarily to make the UX less confusing, so the user gets only a single relevant error instead of one for each expanded transaction.
Otherwise, this is pretty straightforward.