PagerView
View Source
Allows paging between views. Use with the useRovingIndex hook to control the activeViewIndex.
1
2
3
4
const views = [['blue-5', 18],['seagreen', 24],['rebeccapurple', 32],['hotpink', 20],]render(() => {const {activeIndex,moveActiveIndex,moveBackwardDisabled,moveForwardDisabled,} = hooks.useRovingIndex({maxIndex: views.length - 1,})return (<StackView spacing={1}><PagerViewactiveViewIndex={activeIndex}width={40}backgroundColor="backgroundTertiary">{views.map(([color, height], index) => (<PagerView.Viewkey={color}minHeight={height}alignment="center"distribution="center"paddingHorizontal={4}fontSize={0}color="light-5"backgroundColor={color}>{index + 1}</PagerView.View>))}</PagerView><StackView axis="horizontal" distribution="center" spacing={1}><Buttontitle="Prev"icon={{ name: 'general.leftChevron', size: 'sm' }}radius="circle"disabled={moveBackwardDisabled}onClick={() => moveActiveIndex(-1)}/><Buttontitle="Next"icon={{ name: 'general.rightChevron', size: 'sm' }}radius="circle"disabled={moveForwardDisabled}onClick={() => moveActiveIndex(1)}/></StackView></StackView>)})
Arrangement
A
Ab
B
C
C#
D
Db
E
Eb
F
F#
G
function View({ children }) {return (<PagerView.View><Card minHeight={24} padding={2}>{children}</Card></PagerView.View>)}function Arrangement({ expanded, expandOrShrink }) {return (<View><Toolbartitle="Arrangement"helpContent="These files are only available in plans that use the Default Arrangement, no matter what key is chosen."actions={<Buttontitle={expanded ? 'show single-view' : 'show multi-view'}icon={{name: expanded? 'general.twoInwardChevrons': 'general.twoOutwardChevrons',}}variant="naked"onClick={expandOrShrink}/>}/></View>)}function Key({ name, expanded, expandOrShrink }) {return (<View><Toolbartitle={name}actions={[<Buttontitle="edit"icon={{ name: 'general.pencil' }}variant="naked"/>,<Buttontitle={expanded ? 'show single-view' : 'show multi-view'}icon={{name: expanded? 'general.twoInwardChevrons': 'general.twoOutwardChevrons',}}variant="naked"onClick={expandOrShrink}/>,]}/></View>)}const keys = ['A', 'Ab', 'B', 'C', 'C#', 'D', 'Db', 'E', 'Eb', 'F', 'F#', 'G']render(() => {const [expanded, setExpanded] = React.useState(false)const {activeIndex,moveActiveIndex,setActiveIndex,moveBackwardDisabled,moveForwardDisabled,} = hooks.useRovingIndex({maxIndex: keys.length - 1,})const viewsToShow = expanded ? 1 : 3const expandOrShrink = (nextIndex) => {setActiveIndex(nextIndex)setExpanded((bool) => !bool)}const isActiveIndex = (index) => {return index >= activeIndex && index < activeIndex + viewsToShow}return (<StackView width="100%" maxWidth={104} spacing={2}><PagerViewwidth="100%"activeViewIndex={activeIndex}viewsToShow={viewsToShow}spacing={2}><Arrangementexpanded={expanded && activeIndex === 0}expandOrShrink={() => expandOrShrink(0)}/>{keys.map((key, index) => (<Keykey={key}name={key}expanded={expanded && activeIndex === index + 1}expandOrShrink={() => expandOrShrink(index + 1)}/>))}</PagerView><GridView columns="auto 1fr auto" spacing={1}><Buttontitle="Prev"icon={{ name: 'general.leftChevron', size: 'sm' }}radius="circle"disabled={moveBackwardDisabled}onClick={() => moveActiveIndex(-1)}/><StackViewaxis="horizontal"maxWidth="100%"marginHorizontal="auto"overflow="scroll">{['Arrangement', ...keys].map((key, index) => {const buttonProps = {key,title: key,variant: 'naked',onClick: () => setActiveIndex(index),}if (isActiveIndex(index)) {buttonProps.theme = falsebuttonProps.radius = 0buttonProps.borderBottomWidth = 2buttonProps.borderBottomColor = 'primary'buttonProps.color = 'primary'}return <Button {...buttonProps} />})}</StackView><Buttontitle="Next"icon={{ name: 'general.rightChevron', size: 'sm' }}radius="circle"disabled={moveForwardDisabled}onClick={() => moveActiveIndex(1)}/></GridView></StackView>)})
Props
Accepts StackView props.
activeViewIndex
numberControls the active view by index.
autoFocus
booleanAuto focus the first focusable element in the active view.
axis
'horizontal' | 'vertical'Which axis the track moves on. Defaults to horizontal.
spacing
numberThe amount of space between views. Uses 8-point grid multiplier.
viewsToMove
numberThe number of views to move upon using prev and next methods. Defaults to 1.
viewsToShow
numberThe number of views visible in the frame at one time. Defaults to 1.