diff --git a/cypress/integration/click-menu-scroll-top_spec.js b/cypress/integration/click-menu-scroll-top_spec.js index 932144da8186..266d0397cee6 100644 --- a/cypress/integration/click-menu-scroll-top_spec.js +++ b/cypress/integration/click-menu-scroll-top_spec.js @@ -3,7 +3,7 @@ describe('Click menu', () => { cy.visit('/concepts/modules/'); // scroll to Contributors section // note that there's no hash in url - cy.get('.contributors__section').scrollIntoView(); + cy.get('[data-testid="contributors"]').scrollIntoView(); const selector = '.sidebar-item__title[href="/concepts/modules/"]'; diff --git a/cypress/integration/scroll_spec.js b/cypress/integration/scroll_spec.js index 37e2c0fc17a0..dc2ac68f3d3f 100644 --- a/cypress/integration/scroll_spec.js +++ b/cypress/integration/scroll_spec.js @@ -5,17 +5,17 @@ describe('Scroll Test', () => { cy.viewport(size); cy.visit('/guides/getting-started'); // scroll to Contributors section - cy.get('.contributors__section').scrollIntoView(); + cy.get('[data-testid="contributors"]').scrollIntoView(); cy.isNotInViewport('#basic-setup'); cy.visit('/guides/build-performance/'); - cy.isNotInViewport('.contributors__section'); + cy.isNotInViewport('[data-testid="contributors"]'); }); it(`scroll to fragment when accessing new page with fragment on ${size}`, () => { cy.viewport(size); cy.visit('/guides/getting-started'); - cy.get('.contributors__section').scrollIntoView(); + cy.get('[data-testid="contributors"]').scrollIntoView(); cy.visit('/guides/build-performance/#development'); // since we lazy load notification bar now, #development element is a little out of viewport now diff --git a/src/components/Contributors/Contributors.jsx b/src/components/Contributors/Contributors.jsx index 75d0e0981ede..8d0eca7cc0b5 100644 --- a/src/components/Contributors/Contributors.jsx +++ b/src/components/Contributors/Contributors.jsx @@ -1,66 +1,66 @@ -import { Component } from 'react'; +import { useState } from 'react'; import VisibilitySensor from 'react-visibility-sensor'; import SmallIcon from '../../assets/icon-square-small-slack.png'; -import './Contributors.scss'; import PropTypes from 'prop-types'; import { contributorsNotFound } from './404.js'; -export default class Contributors extends Component { - static propTypes = { - contributors: PropTypes.array, - }; - state = { - inView: false, - }; +Contributors.propTypes = { + contributors: PropTypes.array.isRequired, +}; - handleInView = (inView) => { +Contributor.propTypes = { + contributor: PropTypes.string.isRequired, + inView: PropTypes.bool.isRequired, +}; +function Contributor({ contributor, inView }) { + return ( + + {contributor} + + ); +} + +export default function Contributors({ contributors }) { + const [inView, setInView] = useState(false); + const handleInView = (inView) => { if (!inView) { return; } - this.setState({ inView }); + setInView(inView); }; + if (!contributors.length) { + return