Skip to content
Open
Show file tree
Hide file tree
Changes from 16 commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
16c2252
Migrate alerts and reports tables to shared `ResourceListRow` component
royendo Apr 3, 2026
dc59f2b
Update resource list rows to flat divider style
royendo Apr 3, 2026
f8c4500
Add dropdown action menus to alert and report rows
royendo Apr 3, 2026
810eaf6
Use icon-only badges for dashboard, alert, and report rows
royendo Apr 3, 2026
591a518
Align subtitle text with title text in dashboard rows
royendo Apr 3, 2026
5c6dd9f
Wire up dropdown actions for alert and report rows
royendo Apr 3, 2026
576e7fe
prettier
royendo Apr 3, 2026
944a1f4
Merge branch 'main' into royendo/alert-report-table-migrate
royendo Apr 6, 2026
7dce573
revert to badge + label
royendo Apr 7, 2026
8866662
local code review,
royendo Apr 7, 2026
7ce3fdc
Update +page.svelte
royendo Apr 7, 2026
38d7cdc
TODO
royendo Apr 7, 2026
235e909
fix e2e, updated to Dashboards
royendo Apr 7, 2026
d951af2
refactor: code review fixes for resource list components
royendo Apr 7, 2026
291dfe1
no more magic
royendo Apr 7, 2026
ae7aaeb
Update DashboardsTableCompositeCell.svelte
royendo Apr 7, 2026
aab26b0
consolidate resource deletion to single modal
royendo Apr 7, 2026
cfdefb0
Merge branch 'main' into royendo/alert-report-table-migrate
royendo Apr 7, 2026
3960a0a
change to confirm on delete
royendo Apr 7, 2026
fb1efd3
Merge branch 'main' into royendo/alert-report-table-migrate
royendo Apr 24, 2026
f21dd3d
Merge remote-tracking branch 'origin/main' into royendo/alert-report-…
royendo Apr 24, 2026
d4b9164
apply filters and table to dashboard,alert,report
royendo Apr 24, 2026
79e3256
prettier
royendo Apr 25, 2026
0793509
refactor: address code review feedback for table redesign
royendo Apr 25, 2026
028d9a5
fix: sort dashboards by `meta.createdOn` for the Newest/Oldest toggle
royendo Apr 25, 2026
1761179
refactor: extract `applyTableFilters` / `toggleArrayValue` helpers
royendo Apr 25, 2026
a4d6f7a
Merge `main` into `royendo/alert-report-table-migrate`
royendo Apr 27, 2026
6d07022
refactor: migrate `ProjectLogsPage` to `TableToolbar`
royendo Apr 27, 2026
741ac86
refactor: migrate users, groups, and guests pages to `TableToolbar`
royendo Apr 27, 2026
e26e360
fix: address final review feedback for table redesign
royendo Apr 27, 2026
4b1a33a
test: align alert leaderboard assertion with new comparison row format
royendo Apr 27, 2026
4fd84d0
test: force cursor off leaderboard row before asserting
royendo Apr 27, 2026
c1303af
Merge remote-tracking branch 'origin/main' into royendo/alert-report-…
royendo Apr 27, 2026
75794e4
as designed, tags need 9283
royendo Apr 28, 2026
04eb4c3
fix web-admin
royendo Apr 28, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
116 changes: 92 additions & 24 deletions web-admin/src/features/alerts/listing/AlertsTableCompositeCell.svelte
Original file line number Diff line number Diff line change
@@ -1,8 +1,18 @@
<script lang="ts">
import { goto } from "$app/navigation";
import { createAdminServiceDeleteAlert } from "@rilldata/web-admin/client";
import IconButton from "@rilldata/web-common/components/button/IconButton.svelte";
import * as DropdownMenu from "@rilldata/web-common/components/dropdown-menu";
import AlertIcon from "@rilldata/web-common/components/icons/AlertIcon.svelte";
import CancelCircleInverse from "@rilldata/web-common/components/icons/CancelCircleInverse.svelte";
import CheckCircleOutline from "@rilldata/web-common/components/icons/CheckCircleOutline.svelte";
import ThreeDot from "@rilldata/web-common/components/icons/ThreeDot.svelte";
import DeleteResourceConfirmDialog from "@rilldata/web-common/features/resources/DeleteResourceConfirmDialog.svelte";
import ResourceListRow from "@rilldata/web-common/features/resources/ResourceListRow.svelte";
import { eventBus } from "@rilldata/web-common/lib/event-bus/event-bus";
import { timeAgo } from "@rilldata/web-common/lib/time/relative-time";
import { getRuntimeServiceListResourcesQueryKey } from "@rilldata/web-common/runtime-client";
import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2";
import { useQueryClient } from "@tanstack/svelte-query";
import { Pencil, Trash2Icon } from "lucide-svelte";
import ProjectAccessControls from "../../projects/ProjectAccessControls.svelte";
import AlertOwnerBullet from "./AlertOwnerBullet.svelte";

Expand All @@ -13,30 +23,49 @@
export let lastTrigger: string | undefined;
export let ownerId: string;
export let lastTriggerErrorMessage: string | undefined;

const runtimeClient = useRuntimeClient();
const queryClient = useQueryClient();
const deleteAlert = createAdminServiceDeleteAlert();

$: isCreatedByCode = !ownerId;

let isDropdownOpen = false;
let isDeleteConfirmOpen = false;

// TODO: Consider adding ?edit=true query param to auto-open the edit dialog on the resource page
function handleEdit() {
goto(`/${organization}/${project}/-/alerts/${id}`);
}

