From 3dd835d0b8bafb11267e2511222229174a9aa31f Mon Sep 17 00:00:00 2001 From: Trevor Manz Date: Wed, 31 Jan 2024 17:41:08 -0500 Subject: [PATCH 1/2] fix(anywidget): Actually fix layout serialization --- packages/anywidget/src/widget.js | 22 +++------------------- 1 file changed, 3 insertions(+), 19 deletions(-) diff --git a/packages/anywidget/src/widget.js b/packages/anywidget/src/widget.js index 2a484374..bd95f378 100644 --- a/packages/anywidget/src/widget.js +++ b/packages/anywidget/src/widget.js @@ -309,25 +309,9 @@ export default function ({ DOMWidgetModel, DOMWidgetView }) { let serialize = serializers[k]?.serialize; if (serialize) { state[k] = serialize(state[k], this); - } else if ( - (k === "layout" || k === "style") && - state[k] instanceof Promise - ) { - // We can't serialize a Promise, so just skip it. - // - // N.B. This handles a race condition from ipywidgets, - // where an initial promise for a WidgetModel is being - // serialized on initially. - // - // The default behavior of ipywidgets is to use JSON.stringify + JSON.parse, - // "trick", which silently returns an empty object for _all_ Promises. - // - // If we try to use `structuredClone` we'll get an error. - // - // We explicitly handle case (rather than falling back to JSON.stringify) - // so that users will see an error if they accidently try to serialize - // a Promise. - state[k] = undefined; + } else if (k === "layout" || k === "style") { + // These keys come from ipywidgets, rely on JSON.stringify trick. + state[k] = JSON.parse(JSON.stringify(state[k])); } else { state[k] = structuredClone(state[k]); } From e5afe319dcd92a7dd6721579ffacee198d3d6c67 Mon Sep 17 00:00:00 2001 From: Trevor Manz Date: Wed, 31 Jan 2024 17:41:33 -0500 Subject: [PATCH 2/2] changeset --- .changeset/kind-geckos-switch.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/kind-geckos-switch.md diff --git a/.changeset/kind-geckos-switch.md b/.changeset/kind-geckos-switch.md new file mode 100644 index 00000000..965a7ffe --- /dev/null +++ b/.changeset/kind-geckos-switch.md @@ -0,0 +1,5 @@ +--- +"anywidget": patch +--- + +Fix serialization of `layout` trait