mirror of
https://github.com/usebruno/bruno.git
synced 2025-02-21 20:21:47 +01:00
Refactor/ Implement Focusable Buttons in the Generate Code Modal (#3310)
* refactor: GenerateCodeItem component to fix width issue * feat: tab switch for languages * style: add logic to handle different screen sizes * feat: enhance keyboard navigation for language selection in GenerateCodeItem
This commit is contained in:
parent
7d67239b11
commit
548f958a0f
@ -35,6 +35,28 @@ const StyledWrapper = styled.div`
|
|||||||
background-color: ${(props) => props.theme.collection.environment.settings.item.active.hoverBg} !important;
|
background-color: ${(props) => props.theme.collection.environment.settings.item.active.hoverBg} !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.flexible-container {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 600px) {
|
||||||
|
.flexible-container {
|
||||||
|
width: 500px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 601px) and (max-width: 1200px) {
|
||||||
|
.flexible-container {
|
||||||
|
width: 800px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 1201px) {
|
||||||
|
.flexible-container {
|
||||||
|
width: 900px;
|
||||||
|
}
|
||||||
|
}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
export default StyledWrapper;
|
export default StyledWrapper;
|
||||||
|
@ -48,7 +48,7 @@ const GenerateCodeItem = ({ collection, item, onClose }) => {
|
|||||||
return (
|
return (
|
||||||
<Modal size="lg" title="Generate Code" handleCancel={onClose} hideFooter={true}>
|
<Modal size="lg" title="Generate Code" handleCancel={onClose} hideFooter={true}>
|
||||||
<StyledWrapper>
|
<StyledWrapper>
|
||||||
<div className="flex w-full">
|
<div className="flex w-full flexible-container">
|
||||||
<div>
|
<div>
|
||||||
<div className="generate-code-sidebar">
|
<div className="generate-code-sidebar">
|
||||||
{languages &&
|
{languages &&
|
||||||
@ -59,7 +59,27 @@ const GenerateCodeItem = ({ collection, item, onClose }) => {
|
|||||||
className={
|
className={
|
||||||
language.name === selectedLanguage.name ? 'generate-code-item active' : 'generate-code-item'
|
language.name === selectedLanguage.name ? 'generate-code-item active' : 'generate-code-item'
|
||||||
}
|
}
|
||||||
|
role="button"
|
||||||
|
tabIndex={0}
|
||||||
onClick={() => setSelectedLanguage(language)}
|
onClick={() => setSelectedLanguage(language)}
|
||||||
|
onKeyDown={(e) => {
|
||||||
|
if (e.key === 'Tab') {
|
||||||
|
e.preventDefault();
|
||||||
|
const currentIndex = languages.findIndex((lang) => lang.name === selectedLanguage.name);
|
||||||
|
const nextIndex = e.shiftKey
|
||||||
|
? (currentIndex - 1 + languages.length) % languages.length
|
||||||
|
: (currentIndex + 1) % languages.length;
|
||||||
|
setSelectedLanguage(languages[nextIndex]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (e.shiftKey && e.key === 'Tab') {
|
||||||
|
e.preventDefault();
|
||||||
|
const currentIndex = languages.findIndex((lang) => lang.name === selectedLanguage.name);
|
||||||
|
const nextIndex = (currentIndex - 1 + languages.length) % languages.length;
|
||||||
|
setSelectedLanguage(languages[nextIndex]);
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
aria-pressed={language.name === selectedLanguage.name}
|
||||||
>
|
>
|
||||||
<span className="capitalize">{language.name}</span>
|
<span className="capitalize">{language.name}</span>
|
||||||
</div>
|
</div>
|
||||||
|
Loading…
Reference in New Issue
Block a user