async function handleDelete() {
try {
await $deleteAlert.mutateAsync({
org: organization,
project,
name: id,
});
await queryClient.invalidateQueries({
queryKey: getRuntimeServiceListResourcesQueryKey(
runtimeClient.instanceId,
),
});
} catch {
eventBus.emit("notification", {
message: "Failed to delete alert",
type: "error",
});
}
}
</script>

<a
<ResourceListRow
href={`alerts/${id}`}
class="flex flex-col gap-y-1 group px-4 py-2.5 w-full h-full"
{title}
icon={AlertIcon}
errorMessage={lastTrigger ? lastTriggerErrorMessage : undefined}
>
<div class="flex gap-x-2 items-center min-h-[20px]">
<AlertIcon size="14px" />
<span
class="text-fg-primary text-sm font-semibold group-hover:text-accent-primary-action truncate"
>
{title}
</span>
{#if lastTrigger}
{#if lastTriggerErrorMessage}
<CancelCircleInverse className="text-red-500 shrink-0" />
{:else}
<CheckCircleOutline className="text-primary-500 shrink-0" />
{/if}
{/if}
</div>
<div
class="flex gap-x-1 text-fg-secondary text-xs font-normal min-h-[16px] overflow-hidden"
>
{#snippet subtitle()}
{#if !lastTrigger}
<span class="shrink-0">Hasn't been checked yet</span>
{:else}
Expand All @@ -49,5 +78,44 @@
<AlertOwnerBullet {organization} {project} {ownerId} />
</svelte:fragment>
</ProjectAccessControls>
</div>
</a>
{/snippet}

{#snippet actions()}
{#if !isCreatedByCode}
<DropdownMenu.Root bind:open={isDropdownOpen}>
<DropdownMenu.Trigger class="flex-none">
<IconButton rounded active={isDropdownOpen}>
<ThreeDot size="16px" />
</IconButton>
</DropdownMenu.Trigger>
<DropdownMenu.Content align="start" class="min-w-[95px]">
<DropdownMenu.Item
class="font-normal flex items-center"
onclick={handleEdit}
>
<Pencil size="12px" />
<span class="ml-2">Edit</span>
</DropdownMenu.Item>
<DropdownMenu.Item
class="font-normal flex items-center"
type="destructive"
onclick={() => {
isDeleteConfirmOpen = true;
}}
>
<Trash2Icon size="12px" />
<span class="ml-2">Delete</span>
</DropdownMenu.Item>
</DropdownMenu.Content>
</DropdownMenu.Root>
{/if}
{/snippet}
</ResourceListRow>

<DeleteResourceConfirmDialog
bind:open={isDeleteConfirmOpen}
resourceKind="alert"
{title}
description="and will no longer trigger notifications"
onDelete={handleDelete}
/>
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
<script lang="ts">
import { page } from "$app/stores";
import ResourceError from "@rilldata/web-common/features/resources/ResourceError.svelte";
import ResourceList from "@rilldata/web-admin/features/resources/ResourceList.svelte";
import ResourceListEmptyState from "@rilldata/web-admin/features/resources/ResourceListEmptyState.svelte";
import ResourceList from "@rilldata/web-common/features/resources/ResourceList.svelte";
import ResourceListEmptyState from "@rilldata/web-common/features/resources/ResourceListEmptyState.svelte";
import ExploreIcon from "@rilldata/web-common/components/icons/ExploreIcon.svelte";
import DelayedSpinner from "@rilldata/web-common/features/entity-management/DelayedSpinner.svelte";
import type { V1Resource } from "@rilldata/web-common/runtime-client";
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<script lang="ts">
import Tag from "@rilldata/web-common/components/tag/Tag.svelte";
import Tooltip from "@rilldata/web-common/components/tooltip/Tooltip.svelte";
import TooltipContent from "@rilldata/web-common/components/tooltip/TooltipContent.svelte";
import ResourceTypeBadge from "@rilldata/web-common/features/entity-management/ResourceTypeBadge.svelte";
import { ResourceKind } from "@rilldata/web-common/features/entity-management/resource-selectors";
import ResourceListRow from "@rilldata/web-common/features/resources/ResourceListRow.svelte";
import { timeAgo } from "@rilldata/web-common/lib/time/relative-time";

export let name: string;
Expand All @@ -28,21 +28,16 @@
: ResourceKind.Canvas;
</script>

<a class="flex flex-col gap-y-1 group px-4 py-2.5 w-full h-full" {href}>
<div class="flex gap-x-2 items-center min-h-[20px]">
<ResourceListRow
{href}
title={title !== "" ? title : name}
errorMessage={error || undefined}
>
{#snippet tags()}
<ResourceTypeBadge kind={resourceKind} />
<span
class="text-fg-secondary text-sm font-semibold group-hover:text-accent-primary-action truncate"
>
{title !== "" ? title : name}
</span>
{#if error !== ""}
<Tag color="red">Error</Tag>
{/if}
</div>
<div
class="flex gap-x-1 text-fg-tertiary text-xs font-normal min-h-[16px] overflow-hidden"
>
{/snippet}

{#snippet subtitle()}
<span class="shrink-0">{name}</span>
{#if lastRefreshedDate}
<span class="shrink-0">•</span>
Expand All @@ -58,5 +53,5 @@
<span class="shrink-0">•</span>
<span class="truncate">{description}</span>
{/if}
</div>
</a>
{/snippet}
</ResourceListRow>
158 changes: 0 additions & 158 deletions web-admin/src/features/resources/ResourceList.svelte

This file was deleted.

Loading
Loading