mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-01-26 19:09:52 +00:00
## Summary Reorganized custom nodes manager functionality from scattered technical layers into a cohesive domain-focused module following [domain-driven design](https://en.wikipedia.org/wiki/Domain-driven_design) principles. ## Changes - **What**: Migrated all manager code from technical layers (`src/components/`, `src/stores/`, etc.) to unified domain structure at `src/workbench/extensions/manager/` - **Breaking**: Import paths changed for all manager-related modules (40+ files updated) ## Review Focus Verify all import path updates are correct and no circular dependencies introduced. Check that [Vue 3 composition API](https://vuejs.org/guide/reusability/composables.html) patterns remain consistent across relocated composables. ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-5662-refactor-Migrate-manager-code-to-DDD-structure-2736d73d3650812c87faf6ed0fffb196) by [Unito](https://www.unito.io)
52 lines
1.4 KiB
TypeScript
52 lines
1.4 KiB
TypeScript
import { type Ref, computed } from 'vue'
|
|
|
|
import type { components } from '@/types/comfyRegistryTypes'
|
|
import { useComfyManagerStore } from '@/workbench/extensions/manager/stores/comfyManagerStore'
|
|
|
|
type NodePack = components['schemas']['Node']
|
|
|
|
type SelectionState = 'all-installed' | 'none-installed' | 'mixed'
|
|
|
|
/**
|
|
* Composable for managing multi-package selection states
|
|
* Handles installation status tracking and selection state determination
|
|
*/
|
|
export function usePacksSelection(nodePacks: Ref<NodePack[]>) {
|
|
const managerStore = useComfyManagerStore()
|
|
|
|
const installedPacks = computed(() =>
|
|
nodePacks.value.filter((pack) => managerStore.isPackInstalled(pack.id))
|
|
)
|
|
|
|
const notInstalledPacks = computed(() =>
|
|
nodePacks.value.filter((pack) => !managerStore.isPackInstalled(pack.id))
|
|
)
|
|
|
|
const isAllInstalled = computed(
|
|
() => installedPacks.value.length === nodePacks.value.length
|
|
)
|
|
|
|
const isNoneInstalled = computed(
|
|
() => notInstalledPacks.value.length === nodePacks.value.length
|
|
)
|
|
|
|
const isMixed = computed(
|
|
() => installedPacks.value.length > 0 && notInstalledPacks.value.length > 0
|
|
)
|
|
|
|
const selectionState = computed<SelectionState>(() => {
|
|
if (isAllInstalled.value) return 'all-installed'
|
|
if (isNoneInstalled.value) return 'none-installed'
|
|
return 'mixed'
|
|
})
|
|
|
|
return {
|
|
installedPacks,
|
|
notInstalledPacks,
|
|
isAllInstalled,
|
|
isNoneInstalled,
|
|
isMixed,
|
|
selectionState
|
|
}
|
|
}
|