ToggleCollapseButton.tsx 899 B

1234567891011121314151617181920212223242526
  1. import { memo, useCallback } from 'react';
  2. import { useCollapsedContentsOpened, useCollapsedMode } from '~/stores/ui';
  3. import styles from './ToggleCollapseButton.module.scss';
  4. export const ToggleCollapseButton = memo((): JSX.Element => {
  5. const { data: isCollapsedMode, mutate: mutateCollapsedMode } = useCollapsedMode();
  6. const { mutate: mutateCollapsedContentsOpened } = useCollapsedContentsOpened();
  7. const toggle = useCallback(() => {
  8. mutateCollapsedMode(!isCollapsedMode);
  9. mutateCollapsedContentsOpened(false);
  10. }, [isCollapsedMode, mutateCollapsedContentsOpened, mutateCollapsedMode]);
  11. const rotationClass = isCollapsedMode ? 'rotate180' : '';
  12. return (
  13. <button type="button" className={`btn btn-primary ${styles['btn-toggle-collapse']} p-2`} onClick={toggle}>
  14. <span className={`material-icons fs-2 ${rotationClass}`}>first_page</span>
  15. </button>
  16. );
  17. });