expo-snowui 1.2.23 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,7 +2,7 @@
2
2
 
3
3
  import React from 'react';
4
4
  import _ from 'lodash';
5
- import { Platform, useTVEventHandler, Keyboard } from 'react-native';
5
+ import { Platform, useTVEventHandler, Keyboard, findNodeHandle, UIManager, Dimensions } from 'react-native';
6
6
  import { SnowSafeArea } from "../component/snow-safe-area.js";
7
7
 
8
8
  /*
@@ -95,6 +95,10 @@ export function FocusContextProvider(props) {
95
95
  const remoteCallbacksRef = React.useRef({});
96
96
  const [currentLayer, setCurrentLayer] = React.useState('app');
97
97
  let DEBUG_FOCUS = props.DEBUG_FOCUS;
98
+ let SCROLL_OFFSET = 200;
99
+ if (props.focusVerticalOffset) {
100
+ SCROLL_OFFSET = props.focusVersionOffset;
101
+ }
98
102
  React.useEffect(() => {
99
103
  focusedKeyRef.current = focusedKey;
100
104
  }, [focusedKey]);
@@ -229,17 +233,6 @@ export function FocusContextProvider(props) {
229
233
  setFocusedKey(null);
230
234
  setCurrentLayer('app');
231
235
  };
232
-
233
- // This only sets the scroll view for the current map
234
- const setScrollViewRef = scrollViewRef => {
235
- setFocusLayers(prev => {
236
- let result = [...prev];
237
- let focusLayer = result[result.length - 1];
238
- focusLayer.scrollViewRef = scrollViewRef;
239
- result[result.length - 1] = focusLayer;
240
- return result;
241
- });
242
- };
243
236
  const addFocusMap = (elementRef, elementProps) => {
244
237
  const focusKey = elementProps.focusKey;
245
238
  const refs = {
@@ -324,33 +317,62 @@ export function FocusContextProvider(props) {
324
317
  });
325
318
  };
326
319
  const focusOn = (elementRef, focusKey) => {
327
- if (DEBUG_FOCUS) {
320
+ const element = elementRef?.current;
321
+ if (!element) {
322
+ return;
323
+ }
324
+ if (DEBUG_FOCUS === 'verbose') {
328
325
  prettyLog({
329
326
  action: 'focusOn',
330
- focusKey,
331
- hasElement: !!elementRef?.current
327
+ elementRef,
328
+ focusKey
332
329
  });
333
330
  }
334
- const element = elementRef?.current;
335
- if (element) {
336
- element.focus?.();
337
- const scrollRef = focusLayersRef.current?.at(-1)?.scrollViewRef;
338
- const scroll = scrollRef?.current;
339
- if (scroll && element.measureLayout) {
331
+ element.requestTVFocus?.();
332
+ element.focus?.();
333
+ const scroll = props?.scrollViewRef?.current;
334
+ if (Platform.OS === 'web') {
335
+ if (element && scroll) {
336
+ const elementBounds = element.getBoundingClientRect();
337
+ const scrollBounds = scroll.getBoundingClientRect();
338
+ if (elementBounds.top < scrollBounds.top + SCROLL_OFFSET) {
339
+ scroll.scrollTop += elementBounds.top - scrollBounds.top - SCROLL_OFFSET;
340
+ } else if (elementBounds.bottom > scrollBounds.bottom) {
341
+ scroll.scrollTop += elementBounds.bottom - scrollBounds.bottom + SCROLL_OFFSET;
342
+ }
343
+ }
344
+ } else {
345
+ const node = findNodeHandle(element);
346
+ if (scroll && node) {
340
347
  const scrollHandle = typeof scroll.getNativeScrollRef === 'function' ? findNodeHandle(scroll.getNativeScrollRef()) : findNodeHandle(scroll);
341
348
  if (scrollHandle) {
342
- element.measureLayout(scrollHandle, (x, y) => {
343
- scroll.scrollTo?.({
344
- y,
345
- animated: true
346
- });
347
- }, err => {
348
- if (DEBUG_FOCUS) {
349
+ UIManager.measureLayout(node, scrollHandle, err => {
350
+ if (DEBUG_FOCUS === 'verbose') {
349
351
  prettyLog({
350
- error: 'Measurement error for scrollview',
352
+ action: 'focusOn',
353
+ error: 'Measurement error',
351
354
  err
352
355
  });
353
356
  }
357
+ }, (x, y, width, height) => {
358
+ const viewportHeight = Dimensions.get('window').height;
359
+ const currentOffsetY = scroll?.scrollProperties?.offset || 0;
360
+ const top = y;
361
+ const bottom = y + height;
362
+ const viewTop = currentOffsetY;
363
+ const viewBottom = currentOffsetY + viewportHeight;
364
+ if (top - SCROLL_OFFSET < viewTop) {
365
+ scroll.scrollTo?.({
366
+ y: Math.max(top - SCROLL_OFFSET, 0),
367
+ animated: false
368
+ });
369
+ } else if (bottom > viewBottom) {
370
+ const target = bottom - viewportHeight + SCROLL_OFFSET;
371
+ scroll.scrollTo?.({
372
+ y: target,
373
+ animated: false
374
+ });
375
+ }
354
376
  });
355
377
  }
356
378
  }
@@ -456,57 +478,38 @@ export function FocusContextProvider(props) {
456
478
  const moveFocusDown = () => {
457
479
  moveFocus('down');
458
480
  };
459
- const pressFocusedElement = focusKey => {
481
+ const focusedElementAction = (focusKey, action) => {
460
482
  if (!focusKey) {
461
483
  focusKey = focusedKeyRef.current;
462
484
  }
463
485
  const focusMap = focusLayersRef.current.at(-1);
464
- const canPress = Keyboard.isVisible() || !focusMap?.refs?.[focusKey]?.onPress;
486
+ const shouldNotPress = Keyboard.isVisible() || !focusMap?.refs?.[focusKey]?.[action];
465
487
  if (DEBUG_FOCUS) {
466
488
  prettyLog({
467
- action: 'pressFocusedElement',
489
+ action: 'focusedElementAction',
490
+ kind: action,
468
491
  focusKey,
469
- canPress,
492
+ shouldNotPress,
470
493
  keyboardVisible: Keyboard.isVisible(),
471
- onPress: focusMap?.refs?.[focusKey]?.onPress
494
+ [action]: focusMap?.refs?.[focusKey]?.[action]
472
495
  });
473
496
  }
474
- if (canPress) {
497
+ if (shouldNotPress) {
475
498
  return false;
476
499
  }
477
- return focusMap.refs[focusKey].onPress();
500
+ return focusMap.refs[focusKey][action]();
478
501
  };
479
- const longPressFocusedElement = focusKey => {
480
- if (!focusKey) {
481
- focusKey = focusedKeyRef.current;
482
- }
483
- const focusMap = focusLayersRef.current.at(-1);
484
- const canPress = Keyboard.isVisible() || !focusMap?.refs?.[focusKey]?.onLongPress;
485
- if (DEBUG_FOCUS) {
486
- prettyLog({
487
- action: 'longPressFocusedElement',
488
- focusKey,
489
- canPress,
490
- keyboardVisible: Keyboard.isVisible(),
491
- onLongPress: focusMap?.refs?.[focusKey]?.onLongPress
492
- });
493
- }
494
- if (canPress) {
495
- return false;
496
- }
497
- return focusMap.refs[focusKey].onLongPress();
498
- };
499
- const focusPress = (elementRef, focusKey) => {
502
+ const focusAction = (elementRef, focusKey, action) => {
500
503
  return () => {
501
504
  focusOn(elementRef, focusKey);
502
- pressFocusedElement(focusKey);
505
+ focusedElementAction(focusKey, action);
503
506
  };
504
507
  };
508
+ const focusPress = (elementRef, focusKey) => {
509
+ return focusAction(elementRef, focusKey, 'onPress');
510
+ };
505
511
  const focusLongPress = (elementRef, focusKey) => {
506
- return () => {
507
- focusOn(elementRef, focusKey);
508
- longPressFocusedElement(focusKey);
509
- };
512
+ return focusAction(elementRef, focusKey, 'onLongPress');
510
513
  };
511
514
  if (Platform.isTV) {
512
515
  const remoteHandler = remoteEvent => {
@@ -529,14 +532,6 @@ export function FocusContextProvider(props) {
529
532
  });
530
533
  }
531
534
  switch (kind) {
532
- case 'select':
533
- pressFocusedElement();
534
- break;
535
- case 'longselect':
536
- if (action === 1) {
537
- longPressFocusedElement();
538
- }
539
- break;
540
535
  case 'up':
541
536
  moveFocusUp();
542
537
  break;
@@ -559,13 +554,6 @@ export function FocusContextProvider(props) {
559
554
  React.useEffect(() => {
560
555
  const focusKeyboardHandler = event => {
561
556
  switch (event.key) {
562
- case 'Enter':
563
- if (event.code === 'NumpadEnter') {
564
- longPressFocusedElement();
565
- } else {
566
- pressFocusedElement();
567
- }
568
- break;
569
557
  case 'ArrowUp':
570
558
  moveFocusUp();
571
559
  break;
@@ -638,7 +626,6 @@ export function FocusContextProvider(props) {
638
626
  clearFocusLayers,
639
627
  readFocusProps,
640
628
  setRemoteCallbacks,
641
- setScrollViewRef,
642
629
  focusLongPress,
643
630
  focusOn,
644
631
  focusPress
@@ -1 +1 @@
1
- {"version":3,"names":["React","_","Platform","useTVEventHandler","Keyboard","SnowSafeArea","jsx","_jsx","FocusContext","createContext","useFocusContext","value","useContext","Error","getCircularReplacer","seen","WeakSet","key","indexOf","has","add","prettyLog","payload","OS","console","log","JSON","stringify","emptyLayers","layerName","refs","directions","FocusContextProvider","props","focusedKey","setFocusedKey","useState","focusedKeyRef","useRef","focusLayers","setFocusLayers","focusLayersRef","remoteCallbacks","setRemoteCallbacks","remoteCallbacksRef","currentLayer","setCurrentLayer","DEBUG_FOCUS","useEffect","current","topLayer","at","action","shouldFocus","hasOwnProperty","focusStartKey","focusStartElementRef","prev","result","hasFocusedStart","focusOn","isFocused","elementFocusKey","isFocusedLayer","pushFocusLayer","layerIsUncloned","push","isUncloned","popFocusLayer","pop","useFocusLayer","name","useLayoutEffect","useFocusWiring","elementProps","addFocusMap","elementRef","focusStart","focusKey","focusDown","focusUp","focusRight","focusLeft","clearFocusLayers","setScrollViewRef","scrollViewRef","focusLayer","length","element","onPress","onLongPress","focus","merge","hasElement","scrollRef","scroll","measureLayout","scrollHandle","getNativeScrollRef","findNodeHandle","x","y","scrollTo","animated","err","error","moveFocus","direction","isVisible","sourceKey","destinationKey","request","normalDestination","isGridCell","split","replace","target","moveFocusRight","moveFocusLeft","moveFocusUp","moveFocusDown","pressFocusedElement","focusMap","canPress","keyboardVisible","longPressFocusedElement","focusPress","focusLongPress","isTV","remoteHandler","remoteEvent","callbacks","kind","eventType","eventKeyAction","callback","Object","entries","focusKeyboardHandler","event","code","window","addEventListener","removeEventListener","readFocusProps","focusProps","tvRemoteProps","focusable","hasTVPreferredFocus","focusContext","Provider","style","flex","children"],"sourceRoot":"../../../src","sources":["context/snow-focus-context.js"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","_","Platform","useTVEventHandler","Keyboard","findNodeHandle","UIManager","Dimensions","SnowSafeArea","jsx","_jsx","FocusContext","createContext","useFocusContext","value","useContext","Error","getCircularReplacer","seen","WeakSet","key","indexOf","has","add","prettyLog","payload","OS","console","log","JSON","stringify","emptyLayers","layerName","refs","directions","FocusContextProvider","props","focusedKey","setFocusedKey","useState","focusedKeyRef","useRef","focusLayers","setFocusLayers","focusLayersRef","remoteCallbacks","setRemoteCallbacks","remoteCallbacksRef","currentLayer","setCurrentLayer","DEBUG_FOCUS","SCROLL_OFFSET","focusVerticalOffset","focusVersionOffset","useEffect","current","topLayer","at","action","shouldFocus","hasOwnProperty","focusStartKey","focusStartElementRef","prev","result","hasFocusedStart","focusOn","isFocused","elementFocusKey","isFocusedLayer","pushFocusLayer","layerIsUncloned","push","isUncloned","popFocusLayer","pop","useFocusLayer","name","useLayoutEffect","useFocusWiring","elementProps","addFocusMap","elementRef","focusStart","focusKey","focusDown","focusUp","focusRight","focusLeft","clearFocusLayers","element","onPress","onLongPress","focus","focusLayer","length","merge","requestTVFocus","scroll","scrollViewRef","elementBounds","getBoundingClientRect","scrollBounds","top","scrollTop","bottom","node","scrollHandle","getNativeScrollRef","measureLayout","err","error","x","y","width","height","viewportHeight","get","currentOffsetY","scrollProperties","offset","viewTop","viewBottom","scrollTo","Math","max","animated","target","moveFocus","direction","isVisible","sourceKey","destinationKey","request","normalDestination","isGridCell","split","replace","moveFocusRight","moveFocusLeft","moveFocusUp","moveFocusDown","focusedElementAction","focusMap","shouldNotPress","kind","keyboardVisible","focusAction","focusPress","focusLongPress","isTV","remoteHandler","remoteEvent","callbacks","eventType","eventKeyAction","callback","Object","entries","focusKeyboardHandler","event","window","addEventListener","removeEventListener","readFocusProps","focusProps","tvRemoteProps","focusable","hasTVPreferredFocus","focusContext","Provider","style","flex","children"],"sourceRoot":"../../../src","sources":["context/snow-focus-context.js"],"mappings":"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","ignoreList":[]}
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
 
3
+ import React from 'react';
3
4
  import { View, ScrollView, Platform, Dimensions } from 'react-native';
4
5
  import { StyleContextProvider, useStyleContext } from "./context/snow-style-context.js";
5
6
  import { FocusContextProvider } from "./context/snow-focus-context.js";
@@ -8,6 +9,7 @@ export function SnowApp(props) {
8
9
  const {
9
10
  SnowStyle
10
11
  } = useStyleContext(props);
12
+ const scrollViewRef = React.useRef(null);
11
13
  let rootInnerStyle = [];
12
14
  if (Platform.OS === 'web') {
13
15
  rootInnerStyle.push({
@@ -16,6 +18,7 @@ export function SnowApp(props) {
16
18
  });
17
19
  }
18
20
  return /*#__PURE__*/_jsx(ScrollView, {
21
+ ref: scrollViewRef,
19
22
  style: {
20
23
  flex: 1,
21
24
  backgroundColor: 'black'
@@ -25,6 +28,7 @@ export function SnowApp(props) {
25
28
  snowStyle: props.snowStyle,
26
29
  snowConfig: props.snowConfig,
27
30
  children: /*#__PURE__*/_jsx(FocusContextProvider, {
31
+ scrollViewRef: scrollViewRef,
28
32
  DEBUG_FOCUS: props.DEBUG_FOCUS,
29
33
  children: /*#__PURE__*/_jsx(View, {
30
34
  style: {
@@ -1 +1 @@
1
- {"version":3,"names":["View","ScrollView","Platform","Dimensions","StyleContextProvider","useStyleContext","FocusContextProvider","jsx","_jsx","SnowApp","props","SnowStyle","rootInnerStyle","OS","push","height","get","backgroundColor","style","flex","contentContainerStyle","children","snowStyle","snowConfig","DEBUG_FOCUS","marginBottom"],"sourceRoot":"../../src","sources":["snow-app.js"],"mappings":";;AAAA,SAASA,IAAI,EAAEC,UAAU,EAAEC,QAAQ,EAAEC,UAAU,QAAQ,cAAc;AACrE,SAASC,oBAAoB,EAAEC,eAAe,QAAQ,iCAA8B;AACpF,SAASC,oBAAoB,QAAQ,iCAA8B;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAEnE,OAAO,SAASC,OAAOA,CAACC,KAAK,EAAE;EAC3B,MAAM;IAAEC;EAAU,CAAC,GAAGN,eAAe,CAACK,KAAK,CAAC;EAC5C,IAAIE,cAAc,GAAG,EAAE;EACvB,IAAIV,QAAQ,CAACW,EAAE,KAAK,KAAK,EAAE;IACvBD,cAAc,CAACE,IAAI,CAAC;MAChBC,MAAM,EAAEZ,UAAU,CAACa,GAAG,CAAC,QAAQ,CAAC,CAACD,MAAM;MACvCE,eAAe,EAAE;IACrB,CAAC,CAAC;EACN;EACA,oBACIT,IAAA,CAACP,UAAU;IAACiB,KAAK,EAAE;MAAEC,IAAI,EAAE,CAAC;MAAEF,eAAe,EAAE;IAAQ,CAAE;IAACG,qBAAqB,EAAER,cAAe;IAAAS,QAAA,eAC5Fb,IAAA,CAACJ,oBAAoB;MAACkB,SAAS,EAAEZ,KAAK,CAACY,SAAU;MAACC,UAAU,EAAEb,KAAK,CAACa,UAAW;MAAAF,QAAA,eAC3Eb,IAAA,CAACF,oBAAoB;QAACkB,WAAW,EAAEd,KAAK,CAACc,WAAY;QAAAH,QAAA,eACjDb,IAAA,CAACR,IAAI;UAACkB,KAAK,EAAE;YAAEC,IAAI,EAAE,CAAC;YAAEM,YAAY,EAAE;UAAG,CAAE;UAAAJ,QAAA,EACtCX,KAAK,CAACW;QAAQ,CACb;MAAC,CACW;IAAC,CACL;EAAC,CACf,CAAC;AAErB;AAEA,eAAeZ,OAAO","ignoreList":[]}
1
+ {"version":3,"names":["React","View","ScrollView","Platform","Dimensions","StyleContextProvider","useStyleContext","FocusContextProvider","jsx","_jsx","SnowApp","props","SnowStyle","scrollViewRef","useRef","rootInnerStyle","OS","push","height","get","backgroundColor","ref","style","flex","contentContainerStyle","children","snowStyle","snowConfig","DEBUG_FOCUS","marginBottom"],"sourceRoot":"../../src","sources":["snow-app.js"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,IAAI,EAAEC,UAAU,EAAEC,QAAQ,EAAEC,UAAU,QAAQ,cAAc;AACrE,SAASC,oBAAoB,EAAEC,eAAe,QAAQ,iCAA8B;AACpF,SAASC,oBAAoB,QAAQ,iCAA8B;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAEnE,OAAO,SAASC,OAAOA,CAACC,KAAK,EAAE;EAC3B,MAAM;IAAEC;EAAU,CAAC,GAAGN,eAAe,CAACK,KAAK,CAAC;EAC5C,MAAME,aAAa,GAAGb,KAAK,CAACc,MAAM,CAAC,IAAI,CAAC;EACxC,IAAIC,cAAc,GAAG,EAAE;EACvB,IAAIZ,QAAQ,CAACa,EAAE,KAAK,KAAK,EAAE;IACvBD,cAAc,CAACE,IAAI,CAAC;MAChBC,MAAM,EAAEd,UAAU,CAACe,GAAG,CAAC,QAAQ,CAAC,CAACD,MAAM;MACvCE,eAAe,EAAE;IACrB,CAAC,CAAC;EACN;EACA,oBACIX,IAAA,CAACP,UAAU;IAACmB,GAAG,EAAER,aAAc;IAACS,KAAK,EAAE;MAAEC,IAAI,EAAE,CAAC;MAAEH,eAAe,EAAE;IAAQ,CAAE;IAACI,qBAAqB,EAAET,cAAe;IAAAU,QAAA,eAChHhB,IAAA,CAACJ,oBAAoB;MAACqB,SAAS,EAAEf,KAAK,CAACe,SAAU;MAACC,UAAU,EAAEhB,KAAK,CAACgB,UAAW;MAAAF,QAAA,eAC3EhB,IAAA,CAACF,oBAAoB;QAACM,aAAa,EAAEA,aAAc;QAACe,WAAW,EAAEjB,KAAK,CAACiB,WAAY;QAAAH,QAAA,eAC/EhB,IAAA,CAACR,IAAI;UAACqB,KAAK,EAAE;YAAEC,IAAI,EAAE,CAAC;YAAEM,YAAY,EAAE;UAAG,CAAE;UAAAJ,QAAA,EACtCd,KAAK,CAACc;QAAQ,CACb;MAAC,CACW;IAAC,CACL;EAAC,CACf,CAAC;AAErB;AAEA,eAAef,OAAO","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "expo-snowui",
3
- "version": "1.2.23",
3
+ "version": "1.3.1",
4
4
  "description": "GUI components and contexts shared by the snowsuite apps",
5
5
  "main": "./lib/module/index.js",
6
6
  "types": "./lib/typescript/src/index.d.ts",
@@ -1,6 +1,13 @@
1
1
  import React from 'react';
2
2
  import _ from 'lodash'
3
- import { Platform, useTVEventHandler, Keyboard } from 'react-native'
3
+ import {
4
+ Platform,
5
+ useTVEventHandler,
6
+ Keyboard,
7
+ findNodeHandle,
8
+ UIManager,
9
+ Dimensions
10
+ } from 'react-native'
4
11
  import { SnowSafeArea } from '../component/snow-safe-area'
5
12
 
6
13
  /*
@@ -95,6 +102,10 @@ export function FocusContextProvider(props) {
95
102
  const remoteCallbacksRef = React.useRef({});
96
103
  const [currentLayer, setCurrentLayer] = React.useState('app')
97
104
  let DEBUG_FOCUS = props.DEBUG_FOCUS
105
+ let SCROLL_OFFSET = 200
106
+ if (props.focusVerticalOffset) {
107
+ SCROLL_OFFSET = props.focusVersionOffset
108
+ }
98
109
 
99
110
  React.useEffect(() => {
100
111
  focusedKeyRef.current = focusedKey
@@ -213,17 +224,6 @@ export function FocusContextProvider(props) {
213
224
  setCurrentLayer('app')
214
225
  }
215
226
 
216
- // This only sets the scroll view for the current map
217
- const setScrollViewRef = (scrollViewRef) => {
218
- setFocusLayers((prev) => {
219
- let result = [...prev]
220
- let focusLayer = result[result.length - 1]
221
- focusLayer.scrollViewRef = scrollViewRef
222
- result[result.length - 1] = focusLayer
223
- return result
224
- })
225
- }
226
-
227
227
  const addFocusMap = (elementRef, elementProps) => {
228
228
  const focusKey = elementProps.focusKey
229
229
  const refs = {
@@ -297,31 +297,64 @@ export function FocusContextProvider(props) {
297
297
  }
298
298
 
299
299
  const focusOn = (elementRef, focusKey) => {
300
- if (DEBUG_FOCUS) {
301
- prettyLog({ action: 'focusOn', focusKey, hasElement: !!elementRef?.current });
300
+ const element = elementRef?.current;
301
+ if (!element) {
302
+ return
303
+ }
304
+ if (DEBUG_FOCUS === 'verbose') {
305
+ prettyLog({ action: 'focusOn', elementRef, focusKey });
302
306
  }
303
307
 
304
- const element = elementRef?.current;
305
- if (element) {
306
- element.focus?.()
307
- const scrollRef = focusLayersRef.current?.at(-1)?.scrollViewRef
308
- const scroll = scrollRef?.current
308
+ element.requestTVFocus?.();
309
+ element.focus?.();
310
+
311
+ const scroll = props?.scrollViewRef?.current;
312
+
313
+ if (Platform.OS === 'web') {
314
+ if (element && scroll) {
315
+ const elementBounds = element.getBoundingClientRect();
316
+ const scrollBounds = scroll.getBoundingClientRect();
317
+
318
+ if (elementBounds.top < scrollBounds.top + SCROLL_OFFSET) {
319
+ scroll.scrollTop += elementBounds.top - scrollBounds.top - SCROLL_OFFSET;
320
+ } else if (elementBounds.bottom > scrollBounds.bottom) {
321
+ scroll.scrollTop += elementBounds.bottom - scrollBounds.bottom + SCROLL_OFFSET;
322
+ }
323
+ }
324
+ } else {
325
+ const node = findNodeHandle(element);
309
326
 
310
- if (scroll && element.measureLayout) {
327
+ if (scroll && node) {
311
328
  const scrollHandle =
312
329
  typeof scroll.getNativeScrollRef === 'function'
313
330
  ? findNodeHandle(scroll.getNativeScrollRef())
314
331
  : findNodeHandle(scroll);
315
332
 
316
333
  if (scrollHandle) {
317
- element.measureLayout(
334
+ UIManager.measureLayout(
335
+ node,
318
336
  scrollHandle,
319
- (x, y) => {
320
- scroll.scrollTo?.({ y, animated: true });
321
- },
322
337
  (err) => {
323
- if (DEBUG_FOCUS) {
324
- prettyLog({ error: 'Measurement error for scrollview', err });
338
+ if (DEBUG_FOCUS === 'verbose') {
339
+ prettyLog({ action: 'focusOn', error: 'Measurement error', err });
340
+ }
341
+ },
342
+ (x, y, width, height) => {
343
+ const viewportHeight = Dimensions.get('window').height;
344
+
345
+ const currentOffsetY = scroll?.scrollProperties?.offset || 0;
346
+
347
+ const top = y;
348
+ const bottom = y + height;
349
+
350
+ const viewTop = currentOffsetY;
351
+ const viewBottom = currentOffsetY + viewportHeight;
352
+
353
+ if (top - SCROLL_OFFSET < viewTop) {
354
+ scroll.scrollTo?.({ y: Math.max(top - SCROLL_OFFSET, 0), animated: false });
355
+ } else if (bottom > viewBottom) {
356
+ const target = bottom - viewportHeight + SCROLL_OFFSET;
357
+ scroll.scrollTo?.({ y: target, animated: false });
325
358
  }
326
359
  }
327
360
  );
@@ -414,48 +447,34 @@ export function FocusContextProvider(props) {
414
447
  moveFocus('down')
415
448
  }
416
449
 
417
- const pressFocusedElement = (focusKey) => {
450
+ const focusedElementAction = (focusKey, action) => {
418
451
  if (!focusKey) {
419
452
  focusKey = focusedKeyRef.current
420
453
  }
421
454
  const focusMap = focusLayersRef.current.at(-1)
422
- const canPress = Keyboard.isVisible() || !(focusMap?.refs?.[focusKey]?.onPress)
455
+ const shouldNotPress = Keyboard.isVisible() || !(focusMap?.refs?.[focusKey]?.[action])
423
456
  if (DEBUG_FOCUS) {
424
- prettyLog({ action: 'pressFocusedElement', focusKey, canPress, keyboardVisible: Keyboard.isVisible(), onPress: focusMap?.refs?.[focusKey]?.onPress })
457
+ prettyLog({ action: 'focusedElementAction', kind: action, focusKey, shouldNotPress, keyboardVisible: Keyboard.isVisible(), [action]: focusMap?.refs?.[focusKey]?.[action] })
425
458
  }
426
- if (canPress) {
459
+ if (shouldNotPress) {
427
460
  return false
428
461
  }
429
- return focusMap.refs[focusKey].onPress()
462
+ return focusMap.refs[focusKey][action]()
430
463
  }
431
464
 
432
- const longPressFocusedElement = (focusKey) => {
433
- if (!focusKey) {
434
- focusKey = focusedKeyRef.current
435
- }
436
- const focusMap = focusLayersRef.current.at(-1)
437
- const canPress = Keyboard.isVisible() || !(focusMap?.refs?.[focusKey]?.onLongPress)
438
- if (DEBUG_FOCUS) {
439
- prettyLog({ action: 'longPressFocusedElement', focusKey, canPress, keyboardVisible: Keyboard.isVisible(), onLongPress: focusMap?.refs?.[focusKey]?.onLongPress })
440
- }
441
- if (canPress) {
442
- return false
465
+ const focusAction = (elementRef, focusKey, action) => {
466
+ return () => {
467
+ focusOn(elementRef, focusKey)
468
+ focusedElementAction(focusKey, action)
443
469
  }
444
- return focusMap.refs[focusKey].onLongPress()
445
470
  }
446
471
 
447
472
  const focusPress = (elementRef, focusKey) => {
448
- return () => {
449
- focusOn(elementRef, focusKey)
450
- pressFocusedElement(focusKey)
451
- }
473
+ return focusAction(elementRef, focusKey, 'onPress')
452
474
  }
453
475
 
454
476
  const focusLongPress = (elementRef, focusKey) => {
455
- return () => {
456
- focusOn(elementRef, focusKey)
457
- longPressFocusedElement(focusKey)
458
- }
477
+ return focusAction(elementRef, focusKey, 'onLongPress')
459
478
  }
460
479
 
461
480
  if (Platform.isTV) {
@@ -474,14 +493,6 @@ export function FocusContextProvider(props) {
474
493
  prettyLog({ action: 'remoteHandler', kind, action, focusedKey: focusedKeyRef.current })
475
494
  }
476
495
  switch (kind) {
477
- case 'select':
478
- pressFocusedElement()
479
- break
480
- case 'longselect':
481
- if (action === 1) {
482
- longPressFocusedElement()
483
- }
484
- break
485
496
  case 'up':
486
497
  moveFocusUp()
487
498
  break
@@ -507,14 +518,6 @@ export function FocusContextProvider(props) {
507
518
  React.useEffect(() => {
508
519
  const focusKeyboardHandler = (event) => {
509
520
  switch (event.key) {
510
- case 'Enter':
511
- if (event.code === 'NumpadEnter') {
512
- longPressFocusedElement()
513
- }
514
- else {
515
- pressFocusedElement()
516
- }
517
- break
518
521
  case 'ArrowUp':
519
522
  moveFocusUp()
520
523
  break
@@ -589,7 +592,6 @@ export function FocusContextProvider(props) {
589
592
  clearFocusLayers,
590
593
  readFocusProps,
591
594
  setRemoteCallbacks,
592
- setScrollViewRef,
593
595
  focusLongPress,
594
596
  focusOn,
595
597
  focusPress
package/src/snow-app.js CHANGED
@@ -1,9 +1,11 @@
1
+ import React from 'react'
1
2
  import { View, ScrollView, Platform, Dimensions } from 'react-native'
2
3
  import { StyleContextProvider, useStyleContext } from './context/snow-style-context'
3
4
  import { FocusContextProvider } from './context/snow-focus-context'
4
5
 
5
6
  export function SnowApp(props) {
6
7
  const { SnowStyle } = useStyleContext(props)
8
+ const scrollViewRef = React.useRef(null)
7
9
  let rootInnerStyle = []
8
10
  if (Platform.OS === 'web') {
9
11
  rootInnerStyle.push({
@@ -12,9 +14,9 @@ export function SnowApp(props) {
12
14
  })
13
15
  }
14
16
  return (
15
- <ScrollView style={{ flex: 1, backgroundColor: 'black' }} contentContainerStyle={rootInnerStyle}>
17
+ <ScrollView ref={scrollViewRef} style={{ flex: 1, backgroundColor: 'black' }} contentContainerStyle={rootInnerStyle}>
16
18
  <StyleContextProvider snowStyle={props.snowStyle} snowConfig={props.snowConfig}>
17
- <FocusContextProvider DEBUG_FOCUS={props.DEBUG_FOCUS}>
19
+ <FocusContextProvider scrollViewRef={scrollViewRef} DEBUG_FOCUS={props.DEBUG_FOCUS}>
18
20
  <View style={{ flex: 1, marginBottom: 50 }}>
19
21
  {props.children}
20
22
  </View>