mirror of
https://github.com/gristlabs/grist-core.git
synced 2026-03-02 04:09:24 +00:00
(core) Barely working reference lists in frontend
Summary: This makes it possible to set the type of a column to ReferenceList, but the UI is terrible ReferenceList.ts is a mishmash of ChoiceList and Reference that sort of works but something about the CSS is clearly broken ReferenceListEditor is just a text editor, you have to type in a JSON array of row IDs. Ignore the value that's present when you start editing. I can maybe try mashing together ReferenceEditor and ChoiceListEditor but it doesn't seem wise. I think @georgegevoian should take over here. Reviewing the diff as it is to check for obvious issues is probably good but I don't think it's worth trying to land/merge anything. Test Plan: none Reviewers: dsagal Reviewed By: dsagal Subscribers: georgegevoian Differential Revision: https://phab.getgrist.com/D2914
This commit is contained in:
@@ -25,7 +25,7 @@ import { NewBaseEditor } from "app/client/widgets/NewBaseEditor";
|
||||
import * as UserType from 'app/client/widgets/UserType';
|
||||
import * as UserTypeImpl from 'app/client/widgets/UserTypeImpl';
|
||||
import * as gristTypes from 'app/common/gristTypes';
|
||||
import * as gutil from 'app/common/gutil';
|
||||
import { getReferencedTableId, isFullReferencingType } from 'app/common/gristTypes';
|
||||
import { CellValue } from 'app/plugin/GristData';
|
||||
import { Computed, Disposable, fromKo, dom as grainjsDom,
|
||||
Holder, IDisposable, makeTestId, toKo } from 'grainjs';
|
||||
@@ -115,15 +115,22 @@ export class FieldBuilder extends Disposable {
|
||||
return gristTypes.isRightType(this._readOnlyPureType()) || _.constant(false);
|
||||
}, this);
|
||||
|
||||
// Returns a boolean indicating whether the column is type Reference.
|
||||
// Returns a boolean indicating whether the column is type Reference or ReferenceList.
|
||||
this._isRef = this.autoDispose(ko.computed(() => {
|
||||
return gutil.startsWith(this.field.column().type(), 'Ref:');
|
||||
return isFullReferencingType(this.field.column().type());
|
||||
}));
|
||||
|
||||
// Gives the table ID to which the reference points.
|
||||
this._refTableId = this.autoDispose(ko.computed({
|
||||
read: () => gutil.removePrefix(this.field.column().type(), "Ref:"),
|
||||
write: val => this._setType(`Ref:${val}`)
|
||||
read: () => getReferencedTableId(this.field.column().type()),
|
||||
write: val => {
|
||||
const type = this.field.column().type();
|
||||
if (type.startsWith('Ref:')) {
|
||||
void this._setType(`Ref:${val}`);
|
||||
} else {
|
||||
void this._setType(`RefList:${val}`);
|
||||
}
|
||||
}
|
||||
}));
|
||||
|
||||
this.widget = ko.pureComputed({
|
||||
|
||||
Reference in New Issue
Block a user