From 3ac3071c4cb8a42f1f0faea6ac15d8f5de4ae1d5 Mon Sep 17 00:00:00 2001
From: daniel-slaugh
Date: Fri, 17 Jul 2026 10:05:38 -0600
Subject: [PATCH 1/2] Resolves #471. Modifier-clicking a site opens SiteDetails
page in new tab
---
apps/data-management/e2e/specs/sites.spec.ts | 33 ++++++++++
apps/data-management/src/pages/Sites.vue | 66 +++++++++++++++-----
2 files changed, 85 insertions(+), 14 deletions(-)
diff --git a/apps/data-management/e2e/specs/sites.spec.ts b/apps/data-management/e2e/specs/sites.spec.ts
index a5f8f084..3f27c023 100644
--- a/apps/data-management/e2e/specs/sites.spec.ts
+++ b/apps/data-management/e2e/specs/sites.spec.ts
@@ -115,6 +115,39 @@ test.describe('sites and workspaces', () => {
await expect(mutableThingRow).toBeVisible()
})
+ test('modifier-clicking a site opens its details in a new tab', async ({
+ page,
+ }) => {
+ await authenticateSession(page, users.owner.email, users.owner.password)
+ await page.goto('/sites')
+ await selectWorkspace(page, fixtures.workspaces.public.name)
+
+ const siteRow = page.locator('tr').filter({
+ hasText: fixtures.things.public.name,
+ })
+ await expect(siteRow).toBeVisible()
+
+ const siteLink = siteRow.getByRole('link', {
+ name: fixtures.things.public.name,
+ })
+ const newPagePromise = page.context().waitForEvent('page')
+ await siteLink.click({
+ modifiers: [process.platform === 'darwin' ? 'Meta' : 'Control'],
+ })
+ const newPage = await newPagePromise
+
+ await expect(page).toHaveURL(/\/sites$/)
+ await expect(newPage).toHaveURL(
+ new RegExp(`/sites/${fixtures.things.public.id}$`)
+ )
+ await newPage.close()
+
+ await siteLink.click()
+ await expect(page).toHaveURL(
+ new RegExp(`/sites/${fixtures.things.public.id}$`)
+ )
+ })
+
test('owner can register a site with metadata and see the saved values on site details', async ({
page,
}) => {
diff --git a/apps/data-management/src/pages/Sites.vue b/apps/data-management/src/pages/Sites.vue
index 95d57143..e6911625 100644
--- a/apps/data-management/src/pages/Sites.vue
+++ b/apps/data-management/src/pages/Sites.vue
@@ -69,7 +69,6 @@
multi-sort
item-value="id"
class="elevation-3 owned-sites-table"
- @click:row="onRowClick"
color="primary"
:hover="coloredThings?.length > 0 && isPageLoaded"
:style="{ 'max-height': `200vh` }"
@@ -106,15 +105,45 @@
+
+
+ {{ item.samplingFeatureCode }}
+
+
+
+
+ {{ item.name }}
+
+
+
+
+ {{ item.siteType }}
+
+
-
-
- {{ item.tagValue }}
-
-
+
+
+
+ {{ item.tagValue }}
+
+
+
@@ -132,7 +161,6 @@