BUG when changing a table column type after data is set
florenthobein opened this issue · 2 comments
florenthobein commented
Hi, I just tried Eidos and noticed a bug with the change of column types.
Here is an easy repro :
- Create a table
- Create a Rating column
- Set a value for this column in a row
- Change the column type for Multiselect
Then the page crashes with error
TypeError: t.split is not a function
at u$.getCellContent (https://eidos.space/assets/index-a-qe5GgR.js:8184:10199)
No time to help with a PR for now but I believe the culprit is around there: multi-select.ts#L67
florenthobein commented
I actually made a fix on a branch but I can't push it. Here is the diff if you want to apply it
diff --git a/lib/fields/created-time.ts b/lib/fields/created-time.ts
index 9c2a238..6fcae02 100644
--- a/lib/fields/created-time.ts
+++ b/lib/fields/created-time.ts
@@ -32,7 +32,7 @@ export class CreatedTimeField extends BaseField<
getCellContent(rawData: string | undefined): TextCell {
// 2024-01-22 02:51:26 => 2024-01-22T02:51:26.000Z
const str = rawData
- ? new Date(rawData.split(" ").join("T") + ".000Z").toLocaleString()
+ ? new Date(String(rawData || "").split(" ").join("T") + ".000Z").toLocaleString()
: ""
return {
kind: GridCellKind.Text,
diff --git a/lib/fields/file.ts b/lib/fields/file.ts
index 2538df5..8e9e5ad 100644
--- a/lib/fields/file.ts
+++ b/lib/fields/file.ts
@@ -41,7 +41,7 @@ export class FileField extends BaseField<FileCell, FileProperty, string> {
}
getCellContent(rawData: string): FileCell {
- const data = rawData?.split(",") ?? []
+ const data = (rawData || "")?.split(",") ?? []
return {
kind: GridCellKind.Custom,
data: {
diff --git a/lib/fields/last-edited-time.ts b/lib/fields/last-edited-time.ts
index 1895e60..da66e24 100644
--- a/lib/fields/last-edited-time.ts
+++ b/lib/fields/last-edited-time.ts
@@ -33,7 +33,7 @@ export class LastEditedTimeField extends BaseField<
// 2024-01-22 02:51:26 => 2024-01-22T02:51:26.000Z
const str = rawData
? new Date(
- (rawData || "").split(" ").join("T") + ".000Z"
+ String(rawData || "").split(" ").join("T") + ".000Z"
).toLocaleString()
: ""
return {
diff --git a/lib/fields/link.ts b/lib/fields/link.ts
index c8ae4a0..85c144b 100644
--- a/lib/fields/link.ts
+++ b/lib/fields/link.ts
@@ -32,7 +32,7 @@ export class LinkField extends BaseField<LinkCell, ILinkProperty> {
context?: { row?: Record<string, string> }
): LinkCell {
const titleKey = `${this.column.table_column_name}__title`
- const ids = rawData?.split(",") || []
+ const ids = (rawData || "")?.split(",") || []
const titles = context?.row?.[titleKey]?.split(",") || []
return {
kind: GridCellKind.Custom,
diff --git a/lib/fields/multi-select.ts b/lib/fields/multi-select.ts
index 01e4965..92e9be7 100644
--- a/lib/fields/multi-select.ts
+++ b/lib/fields/multi-select.ts
@@ -64,7 +64,7 @@ export class MultiSelectField extends BaseField<
data: {
kind: "multi-select-cell",
allowedValues: this.column.property?.options ?? [],
- values: rawData ? rawData.split(/[\s,]+/) : [],
+ values: rawData ? String(rawData || "").split(/[\s,]+/) : [],
},
copyData: rawData,
allowOverlay: true,
diff --git a/lib/fields/text.ts b/lib/fields/text.ts
index 47b06cb..0cc6931 100644
--- a/lib/fields/text.ts
+++ b/lib/fields/text.ts
@@ -19,8 +19,8 @@ export class TextField extends BaseField<TextCell, TextProperty> {
getCellContent(rawData: string | null): TextCell {
return {
kind: GridCellKind.Text,
- data: rawData ? rawData + "" : "",
- displayData: rawData ? rawData + "" : "",
+ data: rawData ?? "",
+ displayData: rawData ?? "",
allowOverlay: true,
}
}
mayneyao commented
Thanks, I will fix it later