a tool for shared writing and social publishing
298
fork

Configure Feed

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

at 89a5e06cfb4576b98ad25c74688e7e1d99cdd0fb 81 lines 2.6 kB view raw
1import { Replicache } from "replicache"; 2import { ReplicacheMutators } from "src/replicache"; 3import { getSortedSelection } from "components/SelectionManager/selectionState"; 4import { useUIState } from "src/useUIState"; 5 6export const moveBlockUp = async (rep: Replicache<ReplicacheMutators>) => { 7 let [sortedBlocks, siblings] = await getSortedSelection(rep); 8 if (sortedBlocks.length > 1) return; 9 let block = sortedBlocks[0]; 10 let previousBlock = 11 siblings?.[siblings.findIndex((s) => s.value === block.value) - 1]; 12 if (previousBlock.value === block.listData?.parent) { 13 previousBlock = 14 siblings?.[siblings.findIndex((s) => s.value === block.value) - 2]; 15 } 16 17 if ( 18 previousBlock?.listData && 19 block.listData && 20 block.listData.depth > 1 && 21 !previousBlock.listData.path.find( 22 (f) => f.entity === block.listData?.parent, 23 ) 24 ) { 25 let depth = block.listData.depth; 26 let newParent = previousBlock.listData.path.find( 27 (f) => f.depth === depth - 1, 28 ); 29 if (!newParent) return; 30 if (useUIState.getState().foldedBlocks.includes(newParent.entity)) 31 useUIState.getState().toggleFold(newParent.entity); 32 rep?.mutate.moveBlock({ 33 block: block.value, 34 oldParent: block.listData?.parent, 35 newParent: newParent.entity, 36 position: { type: "end" }, 37 }); 38 } else { 39 rep?.mutate.moveBlockUp({ 40 entityID: block.value, 41 parent: block.listData?.parent || block.parent, 42 }); 43 } 44}; 45 46export const moveBlockDown = async ( 47 rep: Replicache<ReplicacheMutators>, 48 permission_set: string, 49) => { 50 let [sortedBlocks, siblings] = await getSortedSelection(rep); 51 if (sortedBlocks.length > 1) return; 52 let block = sortedBlocks[0]; 53 let nextBlock = siblings 54 .slice(siblings.findIndex((s) => s.value === block.value) + 1) 55 .find( 56 (f) => 57 f.listData && 58 block.listData && 59 !f.listData.path.find((f) => f.entity === block.value), 60 ); 61 if ( 62 nextBlock?.listData && 63 block.listData && 64 nextBlock.listData.depth === block.listData.depth - 1 65 ) { 66 if (useUIState.getState().foldedBlocks.includes(nextBlock.value)) 67 useUIState.getState().toggleFold(nextBlock.value); 68 rep?.mutate.moveBlock({ 69 block: block.value, 70 oldParent: block.listData?.parent, 71 newParent: nextBlock.value, 72 position: { type: "first" }, 73 }); 74 } else { 75 rep?.mutate.moveBlockDown({ 76 entityID: block.value, 77 parent: block.listData?.parent || block.parent, 78 permission_set: permission_set, 79 }); 80 } 81};