import React, { useState, useCallback, useEffect } from 'react'; import PropTypes from 'prop-types'; import loggerFactory from '@alias/logger'; import StickyEvents from 'sticky-events'; import NavigationContainer from '../services/NavigationContainer'; import { withUnstatedContainers } from './UnstatedUtils'; const logger = loggerFactory('growi:cli:Fab'); const Fab = (props) => { const { navigationContainer } = props; const [animateClasses, setAnimateClasses] = useState('invisible'); const stickyChangeHandler = useCallback((event) => { logger.debug('StickyEvents.CHANGE detected'); const classes = event.detail.isSticky ? 'animated fadeInUp faster' : 'animated fadeOut faster'; setAnimateClasses(classes); }, []); // setup effect by sticky event useEffect(() => { // sticky // See: https://github.com/ryanwalters/sticky-events const stickyEvents = new StickyEvents({ stickySelector: '#grw-fav-sticky-trigger' }); const { stickySelector } = stickyEvents; const elem = document.querySelector(stickySelector); elem.addEventListener(StickyEvents.CHANGE, stickyChangeHandler); // return clean up handler return () => { elem.removeEventListener(StickyEvents.CHANGE, stickyChangeHandler); }; }, [stickyChangeHandler]); return (