Add is active to overridable entities and deactivation logic for page layouts (#19200)

- Replace soft-deletion (deletedAt) with isActive boolean for
overridable entities (tabs, widgets, viewFieldGroups, viewFields).
Standard entities are deactivated (isActive: false) when removed from
update payloads, while custom entities are hard-deleted.
- When a viewFieldGroup is deactivated/deleted, its viewFields are
reassigned to the next section by position (or null if none remain).
- Add isActive: true filters to viewFieldGroup and viewField API queries
so deactivated entities are excluded from responses.

Next: 
- fields-widget-upsert.service.ts should be refactored a bit
- Add restore logic
This commit is contained in:
Weiko
2026-04-02 16:50:50 +02:00
committed by GitHub
parent 67d34be7c8
commit c1e4756f9c
35 changed files with 392 additions and 286 deletions
@@ -23,6 +23,7 @@ export const fromPageLayoutTabManifestToUniversalFlatPageLayoutTab = ({
icon: pageLayoutTabManifest.icon ?? null,
layoutMode:
pageLayoutTabManifest.layoutMode ?? PageLayoutTabLayoutMode.GRID,
isActive: true,
widgetUniversalIdentifiers: [],
createdAt: now,
updatedAt: now,
@@ -19,6 +19,7 @@ export const fromPageLayoutWidgetManifestToUniversalFlatPageLayoutWidget = ({
applicationUniversalIdentifier,
pageLayoutTabUniversalIdentifier,
title: pageLayoutWidgetManifest.title,
isActive: true,
type: pageLayoutWidgetManifest.type as WidgetType,
objectMetadataUniversalIdentifier:
pageLayoutWidgetManifest.objectUniversalIdentifier ?? null,
@@ -20,6 +20,7 @@ export const fromViewFieldGroupManifestToUniversalFlatViewFieldGroup = ({
name: viewFieldGroupManifest.name ?? '',
position: viewFieldGroupManifest.position,
isVisible: viewFieldGroupManifest.isVisible ?? true,
isActive: true,
overrides: null,
viewFieldUniversalIdentifiers: [],
createdAt: now,
@@ -22,6 +22,7 @@ export const fromViewFieldManifestToUniversalFlatViewField = ({
viewFieldGroupUniversalIdentifier:
viewFieldManifest.viewFieldGroupUniversalIdentifier ?? null,
isVisible: viewFieldManifest.isVisible ?? true,
isActive: true,
size: viewFieldManifest.size ?? 0,
position: viewFieldManifest.position,
aggregateOperation: viewFieldManifest.aggregateOperation ?? null,