Skip to content

Commit cb96799

Browse files
fn-faisalfaisal154mtrezza
authored
Open pointer in new browser tab with [Cmd] click (#1757)
* cmd+click and context menu * removed console.log * fixed pill icon click * Pill click cleanup * Delete index.html * Reverting config.json Co-authored-by: Faisal Nadeem <[email protected]> Co-authored-by: Manuel <[email protected]>
1 parent a599f2d commit cb96799

File tree

6 files changed

+46
-12
lines changed

6 files changed

+46
-12
lines changed

src/components/BrowserCell/BrowserCell.react.js

+26-7
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,16 @@ export default class BrowserCell extends Component {
117117
}
118118
});
119119

120+
if ( this.props.type === 'Pointer' ) {
121+
onEditSelectedRow && contextMenuOptions.push({
122+
text: 'Open pointer in new tab',
123+
callback: () => {
124+
let { value, onPointerCmdClick } = this.props;
125+
onPointerCmdClick(value);
126+
}
127+
});
128+
}
129+
120130
return contextMenuOptions;
121131
}
122132

@@ -214,7 +224,7 @@ export default class BrowserCell extends Component {
214224
//#endregion
215225

216226
render() {
217-
let { type, value, hidden, width, current, onSelect, onEditChange, setCopyableValue, setRelation, onPointerClick, row, col, field, onEditSelectedRow, readonly, isRequired, markRequiredFieldRow } = this.props;
227+
let { type, value, hidden, width, current, onSelect, onEditChange, setCopyableValue, setRelation, onPointerClick, onPointerCmdClick, row, col, field, onEditSelectedRow, readonly, isRequired, markRequiredFieldRow } = this.props;
218228
let content = value;
219229
let isNewRow = row < 0;
220230
this.copyableValue = content;
@@ -343,9 +353,13 @@ export default class BrowserCell extends Component {
343353
ref={this.cellRef}
344354
className={classes.join(' ')}
345355
style={{ width }}
346-
onClick={() => {
347-
onSelect({ row, col });
348-
setCopyableValue(hidden ? undefined : this.copyableValue);
356+
onClick={(e) => {
357+
if ( e.metaKey === true && type === 'Pointer') {
358+
onPointerCmdClick(value);
359+
} else {
360+
onSelect({ row, col });
361+
setCopyableValue(hidden ? undefined : this.copyableValue);
362+
}
349363
}}
350364
onDoubleClick={() => {
351365
if (field === 'objectId' && onEditSelectedRow) {
@@ -366,9 +380,14 @@ export default class BrowserCell extends Component {
366380
ref={this.cellRef}
367381
className={classes.join(' ')}
368382
style={{ width }}
369-
onClick={() => {
370-
onSelect({ row, col });
371-
setCopyableValue(hidden ? undefined : this.copyableValue);
383+
onClick={(e) => {
384+
if ( e.metaKey === true && type === 'Pointer' ) {
385+
onPointerCmdClick(value);
386+
}
387+
else {
388+
onSelect({ row, col });
389+
setCopyableValue(hidden ? undefined : this.copyableValue);
390+
}
372391
}}
373392
onDoubleClick={() => {
374393
// Since objectId can't be edited, double click event opens edit row dialog

src/components/BrowserRow/BrowserRow.react.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export default class BrowserRow extends Component {
1919
}
2020

2121
render() {
22-
const { className, columns, currentCol, isUnique, obj, onPointerClick, order, readOnlyFields, row, rowWidth, selection, selectRow, setCopyableValue, setCurrent, setEditing, setRelation, onEditSelectedRow, setContextMenu, onFilterChange, markRequiredFieldRow } = this.props;
22+
const { className, columns, currentCol, isUnique, obj, onPointerClick, onPointerCmdClick, order, readOnlyFields, row, rowWidth, selection, selectRow, setCopyableValue, setCurrent, setEditing, setRelation, onEditSelectedRow, setContextMenu, onFilterChange, markRequiredFieldRow } = this.props;
2323
let attributes = obj.attributes;
2424
let requiredCols = [];
2525
Object.entries(columns).reduce((acc, cur) => {
@@ -89,6 +89,7 @@ export default class BrowserRow extends Component {
8989
onSelect={setCurrent}
9090
onEditChange={setEditing}
9191
onPointerClick={onPointerClick}
92+
onPointerCmdClick={onPointerCmdClick}
9293
onFilterChange={onFilterChange}
9394
setRelation={setRelation}
9495
objectId={obj.id}
@@ -104,4 +105,4 @@ export default class BrowserRow extends Component {
104105
</div>
105106
);
106107
}
107-
}
108+
}

src/components/Pill/Pill.react.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ let Pill = ({ value, onClick, fileDownloadLink, followClick = false }) => (
2020
>
2121
<span className={!followClick && fileDownloadLink ? styles.content : ''}>{value}</span>
2222
{followClick && (
23-
<a onClick={onClick}>
23+
<a onClick={e => !e.metaKey && onClick()}>
2424
<Icon name="right-outline" width={20} height={20} fill="#1669a1" />
2525
</a>
2626
)}

src/components/Toolbar/Toolbar.react.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ const goBack = () => history.goBack();
1515

1616
let Toolbar = (props) => {
1717
let backButton;
18-
if (props.relation || (props.filters && props.filters.size)) {
18+
if ((props.relation || (props.filters && props.filters.size)) && history.action !== 'POP') {
1919
backButton = (
2020
<a
2121
className={styles.iconButton}

src/dashboard/Data/Browser/Browser.react.js

+11
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ class Browser extends DashboardView {
122122
this.updateRow = this.updateRow.bind(this);
123123
this.updateOrdering = this.updateOrdering.bind(this);
124124
this.handlePointerClick = this.handlePointerClick.bind(this);
125+
this.handlePointerCmdClick = this.handlePointerCmdClick.bind(this);
125126
this.handleCLPChange = this.handleCLPChange.bind(this);
126127
this.setRelation = this.setRelation.bind(this);
127128
this.showAddColumn = this.showAddColumn.bind(this);
@@ -835,6 +836,15 @@ class Browser extends DashboardView {
835836
history.push(this.context.generatePath(`browser/${className}?filters=${encodeURIComponent(filters)}`));
836837
}
837838

839+
handlePointerCmdClick({ className, id, field = 'objectId' }) {
840+
let filters = JSON.stringify([{
841+
field,
842+
constraint: 'eq',
843+
compareTo: id
844+
}]);
845+
window.open(this.context.generatePath(`browser/${className}?filters=${encodeURIComponent(filters)}`),'_blank');
846+
}
847+
838848
handleCLPChange(clp) {
839849
let p = this.props.schema.dispatch(ActionTypes.SET_CLP, {
840850
className: this.props.params.className,
@@ -1530,6 +1540,7 @@ class Browser extends DashboardView {
15301540
updateRow={this.updateRow}
15311541
updateOrdering={this.updateOrdering}
15321542
onPointerClick={this.handlePointerClick}
1543+
onPointerCmdClick={this.handlePointerCmdClick}
15331544
setRelation={this.setRelation}
15341545
onAddColumn={this.showAddColumn}
15351546
onAddRow={this.addRow}

src/dashboard/Data/Browser/BrowserTable.react.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ export default class BrowserTable extends React.Component {
139139
isUnique={this.props.isUnique}
140140
obj={cloneRow}
141141
onPointerClick={this.props.onPointerClick}
142+
onPointerCmdClick={this.props.onPointerCmdClick}
142143
onFilterChange={this.props.onFilterChange}
143144
order={this.props.order}
144145
readOnlyFields={READ_ONLY}
@@ -189,6 +190,7 @@ export default class BrowserTable extends React.Component {
189190
isUnique={this.props.isUnique}
190191
obj={this.props.newObject}
191192
onPointerClick={this.props.onPointerClick}
193+
onPointerCmdClick={this.props.onPointerCmdClick}
192194
onFilterChange={this.props.onFilterChange}
193195
order={this.props.order}
194196
readOnlyFields={READ_ONLY}
@@ -246,6 +248,7 @@ export default class BrowserTable extends React.Component {
246248
isUnique={this.props.isUnique}
247249
obj={obj}
248250
onPointerClick={this.props.onPointerClick}
251+
onPointerCmdClick={this.props.onPointerCmdClick}
249252
onFilterChange={this.props.onFilterChange}
250253
order={this.props.order}
251254
readOnlyFields={READ_ONLY}
@@ -319,7 +322,7 @@ export default class BrowserTable extends React.Component {
319322
if (this.props.current.row >= -1 && this.props.editCloneRows) {
320323
//for data rows & new row when there are edit clone rows
321324
wrapTop += (2 * ROW_HEIGHT) * (this.props.editCloneRows.length);
322-
}
325+
}
323326
let wrapLeft = 30;
324327
for (let i = 0; i < this.props.current.col; i++) {
325328
const column = this.props.order[i];

0 commit comments

Comments
 (0)