fix: dashboard edit previews, migration journal, and notes comments
CI / checks (push) Failing after 2m8s
CI / build (push) Successful in 4m42s

Register drizzle journal entries for 0022/0023 so prod migrations apply.

Key edit-mode widget previews by index so bangs.stats shows live data.

Add comments to notes detail pages.
This commit is contained in:
ginnoir
2026-07-04 22:39:21 -05:00
parent 9e66c12eb7
commit 6183fb62c8
11 changed files with 72 additions and 17 deletions
+24 -4
View File
@@ -9,7 +9,7 @@ import { GridLayout } from "react-grid-layout";
import type { Layout } from "react-grid-layout";
import { GripVertical, Settings2, Trash2, RotateCcw, Plus, LayoutGrid } from "lucide-react";
import type { DashboardLayout, WidgetPlacement, PresetId } from "@/lib/dashboard";
import { computePresetLayoutFromMetas, widgetContentKey } from "@/lib/dashboard";
import { computePresetLayoutFromMetas, widgetContentIndexKey } from "@/lib/dashboard";
import type { SerializedWidgetMeta } from "@/modules/_core/registry";
import {
saveDashboardLayout,
@@ -113,10 +113,18 @@ export function DashboardEditor({
function addWidget(widgetId: string, config: unknown) {
const meta = widgetMetas.find((m) => m.id === widgetId);
if (!meta) return;
const resolvedConfig = resolveWidgetConfig(meta, config);
const maxY = placements.reduce((m, p) => Math.max(m, p.y + p.h), 0);
const next = [
...placements,
{ widgetId, config, x: 0, y: maxY, w: meta.defaultSize.w, h: meta.defaultSize.h },
{
widgetId,
config: resolvedConfig,
x: 0,
y: maxY,
w: meta.defaultSize.w,
h: meta.defaultSize.h,
},
];
setPlacements(next);
setIsDirty(true);
@@ -125,7 +133,9 @@ export function DashboardEditor({
}
function updateConfig(index: number, config: unknown) {
const next = placements.map((p, i) => (i === index ? { ...p, config } : p));
const meta = widgetMetas.find((m) => m.id === placements[index]?.widgetId);
const resolvedConfig = meta ? resolveWidgetConfig(meta, config) : config;
const next = placements.map((p, i) => (i === index ? { ...p, config: resolvedConfig } : p));
setPlacements(next);
setIsDirty(true);
setConfiguringIndex(null);
@@ -237,7 +247,7 @@ export function DashboardEditor({
>
{placements.map((placement, i) => {
const meta = widgetMetas.find((m) => m.id === placement.widgetId);
const content = widgetContents[widgetContentKey(placement)];
const content = widgetContents[widgetContentIndexKey(i)];
return (
<div
key={placementKey(placement, i)}
@@ -308,3 +318,13 @@ export function DashboardEditor({
</div>
);
}
function resolveWidgetConfig(meta: SerializedWidgetMeta, config: unknown): unknown {
if (config != null && typeof config === "object" && !Array.isArray(config)) {
return {
...(meta.defaultConfig as Record<string, unknown>),
...(config as Record<string, unknown>),
};
}
return meta.defaultConfig;
}