]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-16683 [893656] Remove tooltips from search results
authorJeremy Davis <jeremy.davis@sonarsource.com>
Fri, 29 Jul 2022 14:01:31 +0000 (16:01 +0200)
committersonartech <sonartech@sonarsource.com>
Tue, 2 Aug 2022 20:04:05 +0000 (20:04 +0000)
server/sonar-web/src/main/js/app/components/search/Search.css
server/sonar-web/src/main/js/app/components/search/Search.tsx
server/sonar-web/src/main/js/app/components/search/SearchResult.tsx
server/sonar-web/src/main/js/app/components/search/__tests__/Search-test.tsx
server/sonar-web/src/main/js/app/components/search/__tests__/SearchResult-test.tsx
server/sonar-web/src/main/js/app/components/search/__tests__/__snapshots__/SearchResult-test.tsx.snap
server/sonar-web/src/main/js/app/components/search/utils.ts
server/sonar-web/src/main/js/helpers/testUtils.ts

index a05b2593c612d918e44126204d5d37772d0896fd..ed188184718fbc65792870ebbf5db9a784140f7c 100644 (file)
   font-size: var(--mediumFontSize);
 }
 
-.navbar-search-item-link {
-  display: flex !important;
-}
-
 .navbar-search-item-match {
   flex-grow: 5;
   overflow: hidden;
@@ -86,9 +82,9 @@
 }
 
 .navbar-search-item-right {
-  flex-grow: 1;
-  padding-left: 10px;
   text-align: right;
+  overflow: hidden;
+  text-overflow: ellipsis;
 }
 
 .navbar-search-item-icons {
index f4b6342c34ec40b513e32ce03bba5808e59057a4..2d7811805faf5c6e7bbabebe4a8403dec845650e 100644 (file)
@@ -17,7 +17,7 @@
  * along with this program; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
-import { debounce, keyBy, uniqBy } from 'lodash';
+import { debounce, uniqBy } from 'lodash';
 import * as React from 'react';
 import { FormattedMessage } from 'react-intl';
 import { getSuggestions } from '../../../api/components';
@@ -48,7 +48,6 @@ interface State {
   loadingMore?: string;
   more: More;
   open: boolean;
-  projects: Dict<{ name: string }>;
   query: string;
   results: Results;
   selected?: string;
@@ -71,7 +70,6 @@ export class Search extends React.PureComponent<Props, State> {
       loading: false,
       more: {},
       open: false,
-      projects: {},
       query: '',
       results: {},
       shortQuery: false
@@ -80,6 +78,7 @@ export class Search extends React.PureComponent<Props, State> {
 
   componentDidMount() {
     this.mounted = true;
+    document.addEventListener('keydown', this.handleKeyDown);
     document.addEventListener('keydown', this.handleSKeyDown);
   }
 
@@ -92,6 +91,7 @@ export class Search extends React.PureComponent<Props, State> {
   componentWillUnmount() {
     this.mounted = false;
     document.removeEventListener('keydown', this.handleSKeyDown);
+    document.removeEventListener('keydown', this.handleKeyDown);
   }
 
   focusInput = () => {
@@ -130,7 +130,6 @@ export class Search extends React.PureComponent<Props, State> {
       this.setState({
         more: {},
         open: false,
-        projects: {},
         query: '',
         results: {},
         selected: undefined,
@@ -172,14 +171,13 @@ export class Search extends React.PureComponent<Props, State> {
             more[group.q] = group.more;
           });
           const list = this.getPlainComponentsList(results, more);
-          this.setState(state => ({
+          this.setState({
             loading: false,
             more,
-            projects: { ...state.projects, ...keyBy(response.projects, 'key') },
             results,
             selected: list.length > 0 ? list[0] : undefined,
             shortQuery: query.length > MIN_SEARCH_QUERY_LENGTH && response.warning === 'short_input'
-          }));
+          });
         }
       }, this.stopLoading);
     } else {
@@ -203,7 +201,6 @@ export class Search extends React.PureComponent<Props, State> {
           loading: false,
           loadingMore: undefined,
           more: { ...state.more, [qualifier]: 0 },
-          projects: { ...state.projects, ...keyBy(response.projects, 'key') },
           results: {
             ...state.results,
             [qualifier]: uniqBy([...state.results[qualifier], ...moreResults], 'key')
@@ -286,26 +283,30 @@ export class Search extends React.PureComponent<Props, State> {
     }
   };
 
-  handleKeyDown = (event: React.KeyboardEvent) => {
-    switch (event.nativeEvent.key) {
+  handleKeyDown = (event: KeyboardEvent) => {
+    if (!this.state.open) {
+      return;
+    }
+
+    switch (event.key) {
       case KeyboardKeys.Enter:
         event.preventDefault();
-        event.nativeEvent.stopImmediatePropagation();
+        event.stopPropagation();
         this.openSelected();
         break;
       case KeyboardKeys.UpArrow:
         event.preventDefault();
-        event.nativeEvent.stopImmediatePropagation();
+        event.stopPropagation();
         this.selectPrevious();
         break;
       case KeyboardKeys.Escape:
         event.preventDefault();
-        event.nativeEvent.stopImmediatePropagation();
+        event.stopPropagation();
         this.closeSearch();
         break;
       case KeyboardKeys.DownArrow:
         event.preventDefault();
-        event.nativeEvent.stopImmediatePropagation();
+        event.stopPropagation();
         this.selectNext();
         break;
     }
@@ -332,7 +333,6 @@ export class Search extends React.PureComponent<Props, State> {
       key={component.key}
       onClose={this.closeSearch}
       onSelect={this.handleSelect}
-      projects={this.state.projects}
       selected={this.state.selected === component.key}
     />
   );
@@ -354,7 +354,6 @@ export class Search extends React.PureComponent<Props, State> {
           minLength={2}
           onChange={this.handleQueryChange}
           onFocus={this.handleFocus}
-          onKeyDown={this.handleKeyDown}
           placeholder={translate('search.placeholder')}
           value={this.state.query}
         />
index c155d0bb86fab75b1acff05150f9cebc5190a53c..c6d8d84cc97370b34d1925bfe10ff36de36af3f8 100644 (file)
  */
 import * as React from 'react';
 import { Link } from 'react-router-dom';
-import Tooltip from '../../../components/controls/Tooltip';
 import ClockIcon from '../../../components/icons/ClockIcon';
 import FavoriteIcon from '../../../components/icons/FavoriteIcon';
 import QualifierIcon from '../../../components/icons/QualifierIcon';
 import { getComponentOverviewUrl } from '../../../helpers/urls';
-import { Dict } from '../../../types/types';
 import { ComponentResult } from './utils';
 
 interface Props {
@@ -32,67 +30,13 @@ interface Props {
   innerRef: (componentKey: string, node: HTMLElement | null) => void;
   onClose: () => void;
   onSelect: (componentKey: string) => void;
-  projects: Dict<{ name: string }>;
   selected: boolean;
 }
-
-interface State {
-  tooltipVisible: boolean;
-}
-
-const TOOLTIP_DELAY = 1000;
-const MILLISECONDS_PER_SECOND = 1000;
-
-export default class SearchResult extends React.PureComponent<Props, State> {
-  interval?: number;
-  state: State = { tooltipVisible: false };
-
-  componentDidMount() {
-    if (this.props.selected) {
-      this.scheduleTooltip();
-    }
-  }
-
-  componentDidUpdate(prevProps: Props) {
-    if (!prevProps.selected && this.props.selected) {
-      this.scheduleTooltip();
-    } else if (prevProps.selected && !this.props.selected) {
-      this.unscheduleTooltip();
-      this.setState({ tooltipVisible: false });
-    }
-  }
-
-  componentWillUnmount() {
-    this.unscheduleTooltip();
-  }
-
-  scheduleTooltip = () => {
-    this.interval = window.setTimeout(() => {
-      this.setState({ tooltipVisible: true });
-    }, TOOLTIP_DELAY);
-  };
-
-  unscheduleTooltip = () => {
-    if (this.interval) {
-      window.clearInterval(this.interval);
-    }
-  };
-
-  handleMouseEnter = () => {
+export default class SearchResult extends React.PureComponent<Props> {
+  doSelect = () => {
     this.props.onSelect(this.props.component.key);
   };
 
-  renderProject = (component: ComponentResult) => {
-    if (component.project == null) {
-      return null;
-    }
-
-    const project = this.props.projects[component.project];
-    return project ? (
-      <div className="navbar-search-item-right text-muted-2">{project.name}</div>
-    ) : null;
-  };
-
   render() {
     const { component } = this.props;
 
@@ -105,13 +49,9 @@ export default class SearchResult extends React.PureComponent<Props, State> {
         ref={node => this.props.innerRef(component.key, node)}
         role="option"
         aria-selected={this.props.selected}>
-        <Tooltip
-          mouseEnterDelay={TOOLTIP_DELAY / MILLISECONDS_PER_SECOND}
-          overlay={component.key}
-          placement="left"
-          visible={this.state.tooltipVisible}>
-          <Link data-key={component.key} onClick={this.props.onClose} to={to}>
-            <span className="navbar-search-item-link" onMouseEnter={this.handleMouseEnter}>
+        <Link data-key={component.key} onClick={this.props.onClose} onFocus={this.doSelect} to={to}>
+          <div className="navbar-search-item-link little-padded-top" onMouseEnter={this.doSelect}>
+            <div className="display-flex-center">
               <span className="navbar-search-item-icons little-spacer-right">
                 {component.isFavorite && <FavoriteIcon favorite={true} size={12} />}
                 {!component.isFavorite && component.isRecentlyBrowsed && <ClockIcon size={12} />}
@@ -128,11 +68,11 @@ export default class SearchResult extends React.PureComponent<Props, State> {
               ) : (
                 <span className="navbar-search-item-match">{component.name}</span>
               )}
+            </div>
 
-              {this.renderProject(component)}
-            </span>
-          </Link>
-        </Tooltip>
+            <div className="navbar-search-item-right text-muted-2">{component.key}</div>
+          </div>
+        </Link>
       </li>
     );
   }
index eff30eb0165471b4bbe558d421769df76d8b4f86..c1103428baa9758c5274242090f065d27bd45266 100644 (file)
@@ -21,7 +21,7 @@ import { shallow, ShallowWrapper } from 'enzyme';
 import * as React from 'react';
 import { KeyboardKeys } from '../../../../helpers/keycodes';
 import { mockRouter } from '../../../../helpers/testMocks';
-import { elementKeydown, keydown } from '../../../../helpers/testUtils';
+import { keydown } from '../../../../helpers/testUtils';
 import { queryToSearch } from '../../../../helpers/urls';
 import { ComponentQualifier } from '../../../../types/component';
 import { Search } from '../Search';
@@ -68,7 +68,7 @@ it('opens selected project on enter', () => {
     selected: selectedKey
   });
 
-  elementKeydown(form.find('SearchBox'), KeyboardKeys.Enter);
+  keydown({ key: KeyboardKeys.Enter });
   expect(router.push).toBeCalledWith({
     pathname: '/dashboard',
     search: queryToSearch({ id: selectedKey })
@@ -87,7 +87,7 @@ it('opens selected portfolio on enter', () => {
     selected: selectedKey
   });
 
-  elementKeydown(form.find('SearchBox'), KeyboardKeys.Enter);
+  keydown({ key: KeyboardKeys.Enter });
   expect(router.push).toBeCalledWith({
     pathname: '/portfolio',
     search: queryToSearch({ id: selectedKey })
@@ -106,7 +106,7 @@ it('opens selected subportfolio on enter', () => {
     selected: selectedKey
   });
 
-  elementKeydown(form.find('SearchBox'), KeyboardKeys.Enter);
+  keydown({ key: KeyboardKeys.Enter });
   expect(router.push).toBeCalledWith({
     pathname: '/portfolio',
     search: queryToSearch({ id: selectedKey })
@@ -128,15 +128,31 @@ it('should open the results when pressing key S and close it when pressing Escap
   expect(form.state().open).toBe(false);
   keydown({ key: KeyboardKeys.KeyS });
   expect(form.state().open).toBe(true);
-  elementKeydown(form.find('SearchBox'), KeyboardKeys.Escape);
+  keydown({ key: KeyboardKeys.Escape });
   expect(form.state().open).toBe(false);
 });
 
+it('should ignore keyboard navigation when closed', () => {
+  const wrapper = shallowRender();
+
+  keydown({ key: KeyboardKeys.DownArrow });
+
+  expect(wrapper.state().selected).toBeUndefined();
+  expect(wrapper.state().open).toBe(false);
+
+  keydown({ key: KeyboardKeys.UpArrow });
+
+  expect(wrapper.state().selected).toBeUndefined();
+  expect(wrapper.state().open).toBe(false);
+
+  keydown({ key: KeyboardKeys.Enter });
+
+  expect(wrapper.state().selected).toBeUndefined();
+  expect(wrapper.state().open).toBe(false);
+});
+
 function shallowRender(props: Partial<Search['props']> = {}) {
-  return shallow<Search>(
-    // @ts-ignore
-    <Search currentUser={{ isLoggedIn: false }} {...props} />
-  );
+  return shallow<Search>(<Search router={mockRouter()} {...props} />);
 }
 
 function component(key: string, qualifier = ComponentQualifier.Project) {
@@ -144,12 +160,12 @@ function component(key: string, qualifier = ComponentQualifier.Project) {
 }
 
 function next(form: ShallowWrapper<Search['props'], Search['state']>, expected: string) {
-  elementKeydown(form.find('SearchBox'), KeyboardKeys.DownArrow);
+  keydown({ key: KeyboardKeys.DownArrow });
   expect(form.state().selected).toBe(expected);
 }
 
 function prev(form: ShallowWrapper<Search['props'], Search['state']>, expected: string) {
-  elementKeydown(form.find('SearchBox'), KeyboardKeys.UpArrow);
+  keydown({ key: KeyboardKeys.UpArrow });
   expect(form.state().selected).toBe(expected);
 }
 
index 060dff960bf8f6026f2b068c18a6a0b9f81b32ed..47e4f2c9b143f77b8909341977469052895608c0 100644 (file)
@@ -22,15 +22,6 @@ import * as React from 'react';
 import { ComponentQualifier } from '../../../../types/component';
 import SearchResult from '../SearchResult';
 
-beforeAll(() => {
-  jest.useFakeTimers();
-});
-
-afterAll(() => {
-  jest.runOnlyPendingTimers();
-  jest.useRealTimers();
-});
-
 it('renders selected', () => {
   const wrapper = shallowRender();
   expect(wrapper).toMatchSnapshot();
@@ -43,7 +34,7 @@ it('renders match', () => {
     key: 'foo',
     name: 'foo',
     match: 'f<mark>o</mark>o',
-    qualifier: 'TRK'
+    qualifier: ComponentQualifier.Project
   };
   const wrapper = shallowRender({ component });
   expect(wrapper).toMatchSnapshot();
@@ -54,7 +45,7 @@ it('renders favorite', () => {
     isFavorite: true,
     key: 'foo',
     name: 'foo',
-    qualifier: 'TRK'
+    qualifier: ComponentQualifier.Project
   };
   const wrapper = shallowRender({ component });
   expect(wrapper).toMatchSnapshot();
@@ -65,47 +56,19 @@ it('renders recently browsed', () => {
     isRecentlyBrowsed: true,
     key: 'foo',
     name: 'foo',
-    qualifier: 'TRK'
-  };
-  const wrapper = shallowRender({ component });
-  expect(wrapper).toMatchSnapshot();
-});
-
-it('renders projects', () => {
-  const component = {
-    isRecentlyBrowsed: true,
-    key: 'qwe',
-    name: 'qwe',
-    qualifier: ComponentQualifier.Project,
-    project: 'foo'
+    qualifier: ComponentQualifier.Project
   };
   const wrapper = shallowRender({ component });
   expect(wrapper).toMatchSnapshot();
 });
 
-it('shows tooltip after delay', () => {
-  const wrapper = shallowRender();
-  expect(wrapper.find('Tooltip').prop('visible')).toBe(false);
-
-  wrapper.setProps({ selected: true });
-  expect(wrapper.find('Tooltip').prop('visible')).toBe(false);
-
-  jest.runAllTimers();
-  wrapper.update();
-  expect(wrapper.find('Tooltip').prop('visible')).toBe(true);
-
-  wrapper.setProps({ selected: false });
-  expect(wrapper.find('Tooltip').prop('visible')).toBe(false);
-});
-
 function shallowRender(props: Partial<SearchResult['props']> = {}) {
   return shallow(
     <SearchResult
-      component={{ key: 'foo', name: 'foo', qualifier: 'TRK' }}
+      component={{ key: 'foo', name: 'foo', qualifier: ComponentQualifier.Project }}
       innerRef={jest.fn()}
       onClose={jest.fn()}
       onSelect={jest.fn()}
-      projects={{ foo: { name: 'foo' } }}
       selected={false}
       {...props}
     />
index 4cee1218fcdb00749da49cf63778795171e5a758..a9d22eae13d0607c730e4033ff6592285cc7776f 100644 (file)
@@ -6,25 +6,23 @@ exports[`renders favorite 1`] = `
   key="foo"
   role="option"
 >
-  <Tooltip
-    mouseEnterDelay={1}
-    overlay="foo"
-    placement="left"
-    visible={false}
-  >
-    <Link
-      data-key="foo"
-      onClick={[MockFunction]}
-      to={
-        Object {
-          "pathname": "/dashboard",
-          "search": "?id=foo",
-        }
+  <Link
+    data-key="foo"
+    onClick={[MockFunction]}
+    onFocus={[Function]}
+    to={
+      Object {
+        "pathname": "/dashboard",
+        "search": "?id=foo",
       }
+    }
+  >
+    <div
+      className="navbar-search-item-link little-padded-top"
+      onMouseEnter={[Function]}
     >
-      <span
-        className="navbar-search-item-link"
-        onMouseEnter={[Function]}
+      <div
+        className="display-flex-center"
       >
         <span
           className="navbar-search-item-icons little-spacer-right"
@@ -43,9 +41,14 @@ exports[`renders favorite 1`] = `
         >
           foo
         </span>
-      </span>
-    </Link>
-  </Tooltip>
+      </div>
+      <div
+        className="navbar-search-item-right text-muted-2"
+      >
+        foo
+      </div>
+    </div>
+  </Link>
 </li>
 `;
 
@@ -55,25 +58,23 @@ exports[`renders match 1`] = `
   key="foo"
   role="option"
 >
-  <Tooltip
-    mouseEnterDelay={1}
-    overlay="foo"
-    placement="left"
-    visible={false}
-  >
-    <Link
-      data-key="foo"
-      onClick={[MockFunction]}
-      to={
-        Object {
-          "pathname": "/dashboard",
-          "search": "?id=foo",
-        }
+  <Link
+    data-key="foo"
+    onClick={[MockFunction]}
+    onFocus={[Function]}
+    to={
+      Object {
+        "pathname": "/dashboard",
+        "search": "?id=foo",
       }
+    }
+  >
+    <div
+      className="navbar-search-item-link little-padded-top"
+      onMouseEnter={[Function]}
     >
-      <span
-        className="navbar-search-item-link"
-        onMouseEnter={[Function]}
+      <div
+        className="display-flex-center"
       >
         <span
           className="navbar-search-item-icons little-spacer-right"
@@ -91,62 +92,14 @@ exports[`renders match 1`] = `
             }
           }
         />
-      </span>
-    </Link>
-  </Tooltip>
-</li>
-`;
-
-exports[`renders projects 1`] = `
-<li
-  aria-selected={false}
-  key="qwe"
-  role="option"
->
-  <Tooltip
-    mouseEnterDelay={1}
-    overlay="qwe"
-    placement="left"
-    visible={false}
-  >
-    <Link
-      data-key="qwe"
-      onClick={[MockFunction]}
-      to={
-        Object {
-          "pathname": "/dashboard",
-          "search": "?id=qwe",
-        }
-      }
-    >
-      <span
-        className="navbar-search-item-link"
-        onMouseEnter={[Function]}
+      </div>
+      <div
+        className="navbar-search-item-right text-muted-2"
       >
-        <span
-          className="navbar-search-item-icons little-spacer-right"
-        >
-          <ClockIcon
-            size={12}
-          />
-          <QualifierIcon
-            className="little-spacer-right"
-            qualifier="TRK"
-          />
-        </span>
-        <span
-          className="navbar-search-item-match"
-        >
-          qwe
-        </span>
-        <div
-          className="navbar-search-item-right text-muted-2"
-        >
-          foo
-        </div>
-      </span>
-    </Link>
-  </Tooltip>
+        foo
+      </div>
+    </div>
+  </Link>
 </li>
 `;
 
@@ -156,25 +109,23 @@ exports[`renders recently browsed 1`] = `
   key="foo"
   role="option"
 >
-  <Tooltip
-    mouseEnterDelay={1}
-    overlay="foo"
-    placement="left"
-    visible={false}
-  >
-    <Link
-      data-key="foo"
-      onClick={[MockFunction]}
-      to={
-        Object {
-          "pathname": "/dashboard",
-          "search": "?id=foo",
-        }
+  <Link
+    data-key="foo"
+    onClick={[MockFunction]}
+    onFocus={[Function]}
+    to={
+      Object {
+        "pathname": "/dashboard",
+        "search": "?id=foo",
       }
+    }
+  >
+    <div
+      className="navbar-search-item-link little-padded-top"
+      onMouseEnter={[Function]}
     >
-      <span
-        className="navbar-search-item-link"
-        onMouseEnter={[Function]}
+      <div
+        className="display-flex-center"
       >
         <span
           className="navbar-search-item-icons little-spacer-right"
@@ -192,9 +143,14 @@ exports[`renders recently browsed 1`] = `
         >
           foo
         </span>
-      </span>
-    </Link>
-  </Tooltip>
+      </div>
+      <div
+        className="navbar-search-item-right text-muted-2"
+      >
+        foo
+      </div>
+    </div>
+  </Link>
 </li>
 `;
 
@@ -204,25 +160,23 @@ exports[`renders selected 1`] = `
   key="foo"
   role="option"
 >
-  <Tooltip
-    mouseEnterDelay={1}
-    overlay="foo"
-    placement="left"
-    visible={false}
-  >
-    <Link
-      data-key="foo"
-      onClick={[MockFunction]}
-      to={
-        Object {
-          "pathname": "/dashboard",
-          "search": "?id=foo",
-        }
+  <Link
+    data-key="foo"
+    onClick={[MockFunction]}
+    onFocus={[Function]}
+    to={
+      Object {
+        "pathname": "/dashboard",
+        "search": "?id=foo",
       }
+    }
+  >
+    <div
+      className="navbar-search-item-link little-padded-top"
+      onMouseEnter={[Function]}
     >
-      <span
-        className="navbar-search-item-link"
-        onMouseEnter={[Function]}
+      <div
+        className="display-flex-center"
       >
         <span
           className="navbar-search-item-icons little-spacer-right"
@@ -237,9 +191,14 @@ exports[`renders selected 1`] = `
         >
           foo
         </span>
-      </span>
-    </Link>
-  </Tooltip>
+      </div>
+      <div
+        className="navbar-search-item-right text-muted-2"
+      >
+        foo
+      </div>
+    </div>
+  </Link>
 </li>
 `;
 
@@ -250,25 +209,23 @@ exports[`renders selected 2`] = `
   key="foo"
   role="option"
 >
-  <Tooltip
-    mouseEnterDelay={1}
-    overlay="foo"
-    placement="left"
-    visible={false}
-  >
-    <Link
-      data-key="foo"
-      onClick={[MockFunction]}
-      to={
-        Object {
-          "pathname": "/dashboard",
-          "search": "?id=foo",
-        }
+  <Link
+    data-key="foo"
+    onClick={[MockFunction]}
+    onFocus={[Function]}
+    to={
+      Object {
+        "pathname": "/dashboard",
+        "search": "?id=foo",
       }
+    }
+  >
+    <div
+      className="navbar-search-item-link little-padded-top"
+      onMouseEnter={[Function]}
     >
-      <span
-        className="navbar-search-item-link"
-        onMouseEnter={[Function]}
+      <div
+        className="display-flex-center"
       >
         <span
           className="navbar-search-item-icons little-spacer-right"
@@ -283,8 +240,13 @@ exports[`renders selected 2`] = `
         >
           foo
         </span>
-      </span>
-    </Link>
-  </Tooltip>
+      </div>
+      <div
+        className="navbar-search-item-right text-muted-2"
+      >
+        foo
+      </div>
+    </div>
+  </Link>
 </li>
 `;
index 968463ba2890995d8bb71447b7bbb0248f61633a..c8398d5f695b3a292100891779ea483bde769f56 100644 (file)
@@ -38,7 +38,6 @@ export interface ComponentResult {
   key: string;
   match?: string;
   name: string;
-  project?: string;
   qualifier: string;
 }
 
index 5447d52f898e84fc1b7ccd0f23e3f0a605e0f1bd..00d1109cf265ca70e8bf67d51b04e47c1ea7c0b4 100644 (file)
@@ -102,28 +102,6 @@ export function keydown(args: { key?: KeyboardKeys; metaKey?: boolean; ctrlKey?:
   document.dispatchEvent(event);
 }
 
-export function elementKeydown(element: ShallowWrapper, key: KeyboardKeys): void {
-  const event = {
-    currentTarget: { element },
-    nativeEvent: {
-      key,
-      stopImmediatePropagation: () => {
-        /* noop */
-      }
-    },
-    preventDefault() {
-      /*noop*/
-    }
-  };
-
-  if (typeof element.type() === 'string') {
-    // `type()` is string for native dom elements
-    element.simulate('keydown', event);
-  } else {
-    element.prop<Function>('onKeyDown')(event);
-  }
-}
-
 export function resizeWindowTo(width?: number, height?: number) {
   // `document.documentElement.clientHeight/clientWidth` are getters by default,
   // so we need to redefine them. Pass `configurable: true` to allow to redefine