Spaces:
Sleeping
Sleeping
| import type { TabType, TabVisibilityConfig } from '~/components/@settings/core/types'; | |
| import { DEFAULT_TAB_CONFIG } from '~/components/@settings/core/constants'; | |
| export const getVisibleTabs = ( | |
| tabConfiguration: { userTabs: TabVisibilityConfig[]; developerTabs?: TabVisibilityConfig[] }, | |
| isDeveloperMode: boolean, | |
| notificationsEnabled: boolean, | |
| ): TabVisibilityConfig[] => { | |
| if (!tabConfiguration?.userTabs || !Array.isArray(tabConfiguration.userTabs)) { | |
| console.warn('Invalid tab configuration, using defaults'); | |
| return DEFAULT_TAB_CONFIG as TabVisibilityConfig[]; | |
| } | |
| // In developer mode, show ALL tabs without restrictions | |
| if (isDeveloperMode) { | |
| // Combine all unique tabs from both user and developer configurations | |
| const allTabs = new Set([ | |
| ...DEFAULT_TAB_CONFIG.map((tab) => tab.id), | |
| ...tabConfiguration.userTabs.map((tab) => tab.id), | |
| ...(tabConfiguration.developerTabs || []).map((tab) => tab.id), | |
| 'task-manager' as TabType, // Always include task-manager in developer mode | |
| ]); | |
| // Create a complete tab list with all tabs visible | |
| const devTabs = Array.from(allTabs).map((tabId) => { | |
| // Try to find existing configuration for this tab | |
| const existingTab = | |
| tabConfiguration.developerTabs?.find((t) => t.id === tabId) || | |
| tabConfiguration.userTabs?.find((t) => t.id === tabId) || | |
| DEFAULT_TAB_CONFIG.find((t) => t.id === tabId); | |
| return { | |
| id: tabId as TabType, | |
| visible: true, | |
| window: 'developer' as const, | |
| order: existingTab?.order || DEFAULT_TAB_CONFIG.findIndex((t) => t.id === tabId), | |
| } as TabVisibilityConfig; | |
| }); | |
| return devTabs.sort((a, b) => a.order - b.order); | |
| } | |
| // In user mode, only show visible user tabs | |
| return tabConfiguration.userTabs | |
| .filter((tab) => { | |
| if (!tab || typeof tab.id !== 'string') { | |
| console.warn('Invalid tab entry:', tab); | |
| return false; | |
| } | |
| // Hide notifications tab if notifications are disabled | |
| if (tab.id === 'notifications' && !notificationsEnabled) { | |
| return false; | |
| } | |
| // Always show task-manager in user mode if it's configured as visible | |
| if (tab.id === 'task-manager') { | |
| return tab.visible; | |
| } | |
| // Only show tabs that are explicitly visible and assigned to the user window | |
| return tab.visible && tab.window === 'user'; | |
| }) | |
| .sort((a, b) => a.order - b.order); | |
| }; | |
| export const reorderTabs = ( | |
| tabs: TabVisibilityConfig[], | |
| startIndex: number, | |
| endIndex: number, | |
| ): TabVisibilityConfig[] => { | |
| const result = Array.from(tabs); | |
| const [removed] = result.splice(startIndex, 1); | |
| result.splice(endIndex, 0, removed); | |
| // Update order property | |
| return result.map((tab, index) => ({ | |
| ...tab, | |
| order: index, | |
| })); | |
| }; | |
| export const resetToDefaultConfig = (isDeveloperMode: boolean): TabVisibilityConfig[] => { | |
| return DEFAULT_TAB_CONFIG.map((tab) => ({ | |
| ...tab, | |
| visible: isDeveloperMode ? true : tab.window === 'user', | |
| window: isDeveloperMode ? 'developer' : tab.window, | |
| })) as TabVisibilityConfig[]; | |
| }; | |