diff --git a/Directory.Packages.props b/Directory.Packages.props
index 22485a2..3ddfaff 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -1,25 +1,25 @@
true
- [10.0.0, 11.0.0)
- [10.0.0, 11.0.0)
+ 10.0.11
+ 10.0.3
-
+
-
+
-
-
-
+
+
+
-
-
+
+
-
+
\ No newline at end of file
diff --git a/README.md b/README.md
index 13d9242..b5a831b 100644
--- a/README.md
+++ b/README.md
@@ -218,13 +218,66 @@ Cron expressions use the standard five-field format and are evaluated in UTC.
builder.Services.AddShedduellerDashboard(options =>
{
options.EventRetention = TimeSpan.FromDays(14);
+ options.JobViews =
+ [
+ new ShedduellerDashboardJobView("Active Work")
+ {
+ States = [JobState.Queued, JobState.Claimed],
+ Columns =
+ [
+ new(ShedduellerDashboardJobColumnKind.JobId),
+ new(ShedduellerDashboardJobColumnKind.Enqueued),
+ new(ShedduellerDashboardJobColumnKind.State),
+ new(ShedduellerDashboardJobColumnKind.Queue),
+ new(ShedduellerDashboardJobColumnKind.Handler),
+ new(ShedduellerDashboardJobColumnKind.Tag, "provider", "Provider"),
+ new(ShedduellerDashboardJobColumnKind.Groups),
+ new(ShedduellerDashboardJobColumnKind.Progress),
+ new(ShedduellerDashboardJobColumnKind.Attempts),
+ ],
+ },
+ new ShedduellerDashboardJobView("Failures")
+ {
+ States = [JobState.Failed],
+ Sort = JobInspectionSort.NewestFirst,
+ Columns =
+ [
+ new(ShedduellerDashboardJobColumnKind.JobId),
+ new(ShedduellerDashboardJobColumnKind.TerminalTime),
+ new(ShedduellerDashboardJobColumnKind.Handler),
+ new(ShedduellerDashboardJobColumnKind.Tag, "provider", "Provider"),
+ new(ShedduellerDashboardJobColumnKind.Tag, "manager", "Manager"),
+ new(ShedduellerDashboardJobColumnKind.Tag, "external-listing", "External Listing"),
+ new(ShedduellerDashboardJobColumnKind.Disposition),
+ new(ShedduellerDashboardJobColumnKind.Attempts),
+ ],
+ },
+ new ShedduellerDashboardJobView("Listings")
+ {
+ TagContains = "domain:listing",
+ Sort = JobInspectionSort.NewestFirst,
+ Columns =
+ [
+ new(ShedduellerDashboardJobColumnKind.JobId),
+ new(ShedduellerDashboardJobColumnKind.Enqueued),
+ new(ShedduellerDashboardJobColumnKind.State),
+ new(ShedduellerDashboardJobColumnKind.Handler),
+ new(ShedduellerDashboardJobColumnKind.Tag, "provider", "Provider"),
+ new(ShedduellerDashboardJobColumnKind.Tag, "manager", "Manager"),
+ new(ShedduellerDashboardJobColumnKind.Tag, "listing-id", "Listing"),
+ new(ShedduellerDashboardJobColumnKind.Tag, "external-listing", "External Listing"),
+ new(ShedduellerDashboardJobColumnKind.Disposition),
+ ],
+ },
+ ];
+ options.DefaultJobViewName = "Active Work";
});
app.UseAntiforgery();
app.MapShedduellerDashboard("/sheddueller");
```
-The dashboard uses the configured Sheddueller provider and can be hosted by a worker process or a client-only web process.
+The dashboard uses the configured Sheddueller provider and can be hosted by a worker process or a client-only web process. Configured job views are shared, read-only presets. Dashboard users can copy or create personal views that persist in browser storage for the dashboard's mounted path. A view restores filters, sort order, visible column order, per-column width overrides, and tag-derived columns; promoted tags are removed from the remaining Tags cell. Column widths can be set in host presets with the optional `Width` property or resized and auto-fitted from the dashboard.
## Testing
diff --git a/dotnet-tools.json b/dotnet-tools.json
index 2c2331f..cc8da6a 100644
--- a/dotnet-tools.json
+++ b/dotnet-tools.json
@@ -3,7 +3,7 @@
"isRoot": true,
"tools": {
"dotnet-outdated-tool": {
- "version": "4.7.1",
+ "version": "4.8.1",
"commands": [
"dotnet-outdated"
],
diff --git a/src/Sheddueller.Dashboard/Components/DashboardApp.razor b/src/Sheddueller.Dashboard/Components/DashboardApp.razor
index 6fa7c4e..233fc07 100644
--- a/src/Sheddueller.Dashboard/Components/DashboardApp.razor
+++ b/src/Sheddueller.Dashboard/Components/DashboardApp.razor
@@ -21,6 +21,7 @@
+