gristlabs_grist-core/app/client/models
Alex Hall 29dd33a45c (core) Add other direction of linking by reflist
Summary:
Allows selecting by a reflist in another table. This generalises cursor-linking with a ref column, but now it's filter linking.

Added another case to LinkingState where the source column is a reflist to the target table, filtering by the id column.

Updated convertQueryFromRefs and related functions to handle this since the id column has no column ref. In this case the string 'id' is used instead of a number.

LinkingState also checks if the source value is a reflist and uses that as the list of filter values instead of a single-element list of the cell value.

Indirect linking also works, where the source and target columns both are both references to the same table. This was the plan for a source reflist and target ref column.
I was surprised to see it also works perfectly when both columns are reflists, and it filters rows where there's an intersection!

Adding rows to the target section using the selected source record for default values is iffy. When filtering by row ID, there's no column for defaults, so the new row disappears.
For a source reflist and target ref, the first value of the reflist is the default, which is okayish. When both are reflists, the full source reflist is the default for the target column.
This seems like a bit much but just using the first value seems a bit arbitrary when there's room for all of them?

While doing all this I noticed an unrelated bug which I fixed as I was refactoring. Previously cursor linking based on a reference column did not update the cursor in the link target
when the value of the selected reference cell changed. Now cursor linking uses a floating row model like most other cases to observe the value correctly.

Test Plan: Extended SelectByRefList test and fixture, added previously failing test to RightPanelSelectBy.

Reviewers: dsagal

Reviewed By: dsagal

Differential Revision: https://phab.getgrist.com/D3004
2021-08-30 17:39:15 +02:00
..
entities (core) Filter out pages for hidden views from the page list. 2021-08-27 13:51:57 -04:00
AppModel.ts (core) Site Switcher and Other Sites 2021-08-18 11:24:41 -07:00
BaseRowModel.js (core) Update ACL resources/rules when tables/columns get renamed 2021-01-04 22:03:01 -05:00
BillingModel.ts (core) add a way to change subdomain in billing pages 2021-08-19 21:22:41 -04:00
ClientColumnGetters.ts (core) hide long sequences of unchanged rows in diffs 2020-11-19 18:19:54 -05:00
ColumnACIndexes.ts (core) Polish and enable Reference List widget 2021-08-12 11:51:21 -07:00
ColumnCache.ts (core) Show count of formula errors in the column config in the right-side panel. 2021-04-20 21:26:17 -04:00
ColumnFilter.ts (core) Makes filter counts take other column filters into account 2021-06-23 09:01:41 +02:00
ColumnFilterMenuModel.ts (core) Makes filter counts take other column filters into account 2021-06-23 09:01:41 +02:00
ConnectState.ts (core) move client code to core 2020-10-02 13:24:21 -04:00
DataRowModel.ts (core) Fix JS error when scrolling with a column of hyperlinks, and use stricter types. 2021-05-12 17:31:56 -04:00
DataTableModel.js (core) move client code to core 2020-10-02 13:24:21 -04:00
DataTableModelWithDiff.ts (core) Port LinkingState.js to TypeScript 2021-08-26 15:10:34 +02:00
DocData.ts (core) Configure more comprehensive eslint rules for Typescript 2021-04-26 18:54:55 -04:00
DocModel.ts (core) Filter out pages for hidden views from the page list. 2021-08-27 13:51:57 -04:00
DocPageModel.ts (core) Disabling 'Add widget to page' for special pages 2021-08-09 14:49:19 +02:00
errors.ts (core) granular access control in the presence of schema changes 2021-03-01 13:49:31 -05:00
gristConfigCache.ts (core) move client code to core 2020-10-02 13:24:21 -04:00
gristUrlState.ts (core) Open links with different link keys in a new tab 2021-08-20 19:54:52 +02:00
HomeModel.ts (core) Site Switcher and Other Sites 2021-08-18 11:24:41 -07:00
MetaRowModel.js (core) move client code to core 2020-10-02 13:24:21 -04:00
MetaTableModel.js (core) move client code to core 2020-10-02 13:24:21 -04:00
modelUtil.js (core) move client code to core 2020-10-02 13:24:21 -04:00
NotifyModel.ts (core) suspend a team site after an AppSumo refund 2021-07-15 09:14:12 -04:00
QuerySet.ts (core) Add other direction of linking by reflist 2021-08-30 17:39:15 +02:00
rowset.ts (core) Download as CSV button on sections 2021-05-27 15:48:12 +02:00
rowuid.js (core) move client code to core 2020-10-02 13:24:21 -04:00
SearchModel.ts (core) tweak how search bar places cursor on sections 2021-08-30 09:26:28 -04:00
SectionFilter.ts (core) Makes filter counts take other column filters into account 2021-06-23 09:01:41 +02:00
TableData.ts (core) Configure more comprehensive eslint rules for Typescript 2021-04-26 18:54:55 -04:00
TableModel.js (core) Change how formula columns can be converted to data. 2021-03-05 12:42:57 -05:00
TreeModel.ts (core) Filter out pages for hidden views from the page list. 2021-08-27 13:51:57 -04:00
UserManagerModel.ts (core) Disallow the combination of Public Edit access and granular ACLs. 2021-03-26 09:59:41 -04:00
UserPrefs.ts (core) move client code to core 2020-10-02 13:24:21 -04:00
WorkspaceInfo.ts (core) move client code to core 2020-10-02 13:24:21 -04:00