import React, { useCallback, useState, useEffect } from 'react'; import dynamic from 'next/dynamic'; import { Collapse, Button } from 'reactstrap'; import { SavePageControlsProps } from '~/components/SavePageControls'; import { useIsSlackConfigured } from '~/stores/context'; import { useSWRxSlackChannels, useIsSlackEnabled } from '~/stores/editor'; import { useCurrentPagePath } from '~/stores/page'; import { useDrawerOpened, useEditorMode, useIsDeviceLargerThanLg, useIsDeviceLargerThanMd, } from '~/stores/ui'; import styles from './EditorNavbarBottom.module.scss'; const moduleClass = styles['grw-editor-navbar-bottom']; const SavePageControls = dynamic(() => import('~/components/SavePageControls').then(mod => mod.SavePageControls), { ssr: false }); const SlackLogo = dynamic(() => import('~/components/SlackLogo').then(mod => mod.SlackLogo), { ssr: false }); const SlackNotification = dynamic(() => import('~/components/SlackNotification').then(mod => mod.SlackNotification), { ssr: false }); const OptionsSelector = dynamic(() => import('~/components/PageEditor/OptionsSelector').then(mod => mod.OptionsSelector), { ssr: false }); const EditorNavbarBottom = (): JSX.Element => { const [isExpanded, setExpanded] = useState(false); const [isSlackExpanded, setSlackExpanded] = useState(false); const { data: editorMode } = useEditorMode(); const { data: isSlackConfigured } = useIsSlackConfigured(); const { data: isDeviceLargerThanMd } = useIsDeviceLargerThanMd(); const { data: isDeviceLargerThanLg } = useIsDeviceLargerThanLg(); const { data: currentPagePath } = useCurrentPagePath(); const { data: slackChannelsData } = useSWRxSlackChannels(currentPagePath); const { data: isSlackEnabled, mutate: mutateIsSlackEnabled } = useIsSlackEnabled(); const [slackChannelsStr, setSlackChannelsStr] = useState(''); // DO NOT dependent on slackChannelsData directly: https://github.com/weseek/growi/pull/7332 const slackChannelsDataString = slackChannelsData?.toString(); useEffect(() => { if (editorMode === 'editor') { setSlackChannelsStr(slackChannelsDataString ?? ''); mutateIsSlackEnabled(false); } }, [editorMode, mutateIsSlackEnabled, slackChannelsDataString]); const isSlackEnabledToggleHandler = (bool: boolean) => { mutateIsSlackEnabled(bool, false); }; const slackChannelsChangedHandler = useCallback((slackChannels: string) => { setSlackChannelsStr(slackChannels); }, []); const renderExpandButton = () => (
); const isCollapsedOptionsSelectorEnabled = !isDeviceLargerThanLg; return (
{/* Collapsed SlackNotification */} {isSlackConfigured && ( ) }
{ isDeviceLargerThanMd && }
{/* Responsive Design for the SlackNotification */} {/* Button or the normal Slack banner */} {isSlackConfigured && (!isDeviceLargerThanMd ? ( ) : (
{isSlackEnabled != null && ( )}
))} { isCollapsedOptionsSelectorEnabled && renderExpandButton() }
{/* Collapsed OptionsSelector */} { isCollapsedOptionsSelectorEnabled && (
{/* set padding for border-top */}
) }
); }; export default EditorNavbarBottom;