Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | 6x 6x | import { Button } from "@canonical/react-components"; import { Dispatch, useState } from "react"; type TrackDropdownProps = { defaultTrack?: string; tracks: string[]; selectedTrack: string; setSelectedTrack: Dispatch<React.SetStateAction<string>>; hasGuardrails?: boolean; onAddTrack?: () => void; onRequestTrack?: () => void; }; export function TrackDropdown({ defaultTrack, tracks, selectedTrack, setSelectedTrack, hasGuardrails, onAddTrack, onRequestTrack, }: TrackDropdownProps) { const [isOpen, setIsOpen] = useState(false); return ( <> <label htmlFor="track-dropdown">Track: </label> <div className="track-dropdown" role="listbox"> <div className="dropdown-toggle" onClick={() => setIsOpen(!isOpen)} role="button" aria-haspopup="true" id="track-dropdown" tabIndex={0} aria-expanded={isOpen} onKeyDown={(e) => { if (e.key === "Enter" || e.key === " ") { setIsOpen(!isOpen); } }} > {selectedTrack} <i className="p-icon--chevron-down u-float-right"></i> </div> {isOpen && ( <div className="dropdown-menu"> <div className="options-container"> {tracks.map((option, index) => ( <div key={index} role="option" className="dropdown-item" tabIndex={0} aria-selected={option === selectedTrack} onClick={() => { setSelectedTrack(option); setIsOpen(false); }} onKeyDown={(e) => { if (e.key === "Enter" || e.key === " ") { setSelectedTrack(option); setIsOpen(false); } }} > <div> {option} {option === defaultTrack && ( <div className="p-status-label">Default</div> )} </div> {option === selectedTrack && ( <i className="p-icon--task-outstanding u-float-right"></i> )} </div> ))} </div> <div className="track-button"> <Button className="p-button has-icon new-track-button" type="button" onClick={() => { if (hasGuardrails) { onAddTrack?.(); } else { onRequestTrack?.(); } setIsOpen(false); }} > <i className="p-icon--plus"></i> <span>{hasGuardrails ? "Add" : "Request"} track</span> </Button> </div> </div> )} </div> </> ); } |