PluginProbe
Code Snippets / 3.10.0
Code Snippets v3.10.0
4.0.0-beta.2 3.10.2 3.10.1 3.10.0 3.10.0-beta.2 3.10.0-beta.1 4.0.0-beta.1 3.9.6 trunk 2.10.0 2.10.1 2.12.0 2.12.1 2.13.0 2.13.1 2.13.2 2.13.3 2.14.0 2.14.1 2.14.2 2.14.3 2.14.4 2.14.5 2.14.6 3.0.0 All 65 releases
code-snippets / js / components / Import / FromOtherPlugins / hooks / useImportSnippetSelection.ts

useImportSnippetSelection.ts in Code Snippets 3.10.0, at js/components/Import/FromOtherPlugins/hooks/useImportSnippetSelection.ts

46 lines 1.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 import { useState } from 'react'
2 import type { ImportableSnippet } from '../../../../hooks/useImportersAPI'
3
4 export const useImportSnippetSelection = (availableSnippets: ImportableSnippet[]) => {
5 const [selectedSnippets, setSelectedSnippets] = useState<Set<number>>(new Set())
6
7 const handleSnippetToggle = (snippetId: number) => {
8 const newSelected = new Set(selectedSnippets)
9 if (newSelected.has(snippetId)) {
10 newSelected.delete(snippetId)
11 } else {
12 newSelected.add(snippetId)
13 }
14 setSelectedSnippets(newSelected)
15 }
16
17 const handleSelectAll = () => {
18 if (selectedSnippets.size === availableSnippets.length) {
19 setSelectedSnippets(new Set())
20 } else {
21 setSelectedSnippets(new Set(availableSnippets.map(snippet => snippet.table_data.id)))
22 }
23 }
24
25 const clearSelection = () => {
26 setSelectedSnippets(new Set())
27 }
28
29 const getSelectedSnippets = () => {
30 return availableSnippets.filter(snippet =>
31 selectedSnippets.has(snippet.table_data.id)
32 )
33 }
34
35 const isAllSelected = selectedSnippets.size === availableSnippets.length && availableSnippets.length > 0
36
37 return {
38 selectedSnippets,
39 handleSnippetToggle,
40 handleSelectAll,
41 clearSelection,
42 getSelectedSnippets,
43 isAllSelected
44 }
45 }
46