import React, { useCallback, useState, useEffect } from 'react'; import PropTypes from 'prop-types'; import { Collapse, Button } from 'reactstrap'; import EditorContainer from '~/client/services/EditorContainer'; import { useCurrentPagePath, useIsSlackConfigured } from '~/stores/context'; import { useSWRxSlackChannels, useIsSlackEnabled } from '~/stores/editor'; import { EditorMode, useDrawerOpened, useEditorMode, useIsDeviceSmallerThanMd, } from '~/stores/ui'; import SavePageControls from '../SavePageControls'; import SlackLogo from '../SlackLogo'; import { SlackNotification } from '../SlackNotification'; import { withUnstatedContainers } from '../UnstatedUtils'; import OptionsSelector from './OptionsSelector'; const EditorNavbarBottom = (props) => { const { data: editorMode } = useEditorMode(); const [isExpanded, setExpanded] = useState(false); const [isSlackExpanded, setSlackExpanded] = useState(false); const { data: isSlackConfigured } = useIsSlackConfigured(); const { mutate: mutateDrawerOpened } = useDrawerOpened(); const { data: isDeviceSmallerThanMd } = useIsDeviceSmallerThanMd(); const additionalClasses = ['grw-editor-navbar-bottom']; const { data: currentPagePath } = useCurrentPagePath(); const { data: slackChannelsData } = useSWRxSlackChannels(currentPagePath); const { data: isSlackEnabled, mutate: mutateIsSlackEnabled } = useIsSlackEnabled(); 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 */}
) }
); }; EditorNavbarBottom.propTypes = { editorContainer: PropTypes.instanceOf(EditorContainer).isRequired, }; export default withUnstatedContainers(EditorNavbarBottom, [EditorContainer]);