-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathVerseSelectionProvider.tsx
More file actions
42 lines (36 loc) · 1.19 KB
/
Copy pathVerseSelectionProvider.tsx
File metadata and controls
42 lines (36 loc) · 1.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import { type PropsWithChildren, useCallback, useState } from 'react';
import { VerseSelectionContext } from './VerseSelectionContext';
/**
* @deprecated No replacement needed. Remove usage. Will be removed in the next major version.
*/
export function VerseSelectionProvider({ children }: PropsWithChildren): React.ReactElement {
const [selectedVerseUsfms, setSelectedVerseUsfms] = useState<Set<string>>(new Set());
const toggleVerse = useCallback((usfm: string) => {
setSelectedVerseUsfms((prev) => {
const newSet = new Set(prev); // Make a new set to trigger rerender
if (newSet.has(usfm)) {
newSet.delete(usfm);
} else {
newSet.add(usfm);
}
return newSet;
});
}, []);
const isSelected = useCallback(
(usfm: string) => {
return selectedVerseUsfms.has(usfm);
},
[selectedVerseUsfms],
);
const clearSelection = useCallback(() => {
setSelectedVerseUsfms(new Set());
}, []);
const value = {
selectedVerseUsfms,
toggleVerse,
isSelected,
clearSelection,
selectedCount: selectedVerseUsfms.size,
};
return <VerseSelectionContext.Provider value={value}>{children}</VerseSelectionContext.Provider>;
}