Move is active to fe (#19649)

## Context
Moving isActive filtering to the frontend for page layout tabs and
widgets, hiding inactive entities from the UI while keeping them in
state for future reactivation

Next we will implement deactivated standard tab re-activation during tab
creation (cc @Devessier)
<img width="234" height="303" alt="📋 Menu (Slots)"
src="https://github.com/user-attachments/assets/17a25ac6-55e2-4778-b7f0-e7554ed69704"
/>
This commit is contained in:
Weiko
2026-04-14 12:18:09 +02:00
committed by GitHub
parent b817bdca02
commit 47bdcb11d8
83 changed files with 481 additions and 467 deletions
@@ -29,7 +29,9 @@ export const reconstructFlatPageLayoutWithTabsAndWidgets = ({
}): FlatPageLayoutWithTabsAndWidgets => {
const tabs = Object.values(flatPageLayoutTabMaps.byUniversalIdentifier)
.filter(isDefined)
.filter((tab) => tab.pageLayoutId === layout.id && tab.isActive)
.filter(
(tab) => tab.pageLayoutId === layout.id && !isDefined(tab.deletedAt),
)
.sort((a, b) => (a.position ?? 0) - (b.position ?? 0));
const tabsWithWidgets: FlatPageLayoutTabWithWidgets[] = tabs.map((tab) => {
@@ -39,7 +41,8 @@ export const reconstructFlatPageLayoutWithTabsAndWidgets = ({
.filter(isDefined)
.filter(
(widget) =>
getResolvedPageLayoutTabId(widget) === tab.id && widget.isActive,
getResolvedPageLayoutTabId(widget) === tab.id &&
!isDefined(widget.deletedAt),
);
return {
@@ -52,6 +52,9 @@ export class PageLayoutTabDTO {
@Field()
updatedAt: Date;
@Field(() => Boolean, { nullable: false })
isActive: boolean;
@Field(() => Date, { nullable: true })
deletedAt?: Date | null;
@@ -74,6 +74,9 @@ export class PageLayoutWidgetDTO {
@Field()
updatedAt: Date;
@Field(() => Boolean, { nullable: false })
isActive: boolean;
@Field(() => Date, { nullable: true })
deletedAt?: Date;
@@ -898,11 +898,6 @@ export class PageLayoutUpdateService {
for (const widget of widgetsToUpdate) {
if (!widget.isActive) {
directlyRemovedWidgetIds.add(widget.id);
const viewId = this.getViewIdFromFieldsWidget(widget);
if (isDefined(viewId)) {
viewIdsToDelete.add(viewId);
}
}
}
@@ -32,6 +32,9 @@ export class ViewFieldGroupDTO {
@Field()
updatedAt: Date;
@Field(() => Boolean, { nullable: false })
isActive: boolean;
@Field(() => Date, { nullable: true })
deletedAt?: Date | null;
@@ -349,12 +349,7 @@ export class ViewFieldGroupService {
return Object.values(flatViewFieldGroupMaps.byUniversalIdentifier)
.filter(isDefined)
.filter(
(group) =>
group.viewId === viewId &&
group.isActive &&
!isDefined(group.deletedAt),
)
.filter((group) => group.viewId === viewId && !isDefined(group.deletedAt))
.map(fromFlatViewFieldGroupToViewFieldGroupDto)
.sort((a, b) => a.position - b.position);
}
@@ -48,6 +48,9 @@ export class ViewFieldDTO {
@Field()
updatedAt: Date;
@Field(() => Boolean, { nullable: false })
isActive: boolean;
@Field(() => Date, { nullable: true })
deletedAt?: Date | null;
@@ -352,7 +352,7 @@ export class ViewFieldService {
return Object.values(flatViewFieldMaps.byUniversalIdentifier)
.filter(isDefined)
.filter((field) => field.isActive && !isDefined(field.deletedAt))
.filter((field) => !isDefined(field.deletedAt))
.map(fromFlatViewFieldToViewFieldDto)
.sort((a, b) => a.position - b.position);
}
@@ -371,12 +371,7 @@ export class ViewFieldService {
return Object.values(flatViewFieldMaps.byUniversalIdentifier)
.filter(isDefined)
.filter(
(field) =>
field.viewId === viewId &&
field.isActive &&
!isDefined(field.deletedAt),
)
.filter((field) => field.viewId === viewId && !isDefined(field.deletedAt))
.map(fromFlatViewFieldToViewFieldDto)
.sort((a, b) => a.position - b.position);
}