|
84 | 84 | </td>
|
85 | 85 | </tr>
|
86 | 86 |
|
87 |
| - <tr @click="onClick($event,row)" |
| 87 | + <tr @mousedown="onClick($event,row)" |
88 | 88 | v-else v-for="(row, rowI) in rows" :key="`row_${row._primaryKeyValue}`"
|
89 | 89 | ref="rowRefs"
|
90 | 90 | class="bg-lightListTable dark:bg-darkListTable border-lightListBorder dark:border-gray-700 hover:bg-lightListTableRowHover dark:hover:bg-darkListTableRowHover"
|
@@ -457,48 +457,50 @@ function onSortButtonClick(event, field) {
|
457 | 457 |
|
458 | 458 | const clickTarget = ref(null);
|
459 | 459 |
|
460 |
| -async function onClick(e,row) { |
461 |
| - if(clickTarget.value === e.target) return; |
| 460 | +async function onClick(e, row) { |
| 461 | + if (clickTarget.value === e.target) return; |
462 | 462 | clickTarget.value = e.target;
|
463 | 463 | await new Promise((resolve) => setTimeout(resolve, 100));
|
464 | 464 | if (window.getSelection().toString()) return;
|
465 |
| - else { |
466 |
| - if (row._clickUrl === null) { |
467 |
| - // user asked to nothing on click |
468 |
| - return; |
469 |
| - } |
470 |
| - if (e.ctrlKey || e.metaKey || row._clickUrl?.includes('target=_blank')) { |
471 |
| - |
472 |
| - if (row._clickUrl) { |
473 |
| - window.open(row._clickUrl, '_blank'); |
474 |
| - } else { |
475 |
| - window.open( |
476 |
| - router.resolve({ |
477 |
| - name: 'resource-show', |
478 |
| - params: { |
479 |
| - resourceId: props.resource.resourceId, |
480 |
| - primaryKey: row._primaryKeyValue, |
481 |
| - }, |
482 |
| - }).href, |
483 |
| - '_blank' |
484 |
| - ); |
485 |
| - } |
| 465 | + if (e.button === 2) { |
| 466 | + return; // right click, do nothing |
| 467 | + } |
| 468 | + const openInNewTab = |
| 469 | + e.ctrlKey || |
| 470 | + e.metaKey || |
| 471 | + e.button === 1 || |
| 472 | + (row._clickUrl?.includes('target=_blank')); |
| 473 | +
|
| 474 | + if (openInNewTab) { |
| 475 | + if (row._clickUrl) { |
| 476 | + window.open(row._clickUrl, '_blank'); |
486 | 477 | } else {
|
487 |
| - if (row._clickUrl) { |
488 |
| - if (row._clickUrl.startsWith('http')) { |
489 |
| - document.location.href = row._clickUrl; |
490 |
| - } else { |
491 |
| - router.push(row._clickUrl); |
492 |
| - } |
493 |
| - } else { |
494 |
| - router.push({ |
| 478 | + window.open( |
| 479 | + router.resolve({ |
495 | 480 | name: 'resource-show',
|
496 | 481 | params: {
|
497 | 482 | resourceId: props.resource.resourceId,
|
498 | 483 | primaryKey: row._primaryKeyValue,
|
499 | 484 | },
|
500 |
| - }); |
| 485 | + }).href, |
| 486 | + '_blank' |
| 487 | + ); |
| 488 | + } |
| 489 | + } else { |
| 490 | + if (row._clickUrl) { |
| 491 | + if (row._clickUrl.startsWith('http')) { |
| 492 | + document.location.href = row._clickUrl; |
| 493 | + } else { |
| 494 | + router.push(row._clickUrl); |
501 | 495 | }
|
| 496 | + } else { |
| 497 | + router.push({ |
| 498 | + name: 'resource-show', |
| 499 | + params: { |
| 500 | + resourceId: props.resource.resourceId, |
| 501 | + primaryKey: row._primaryKeyValue, |
| 502 | + }, |
| 503 | + }); |
502 | 504 | }
|
503 | 505 | }
|
504 | 506 | }
|
|
0 commit comments