a tool for shared writing and social publishing
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

add back selection manager and handle deleting blocks

+17 -1
+1
app/[doc_id]/page.tsx
··· 22 22 let initialFacts = (data as unknown as Fact<keyof typeof Attributes>[]) || []; 23 23 return ( 24 24 <ReplicacheProvider name={props.params.doc_id} initialFacts={initialFacts}> 25 + <SelectionManager /> 25 26 <Cards rootCard={props.params.doc_id} /> 26 27 </ReplicacheProvider> 27 28 );
+16 -1
components/SelectionManager.tsx
··· 9 9 10 10 export function SelectionManager() { 11 11 let moreThanOneSelected = useUIState((s) => s.selectedBlock.length > 1); 12 + let { rep } = useReplicache(); 12 13 useEffect(() => { 13 14 if (moreThanOneSelected) { 15 + let listener = async (e: KeyboardEvent) => { 16 + console.log(e); 17 + if (e.key === "Backspace" || e.key === "Delete") { 18 + for (let entity of useUIState.getState().selectedBlock) { 19 + await rep?.mutate.removeBlock({ blockEntity: entity }); 20 + } 21 + } 22 + }; 23 + window.addEventListener("keydown", listener); 24 + return () => { 25 + window.removeEventListener("keydown", listener); 26 + }; 14 27 } 15 - }, [moreThanOneSelected]); 28 + }, [moreThanOneSelected, rep]); 16 29 let dragStart = useSelectingMouse((s) => s.start); 17 30 let initialContentEditableParent = useRef<null | Node>(null); 18 31 let savedSelection = useRef<Range[] | null>(); ··· 72 85 }, [dragStart]); 73 86 return null; 74 87 } 88 + 75 89 export function saveSelection() { 76 90 let selection = window.getSelection(); 77 91 if (selection && selection.rangeCount > 0) { ··· 83 97 } 84 98 return []; 85 99 } 100 + 86 101 export function restoreSelection(savedRanges: Range[]) { 87 102 if (savedRanges) { 88 103 let selection = window.getSelection() || new Selection();