mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-01-26 19:09:52 +00:00
83 lines
2.1 KiB
TypeScript
83 lines
2.1 KiB
TypeScript
import { defineStore } from 'pinia'
|
|
import { computed, ref } from 'vue'
|
|
|
|
export const useAssetSelectionStore = defineStore('assetSelection', () => {
|
|
// State
|
|
const selectedAssetIds = ref<Set<string>>(new Set())
|
|
const lastSelectedIndex = ref<number>(-1)
|
|
const lastSelectedAssetId = ref<string | null>(null)
|
|
|
|
// Getters
|
|
const selectedCount = computed(() => selectedAssetIds.value.size)
|
|
const hasSelection = computed(() => selectedAssetIds.value.size > 0)
|
|
const selectedIdsArray = computed(() => Array.from(selectedAssetIds.value))
|
|
|
|
// Actions
|
|
function addToSelection(assetId: string) {
|
|
selectedAssetIds.value.add(assetId)
|
|
}
|
|
|
|
function removeFromSelection(assetId: string) {
|
|
selectedAssetIds.value.delete(assetId)
|
|
}
|
|
|
|
function setSelection(assetIds: string[]) {
|
|
// Only update if there's an actual change to prevent unnecessary re-renders
|
|
const newSet = new Set(assetIds)
|
|
if (
|
|
newSet.size !== selectedAssetIds.value.size ||
|
|
!assetIds.every((id) => selectedAssetIds.value.has(id))
|
|
) {
|
|
selectedAssetIds.value = newSet
|
|
}
|
|
}
|
|
|
|
function clearSelection() {
|
|
selectedAssetIds.value.clear()
|
|
lastSelectedIndex.value = -1
|
|
lastSelectedAssetId.value = null
|
|
}
|
|
|
|
function toggleSelection(assetId: string) {
|
|
if (isSelected(assetId)) {
|
|
removeFromSelection(assetId)
|
|
} else {
|
|
addToSelection(assetId)
|
|
}
|
|
}
|
|
|
|
function isSelected(assetId: string): boolean {
|
|
return selectedAssetIds.value.has(assetId)
|
|
}
|
|
|
|
function setLastSelectedIndex(index: number) {
|
|
lastSelectedIndex.value = index
|
|
}
|
|
|
|
function setLastSelectedAssetId(assetId: string | null) {
|
|
lastSelectedAssetId.value = assetId
|
|
}
|
|
|
|
return {
|
|
// State
|
|
selectedAssetIds: computed(() => selectedAssetIds.value),
|
|
lastSelectedIndex: computed(() => lastSelectedIndex.value),
|
|
lastSelectedAssetId: computed(() => lastSelectedAssetId.value),
|
|
|
|
// Getters
|
|
selectedCount,
|
|
hasSelection,
|
|
selectedIdsArray,
|
|
|
|
// Actions
|
|
addToSelection,
|
|
removeFromSelection,
|
|
setSelection,
|
|
clearSelection,
|
|
toggleSelection,
|
|
isSelected,
|
|
setLastSelectedIndex,
|
|
setLastSelectedAssetId
|
|
}
|
|
})
|