11import styled from '@emotion/native' ;
22import { Page } from '../components/Page' ;
3- import { programInfos } from '../modules/program/infra/programInfos' ;
3+ import { getPrograms } from '../modules/program/infra/programInfos' ;
44import { SpatialNavigationView } from '../../../lib/src/spatial-navigation/components/View' ;
55import { scaledPixels } from '../design-system/helpers/scaledPixels' ;
66import { DefaultFocus } from '../../../lib/src/spatial-navigation/context/DefaultFocusContext' ;
@@ -13,18 +13,35 @@ import { useTheme } from '@emotion/react';
1313
1414const ROW_PADDING = scaledPixels ( 70 ) ;
1515
16+ const MAX = 1000 ;
17+
1618export 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