Skip to content

Commit

Permalink
fix: accessibility of search input (#3403)
Browse files Browse the repository at this point in the history
* fix: logo title not announced entirely

* fix: add label and icon to search input

* fix: remove placeholder, adjust label positioning

* test: adjust test cases

* move changes to different PR

* fix: move css
  • Loading branch information
chriskari authored Oct 24, 2024
1 parent 82b6578 commit 2e167aa
Show file tree
Hide file tree
Showing 20 changed files with 68 additions and 39 deletions.
35 changes: 20 additions & 15 deletions src/shared/components/GenericList/SearchInput.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { useContext, useRef } from 'react';
import PropTypes from 'prop-types';
import { Input, SuggestionItem } from '@ui5/webcomponents-react';
import { Icon, Input, Label, SuggestionItem } from '@ui5/webcomponents-react';
import '@ui5/webcomponents/dist/features/InputSuggestions.js';
import { useTranslation } from 'react-i18next';
import { useEventListener } from 'hooks/useEventListener';
Expand All @@ -10,6 +10,7 @@ import { useYamlEditor } from 'shared/contexts/YamlEditorContext/YamlEditorConte
import { ResourceDetailContext } from '../ResourceDetails/ResourceDetails';
import { useRecoilValue } from 'recoil';
import { columnLayoutState } from 'state/columnLayoutAtom';
import './SearchInput.scss';

SearchInput.propTypes = {
searchQuery: PropTypes.string,
Expand Down Expand Up @@ -103,19 +104,23 @@ export function SearchInput({
};

return (
<Input
id="search-input"
accessibleName={`search-${entriesKind}`}
role="search"
type="Text"
ref={searchInputRef}
placeholder={t('common.tooltips.search')}
className="search-with-magnifying-glass"
value={searchQuery}
onInput={e => handleQueryChange(e.target.value)}
showSuggestions={showSuggestion}
>
{showSuggestion && renderSearchList(filteredEntries)}
</Input>
<div className="search-input-container">
<Label for="search-input" showColon>
{t('common.tooltips.search')}
</Label>
<Input
id="search-input"
accessibleName={`search-${entriesKind}`}
role="search"
type="Text"
icon={<Icon className="bsl-has-color-status-4" name="search" />}
ref={searchInputRef}
value={searchQuery}
onInput={e => handleQueryChange(e.target.value)}
showSuggestions={showSuggestion}
>
{showSuggestion && renderSearchList(filteredEntries)}
</Input>
</div>
);
}
18 changes: 18 additions & 0 deletions src/shared/components/GenericList/SearchInput.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
.search-input-container {
display: flex;
align-items: center;
gap: 0.5rem;

#search-input {
margin: 0;
}
}

@container (max-width: 450px) {
.search-input-container {
flex-direction: column;
align-items: start;
justify-content: end;
gap: 0.25rem;
}
}
5 changes: 5 additions & 0 deletions src/shared/components/UI5Panel/UI5Panel.scss
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,11 @@
}
}

.toolbar > :first-child {
display: flex;
align-items: end;
}

