react-native-tab-view 5.0.0-alpha.15 → 5.0.0-alpha.17

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.
@@ -43,10 +43,23 @@ export function TabView({
43
43
  onIndexChange(index);
44
44
  }
45
45
  };
46
- const options = Object.fromEntries(navigationState.routes.map(route => [route.key, {
47
- ...commonOptions,
48
- ...sceneOptions?.[route.key]
49
- }]));
46
+ const optionsCache = React.useRef(undefined);
47
+ const options = React.useMemo(() => Object.fromEntries(navigationState.routes.map(route => {
48
+ const previous = optionsCache.current;
49
+ const routeOptions = sceneOptions?.[route.key];
50
+ const cachedOptions = previous?.options[route.key];
51
+ return [route.key, previous && cachedOptions && Object.hasOwn(previous.options, route.key) && previous.commonOptions === commonOptions && previous.sceneOptions?.[route.key] === routeOptions ? cachedOptions : {
52
+ ...commonOptions,
53
+ ...routeOptions
54
+ }];
55
+ })), [navigationState.routes, commonOptions, sceneOptions, optionsCache]);
56
+ React.useInsertionEffect(() => {
57
+ optionsCache.current = {
58
+ commonOptions,
59
+ sceneOptions,
60
+ options
61
+ };
62
+ });
50
63
  const element = renderAdapter({
51
64
  navigationState,
52
65
  keyboardDismissMode,
@@ -1 +1 @@
1
- {"version":3,"names":["React","I18nManager","Platform","StyleSheet","View","DefaultAdapter","SceneView","TabBar","jsx","_jsx","jsxs","_jsxs","renderLazyPlaceholderDefault","TabView","onIndexChange","onTabSelect","navigationState","renderScene","keyboardDismissMode","lazy","lazyPreloadDistance","onSwipeStart","onSwipeEnd","renderLazyPlaceholder","renderTabBar","props","renderAdapter","pagerStyle","style","direction","getConstants","isRTL","swipeEnabled","tabBarPosition","animationEnabled","options","sceneOptions","commonOptions","OS","console","warn","jumpToIndex","index","Object","fromEntries","routes","map","route","key","element","layoutDirection","children","position","render","subscribe","jumpTo","sceneRendererProps","Fragment","i","sceneStyle","loading","styles","container","create","flex","overflow"],"sourceRoot":"../../src","sources":["TabView.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","I18nManager","Platform","StyleSheet","View","DefaultAdapter","SceneView","TabBar","jsx","_jsx","jsxs","_jsxs","renderLazyPlaceholderDefault","TabView","onIndexChange","onTabSelect","navigationState","renderScene","keyboardDismissMode","lazy","lazyPreloadDistance","onSwipeStart","onSwipeEnd","renderLazyPlaceholder","renderTabBar","props","renderAdapter","pagerStyle","style","direction","getConstants","isRTL","swipeEnabled","tabBarPosition","animationEnabled","options","sceneOptions","commonOptions","OS","console","warn","jumpToIndex","index","optionsCache","useRef","undefined","useMemo","Object","fromEntries","routes","map","route","previous","current","routeOptions","key","cachedOptions","hasOwn","useInsertionEffect","element","layoutDirection","children","position","render","subscribe","jumpTo","sceneRendererProps","Fragment","i","sceneStyle","loading","styles","container","create","flex","overflow"],"sourceRoot":"../../src","sources":["TabView.tsx"],"mappings":"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","ignoreList":[]}
@@ -24,15 +24,16 @@ export function useLayoutWidths(priorityKeys) {
24
24
  if (priorityKeysRef.current.includes(key) && !hasFinishedLayoutRef.current) {
25
25
  // Synchronously set widths during the initial layout phase
26
26
  // So we don't have to wait for the next frame to render the indicator
27
- setWidths(prev => ({
27
+ setWidths(prev => prev[key] === width ? prev : {
28
28
  ...prev,
29
29
  [key]: width
30
- }));
30
+ });
31
31
  } else if (hasFinishedLayoutRef.current) {
32
32
  handle.current = requestAnimationFrame(() => {
33
- setWidths({
33
+ const next = {
34
34
  ...measured.current
35
- });
35
+ };
36
+ setWidths(prev => Object.keys(prev).length === Object.keys(next).length && Object.keys(next).every(key => prev[key] === next[key]) ? prev : next);
36
37
  });
37
38
  }
38
39
  return () => {
@@ -1 +1 @@
1
- {"version":3,"names":["React","useLayoutWidths","priorityKeys","widths","setWidths","useState","measured","useRef","handle","priorityKeysRef","useEffect","current","hasFinishedLayoutRef","useLayoutEffect","onMeasureWidth","useCallback","key","width","cancelAnimationFrame","includes","prev","requestAnimationFrame"],"sourceRoot":"../../src","sources":["useLayoutWidths.tsx"],"mappings":";;AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;;AAE9B;AACA;AACA,OAAO,SAASC,eAAeA,CAACC,YAAsB,EAAE;EACtD,MAAM,CAACC,MAAM,EAAEC,SAAS,CAAC,GAAGJ,KAAK,CAACK,QAAQ,CAAyB,CAAC,CAAC,CAAC;EAEtE,MAAMC,QAAQ,GAAGN,KAAK,CAACO,MAAM,CAAyB,CAAC,CAAC,CAAC;EACzD,MAAMC,MAAM,GAAGR,KAAK,CAACO,MAAM,CAA2C,IAAI,CAAC;EAE3E,MAAME,eAAe,GAAGT,KAAK,CAACO,MAAM,CAACL,YAAY,CAAC;EAElDF,KAAK,CAACU,SAAS,CAAC,MAAM;IACpBD,eAAe,CAACE,OAAO,GAAGT,YAAY;EACxC,CAAC,CAAC;EAEF,MAAMU,oBAAoB,GAAGZ,KAAK,CAACO,MAAM,CAAC,KAAK,CAAC;EAEhDP,KAAK,CAACa,eAAe,CAAC,MAAM;IAC1BD,oBAAoB,CAACD,OAAO,GAAG,IAAI;EACrC,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMG,cAAc,GAAGd,KAAK,CAACe,WAAW,CAAC,CAACC,GAAW,EAAEC,KAAa,KAAK;IACvEX,QAAQ,CAACK,OAAO,CAACK,GAAG,CAAC,GAAGC,KAAK;IAE7B,IAAIT,MAAM,CAACG,OAAO,IAAI,IAAI,EAAE;MAC1BO,oBAAoB,CAACV,MAAM,CAACG,OAAO,CAAC;IACtC;IAEA,IACEF,eAAe,CAACE,OAAO,CAACQ,QAAQ,CAACH,GAAG,CAAC,IACrC,CAACJ,oBAAoB,CAACD,OAAO,EAC7B;MACA;MACA;MACAP,SAAS,CAAEgB,IAAI,KAAM;QAAE,GAAGA,IAAI;QAAE,CAACJ,GAAG,GAAGC;MAAM,CAAC,CAAC,CAAC;IAClD,CAAC,MAAM,IAAIL,oBAAoB,CAACD,OAAO,EAAE;MACvCH,MAAM,CAACG,OAAO,GAAGU,qBAAqB,CAAC,MAAM;QAC3CjB,SAAS,CAAC;UAAE,GAAGE,QAAQ,CAACK;QAAQ,CAAC,CAAC;MACpC,CAAC,CAAC;IACJ;IAEA,OAAO,MAAM;MACX,IAAIH,MAAM,CAACG,OAAO,IAAI,IAAI,EAAE;QAC1BO,oBAAoB,CAACV,MAAM,CAACG,OAAO,CAAC;MACtC;IACF,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,OAAO,CAACR,MAAM,EAAEW,cAAc,CAAC;AACjC","ignoreList":[]}
1
+ {"version":3,"names":["React","useLayoutWidths","priorityKeys","widths","setWidths","useState","measured","useRef","handle","priorityKeysRef","useEffect","current","hasFinishedLayoutRef","useLayoutEffect","onMeasureWidth","useCallback","key","width","cancelAnimationFrame","includes","prev","requestAnimationFrame","next","Object","keys","length","every"],"sourceRoot":"../../src","sources":["useLayoutWidths.tsx"],"mappings":";;AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;;AAE9B;AACA;AACA,OAAO,SAASC,eAAeA,CAACC,YAAsB,EAAE;EACtD,MAAM,CAACC,MAAM,EAAEC,SAAS,CAAC,GAAGJ,KAAK,CAACK,QAAQ,CAAyB,CAAC,CAAC,CAAC;EAEtE,MAAMC,QAAQ,GAAGN,KAAK,CAACO,MAAM,CAAyB,CAAC,CAAC,CAAC;EACzD,MAAMC,MAAM,GAAGR,KAAK,CAACO,MAAM,CAA2C,IAAI,CAAC;EAE3E,MAAME,eAAe,GAAGT,KAAK,CAACO,MAAM,CAACL,YAAY,CAAC;EAElDF,KAAK,CAACU,SAAS,CAAC,MAAM;IACpBD,eAAe,CAACE,OAAO,GAAGT,YAAY;EACxC,CAAC,CAAC;EAEF,MAAMU,oBAAoB,GAAGZ,KAAK,CAACO,MAAM,CAAC,KAAK,CAAC;EAEhDP,KAAK,CAACa,eAAe,CAAC,MAAM;IAC1BD,oBAAoB,CAACD,OAAO,GAAG,IAAI;EACrC,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMG,cAAc,GAAGd,KAAK,CAACe,WAAW,CAAC,CAACC,GAAW,EAAEC,KAAa,KAAK;IACvEX,QAAQ,CAACK,OAAO,CAACK,GAAG,CAAC,GAAGC,KAAK;IAE7B,IAAIT,MAAM,CAACG,OAAO,IAAI,IAAI,EAAE;MAC1BO,oBAAoB,CAACV,MAAM,CAACG,OAAO,CAAC;IACtC;IAEA,IACEF,eAAe,CAACE,OAAO,CAACQ,QAAQ,CAACH,GAAG,CAAC,IACrC,CAACJ,oBAAoB,CAACD,OAAO,EAC7B;MACA;MACA;MACAP,SAAS,CAAEgB,IAAI,IACbA,IAAI,CAACJ,GAAG,CAAC,KAAKC,KAAK,GAAGG,IAAI,GAAG;QAAE,GAAGA,IAAI;QAAE,CAACJ,GAAG,GAAGC;MAAM,CACvD,CAAC;IACH,CAAC,MAAM,IAAIL,oBAAoB,CAACD,OAAO,EAAE;MACvCH,MAAM,CAACG,OAAO,GAAGU,qBAAqB,CAAC,MAAM;QAC3C,MAAMC,IAAI,GAAG;UAAE,GAAGhB,QAAQ,CAACK;QAAQ,CAAC;QAEpCP,SAAS,CAAEgB,IAAI,IACbG,MAAM,CAACC,IAAI,CAACJ,IAAI,CAAC,CAACK,MAAM,KAAKF,MAAM,CAACC,IAAI,CAACF,IAAI,CAAC,CAACG,MAAM,IACrDF,MAAM,CAACC,IAAI,CAACF,IAAI,CAAC,CAACI,KAAK,CAAEV,GAAG,IAAKI,IAAI,CAACJ,GAAG,CAAC,KAAKM,IAAI,CAACN,GAAG,CAAC,CAAC,GACrDI,IAAI,GACJE,IACN,CAAC;MACH,CAAC,CAAC;IACJ;IAEA,OAAO,MAAM;MACX,IAAId,MAAM,CAACG,OAAO,IAAI,IAAI,EAAE;QAC1BO,oBAAoB,CAACV,MAAM,CAACG,OAAO,CAAC;MACtC;IACF,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,OAAO,CAACR,MAAM,EAAEW,cAAc,CAAC;AACjC","ignoreList":[]}
@@ -2,10 +2,10 @@ import * as React from 'react';
2
2
  import { type ViewProps } from 'react-native';
3
3
  import type { AdapterProps } from './types.js';
4
4
  export type ScrollViewAdapterProps = AdapterProps & Omit<ViewProps, 'children'> & {
5
- decelerationRate?: 'fast' | 'normal';
6
- keyboardShouldPersistTaps?: 'always' | 'never' | 'handled';
7
- bounces?: boolean;
8
- overScrollMode?: 'always' | 'never' | 'auto';
5
+ decelerationRate?: 'fast' | 'normal' | undefined;
6
+ keyboardShouldPersistTaps?: 'always' | 'never' | 'handled' | undefined;
7
+ bounces?: boolean | undefined;
8
+ overScrollMode?: 'always' | 'never' | 'auto' | undefined;
9
9
  };
10
10
  export declare function ScrollViewAdapter({ keyboardDismissMode, swipeEnabled, navigationState, onIndexChange, onTabSelect, onSwipeStart, onSwipeEnd, children, style, animationEnabled, layoutDirection, decelerationRate, bounces, overScrollMode, keyboardShouldPersistTaps, ...rest }: ScrollViewAdapterProps): React.ReactElement<unknown, string | React.JSXElementConstructor<any>>;
11
11
  //# sourceMappingURL=ScrollViewAdapter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ScrollViewAdapter.d.ts","sourceRoot":"","sources":["../../../src/ScrollViewAdapter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAOL,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAGtB,OAAO,KAAK,EAAE,YAAY,EAAY,MAAM,YAAS,CAAC;AAGtD,MAAM,MAAM,sBAAsB,GAAG,YAAY,GAC/C,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG;IAC5B,gBAAgB,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IACrC,yBAAyB,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;IAC3D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;CAC9C,CAAC;AAMJ,wBAAgB,iBAAiB,CAAC,EAChC,mBAAmB,EACnB,YAAmB,EACnB,eAAe,EACf,aAAa,EACb,WAAW,EACX,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,KAAK,EACL,gBAAuB,EACvB,eAAuB,EACvB,gBAAyB,EACzB,OAAe,EACf,cAAwB,EACxB,yBAAoC,EACpC,GAAG,IAAI,EACR,EAAE,sBAAsB,0EAqRxB"}
1
+ {"version":3,"file":"ScrollViewAdapter.d.ts","sourceRoot":"","sources":["../../../src/ScrollViewAdapter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAOL,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAGtB,OAAO,KAAK,EAAE,YAAY,EAAY,MAAM,YAAS,CAAC;AAGtD,MAAM,MAAM,sBAAsB,GAAG,YAAY,GAC/C,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG;IAC5B,gBAAgB,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;IACjD,yBAAyB,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;IACvE,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,cAAc,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;CAC1D,CAAC;AAMJ,wBAAgB,iBAAiB,CAAC,EAChC,mBAAmB,EACnB,YAAmB,EACnB,eAAe,EACf,aAAa,EACb,WAAW,EACX,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,KAAK,EACL,gBAAuB,EACvB,eAAuB,EACvB,gBAAyB,EACzB,OAAe,EACf,cAAwB,EACxB,yBAAoC,EACpC,GAAG,IAAI,EACR,EAAE,sBAAsB,0EAqRxB"}
@@ -1 +1 @@
1
- {"version":3,"file":"TabView.d.ts","sourceRoot":"","sources":["../../../src/TabView.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TabView.d.ts","sourceRoot":"","sources":["../../../src/TabView.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useLayoutWidths.d.ts","sourceRoot":"","sources":["../../../src/useLayoutWidths.tsx"],"names":[],"mappings":"AAIA,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,2CAkBL,MAAM,SAAS,MAAM,iBA4BrE"}
1
+ {"version":3,"file":"useLayoutWidths.d.ts","sourceRoot":"","sources":["../../../src/useLayoutWidths.tsx"],"names":[],"mappings":"AAIA,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,2CAkBL,MAAM,SAAS,MAAM,iBAqCrE"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "react-native-tab-view",
3
3
  "description": "Tab view component for React Native",
4
- "version": "5.0.0-alpha.15",
4
+ "version": "5.0.0-alpha.17",
5
5
  "keywords": [
6
6
  "react-native-component",
7
7
  "react-component",
@@ -85,5 +85,5 @@
85
85
  ]
86
86
  ]
87
87
  },
88
- "gitHead": "a92d33a7bff634f9a217a9b017afe4c920696b89"
88
+ "gitHead": "110f8e897f476977b7227e5f0326996106a742f0"
89
89
  }
@@ -15,10 +15,10 @@ import { useMeasureLayout } from './useMeasureLayout';
15
15
 
16
16
  export type ScrollViewAdapterProps = AdapterProps &
17
17
  Omit<ViewProps, 'children'> & {
18
- decelerationRate?: 'fast' | 'normal';
19
- keyboardShouldPersistTaps?: 'always' | 'never' | 'handled';
20
- bounces?: boolean;
21
- overScrollMode?: 'always' | 'never' | 'auto';
18
+ decelerationRate?: 'fast' | 'normal' | undefined;
19
+ keyboardShouldPersistTaps?: 'always' | 'never' | 'handled' | undefined;
20
+ bounces?: boolean | undefined;
21
+ overScrollMode?: 'always' | 'never' | 'auto' | undefined;
22
22
  };
23
23
 
24
24
  type ScrollEvent = Parameters<
package/src/TabView.tsx CHANGED
@@ -187,16 +187,42 @@ export function TabView<T extends Route>({
187
187
  }
188
188
  };
189
189
 
190
- const options = Object.fromEntries(
191
- navigationState.routes.map((route) => [
192
- route.key,
193
- {
194
- ...commonOptions,
195
- ...sceneOptions?.[route.key],
196
- },
197
- ])
190
+ const optionsCache = React.useRef<
191
+ | {
192
+ commonOptions: Props<T>['commonOptions'];
193
+ sceneOptions: Props<T>['options'];
194
+ options: Record<string, TabDescriptor<T>>;
195
+ }
196
+ | undefined
197
+ >(undefined);
198
+
199
+ const options = React.useMemo(
200
+ () =>
201
+ Object.fromEntries(
202
+ navigationState.routes.map((route) => {
203
+ const previous = optionsCache.current;
204
+ const routeOptions = sceneOptions?.[route.key];
205
+ const cachedOptions = previous?.options[route.key];
206
+
207
+ return [
208
+ route.key,
209
+ previous &&
210
+ cachedOptions &&
211
+ Object.hasOwn(previous.options, route.key) &&
212
+ previous.commonOptions === commonOptions &&
213
+ previous.sceneOptions?.[route.key] === routeOptions
214
+ ? cachedOptions
215
+ : { ...commonOptions, ...routeOptions },
216
+ ];
217
+ })
218
+ ),
219
+ [navigationState.routes, commonOptions, sceneOptions, optionsCache]
198
220
  );
199
221
 
222
+ React.useInsertionEffect(() => {
223
+ optionsCache.current = { commonOptions, sceneOptions, options };
224
+ });
225
+
200
226
  const element = renderAdapter({
201
227
  navigationState,
202
228
  keyboardDismissMode,
@@ -33,10 +33,19 @@ export function useLayoutWidths(priorityKeys: string[]) {
33
33
  ) {
34
34
  // Synchronously set widths during the initial layout phase
35
35
  // So we don't have to wait for the next frame to render the indicator
36
- setWidths((prev) => ({ ...prev, [key]: width }));
36
+ setWidths((prev) =>
37
+ prev[key] === width ? prev : { ...prev, [key]: width }
38
+ );
37
39
  } else if (hasFinishedLayoutRef.current) {
38
40
  handle.current = requestAnimationFrame(() => {
39
- setWidths({ ...measured.current });
41
+ const next = { ...measured.current };
42
+
43
+ setWidths((prev) =>
44
+ Object.keys(prev).length === Object.keys(next).length &&
45
+ Object.keys(next).every((key) => prev[key] === next[key])
46
+ ? prev
47
+ : next
48
+ );
40
49
  });
41
50
  }
42
51