From f51fc7b50207ac6940c92201e50b919cae21060d Mon Sep 17 00:00:00 2001 From: Alexander Skvortsov Date: Mon, 13 Dec 2021 01:34:05 -0500 Subject: [PATCH] Fix `listItems` to unbrick admin extension pages https://github.com/flarum/core/pull/3176 accidentially stopped adding a `key` attribute to wrappers of non-vnode inputs. This resulted in "all or no vnodes must have keys" errors. --- .../core/js/src/common/helpers/listItems.tsx | 24 ++++++++----------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/framework/core/js/src/common/helpers/listItems.tsx b/framework/core/js/src/common/helpers/listItems.tsx index e4b39d225..e6fb10478 100644 --- a/framework/core/js/src/common/helpers/listItems.tsx +++ b/framework/core/js/src/common/helpers/listItems.tsx @@ -65,15 +65,7 @@ export default function listItems( return withoutUnnecessarySeparators(items).map((item) => { const classes = [item.itemName && `item-${item.itemName}`]; - if (!isVnode(item)) { - return ( - - {item} - - ); - } - - if (item.tag.isListItem) { + if (isVnode(item) && item.tag.isListItem) { item.attrs = item.attrs || {}; item.attrs.key = item.attrs.key || item.itemName; item.key = item.attrs.key; @@ -81,14 +73,18 @@ export default function listItems( return item; } - classes.push(item.attrs?.itemClassName || item.itemClassName); - - if (item.tag.isActive?.(item.attrs)) { - classes.push('active'); + if (isVnode(item)) { + classes.push(item.attrs?.itemClassName || item.itemClassName); + + if (item.tag.isActive?.(item.attrs)) { + classes.push('active'); + } } + const key = isVnode(item) && item?.attrs?.key || item.itemName; + return ( - + {item} );