.header-actions {
display: flex;
align-items: center;
Expand Down
1 change: 1 addition & 0 deletions src/shared/components/UI5Panel/UI5Panel.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ export const UI5Panel = ({
stickyHeader={stickyHeader}
header={
<Toolbar
className="toolbar"
style={{
height: '100%',
paddingTop: '0.5rem',
Expand Down
4 changes: 2 additions & 2 deletions tests/integration/support/commands.js
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@ Cypress.Commands.add(
selectSearchResult = false,
} = options;

cy.get('ui5-input[placeholder="Search"]:visible')
cy.get('ui5-input[id="search-input"]:visible')
.find('input')
.wait(1000)
.type(resourceName);
Expand Down Expand Up @@ -198,7 +198,7 @@ Cypress.Commands.add(
}

if (clearSearch) {
cy.get('ui5-input[placeholder="Search"]:visible')
cy.get('ui5-input[id="search-input"]:visible')
.find('input')
.wait(1000)
.clear();
Expand Down
2 changes: 1 addition & 1 deletion tests/integration/support/inspect-list.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
Cypress.Commands.add('inspectList', (resourceName, hiddenButtons = false) => {
cy.closeMidColumn(false, hiddenButtons);

cy.get('ui5-input[placeholder="Search"]:visible')
cy.get('ui5-input[id="search-input"]:visible')
.find('input')
.wait(1000)
.type(`${resourceName}{enter}`);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ context('Accessibility test Cron Jobs', () => {
.contains('Namespaces')
.click();

cy.get('ui5-input[placeholder="Search"]:visible')
cy.get('ui5-input[id="search-input"]:visible')
.find('input')
.wait(1000)
.type(NAMESPACE_NAME);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ context('Accessibility test Custom Resources', () => {
.contains('Custom Resources')
.click();

cy.get('ui5-input[placeholder="Search"]:visible')
cy.get('ui5-input[id="search-input"]:visible')
.find('input')
.wait(1000)
.type('cypress');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ context('Accessibility test Extensions view', () => {
.contains('Extensions')
.click();

cy.get('ui5-input[placeholder="Search"]:visible')
cy.get('ui5-input[id="search-input"]:visible')
.find('input')
.wait(1000)
.type('pizzas');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ context('Accessibility test Pizza Orders', () => {
.contains('Namespaces')
.click();

cy.get('ui5-input[placeholder="Search"]:visible')
cy.get('ui5-input[id="search-input"]:visible')
.find('input')
.wait(1000)
.type('pizzas');
Expand Down
8 changes: 4 additions & 4 deletions tests/integration/tests/cluster/test-custom-resources.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ context('Test Custom Resources', () => {

openSearchWithSlashShortcut();

cy.get('ui5-input[placeholder="Search"]:visible')
cy.get('ui5-input[id="search-input"]:visible')
.find('input')
.click()
.type('cypress', {
Expand Down Expand Up @@ -73,7 +73,7 @@ context('Test Custom Resources', () => {
.contains('Custom Resources')
.click();

cy.get('ui5-input[placeholder="Search"]:visible')
cy.get('ui5-input[id="search-input"]:visible')
.find('input')
.wait(1000)
.type('cypress');
Expand All @@ -96,15 +96,15 @@ context('Test Custom Resources', () => {
.contains('Custom Resources')
.click();

cy.get('ui5-input[placeholder="Search"]:visible')
cy.get('ui5-input[id="search-input"]:visible')
.find('input')
.wait(1000)
.type('cypress');
cy.clickGenericListLink('Tclusters');

cy.testMidColumnLayout('Tclusters', false);

cy.get('ui5-input[placeholder="Search"]:visible')
cy.get('ui5-input[id="search-input"]:visible')
.find('input')
.wait(1000)
.type('cypress');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ context('Test navigation features', () => {
// visual resources
cy.navigateTo('Configuration', 'Cluster Role Bindings');

cy.get('ui5-input[placeholder="Search"]:visible')
cy.get('ui5-input[id="search-input"]:visible')
.find('input')
.wait(1000)
.type('cronjob-controller');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ context('Test Extensibility Create/Update', () => {
});

it('Check if Extensions is created', () => {
cy.get('ui5-input[placeholder="Search"]:visible')
cy.get('ui5-input[id="search-input"]:visible')
.find('input')
.wait(1000)
.clear()
Expand Down Expand Up @@ -118,7 +118,7 @@ context('Test Extensibility Create/Update', () => {
it('Edit extension', () => {
cy.navigateTo('Configuration', 'Extensions');

cy.get('ui5-input[placeholder="Search"]:visible')
cy.get('ui5-input[id="search-input"]:visible')
.find('input')
.wait(1000)
.clear()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ context('Test Pizzas', () => {
.contains('Namespaces')
.click();

cy.get('ui5-input[placeholder="Search"]:visible')
cy.get('ui5-input[id="search-input"]:visible')
.find('input')
.wait(1000)
.type('pizzas');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ context('Test Services', () => {
.contains('Namespaces')
.click();

cy.get('ui5-input[placeholder="Search"]:visible')
cy.get('ui5-input[id="search-input"]:visible')
.find('input')
.wait(1000)
.type('services');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ context('Test extensibility variables', () => {
.contains('Namespaces')
.click();

cy.get('ui5-input[placeholder="Search"]:visible')
cy.get('ui5-input[id="search-input"]:visible')
.find('input')
.wait(1000)
.type(NAMESPACE);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ context('Test Kyma Modules views', () => {
it('Test Modules list and details', () => {
cy.wait(1000);

cy.get('ui5-input[placeholder="Search"]:visible')
cy.get('ui5-input[id="search-input"]:visible')
.find('input')
.wait(1000)
.type('api-gateway');
Expand All @@ -134,7 +134,7 @@ context('Test Kyma Modules views', () => {

cy.closeMidColumn();

cy.get('ui5-input[placeholder="Search"]:visible')
cy.get('ui5-input[id="search-input"]:visible')
.find('input')
.clearInput();

Expand Down Expand Up @@ -242,7 +242,7 @@ context('Test Kyma Modules views', () => {
it('Test deleting Modules from List and Details', { retries: 3 }, () => {
cy.deleteFromGenericList('Module', 'eventing');

cy.get('ui5-input[placeholder="Search"]:visible')
cy.get('ui5-input[id="search-input"]:visible')
.find('input')
.wait(1000)
.type('api-gateway');
Expand All @@ -255,7 +255,7 @@ context('Test Kyma Modules views', () => {

cy.wait(20000);

cy.get('ui5-input[placeholder="Search"]:visible')
cy.get('ui5-input[id="search-input"]:visible')
.find('input')
.clear();

Expand Down
2 changes: 1 addition & 1 deletion tests/integration/tests/kyma-namespace/test-oauth2.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ context('Test OAuth2 Clients', () => {
cy.contains('Ory Hydra Deprecation').should('be.visible');

cy.contains('ui5-panel', 'OAuth2Clients').within(_$genericList => {
cy.get('ui5-input[placeholder="Search"]:visible')
cy.get('ui5-input[id="search-input"]:visible')
.find('input')
.wait(1000)
.type(AUTH2_NAME);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ context('Test Custom Resources', () => {

cy.contains('ui5-title', 'Custom Resources').should('be.visible');

cy.get('ui5-input[placeholder="Search"]:visible')
cy.get('ui5-input[id="search-input"]:visible')
.find('input')
.wait(1000)
.type('cypress', {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ context('Test reduced permissions 2', () => {
.contains('Namespaces')
.click();

cy.get('ui5-input[placeholder="Search"]:visible')
cy.get('ui5-input[id="search-input"]:visible')
.find('input')
.wait(1000)
.type('kube-public');
Expand Down

0 comments on commit 2e167aa

Please sign in to comment.