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 { EditorMode, useDrawerOpened, useEditorMode, useIsDeviceSmallerThanMd, } from '~/stores/ui'; 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 { mutate: mutateDrawerOpened } = useDrawerOpened(); const { data: isDeviceSmallerThanMd } = useIsDeviceSmallerThanMd(); const { data: currentPagePath } = useCurrentPagePath(); const { data: slackChannelsData } = useSWRxSlackChannels(currentPagePath); const { data: isSlackEnabled, mutate: mutateIsSlackEnabled } = useIsSlackEnabled(); const additionalClasses = ['grw-editor-navbar-bottom']; 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 renderDrawerButton = () => ( ); const renderExpandButton = () => (
); const isOptionsSelectorEnabled = editorMode !== EditorMode.HackMD; const isCollapsedOptionsSelectorEnabled = isOptionsSelectorEnabled && isDeviceSmallerThanMd; return (
{/* Collapsed SlackNotification */} {isSlackConfigured && ( ) }
{ isDeviceSmallerThanMd && renderDrawerButton() } { isOptionsSelectorEnabled && !isDeviceSmallerThanMd && }
{/* Responsive Design for the SlackNotification */} {/* Button or the normal Slack banner */} {isSlackConfigured && (isDeviceSmallerThanMd ? ( ) : (
{isSlackEnabled != null && ( )}
))} { isCollapsedOptionsSelectorEnabled && renderExpandButton() }
{/* Collapsed OptionsSelector */} { isCollapsedOptionsSelectorEnabled && (
{/* set padding for border-top */}
) }
); }; export default EditorNavbarBottom;