From 0c989f77d71dfc7368455680d2639cb70934cd94 Mon Sep 17 00:00:00 2001 From: Daniel Date: Sun, 5 Jul 2026 03:31:58 +1000 Subject: [PATCH] fix: crash when filtering unique on a pointer field (#2657) --- .../BrowserCell/BrowserCell.react.js | 2 +- src/components/BrowserRow/BrowserRow.react.js | 16 ++++++------ src/lib/tests/BrowserRow.test.js | 25 +++++++++++++++++++ 3 files changed, 35 insertions(+), 8 deletions(-) diff --git a/src/components/BrowserCell/BrowserCell.react.js b/src/components/BrowserCell/BrowserCell.react.js index 74cbe7ca04..389ec915b4 100644 --- a/src/components/BrowserCell/BrowserCell.react.js +++ b/src/components/BrowserCell/BrowserCell.react.js @@ -71,7 +71,7 @@ export default class BrowserCell extends Component { ); let value = this.props.value; let dataValue = this.props.value.id || this.props.value.objectId; - if (defaultPointerKey !== 'objectId') { + if (defaultPointerKey !== 'objectId' && typeof this.props.value.get === 'function') { dataValue = this.props.value.get(defaultPointerKey); if (dataValue && typeof dataValue === 'object') { if (dataValue instanceof Date) { diff --git a/src/components/BrowserRow/BrowserRow.react.js b/src/components/BrowserRow/BrowserRow.react.js index e038d483e8..6ec416a906 100644 --- a/src/components/BrowserRow/BrowserRow.react.js +++ b/src/components/BrowserRow/BrowserRow.react.js @@ -67,13 +67,15 @@ export default class BrowserRow extends Component { return acc; }, requiredCols); // for dynamically changing required field on _User class - if ( - obj.className === '_User' && - (obj.get('username') !== undefined || obj.get('password') !== undefined) - ) { - requiredCols = ['username', 'password']; - } else if (obj.className === '_User' && obj.get('authData') !== undefined) { - requiredCols = ['authData']; + if (!isUnique) { + if ( + obj.className === '_User' && + (obj.get('username') !== undefined || obj.get('password') !== undefined) + ) { + requiredCols = ['username', 'password']; + } else if (obj.className === '_User' && obj.get('authData') !== undefined) { + requiredCols = ['authData']; + } } const highlightColor = '#eef4fb'; const stickyHighlightColor = '#d6e4f0'; diff --git a/src/lib/tests/BrowserRow.test.js b/src/lib/tests/BrowserRow.test.js index a75dca43b9..8874d19adf 100644 --- a/src/lib/tests/BrowserRow.test.js +++ b/src/lib/tests/BrowserRow.test.js @@ -104,4 +104,29 @@ describe('BrowserRow', () => { expect(checkboxCell.props.style.background).toBe('#ffffff'); }); }); + + describe('Unique filter', () => { + beforeAll(() => { + global.localStorage = { + getItem: () => null, + setItem: () => {}, + removeItem: () => {}, + }; + }); + + it('does not crash rendering a unique _User pointer value', () => { + const rawUserPointer = { __type: 'Pointer', className: '_User', objectId: 'user1' }; + expect(() => + renderer.create( + + ) + ).not.toThrow(); + }); + }); });