From 24a95b7dd7df7859ee49b71d571e99524d2c63ea Mon Sep 17 00:00:00 2001 From: ammarahm-ed Date: Mon, 18 Jul 2022 10:18:32 +0500 Subject: [PATCH] fix drag/drop bugs --- apps/mobile/src/screens/settings/editor/common.tsx | 2 ++ .../screens/settings/editor/configuretoolbar.tsx | 8 +++++++- apps/mobile/src/screens/settings/editor/group.tsx | 9 +++++---- apps/mobile/src/screens/settings/editor/tool.tsx | 13 +++++++++---- .../src/screens/settings/editor/toolsheet.tsx | 7 ++++--- 5 files changed, 27 insertions(+), 12 deletions(-) diff --git a/apps/mobile/src/screens/settings/editor/common.tsx b/apps/mobile/src/screens/settings/editor/common.tsx index 0981f80ee..6c7dd7cc5 100644 --- a/apps/mobile/src/screens/settings/editor/common.tsx +++ b/apps/mobile/src/screens/settings/editor/common.tsx @@ -6,6 +6,8 @@ import { Tool } from './tool'; export const renderTool = ({ item, groupIndex, parentIndex }: DraggableItem) => { const data = item as string[]; + if (!data) return null; + const tools = data.map((item, index) => ( { ))} - + {renderGroups()} const dragged = data.dragged.payload; const reciever = data.receiver.payload; let _data = useDragState.getState().data.slice(); + + const isFromSubgroup = typeof dragged.parentIndex === 'number'; + const isDroppedAtSubgroup = typeof reciever.parentIndex === 'number'; + if (dragged.type === 'tool') { const fromIndex = dragged.index; const toIndex = isDroppedAbove ? Math.max(0, reciever.index) : reciever.index + 1; - const insertAt = reciever.parentIndex + console.log('indexes', reciever.parentIndex, reciever.groupIndex); + + const insertAt = isDroppedAtSubgroup ? (_data[reciever.parentIndex][reciever.groupIndex] as string[]) : (_data[reciever.groupIndex] as string[]); - const insertFrom = dragged.parentIndex + const insertFrom = isFromSubgroup ? (_data[dragged.parentIndex][dragged.groupIndex] as string[]) : (_data[dragged.groupIndex] as string[]); - insertAt.splice( toIndex > fromIndex ? toIndex - 1 : toIndex, 0, @@ -223,7 +228,7 @@ export const Tool = ({ item, index, groupIndex, parentIndex }: DraggableItem) => // Remove the group or subgroup if it is empty. if (insertFrom.length === 0) { - dragged.parentIndex + isFromSubgroup ? _data[dragged.parentIndex].splice(_data[dragged.parentIndex].length - 1, 1) : _data.splice(dragged.groupIndex, 1); } diff --git a/apps/mobile/src/screens/settings/editor/toolsheet.tsx b/apps/mobile/src/screens/settings/editor/toolsheet.tsx index 4d41ca076..592350cf5 100644 --- a/apps/mobile/src/screens/settings/editor/toolsheet.tsx +++ b/apps/mobile/src/screens/settings/editor/toolsheet.tsx @@ -1,3 +1,4 @@ +import { ToolId } from '@streetwriters/editor/dist/es/toolbar'; import React, { RefObject } from 'react'; import { View } from 'react-native'; import ActionSheet from 'react-native-actions-sheet'; @@ -20,9 +21,9 @@ export default function ToolSheet({ }) { const colors = useThemeStore(state => state.colors); const data = useDragState(state => state.data); - const ungrouped = getUngroupedTools(data); + const ungrouped = getUngroupedTools(data) as ToolId[]; - const renderTool = React.useCallback((item: string) => { + const renderTool = React.useCallback((item: ToolId) => { //@ts-ignore const tool = findToolById(item); //@ts-ignore @@ -87,7 +88,7 @@ export default function ToolSheet({ }} nestedScrollEnabled={true} > - {ungrouped.length === 0 ? ( + {!ungrouped || ungrouped.length === 0 ? (