Popover er et flytende panel av vilkårlig størrelse som kan posisjonere seg selv i forhold til et annet element.
Normal
Normal variant av komponenten er skjult. For å åpne komponenten må den få et annet element som anker.
Typisk er det elementet som åpner komponenten som bør bli komponentens anker (som i eksempelet med knappen
nedenfor). Popover-komponenten vil da posisjonere seg selv i forhold til dette anker-elementet.
Dette er en popover.
<KnapponClick={(e)=>this.togglePopover(e.currentTarget)}>Åpne popover</Knapp><PopoverankerEl={this.state.anker}onRequestClose={()=>this.setState({anker:undefined})}><pstyle={{padding:'1rem'}}>
Dette er en popover.
</p></Popover>
Kopiert!
Orientering
Komponenten kan posisjonere seg med forskjellige orienteringer i forhold til anker-elementet. Default er over, men
kan også være under, hoyre, venstre, over-venstre, over-hoyre, under-venstre eller under-hoyre.
Dette er en popover som bruker orientering-propen til å posisjonere seg i forhold til ankeret sitt.
<Selectlabel="Velg orientering"onChange={(e)=>this.setState({ orientering: e.target.value })}defaultValue={this.state.orientering}><optionvalue="over">Over</option><optionvalue="under">Under</option><optionvalue="hoyre">Høyre</option><optionvalue="venstre">Venstre</option><optionvalue="over-venstre">Over, fra venstre kant</option><optionvalue="over-hoyre">Over, fra høyre kant</option><optionvalue="under-venstre">Under, fra venstre kant</option><optionvalue="under-hoyre">Under, fra høyre kant</option></Select><PopoverankerEl={this.state.anker}onRequestClose={()=>this.setState({anker:undefined})}orientering={this.state.orientering}><pstyle={{margin:'1rem', maxWidth:300}}>
Dette er en popover som bruker <codeclassName="inline">orientering</code>-propen til å posisjonere seg i forhold til ankeret sitt.
</p></Popover>
Kopiert!
Uten pil
Du kan også skru av pilen og få komponenten til å posisjonere seg helt inntil anker-elementet sitt. Kjekt hvis man f.eks. vil lage typiske dropdown-menyer:
<Menyknappid={this.buttonId}onClick={(e)=>this.togglePopover(e.currentTarget)}aria-expanded={this.state.anker !==undefined}aria-controls={this.popoverId}aria-haspopup="menu"><span>Dropdown meny</span></Menyknapp><Popoverid={this.popoverId}ankerEl={this.state.anker}onRequestClose={()=>this.setState({ anker:undefined})}orientering="under"autoFokus={false}tabIndex={-1}utenPil><ulclassName="menu"role="menu"style={{ minWidth:190}}aria-labelledby={this.buttonId}><li><arole="menuitem"className="lenke"href="#"ref={(node)=> node && node.focus()}>Et valg</a></li><li><arole="menuitem"className="lenke"href="#">Et annet valg</a></li><li><arole="menuitem"className="lenke"href="#">Et tredje valg</a></li><li><arole="menuitem"className="lenke"href="#">Et fjerde valg</a></li></ul></Popover>
Kopiert!
Input-trigger
Dette er en popover.
<Input
label="Skriv noe"
onChange={(e)=>{if(e.target.value &&!this.state.anker){this.setState({anker: e.currentTarget});}elseif(!e.target.value){this.setState({anker:undefined});}}}/><PopoverankerEl={this.state.anker}onRequestClose={()=>this.setState({ anker:undefined})}orientering="under-venstre"autoFokus={false}utenPil><pstyle={{ padding:'1rem'}}>
Dette er en popover.
</p></Popover>
Kopiert!
Autojustering mot skjermbredde
Popover-komponenten vil automatisk justere egen posisjon og størrelse for å holde seg innenfor den tilgjengelige skjermbredden.
Base
Selve Popover-vinduet er en selvstendig "dum" komponent kalt PopoverBase som du kan bruke hvis du
ønsker å håndtere posisjonering osv. manuelt.
Dette er en PopoverBase
<PopoverBase><divstyle={{ padding:"1rem"}}>Dette er en PopoverBase</div></PopoverBase>