fix: dashboard edit previews, migration journal, and notes comments
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:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user