From 09f4776eb36f9649f64a415ce250fb17adf92ca5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fatih=20Ta=C5=9Fdemir?= Date: Sun, 11 Apr 2021 14:16:46 +0300 Subject: [PATCH 1/3] Update package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 62aef46..0492df5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-native-steve", - "version": "0.2.0", + "version": "0.3.0", "description": "React Native horizontal scroll view component as seen on Clubhouse tags", "main": "lib/commonjs/index", "module": "lib/module/index", From c0e9b8991515194a545c0a51cd7c638a4e2414bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fatih=20Ta=C5=9Fdemir?= Date: Sun, 11 Apr 2021 14:37:58 +0300 Subject: [PATCH 2/3] Update README.md --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 7d675cc..69df772 100644 --- a/README.md +++ b/README.md @@ -120,7 +120,6 @@ export default function App() { Date: Wed, 14 Apr 2021 11:11:44 +0300 Subject: [PATCH 3/3] fix: check given data length before accessing with indexes --- src/Steve.js | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/Steve.js b/src/Steve.js index 9390709..ddbaba1 100644 --- a/src/Steve.js +++ b/src/Steve.js @@ -160,13 +160,7 @@ export const Steve = ({ data, renderItem, keyExtractor, containerStyle, isRTL, i .values(itemLayoutsCache.current) .reduce((accumulator, current, index) => { if (index === 0) { - const firstIndex = isRTL ? 1 : 0 - const secondIndex = isRTL ? 0 : 1 - const firstKey = keyExtractor(data[firstIndex], firstIndex) - const secondKey = keyExtractor(data[secondIndex], secondIndex) - const firstItem = itemLayoutsCache.current[firstKey] - const secondItem = itemLayoutsCache.current[secondKey] - spacingBetweenItems = secondItem.layout.x - firstItem.layout.width - firstItem.layout.x + spacingBetweenItems = getSpacingBetweenItems() } if (!accumulator.sumWidthOfLayer) { @@ -183,6 +177,20 @@ export const Steve = ({ data, renderItem, keyExtractor, containerStyle, isRTL, i setItemLayouts(itemLayoutsCache.current) } + const getSpacingBetweenItems = () => { + if (data.length < 2) { + return 0 + } + + const firstIndex = isRTL ? 1 : 0 + const secondIndex = isRTL ? 0 : 1 + const firstKey = keyExtractor(data[firstIndex], firstIndex) + const secondKey = keyExtractor(data[secondIndex], secondIndex) + const firstItem = itemLayoutsCache.current[firstKey] + const secondItem = itemLayoutsCache.current[secondKey] + return secondItem.layout.x - firstItem.layout.width - firstItem.layout.x + } + return (