import { observer } from "mobx-react"; import { EditIcon, SearchIcon, ShapesIcon, HomeIcon } from "outline-icons"; import * as React from "react"; import { DndProvider } from "react-dnd"; import { HTML5Backend } from "react-dnd-html5-backend"; import { useTranslation } from "react-i18next"; import styled from "styled-components"; import Flex from "~/components/Flex"; import Scrollable from "~/components/Scrollable"; import Text from "~/components/Text"; import { inviteUser } from "~/actions/definitions/users"; import useCurrentTeam from "~/hooks/useCurrentTeam"; import useCurrentUser from "~/hooks/useCurrentUser"; import usePolicy from "~/hooks/usePolicy"; import useStores from "~/hooks/useStores"; import AccountMenu from "~/menus/AccountMenu"; import OrganizationMenu from "~/menus/OrganizationMenu"; import { homePath, draftsPath, templatesPath, searchPath, } from "~/utils/routeHelpers"; import Avatar from "../Avatar"; import TeamLogo from "../TeamLogo"; import Sidebar from "./Sidebar"; import ArchiveLink from "./components/ArchiveLink"; import Collections from "./components/Collections"; import Section from "./components/Section"; import SidebarAction from "./components/SidebarAction"; import SidebarButton from "./components/SidebarButton"; import SidebarLink from "./components/SidebarLink"; import Starred from "./components/Starred"; import TrashLink from "./components/TrashLink"; function AppSidebar() { const { t } = useTranslation(); const { documents } = useStores(); const team = useCurrentTeam(); const user = useCurrentUser(); const can = usePolicy(team.id); React.useEffect(() => { documents.fetchDrafts(); documents.fetchTemplates(); }, [documents]); const [dndArea, setDndArea] = React.useState(); const handleSidebarRef = React.useCallback((node) => setDndArea(node), []); const html5Options = React.useMemo( () => ({ rootElement: dndArea, }), [dndArea] ); return ( {dndArea && ( {(props) => ( } showDisclosure /> )}
} exact={false} label={t("Home")} /> } label={t("Search")} exact={false} /> {can.createDocument && ( } label={ {t("Drafts")} {documents.totalDrafts} } /> )}
{can.createDocument && ( <> } exact={false} label={t("Templates")} active={ documents.active ? documents.active.isTemplate && !documents.active.isDeleted && !documents.active.isArchived : undefined } /> )}
{(props) => ( } /> )}
)}
); } const StyledTeamLogo = styled(TeamLogo)` margin-right: 4px; `; const StyledAvatar = styled(Avatar)` margin-left: 4px; `; const Drafts = styled(Text)` margin: 0 4px; `; export default observer(AppSidebar);