gristlabs_grist-core/app/common
Dmitry S a56714e1ab (core) Implement trigger formulas (generalizing default formulas)
Summary:
Trigger formulas can be calculated for new records, or for new records and
updates to certain fields, or all fields. They do not recalculate on open,
and they MAY be set directly by the user, including for data-cleaning.

- Column metadata now includes recalcWhen and recalcDeps fields.
- Trigger formulas are NOT recalculated on open or on schema changes.
- When recalcWhen is "never", formula isn't calculated even for new records.
- When recalcWhen is "allupdates", formula is calculated for new records and
  any manual (non-formula) updates to the record.
- When recalcWhen is "", formula is calculated for new records, and changes to
  recalcDeps fields (which may be formula fields or column itself).
- A column whose recalcDeps includes itself is a "data-cleaning" column; a
  value set by the user will still trigger the formula.
- All trigger-formulas receive a "value" argument (to support the case above).

Small changes
- Update RefLists (used for recalcDeps) when target rows are deleted.
- Add RecordList.__contains__ (for `rec in refList` or `id in refList` checks)
- Clarify that Calculate action has replaced load_done() in practice,
  and use it in tests too, to better match reality.

Left for later:
- UI for setting recalcWhen / recalcDeps.
- Implementation of actions such as "Recalculate for all cells".
- Allowing trigger-formulas access to the current user's info.

Test Plan: Added a comprehensive python-side test for various trigger combinations

Reviewers: paulfitz, alexmojaki

Reviewed By: paulfitz

