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>
</>
);
}
|