# code-snippets/3.10.0/js/components/Import/FromFileUpload/hooks/useSnippetSelection.ts

Code Snippets, version 3.10.0. 46 lines.

- Page: https://pluginprobe.com/plugins/code-snippets/3.10.0/code/js/components/Import/FromFileUpload/hooks/useSnippetSelection.ts
- Raw: https://pluginprobe.com/plugins/code-snippets/3.10.0/raw/js/components/Import/FromFileUpload/hooks/useSnippetSelection.ts
- Modified: 2026-01-16T19:28:10+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/code-snippets/3.10.0/code/js/components/Import/FromFileUpload/hooks/useSnippetSelection.ts#L10-L20`.

```typescript
import { useState } from 'react'
import type { ImportableSnippet } from '../../../../hooks/useFileUploadAPI'

export const useSnippetSelection = (availableSnippets: ImportableSnippet[]) => {
	const [selectedSnippets, setSelectedSnippets] = useState<Set<number | string>>(new Set())

	const handleSnippetToggle = (snippetId: number | string) => {
		const newSelected = new Set(selectedSnippets)
		if (newSelected.has(snippetId)) {
			newSelected.delete(snippetId)
		} else {
			newSelected.add(snippetId)
		}
		setSelectedSnippets(newSelected)
	}

	const handleSelectAll = () => {
		if (selectedSnippets.size === availableSnippets.length) {
			setSelectedSnippets(new Set())
		} else {
			setSelectedSnippets(new Set(availableSnippets.map(snippet => snippet.table_data.id)))
		}
	}

	const clearSelection = () => {
		setSelectedSnippets(new Set())
	}

	const getSelectedSnippets = () => {
		return availableSnippets.filter(snippet => 
			selectedSnippets.has(snippet.table_data.id)
		)
	}

	const isAllSelected = selectedSnippets.size === availableSnippets.length && availableSnippets.length > 0

	return {
		selectedSnippets,
		handleSnippetToggle,
		handleSelectAll,
		clearSelection,
		getSelectedSnippets,
		isAllSelected
	}
}

```
