Reset Tab Page Layout (#19453)

## Context
- Add "Reset to default" for page layout tabs and widgets — backend
mutation resets overrides, reactivates deactivated children, and deletes
custom children
- Fix override write bug where mutating an overridable property (e.g.
widget title) on a standard-app entity incorrectly overwrote the base
column instead of writing to the overrides JSONB —
PageLayoutUpdateService now uses resolveFlatEntityOverridableProperties
for accurate diffing and routes properties through
sanitizeOverridableEntityInput
- Deprecate isOverridden - We need more time to think about this
feature. Currently this adds too much complexity for a very small
benefit



https://github.com/user-attachments/assets/a84546c8-1e15-4d9e-a489-0825cf8b8ed2
This commit is contained in:
Weiko
2026-04-08 18:43:57 +02:00
committed by GitHub
parent 2267c56f15
commit 238018dc7b
94 changed files with 1000 additions and 619 deletions
@@ -68,7 +68,6 @@ const mixedGraphsPageLayoutMocks = {
title: 'Mixed Graphs',
position: 0,
pageLayoutId: 'mixed-graphs-layout',
isOverridden: false,
createdAt: '2024-01-01T00:00:00Z',
updatedAt: '2024-01-01T00:00:00Z',
deletedAt: null,
@@ -93,7 +92,6 @@ const mixedGraphsPageLayoutMocks = {
aggregateOperation: AggregateOperations.COUNT,
aggregateFieldMetadataId: idField.id,
},
isOverridden: false,
createdAt: '2024-01-01T00:00:00Z',
updatedAt: '2024-01-01T00:00:00Z',
deletedAt: null,
@@ -119,7 +117,6 @@ const mixedGraphsPageLayoutMocks = {
aggregateFieldMetadataId: idField.id,
displayDataLabel: false,
},
isOverridden: false,
createdAt: '2024-01-01T00:00:00Z',
updatedAt: '2024-01-01T00:00:00Z',
deletedAt: null,
@@ -146,7 +143,6 @@ const mixedGraphsPageLayoutMocks = {
groupByFieldMetadataId: createdAtField.id,
orderBy: GraphOrderBy.VALUE_DESC,
},
isOverridden: false,
createdAt: '2024-01-01T00:00:00Z',
updatedAt: '2024-01-01T00:00:00Z',
deletedAt: null,
@@ -176,7 +172,6 @@ const mixedGraphsPageLayoutMocks = {
axisNameDisplay: AxisNameDisplay.BOTH,
displayDataLabel: false,
} satisfies BarChartConfiguration,
isOverridden: false,
createdAt: '2024-01-01T00:00:00Z',
updatedAt: '2024-01-01T00:00:00Z',
deletedAt: null,
@@ -30,7 +30,6 @@ const createInitialTabs = (): PageLayoutTab[] => [
icon: 'IconPlus',
pageLayoutId: 'test-layout',
widgets: [],
isOverridden: false,
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString(),
deletedAt: null,
@@ -43,7 +42,6 @@ const createInitialTabs = (): PageLayoutTab[] => [
position: 1,
pageLayoutId: 'test-layout',
widgets: [],
isOverridden: false,
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString(),
deletedAt: null,
@@ -56,7 +54,6 @@ const createInitialTabs = (): PageLayoutTab[] => [
position: 2,
pageLayoutId: 'test-layout',
widgets: [],
isOverridden: false,
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString(),
deletedAt: null,
@@ -86,7 +83,6 @@ const PageLayoutTabListPlayground = ({
position: nextIndex,
pageLayoutId: 'test-layout',
widgets: [],
isOverridden: false,
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString(),
deletedAt: null,