Files
twenty/packages/twenty-front/src/modules/page-layout/utils/getTabsWithVisibleWidgets.ts
T
Weiko 47bdcb11d8 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"
/>
2026-04-14 10:18:09 +00:00

41 lines
1.1 KiB
TypeScript

import { type PageLayoutTab } from '@/page-layout/types/PageLayoutTab';
import { buildWidgetVisibilityContext } from '@/page-layout/utils/buildWidgetVisibilityContext';
import { filterVisibleWidgets } from '@/page-layout/utils/filterVisibleWidgets';
type GetTabsWithVisibleWidgetsParams = {
tabs: PageLayoutTab[];
isMobile: boolean;
isInSidePanel: boolean;
isEditMode: boolean;
};
export const getTabsWithVisibleWidgets = ({
tabs,
isMobile,
isInSidePanel,
isEditMode,
}: GetTabsWithVisibleWidgetsParams): PageLayoutTab[] => {
const activeTabs = tabs.filter((tab) => tab.isActive);
if (isEditMode) {
return activeTabs;
}
const context = buildWidgetVisibilityContext({ isMobile, isInSidePanel });
const tabsWithFilteredWidgets = activeTabs.map((tab) => ({
...tab,
widgets: filterVisibleWidgets({ widgets: tab.widgets, context }),
}));
const tabsWithVisibleWidgets = tabsWithFilteredWidgets.filter(
(tab) => tab.widgets.length > 0,
);
if (tabsWithVisibleWidgets.length === 0 && activeTabs.length > 0) {
return tabsWithFilteredWidgets.slice(0, 1);
}
return tabsWithVisibleWidgets;
};