diff --git a/src/dashboard/Data/Browser/DataBrowser.react.js b/src/dashboard/Data/Browser/DataBrowser.react.js index 6deca53f8..5694d4b8c 100644 --- a/src/dashboard/Data/Browser/DataBrowser.react.js +++ b/src/dashboard/Data/Browser/DataBrowser.react.js @@ -1031,6 +1031,12 @@ export default class DataBrowser extends React.Component { const menuItems = []; + // Add "Get related records from..." menu item + const relatedRecordsMenuItem = this.getRelatedObjectsMenuItemForPanel(objectId, className); + if (relatedRecordsMenuItem) { + menuItems.push(relatedRecordsMenuItem); + } + // Add Scripts menu if there are valid scripts if (validScripts.length && this.props.onEditSelectedRow) { menuItems.push({ @@ -1067,6 +1073,45 @@ export default class DataBrowser extends React.Component { } } + getRelatedObjectsMenuItemForPanel(objectId, pointerClassName) { + const { schema, onPointerCmdClick } = this.props; + + if (!pointerClassName || !schema || !onPointerCmdClick) { + return undefined; + } + + const relatedRecordsMenuItem = { + text: 'Get related records from...', + items: [], + }; + + schema.data + .get('classes') + .sortBy((v, k) => k) + .forEach((cl, className) => { + cl.forEach((column, field) => { + if (column.targetClass !== pointerClassName) { + return; + } + relatedRecordsMenuItem.items.push({ + text: `${className}`, + subtext: `${field}`, + callback: () => { + const relatedObject = new Parse.Object(pointerClassName); + relatedObject.id = objectId; + onPointerCmdClick({ + className, + id: relatedObject.toPointer(), + field, + }); + }, + }); + }); + }); + + return relatedRecordsMenuItem.items.length ? relatedRecordsMenuItem : undefined; + } + freezeColumns(index) { this.setState({ frozenColumnIndex: index }); }