From 09f7bcf878b3d7ebcf3a2740e4c404ca55da83c8 Mon Sep 17 00:00:00 2001 From: Andrey Goncharov Date: Mon, 27 Mar 2023 06:50:59 -0700 Subject: [PATCH] Fail fast if DataSourceRendererVirtual references an non-existent value Reviewed By: ivanmisuno Differential Revision: D44417205 fbshipit-source-id: 043b3b12ea44d85f1fb02e2cf030b4c9cc7e5087 --- .../src/data-source/DataSourceRendererVirtual.tsx | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/desktop/flipper-plugin/src/data-source/DataSourceRendererVirtual.tsx b/desktop/flipper-plugin/src/data-source/DataSourceRendererVirtual.tsx index 12f6c6e32..2769e391f 100644 --- a/desktop/flipper-plugin/src/data-source/DataSourceRendererVirtual.tsx +++ b/desktop/flipper-plugin/src/data-source/DataSourceRendererVirtual.tsx @@ -302,6 +302,16 @@ export const DataSourceRendererVirtual: ( tabIndex={0}> {virtualizer.virtualItems.map((virtualRow) => { const value = dataView.get(virtualRow.index); + + if (value === undefined) { + console.error( + `DataSourceRendererVirtual -> unexpected out-of-bound value. Data view has ${dataView.size} items. Requested ${virtualRow.index}. Virtuaslizer has ${virtualizer.virtualItems.length} items.`, + ); + throw new Error( + `DataSourceRendererVirtual -> unexpected out-of-bound value. Data view has ${dataView.size} items. Requested ${virtualRow.index}. Virtuaslizer has ${virtualizer.virtualItems.length} items.`, + ); + } + // the position properties always change, so they are not part of the TableRow to avoid invalidating the memoized render always. // Also all row containers are renderd as part of same component to have 'less react' framework code in between*/} return (