Skip to content

Commit ceaf003

Browse files
authored
Single source of truth for itemWidth and itemSpacing (#3275)
1 parent 42e8d51 commit ceaf003

File tree

4 files changed

+24
-10
lines changed

4 files changed

+24
-10
lines changed

src/components/gridList/useGridLayout.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,15 @@ const useGridLayout = (props: GridListBaseProps) => {
5858
return [{columnGap: itemSpacing}, columnWrapperStyle];
5959
}, [itemSpacing, columnWrapperStyle]);
6060

61-
return {itemContainerStyle, numberOfColumns, listStyle, listContentStyle, listColumnWrapperStyle};
61+
return {
62+
itemContainerStyle,
63+
numberOfColumns,
64+
itemWidth,
65+
itemSpacing,
66+
listStyle,
67+
listContentStyle,
68+
listColumnWrapperStyle
69+
};
6270
};
6371

6472
export default useGridLayout;

src/components/sortableGridList/__tests__/usePresenter.spec.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ import {Constants} from '../../../commons/new';
55

66
describe('SortableGridList presenter tests', () => {
77
const makeSUT = ({numOfColumns = DEFAULT_NUM_COLUMNS, itemSpacing = DEFAULT_ITEM_SPACINGS}) => {
8-
return renderHook(() => usePresenter(numOfColumns, itemSpacing));
8+
const itemSize = Constants.screenWidth / numOfColumns;
9+
return renderHook(() => usePresenter(numOfColumns, itemSize, itemSpacing));
910
};
1011

1112
describe('ltr', () => {

src/components/sortableGridList/index.tsx

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import SortableItem from './SortableItem';
1010
import usePresenter from './usePresenter';
1111
import {ItemsOrder, SortableGridListProps, ItemProps} from './types';
1212

13-
import useGridLayout, {DEFAULT_ITEM_SPACINGS} from '../gridList/useGridLayout';
13+
import useGridLayout from '../gridList/useGridLayout';
1414

1515
function generateItemsOrder(data: SortableGridListProps['data']) {
1616
return _.map(data, item => item.id);
@@ -19,9 +19,16 @@ function generateItemsOrder(data: SortableGridListProps['data']) {
1919
function SortableGridList<T = any>(props: SortableGridListProps<T>) {
2020
const {renderItem, onOrderChange, flexMigration, orderByIndex = false, ...others} = props;
2121

22-
const {itemContainerStyle, numberOfColumns, listStyle, listContentStyle, listColumnWrapperStyle} =
23-
useGridLayout(props);
24-
const {itemSpacing = DEFAULT_ITEM_SPACINGS, data} = others;
22+
const {
23+
itemContainerStyle,
24+
numberOfColumns,
25+
itemWidth,
26+
itemSpacing,
27+
listStyle,
28+
listContentStyle,
29+
listColumnWrapperStyle
30+
} = useGridLayout(props);
31+
const {data} = others;
2532
const itemsOrder = useSharedValue<ItemsOrder>(generateItemsOrder(data));
2633

2734
// TODO: Remove once flexMigration migration is completed
@@ -36,7 +43,7 @@ function SortableGridList<T = any>(props: SortableGridListProps<T>) {
3643
itemsOrder.value = generateItemsOrder(data);
3744
}, [data]);
3845

39-
const presenter = usePresenter(numberOfColumns, itemSpacing);
46+
const presenter = usePresenter(numberOfColumns, itemWidth, itemSpacing);
4047

4148
const onChange = useCallback(() => {
4249
const newData: ItemProps<T>[] = [];

src/components/sortableGridList/usePresenter.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,14 @@ import {ItemLayout, ItemsOrder} from './types';
44

55
export const WINDOW_WIDTH = Constants.windowWidth;
66
export const DEFAULT_NO_OF_COLUMNS = 3;
7-
export const getItemSize = (numOfColumns: number, viewWidth: number) => viewWidth / numOfColumns;
87

98
export const animationConfig = {
109
easing: Easing.inOut(Easing.ease),
1110
duration: 350
1211
};
1312

14-
const usePresenter = (numOfColumns: number, itemSpacing: number) => {
13+
const usePresenter = (numOfColumns: number, itemSize: number, itemSpacing: number) => {
1514
const itemLayout = useSharedValue<ItemLayout>(undefined);
16-
const itemSize = getItemSize(numOfColumns, Constants.screenWidth);
1715

1816
return {
1917
updateItemLayout: (layout: {width: number; height: number}) => {

0 commit comments

Comments
 (0)