From 771767fa1b4cc130907ee4337766f1926ba0edac Mon Sep 17 00:00:00 2001 From: Daniel Menchaca Luna Date: Mon, 11 Feb 2019 17:47:47 -0600 Subject: [PATCH 1/4] Recursive function to deal with nested objects --- .../BrowserCell/BrowserCell.react.js | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/components/BrowserCell/BrowserCell.react.js b/src/components/BrowserCell/BrowserCell.react.js index fe6b81eb8..e424fb6d1 100644 --- a/src/components/BrowserCell/BrowserCell.react.js +++ b/src/components/BrowserCell/BrowserCell.react.js @@ -43,7 +43,31 @@ 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)) + //recursive function to check the array and object children. + const detectObject = (value)=>{ + //Check if the value is an array + if(Array.isArray(value)){ + //Return the processed list of items + return value.map(detectObject) + }else if(value instanceof Parse.Object){ + //Transform the value to Parse.Pointer + return value.toPointer() + }else if (typeof value === 'object'){ + //Check the object's children + Object.keys(value).forEach( key => { + //Overwrite the original value to keep the changes + value[key] = detectObject(value[key]) + }) + //Return the processed object + return value; + }else{ + //Return raw value + return value + } + + } + //Transform the value to json + content = JSON.stringify(detectObject(value)); } else if (type === 'Object' || type === 'Bytes') { content = JSON.stringify(value); } else if (type === 'File') { From bbc2acfca93018e54cea314f0010a907ffafa49a Mon Sep 17 00:00:00 2001 From: Diamond Lewis Date: Tue, 12 Mar 2019 13:48:25 -0500 Subject: [PATCH 2/4] nits --- .../BrowserCell/BrowserCell.react.js | 32 +++++++------------ 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/src/components/BrowserCell/BrowserCell.react.js b/src/components/BrowserCell/BrowserCell.react.js index e424fb6d1..462e4ac8e 100644 --- a/src/components/BrowserCell/BrowserCell.react.js +++ b/src/components/BrowserCell/BrowserCell.react.js @@ -43,30 +43,20 @@ let BrowserCell = ({ type, value, hidden, width, current, onSelect, onEditChange } else if (type === 'Boolean') { content = value ? 'True' : 'False'; } else if (type === 'Array') { - //recursive function to check the array and object children. - const detectObject = (value)=>{ - //Check if the value is an array - if(Array.isArray(value)){ - //Return the processed list of items - return value.map(detectObject) - }else if(value instanceof Parse.Object){ - //Transform the value to Parse.Pointer - return value.toPointer() - }else if (typeof value === 'object'){ - //Check the object's children - Object.keys(value).forEach( key => { - //Overwrite the original value to keep the changes - value[key] = detectObject(value[key]) - }) - //Return the processed object + const detectObject = (value) => { + if (Array.isArray(value)) { + return value.map(detectObject); + } else if (value instanceof Parse.Object) { + return value.toPointer(); + } else if (typeof value === 'object') { + Object.keys(value).forEach(key => { + value[key] = detectObject(value[key]); + }); + return value; + } else { return value; - }else{ - //Return raw value - return value } - } - //Transform the value to json content = JSON.stringify(detectObject(value)); } else if (type === 'Object' || type === 'Bytes') { content = JSON.stringify(value); From ef209596fa31d2a89ff058ea5365a00f30617647 Mon Sep 17 00:00:00 2001 From: Diamond Lewis Date: Tue, 2 Apr 2019 14:09:25 -0500 Subject: [PATCH 3/4] Fix editing --- .../BrowserCell/BrowserCell.react.js | 2 +- .../Data/Browser/BrowserTable.react.js | 21 +++++++++++-------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/components/BrowserCell/BrowserCell.react.js b/src/components/BrowserCell/BrowserCell.react.js index 462e4ac8e..2379864de 100644 --- a/src/components/BrowserCell/BrowserCell.react.js +++ b/src/components/BrowserCell/BrowserCell.react.js @@ -56,7 +56,7 @@ let BrowserCell = ({ type, value, hidden, width, current, onSelect, onEditChange } else { return value; } - } + }; content = JSON.stringify(detectObject(value)); } else if (type === 'Object' || type === 'Bytes') { content = JSON.stringify(value); diff --git a/src/dashboard/Data/Browser/BrowserTable.react.js b/src/dashboard/Data/Browser/BrowserTable.react.js index bfd61b2f9..579596a51 100644 --- a/src/dashboard/Data/Browser/BrowserTable.react.js +++ b/src/dashboard/Data/Browser/BrowserTable.react.js @@ -203,15 +203,18 @@ 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; - }); + const detectObject = (value) => { + if (Array.isArray(value)) { + return value.map(detectObject); + } 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; + } + }; + value = detectObject(value); } } let wrapTop = Math.max(0, this.props.current.row * ROW_HEIGHT); From cf49a15eba5877c33ce81a32ed53e542728ac65a Mon Sep 17 00:00:00 2001 From: Diamond Lewis Date: Tue, 2 Apr 2019 15:16:14 -0500 Subject: [PATCH 4/4] hoisting --- .../BrowserCell/BrowserCell.react.js | 31 ++++++++++--------- .../Data/Browser/BrowserTable.react.js | 25 ++++++++------- 2 files changed, 29 insertions(+), 27 deletions(-) diff --git a/src/components/BrowserCell/BrowserCell.react.js b/src/components/BrowserCell/BrowserCell.react.js index 2379864de..137bb21c4 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]; @@ -43,21 +58,7 @@ let BrowserCell = ({ type, value, hidden, width, current, onSelect, onEditChange } else if (type === 'Boolean') { content = value ? 'True' : 'False'; } else if (type === 'Array') { - const detectObject = (value) => { - if (Array.isArray(value)) { - return value.map(detectObject); - } else if (value instanceof Parse.Object) { - return value.toPointer(); - } else if (typeof value === 'object') { - Object.keys(value).forEach(key => { - value[key] = detectObject(value[key]); - }); - return value; - } else { - return value; - } - }; - content = JSON.stringify(detectObject(value)); + 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 579596a51..872fea488 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(); @@ -203,18 +215,7 @@ export default class BrowserTable extends React.Component { value = ''; } else if (type === 'Array') { if (value) { - const detectObject = (value) => { - if (Array.isArray(value)) { - return value.map(detectObject); - } 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; - } - }; - value = detectObject(value); + value = detectArray(value); } } let wrapTop = Math.max(0, this.props.current.row * ROW_HEIGHT);