mirror of
https://github.com/gristlabs/grist-core.git
synced 2026-03-02 04:09:24 +00:00
(core) Add ChoiceList type, cell widget, and editor widget.
Summary: - Adds a new ChoiceList type, and widgets to view and edit it. - Store in SQLite as a JSON string - Support conversions between ChoiceList and other types Test Plan: Added browser tests, and a test for how these values are stored Reviewers: paulfitz Reviewed By: paulfitz Differential Revision: https://phab.getgrist.com/D2803
This commit is contained in:
@@ -91,6 +91,22 @@ export async function prepTransformColInfo(docModel: DocModel, origCol: ColumnRe
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 'ChoiceList': {
|
||||
// Set suggested choices. This happens before the conversion to ChoiceList, so we do some
|
||||
// light guessing for likely choices to suggest.
|
||||
const choices = new Set<string>();
|
||||
for (let value of tableData.getColValues(origCol.colId()) || []) {
|
||||
value = String(value).trim();
|
||||
const tags: string[] = (value.startsWith('[') && gutil.safeJsonParse(value, null)) || value.split(",");
|
||||
for (const tag of tags) {
|
||||
choices.add(tag.trim());
|
||||
if (choices.size > 100) { break; } // Don't suggest excessively many choices.
|
||||
}
|
||||
}
|
||||
choices.delete("");
|
||||
widgetOptions = {choices: Array.from(choices)};
|
||||
break;
|
||||
}
|
||||
case 'Ref': {
|
||||
// Set suggested destination table and visible column.
|
||||
// Null if toTypeMaybeFull is a pure type (e.g. converting to Ref before a table is chosen).
|
||||
@@ -148,10 +164,15 @@ export function getDefaultFormula(
|
||||
const oldVisibleColName = isReferenceCol(origCol) ?
|
||||
getVisibleColName(docModel, origCol.visibleCol()) : undefined;
|
||||
|
||||
const origValFormula = oldVisibleColName ?
|
||||
let origValFormula = oldVisibleColName ?
|
||||
// The `str()` below converts AltText to plain text.
|
||||
`$${colId}.${oldVisibleColName} if ISREF($${colId}) else str($${colId})` :
|
||||
`$${colId}`;
|
||||
|
||||
if (origCol.type.peek() === 'ChoiceList') {
|
||||
origValFormula = `grist.ChoiceList.toString($${colId})`
|
||||
}
|
||||
|
||||
const toTypePure: string = gristTypes.extractTypeFromColType(newType);
|
||||
|
||||
// The args are used to construct the call to grist.TYPE.typeConvert(value, [params]).
|
||||
|
||||
Reference in New Issue
Block a user