diff --git a/src/components/Dashboard/Tiles/Widgets/DraggableList.tsx b/src/components/Dashboard/Tiles/Widgets/DraggableList.tsx index 768323170..7622e203b 100644 --- a/src/components/Dashboard/Tiles/Widgets/DraggableList.tsx +++ b/src/components/Dashboard/Tiles/Widgets/DraggableList.tsx @@ -1,8 +1,8 @@ -import { Collapse, createStyles, Stack, Text } from '@mantine/core'; +import { Collapse, createStyles, Flex, Stack, Text } from '@mantine/core'; import { useDisclosure } from '@mantine/hooks'; import { IconChevronDown, IconGripVertical } from '@tabler/icons'; import { Reorder, useDragControls } from 'framer-motion'; -import { FC, ReactNode } from 'react'; +import { FC, ReactNode, useEffect, useRef } from 'react'; import { IDraggableListInputValue } from '../../../../widgets/widgets'; const useStyles = createStyles((theme) => ({ @@ -83,16 +83,32 @@ const ListItem: FC<{ const [opened, handlers] = useDisclosure(false); const hasContent = props.children != null && Object.keys(props.children).length !== 0; + // Workaround for mobile drag controls not working + // https://github.com/framer/motion/issues/1597#issuecomment-1235026724 + const dragRef = useRef(null); + useEffect(() => { + const touchHandler: EventListener = (e) => e.preventDefault(); + + const dragItem = dragRef.current; + + if (dragItem) { + dragItem.addEventListener('touchstart', touchHandler, { passive: false }); + + return () => { + dragItem.removeEventListener('touchstart', touchHandler); + }; + } + + return undefined; + }, [dragRef]); + return (
- controls.start(e)} - size={18} - stroke={1.5} - /> + controls.start(e)}> + +
{props.label}