From 5bb2cb14f1055c466ac84e65594ab4846e3d9c69 Mon Sep 17 00:00:00 2001 From: Chris Beer <chris@cbeer.info> Date: Thu, 17 Mar 2022 10:08:24 -0700 Subject: [PATCH] Guard against empty canvas groupings. Related to #3543 (#3545) --- __tests__/src/components/ThumbnailNavigation.test.js | 6 ++++++ src/components/ThumbnailNavigation.js | 4 +++- src/lib/CanvasWorld.js | 4 ++-- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/__tests__/src/components/ThumbnailNavigation.test.js b/__tests__/src/components/ThumbnailNavigation.test.js index 249402239..671738378 100644 --- a/__tests__/src/components/ThumbnailNavigation.test.js +++ b/__tests__/src/components/ThumbnailNavigation.test.js @@ -100,6 +100,12 @@ describe('ThumbnailNavigation', () => { expect(wrapper.instance().areaHeight()).toEqual(150); expect(rightWrapper.instance().areaHeight(99)).toEqual(99); }); + describe('without any canvases', () => { + it('returns the default for the calculated size', () => { + wrapper = createWrapper({ canvasGroupings: new CanvasGroupings([]).groupings() }); + expect(wrapper.instance().calculateScaledSize(0)).toEqual(108); + }); + }); }); describe('keyboard navigation', () => { const setNextCanvas = jest.fn(); diff --git a/src/components/ThumbnailNavigation.js b/src/components/ThumbnailNavigation.js index fb85a4838..7b0497040 100644 --- a/src/components/ThumbnailNavigation.js +++ b/src/components/ThumbnailNavigation.js @@ -69,7 +69,9 @@ export class ThumbnailNavigation extends Component { */ calculateScaledSize(index) { const { thumbnailNavigation, canvasGroupings, position } = this.props; - const canvases = canvasGroupings[index] || []; + const canvases = canvasGroupings[index]; + if (!canvases) return thumbnailNavigation.width + this.spacing; + const world = new CanvasWorld(canvases); const bounds = world.worldBounds(); switch (position) { diff --git a/src/lib/CanvasWorld.js b/src/lib/CanvasWorld.js index cb1e0078c..acdd5c245 100644 --- a/src/lib/CanvasWorld.js +++ b/src/lib/CanvasWorld.js @@ -203,8 +203,8 @@ export default class CanvasWorld { * lined up horizontally starting from left to right. */ worldBounds() { - const worldWidth = Math.max(...this.canvasDimensions.map(c => c.x + c.width)); - const worldHeight = Math.max(...this.canvasDimensions.map(c => c.y + c.height)); + const worldWidth = Math.max(0, ...this.canvasDimensions.map(c => c.x + c.width)); + const worldHeight = Math.max(0, ...this.canvasDimensions.map(c => c.y + c.height)); return [ 0, -- GitLab