Differential Revision: https://phab.getgrist.com/D2872
2021-06-25 22:53:07 -04:00
..
ACLPermissions.ts (core) Add rules to eslint to better match our coding conventions. 2021-05-24 12:56:18 -04:00
ACLRuleCollection.ts (core) Configure more comprehensive eslint rules for Typescript 2021-04-26 18:54:55 -04:00
ActionBundle.ts (core) discount indirect changes for access control purposes 2021-05-12 11:26:21 -04:00
ActionDispatcher.ts (core) move home server into core 2020-07-21 20:39:10 -04:00
ActionGroup.ts (core) move home server into core 2020-07-21 20:39:10 -04:00
ActionRouter.ts (core) move home server into core 2020-07-21 20:39:10 -04:00
ActionSummary.ts (core) Add rules to eslint to better match our coding conventions. 2021-05-24 12:56:18 -04:00
ActiveDocAPI.ts (core) allow undos to be partial, if access control prohibits some part of them 2021-06-10 18:26:11 -04:00
ApiError.ts (core) give more detailed reasons for access denied when memos are present 2021-02-15 17:02:24 -05:00
arrayToString.ts (core) move home server into core 2020-07-21 20:39:10 -04:00
AsyncCreate.ts (core) Update UI for formula and column label/id in the right-side panel. 2021-03-17 01:35:56 -04:00
AsyncFlow.ts (core) move home server into core 2020-07-21 20:39:10 -04:00
BaseAPI.ts (core) give more detailed reasons for access denied when memos are present 2021-02-15 17:02:24 -05:00
BasketClientAPI.ts (core) move home server into core 2020-07-21 20:39:10 -04:00
BigInt.ts (core) move home server into core 2020-07-21 20:39:10 -04:00
BillingAPI.ts (core) link AppSumo activations with stripe, and support upgrades/downgrades 2021-06-24 10:18:42 -04:00
BinaryIndexedTree.js (core) move client code to core 2020-10-02 13:24:21 -04:00
BrowserSettings.ts (core) move home server into core 2020-07-21 20:39:10 -04:00
ColumnFilterFunc.ts (core) Use individual choices for filtering choice lists 2021-06-11 09:34:06 -07:00
ColumnGetters.ts (core) move home server into core 2020-07-21 20:39:10 -04:00
csvFormat.ts (core) Add our very own implementation of tokenfield (aka pillbox, tag list) 2021-05-03 17:16:24 -04:00
declarations.d.ts (core) move home server into core 2020-07-21 20:39:10 -04:00
delay.ts (core) move home server into core 2020-07-21 20:39:10 -04:00
DisposableWithEvents.ts (core) move home server into core 2020-07-21 20:39:10 -04:00
DocActions.ts (core) Configure more comprehensive eslint rules for Typescript 2021-04-26 18:54:55 -04:00
DocData.ts (core) implement cleaner row-level access control for outgoing messages 2020-11-30 16:28:33 -05:00
DocListAPI.ts (core) Configure more comprehensive eslint rules for Typescript 2021-04-26 18:54:55 -04:00
DocSnapshot.ts (core) revamp snapshot inventory 2020-10-30 13:52:46 -04:00
emails.ts (core) move home server into core 2020-07-21 20:39:10 -04:00
EncActionBundle.ts (core) move home server into core 2020-07-21 20:39:10 -04:00
ErrorWithCode.ts (core) give more detailed reasons for access denied when memos are present 2021-02-15 17:02:24 -05:00
Features.ts (core) move home server into core 2020-07-21 20:39:10 -04:00
FilterState.ts (core) Download as CSV button on sections 2021-05-27 15:48:12 +02:00
Formula.ts (core) move home server into core 2020-07-21 20:39:10 -04:00
GranularAccessClause.ts (core) Add rules to eslint to better match our coding conventions. 2021-05-24 12:56:18 -04:00
GristServerAPI.ts (core) remove metrics 2020-09-29 18:57:56 -04:00
gristTypes.ts (core) Use individual choices for filtering choice lists 2021-06-11 09:34:06 -07:00
gristUrls.ts (core) streamline registration flow for new appsumo users 2021-06-25 10:47:10 -04:00
gutil.ts (core) Add rules to eslint to better match our coding conventions. 2021-05-24 12:56:18 -04:00
InactivityTimer.ts (core) move home server into core 2020-07-21 20:39:10 -04:00
KeyedMutex.ts (core) fix sync to s3 when doc is marked as dirty but proves to be clean 2020-11-10 08:12:31 -05:00
KeyedOps.ts (core) start reconciling forking with granular access 2021-01-12 14:08:49 -05:00
LoginSessionAPI.ts (core) move home server into core 2020-07-21 20:39:10 -04:00
LoginState.ts (core) move home server into core 2020-07-21 20:39:10 -04:00
marshal.ts (core) Add rules to eslint to better match our coding conventions. 2021-05-24 12:56:18 -04:00
MemBuffer.js (core) move home server into core 2020-07-21 20:39:10 -04:00
NumberFormat.ts (core) move home server into core 2020-07-21 20:39:10 -04:00
orgNameUtils.ts (core) complete light sign-up flow for appsumo, and customize summaries 2021-06-25 14:13:13 -04:00
parseDate.ts (core) move home server into core 2020-07-21 20:39:10 -04:00
plugin.ts (core) move home server into core 2020-07-21 20:39:10 -04:00
PluginInstance.ts (core) Configure more comprehensive eslint rules for Typescript 2021-04-26 18:54:55 -04:00
Prefs.ts (core) Show a welcome card when a user opens an example for the first time. 2020-09-09 23:08:50 -04:00
RefCountMap.ts (core) Fix an insidious bug in RefCountMap, manifesting as JS errors some time after import. 2020-11-06 09:24:56 -05:00
resetOrg.ts (core) move home server into core 2020-07-21 20:39:10 -04:00
roles.ts (core) move home server into core 2020-07-21 20:39:10 -04:00
RowFilterFunc.ts (core) Download as CSV button on sections 2021-05-27 15:48:12 +02:00
schema.ts (core) Implement trigger formulas (generalizing default formulas) 2021-06-25 22:53:07 -04:00
sharing.ts (core) move home server into core 2020-07-21 20:39:10 -04:00
SortFunc.ts (core) Use unicode-aware comparisons for user-visible strings. 2021-03-15 09:54:10 -04:00
StringUnion.ts (core) Implement updated DocMenu UI: list/card mode and sort mode. 2020-08-19 11:31:42 -04:00
TableData.ts (core) hide long sequences of unchanged rows in diffs 2020-11-19 18:19:54 -05:00
TabularDiff.ts (core) move home server into core 2020-07-21 20:39:10 -04:00
tbind.ts (core) Configure more comprehensive eslint rules for Typescript 2021-04-26 18:54:55 -04:00
TestState.ts (core) move home server into core 2020-07-21 20:39:10 -04:00
timeFormat.ts (core) move home server into core 2020-07-21 20:39:10 -04:00
tpromisified.ts (core) Configure more comprehensive eslint rules for Typescript 2021-04-26 18:54:55 -04:00
tsconfig.json (core) more grist-core cleanup 2020-07-23 16:21:08 -04:00
tsvFormat.ts (core) move home server into core 2020-07-21 20:39:10 -04:00
uploads.ts (core) move home server into core 2020-07-21 20:39:10 -04:00
urlUtils.ts (core) remove metrics 2020-09-29 18:57:56 -04:00
UserAPI.ts (core) Add rules to eslint to better match our coding conventions. 2021-05-24 12:56:18 -04:00
UserConfig.ts (core) remove metrics 2020-09-29 18:57:56 -04:00
ValueFormatter.ts (core) make ValueFormatter.format honor its return type 2020-11-12 15:19:38 -05:00