Spaces:
Running
Running
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[]; | |
}; | |