Skip to content

Commit ba35745

Browse files
authored
fix(widgets): widgets gesture issues (#1093)
1 parent 3b2d693 commit ba35745

File tree

1 file changed

+75
-63
lines changed

1 file changed

+75
-63
lines changed

src/components/Widgets.tsx

Lines changed: 75 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import React, {
77
useState,
88
useEffect,
99
} from 'react';
10-
import { StyleSheet, Modal } from 'react-native';
10+
import { StyleSheet, Modal, Platform } from 'react-native';
1111
import { useSelector } from 'react-redux';
1212
import DraggableFlatList, {
1313
RenderItemParams,
@@ -42,14 +42,39 @@ type WCM = {
4242
pageY: number;
4343
};
4444

45+
const ListWrapper = ({
46+
wcm,
47+
children,
48+
}: {
49+
wcm: WCM;
50+
children: ReactElement;
51+
}): ReactElement => {
52+
const style = [
53+
styles.absolute,
54+
{
55+
left: wcm.pageX,
56+
top: wcm.pageY,
57+
width: wcm.width,
58+
},
59+
];
60+
61+
return Platform.OS === 'ios' ? (
62+
<AnimatedView entering={FadeIn} exiting={FadeOut} style={style}>
63+
{children}
64+
</AnimatedView>
65+
) : (
66+
<View style={style}>{children}</View>
67+
);
68+
};
69+
4570
const Widgets = (): ReactElement => {
4671
const { t } = useTranslation('slashtags');
72+
const isFocused = useIsFocused();
4773
const widgets = useSelector((state: Store) => state.widgets.widgets);
4874
const sortOrder = useSelector((state: Store) => state.widgets.sortOrder);
75+
const widgetsContainer = useRef<any>();
76+
const [wcm, setWcm] = useState<WCM>();
4977
const [editing, setEditing] = useState(false);
50-
const widgetsContainer = useRef<any>(null);
51-
const [wcm, setwcm] = useState<undefined | WCM>();
52-
const isFocused = useIsFocused();
5378

5479
const widgetsArray = useMemo(() => {
5580
return Object.entries(widgets).sort(
@@ -63,9 +88,11 @@ const Widgets = (): ReactElement => {
6388
resolve({ x, y, width, height, pageX, pageY });
6489
});
6590
});
66-
setwcm(res);
91+
92+
setWcm(res);
6793
setEditing(true);
6894
}, []);
95+
6996
const handleEditEnd = useCallback((): void => {
7097
setEditing(false);
7198
}, []);
@@ -133,60 +160,55 @@ const Widgets = (): ReactElement => {
133160
[],
134161
);
135162

136-
const renderFlat = useCallback(
137-
(item): ReactElement => {
138-
const [url, widget] = item;
139-
let testID;
140-
141-
if (!widget.feed) {
142-
return (
143-
<AuthWidget
144-
key={url}
145-
url={url}
146-
widget={widget}
147-
isEditing={false}
148-
onLongPress={handleEditStart}
149-
testID="AuthWidget"
150-
/>
151-
);
152-
}
153-
154-
let Component;
155-
switch (widget.feed.type) {
156-
case SUPPORTED_FEED_TYPES.PRICE_FEED:
157-
Component = PriceWidget;
158-
testID = 'PriceWidget';
159-
break;
160-
case SUPPORTED_FEED_TYPES.HEADLINES_FEED:
161-
Component = HeadlinesWidget;
162-
testID = 'HeadlinesWidget';
163-
break;
164-
case SUPPORTED_FEED_TYPES.BLOCKS_FEED:
165-
Component = BlocksWidget;
166-
testID = 'BlocksWidget';
167-
break;
168-
case SUPPORTED_FEED_TYPES.FACTS_FEED:
169-
Component = FactsWidget;
170-
testID = 'FactsWidget';
171-
break;
172-
default:
173-
Component = FeedWidget;
174-
testID = 'FeedWidget';
175-
}
163+
const renderFlat = useCallback((item): ReactElement => {
164+
const [url, widget] = item;
165+
let testID;
176166

167+
if (!widget.feed) {
177168
return (
178-
<Component
169+
<AuthWidget
179170
key={url}
180171
url={url}
181172
widget={widget}
182173
isEditing={false}
183-
onLongPress={handleEditStart}
184-
testID={testID}
174+
testID="AuthWidget"
185175
/>
186176
);
187-
},
188-
[handleEditStart],
189-
);
177+
}
178+
179+
let Component;
180+
switch (widget.feed.type) {
181+
case SUPPORTED_FEED_TYPES.PRICE_FEED:
182+
Component = PriceWidget;
183+
testID = 'PriceWidget';
184+
break;
185+
case SUPPORTED_FEED_TYPES.HEADLINES_FEED:
186+
Component = HeadlinesWidget;
187+
testID = 'HeadlinesWidget';
188+
break;
189+
case SUPPORTED_FEED_TYPES.BLOCKS_FEED:
190+
Component = BlocksWidget;
191+
testID = 'BlocksWidget';
192+
break;
193+
case SUPPORTED_FEED_TYPES.FACTS_FEED:
194+
Component = FactsWidget;
195+
testID = 'FactsWidget';
196+
break;
197+
default:
198+
Component = FeedWidget;
199+
testID = 'FeedWidget';
200+
}
201+
202+
return (
203+
<Component
204+
key={url}
205+
url={url}
206+
widget={widget}
207+
isEditing={false}
208+
testID={testID}
209+
/>
210+
);
211+
}, []);
190212

191213
const onAdd = useCallback((): void => {
192214
rootNavigation.navigate('WidgetsRoot');
@@ -237,17 +259,7 @@ const Widgets = (): ReactElement => {
237259
activeOpacity={0}
238260
/>
239261
{editing && wcm && (
240-
<AnimatedView
241-
entering={FadeIn}
242-
exiting={FadeOut}
243-
style={[
244-
styles.absolute,
245-
{
246-
left: wcm.pageX,
247-
top: wcm.pageY,
248-
width: wcm.width,
249-
},
250-
]}>
262+
<ListWrapper wcm={wcm}>
251263
{/* we need to wrap DraggableFlatList with GestureHandlerRootView, otherwise Gestures are not working in <Modal for Android */}
252264
<GestureHandlerRootView>
253265
<DraggableFlatList
@@ -258,7 +270,7 @@ const Widgets = (): ReactElement => {
258270
activationDistance={1}
259271
/>
260272
</GestureHandlerRootView>
261-
</AnimatedView>
273+
</ListWrapper>
262274
)}
263275
</Modal>
264276
</>

0 commit comments

Comments
 (0)