From 4c5127ca2fbbf5f62efd51bcbe2f6b9ce9d47b14 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Tue, 16 May 2017 14:05:11 +0200 Subject: [PATCH] Update foldable icon when a row's foldability changes --- spec/text-editor-component-spec.js | 15 +++++++++++++++ src/text-editor-component.js | 12 ++++++++---- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/spec/text-editor-component-spec.js b/spec/text-editor-component-spec.js index ef65a5738..bd03863ef 100644 --- a/spec/text-editor-component-spec.js +++ b/spec/text-editor-component-spec.js @@ -195,6 +195,21 @@ describe('TextEditorComponent', () => { expect(lineNodeForScreenRow(component, 7)).toBe(lineNode) }) + it('updates lines numbers when a row\'s foldability changes (regression)', async () => { + const {component, element, editor} = buildComponent({text: 'abc\n'}) + editor.setCursorBufferPosition([1, 0]) + await component.getNextUpdatePromise() + expect(lineNumberNodeForScreenRow(component, 0).querySelector('.foldable')).toBeNull() + + editor.insertText(' def') + await component.getNextUpdatePromise() + expect(lineNumberNodeForScreenRow(component, 0).querySelector('.foldable')).toBeDefined() + + editor.undo() + await component.getNextUpdatePromise() + expect(lineNumberNodeForScreenRow(component, 0).querySelector('.foldable')).toBeNull() + }) + it('renders dummy vertical and horizontal scrollbars when content overflows', async () => { const {component, element, editor} = buildComponent({height: 100, width: 100}) const verticalScrollbar = component.refs.verticalScrollbar.element diff --git a/src/text-editor-component.js b/src/text-editor-component.js index f0e90e767..aeead049c 100644 --- a/src/text-editor-component.js +++ b/src/text-editor-component.js @@ -823,11 +823,10 @@ class TextEditorComponent { const endRow = this.getRenderedEndRow() const renderedRowCount = this.getRenderedRowCount() - const {keys, softWrappedFlags, foldableFlags} = this.lineNumbersToRender const bufferRows = model.bufferRowsForScreenRows(startRow, endRow - 1) - this.lineNumbersToRender.bufferRows = bufferRows - keys.length = renderedRowCount - foldableFlags.length = renderedRowCount + const keys = new Array(endRow - startRow) + const foldableFlags = new Array(endRow - startRow) + const softWrappedFlags = new Array(endRow - startRow) let previousBufferRow = (startRow > 0) ? model.bufferRowForScreenRow(startRow - 1) : -1 let softWrapCount = 0 @@ -847,6 +846,11 @@ class TextEditorComponent { } previousBufferRow = bufferRow } + + this.lineNumbersToRender.bufferRows = bufferRows + this.lineNumbersToRender.keys = keys + this.lineNumbersToRender.foldableFlags = foldableFlags + this.lineNumbersToRender.softWrappedFlags = softWrappedFlags } queryMaxLineNumberDigits () {