@@ -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' ;
1111import { useSelector } from 'react-redux' ;
1212import 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+
4570const 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