mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-02-03 22:59:14 +00:00
## Summary The current help / feedback is often overlooked by users, this adds a setting that makes it more visible moving it up into the tab bar and moves the user login/profile button out of the "action bar" into the tab bar. ## Changes - Add 'Comfy.UI.TabBarLayout' setting with Default/Integrated options - Move Help & User controls to tab bar when Integrated mode is enabled - Extract help center logic into shared useHelpCenter composable ## Screenshots (if applicable) <img width="515" height="540" alt="image" src="https://github.com/user-attachments/assets/c9e6057f-4fb1-4da6-b25d-9df4b19be31a" /> <img width="835" height="268" alt="image" src="https://github.com/user-attachments/assets/24afc0e8-97eb-45cf-af86-15a9b464e9a8" /> ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-7853-Integrated-tab-bar-UI-elements-2df6d73d365081b1beb8f7c641c2fa43) by [Unito](https://www.unito.io) --------- Co-authored-by: GitHub Action <action@github.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
101 lines
3.1 KiB
TypeScript
101 lines
3.1 KiB
TypeScript
import { storeToRefs } from 'pinia'
|
|
import { computed, onMounted } from 'vue'
|
|
|
|
import { useSettingStore } from '@/platform/settings/settingStore'
|
|
import { useTelemetry } from '@/platform/telemetry'
|
|
import { useReleaseStore } from '@/platform/updates/common/releaseStore'
|
|
import { useDialogService } from '@/services/dialogService'
|
|
import { useHelpCenterStore } from '@/stores/helpCenterStore'
|
|
import type { HelpCenterTriggerLocation } from '@/stores/helpCenterStore'
|
|
import { useConflictAcknowledgment } from '@/workbench/extensions/manager/composables/useConflictAcknowledgment'
|
|
import { useConflictDetection } from '@/workbench/extensions/manager/composables/useConflictDetection'
|
|
|
|
export function useHelpCenter(
|
|
triggerFrom: HelpCenterTriggerLocation = 'sidebar'
|
|
) {
|
|
const settingStore = useSettingStore()
|
|
const releaseStore = useReleaseStore()
|
|
const helpCenterStore = useHelpCenterStore()
|
|
const { isVisible: isHelpCenterVisible, triggerLocation } =
|
|
storeToRefs(helpCenterStore)
|
|
const { shouldShowRedDot: showReleaseRedDot } = storeToRefs(releaseStore)
|
|
|
|
const conflictDetection = useConflictDetection()
|
|
const { showNodeConflictDialog } = useDialogService()
|
|
|
|
// Use conflict acknowledgment state from composable - call only once
|
|
const { shouldShowRedDot: shouldShowConflictRedDot, markConflictsAsSeen } =
|
|
useConflictAcknowledgment()
|
|
|
|
// Use either release red dot or conflict red dot
|
|
const shouldShowRedDot = computed((): boolean => {
|
|
const releaseRedDot = showReleaseRedDot.value
|
|
return releaseRedDot || shouldShowConflictRedDot.value
|
|
})
|
|
|
|
const sidebarLocation = computed(() =>
|
|
settingStore.get('Comfy.Sidebar.Location')
|
|
)
|
|
|
|
/**
|
|
* Toggle Help Center and track UI button click.
|
|
*/
|
|
const toggleHelpCenter = () => {
|
|
useTelemetry()?.trackUiButtonClicked({
|
|
button_id: `${triggerFrom}_help_center_toggled`
|
|
})
|
|
helpCenterStore.toggle(triggerFrom)
|
|
}
|
|
|
|
const closeHelpCenter = () => {
|
|
helpCenterStore.hide()
|
|
}
|
|
|
|
/**
|
|
* Handle What's New popup dismissal
|
|
* Check if conflict modal should be shown after ComfyUI update
|
|
*/
|
|
const handleWhatsNewDismissed = async () => {
|
|
try {
|
|
// Check if conflict modal should be shown after update
|
|
const shouldShow =
|
|
await conflictDetection.shouldShowConflictModalAfterUpdate()
|
|
if (shouldShow) {
|
|
showConflictModal()
|
|
}
|
|
} catch (error) {
|
|
console.error('[HelpCenter] Error checking conflict modal:', error)
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Show the node conflict dialog with current conflict data
|
|
*/
|
|
const showConflictModal = () => {
|
|
showNodeConflictDialog({
|
|
showAfterWhatsNew: true,
|
|
dialogComponentProps: {
|
|
onClose: () => {
|
|
markConflictsAsSeen()
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
// Initialize release store on mount
|
|
onMounted(async () => {
|
|
// Initialize release store to fetch releases for toast and popup
|
|
await releaseStore.initialize()
|
|
})
|
|
|
|
return {
|
|
isHelpCenterVisible,
|
|
triggerLocation,
|
|
shouldShowRedDot,
|
|
sidebarLocation,
|
|
toggleHelpCenter,
|
|
closeHelpCenter,
|
|
handleWhatsNewDismissed
|
|
}
|
|
}
|