import React, { useCallback, useState, useEffect } from 'react'; import dynamic from 'next/dynamic'; import { Collapse, Button } from 'reactstrap'; import { useCurrentPagePath, useIsSlackConfigured } from '~/stores/context'; import { useSWRxSlackChannels, useIsSlackEnabled } from '~/stores/editor'; import { EditorMode, useDrawerOpened, useEditorMode, useIsDeviceSmallerThanMd, } from '~/stores/ui'; const SavePageControls = dynamic(() => import('../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(''); useEffect(() => { if (slackChannelsData != null) { setSlackChannelsStr(slackChannelsData.toString()); mutateIsSlackEnabled(false); } }, [mutateIsSlackEnabled, slackChannelsData]); 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;