diff --git a/src/components/BrowserCell/BrowserCell.react.js b/src/components/BrowserCell/BrowserCell.react.js index c2242f61f4..7ae8f92d1c 100644 --- a/src/components/BrowserCell/BrowserCell.react.js +++ b/src/components/BrowserCell/BrowserCell.react.js @@ -13,6 +13,21 @@ import React from 'react'; import styles from 'components/BrowserCell/BrowserCell.scss'; import { unselectable } from 'stylesheets/base.scss'; +const detectArray = (value) => { + if (Array.isArray(value)) { + return value.map(detectArray); + } else if (value instanceof Parse.Object) { + return value.toPointer(); + } else if (typeof value === 'object') { + Object.keys(value).forEach(key => { + value[key] = detectArray(value[key]); + }); + return value; + } else { + return value; + } +}; + let BrowserCell = ({ type, value, hidden, width, current, onSelect, onEditChange, setRelation, onPointerClick }) => { let content = value; let classes = [styles.cell, unselectable]; @@ -53,7 +68,7 @@ let BrowserCell = ({ type, value, hidden, width, current, onSelect, onEditChange } else if (type === 'Boolean') { content = value ? 'True' : 'False'; } else if (type === 'Array') { - content = JSON.stringify(value.map(val => val instanceof Parse.Object ? val.toPointer() : val)) + content = JSON.stringify(detectArray(value)); } else if (type === 'Object' || type === 'Bytes') { content = JSON.stringify(value); } else if (type === 'File') { diff --git a/src/dashboard/Data/Browser/BrowserTable.react.js b/src/dashboard/Data/Browser/BrowserTable.react.js index 9ba3584252..31a15fb5f8 100644 --- a/src/dashboard/Data/Browser/BrowserTable.react.js +++ b/src/dashboard/Data/Browser/BrowserTable.react.js @@ -25,6 +25,18 @@ const READ_ONLY = [ 'objectId', 'createdAt', 'updatedAt' ]; let scrolling = false; +const detectArray = (value) => { + if (Array.isArray(value)) { + return value.map(detectArray); + } else if (value instanceof Parse.Object) { + return value.toPointer(); + } else if (value && typeof value.getMonth === 'function') { + return { __type: 'Date', iso: value.toISOString() }; + } else { + return value; + } +}; + export default class BrowserTable extends React.Component { constructor() { super(); @@ -211,15 +223,7 @@ export default class BrowserTable extends React.Component { value = ''; } else if (type === 'Array') { if (value) { - value = value.map(val => { - if (val instanceof Parse.Object) { - return val.toPointer(); - } else if (val && typeof val.getMonth === 'function') { - return { __type: "Date", iso: val.toISOString() }; - } - - return val; - }); + value = detectArray(value); } } let wrapTop = Math.max(0, this.props.current.row * ROW_HEIGHT);