From 34fc16ef133884049b25eda5274f936698ea3d6d Mon Sep 17 00:00:00 2001 From: Colin Diesh Date: Wed, 14 Sep 2022 11:52:03 -0600 Subject: [PATCH] Fix "dead state tree node" error by creating snapshots of parent region for block calculations (#3182) Ensure parentRegion gets a snapshot --- packages/core/util/calculateDynamicBlocks.ts | 4 +++- packages/core/util/calculateStaticBlocks.ts | 7 +++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/core/util/calculateDynamicBlocks.ts b/packages/core/util/calculateDynamicBlocks.ts index d2939318a3..b2c8e1cca7 100644 --- a/packages/core/util/calculateDynamicBlocks.ts +++ b/packages/core/util/calculateDynamicBlocks.ts @@ -1,3 +1,4 @@ +import { isStateTreeNode, getSnapshot } from 'mobx-state-tree' import { intersection2 } from './range' import { assembleLocString } from '.' import { @@ -60,6 +61,7 @@ export default function calculateDynamicBlocks( displayedRegionLeftPx + (regionEnd - regionStart) / bpPerPx const regionWidthPx = (regionEnd - regionStart) / bpPerPx + const parentRegion = isStateTreeNode(region) ? getSnapshot(region) : region if ( displayedRegionLeftPx < windowRightPx && @@ -104,7 +106,7 @@ export default function calculateDynamicBlocks( end, reversed, offsetPx: blockOffsetPx, - parentRegion: region, + parentRegion, regionNumber, widthPx, isLeftEndOfDisplayedRegion, diff --git a/packages/core/util/calculateStaticBlocks.ts b/packages/core/util/calculateStaticBlocks.ts index 2776f31dfb..a14f4a41c8 100644 --- a/packages/core/util/calculateStaticBlocks.ts +++ b/packages/core/util/calculateStaticBlocks.ts @@ -1,3 +1,4 @@ +import { isStateTreeNode, getSnapshot, Instance } from 'mobx-state-tree' import { assembleLocString } from '.' import { BlockSet, @@ -6,11 +7,12 @@ import { InterRegionPaddingBlock, } from './blockTypes' import { Region } from './types' +import { Region as RegionModel } from './types/mst' export interface Base1DViewModel { offsetPx: number width: number - displayedRegions: Region[] + displayedRegions: (Region | Instance)[] bpPerPx: number minimumBlockWidth: number interRegionPaddingWidth: number @@ -54,6 +56,7 @@ export default function calculateStaticBlocks( reversed, } = region const regionBlockCount = Math.ceil((regionEnd - regionStart) / blockSizeBp) + const parentRegion = isStateTreeNode(region) ? getSnapshot(region) : region let windowRightBlockNum = Math.floor((windowRightBp - regionBpOffset) / blockSizeBp) + extra @@ -97,7 +100,7 @@ export default function calculateStaticBlocks( end, reversed, offsetPx: (regionBpOffset + blockNum * blockSizeBp) / bpPerPx, - parentRegion: region, + parentRegion, regionNumber, widthPx, isLeftEndOfDisplayedRegion,