Skip to content

Commit 2292ce8

Browse files
author
Pierre Poupin
committed
chore(example): add shuffle, add item, remove item mechanism
1 parent 215193a commit 2292ce8

2 files changed

Lines changed: 37 additions & 10 deletions

File tree

packages/example/src/pages/ListWithVariableSize.test.tsx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@ import { NavigationContainer } from '@react-navigation/native';
66
import '../components/tests/helpers/configureTestRemoteControl';
77
import testRemoteControlManager from '../components/tests/helpers/testRemoteControlManager';
88

9+
jest.mock('../modules/program/infra/programInfos', () => ({
10+
getPrograms: () => {
11+
return jest.requireActual('../modules/program/infra/programInfos').programInfos;
12+
},
13+
}));
14+
915
const renderWithProviders = (page: JSX.Element) => {
1016
return render(
1117
<NavigationContainer>
@@ -30,11 +36,13 @@ describe('ListWithVariableSize', () => {
3036

3137
// Remove last item
3238
testRemoteControlManager.handleDown();
39+
testRemoteControlManager.handleDown();
3340
testRemoteControlManager.handleEnter();
3441

3542
expect(screen.queryByLabelText('Program 4')).not.toBeOnTheScreen();
3643

3744
// Add back last item
45+
testRemoteControlManager.handleUp();
3846
testRemoteControlManager.handleEnter();
3947
expect(screen.getByLabelText('Program 4')).toBeOnTheScreen();
4048

packages/example/src/pages/ListWithVariableSize.tsx

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import styled from '@emotion/native';
22
import { Page } from '../components/Page';
3-
import { programInfos } from '../modules/program/infra/programInfos';
3+
import { getPrograms } from '../modules/program/infra/programInfos';
44
import { SpatialNavigationView } from '../../../lib/src/spatial-navigation/components/View';
55
import { scaledPixels } from '../design-system/helpers/scaledPixels';
66
import { DefaultFocus } from '../../../lib/src/spatial-navigation/context/DefaultFocusContext';
@@ -13,18 +13,35 @@ import { useTheme } from '@emotion/react';
1313

1414
const ROW_PADDING = scaledPixels(70);
1515

16+
const MAX = 1000;
17+
1618
export const ListWithVariableSize = () => {
1719
const theme = useTheme();
18-
const [programs, setPrograms] = useState(programInfos.slice(0, 4));
19-
20-
const addOrRemoveLastItem = () => {
21-
if (programs.length === 4) {
22-
setPrograms(programInfos.slice(0, 3));
23-
} else {
24-
setPrograms(programInfos.slice(0, 4));
25-
}
20+
const [programsBase, setProgramsBase] = useState(getPrograms(MAX));
21+
22+
const [numberOfPrograms, setNumberOfPrograms] = useState(4);
23+
24+
const addItem = () => {
25+
setNumberOfPrograms((prev) => {
26+
if (prev === MAX) return prev;
27+
28+
return prev + 1;
29+
});
2630
};
2731

32+
const removeItem = () => {
33+
setNumberOfPrograms((prev) => {
34+
if (prev === 0) return prev;
35+
return prev - 1;
36+
});
37+
};
38+
39+
const shuffleItems = () => {
40+
setProgramsBase((prev) => [...prev].sort(() => Math.random() - 0.5));
41+
};
42+
43+
const programs = programsBase.slice(0, numberOfPrograms);
44+
2845
return (
2946
<Page>
3047
<DefaultFocus>
@@ -40,7 +57,9 @@ export const ListWithVariableSize = () => {
4057
</SpatialNavigationNode>
4158
<Spacer gap="$6" />
4259
<SpatialNavigationView direction="vertical">
43-
<Button label="Add/Remove last item" onSelect={addOrRemoveLastItem} />
60+
<Button label="Add item" onSelect={addItem} />
61+
<Button label="Remove item" onSelect={removeItem} />
62+
<Button label="Shuffle items" onSelect={shuffleItems} />
4463
</SpatialNavigationView>
4564
</Container>
4665
</DefaultFocus>

0 commit comments

Comments
 (0)