Remove report components from boards and sanitize saved layouts

This commit is contained in:
Mike Cao 2026-02-12 21:32:14 -08:00
parent 57c4a6ed51
commit b09694ddb6
2 changed files with 31 additions and 69 deletions

View file

@ -5,6 +5,7 @@ import { v4 as uuid } from 'uuid';
import { useApi, useMessages, useModified, useNavigation } from '@/components/hooks';
import { useBoardQuery } from '@/components/hooks/queries/useBoardQuery';
import type { Board, BoardParameters } from '@/lib/types';
import { getComponentDefinition } from './boardComponentRegistry';
export type LayoutGetter = () => Partial<BoardParameters> | null;
@ -27,6 +28,29 @@ const createDefaultBoard = (): Partial<Board> => ({
},
});
function sanitizeBoardParameters(parameters?: BoardParameters): BoardParameters | undefined {
if (!parameters?.rows) {
return parameters;
}
return {
...parameters,
rows: parameters.rows.map(row => ({
...row,
columns: row.columns.map(column => {
if (column.component && !getComponentDefinition(column.component.type)) {
return {
...column,
component: null,
};
}
return column;
}),
})),
};
}
export function BoardProvider({
boardId,
editing = false,
@ -52,7 +76,10 @@ export function BoardProvider({
useEffect(() => {
if (data) {
setBoard(data);
setBoard({
...data,
parameters: sanitizeBoardParameters(data.parameters),
});
}
}, [data]);
@ -74,7 +101,9 @@ export function BoardProvider({
// Get current layout sizes from BoardBody if registered
const layoutData = layoutGetterRef.current?.();
const parameters = layoutData ? { ...board.parameters, ...layoutData } : board.parameters;
const parameters = sanitizeBoardParameters(
layoutData ? { ...board.parameters, ...layoutData } : board.parameters,
);
const result = await mutateAsync({
...board,