// @flow import * as React from "react"; import { observer, inject } from "mobx-react"; import styled from "styled-components"; import { ArchiveIcon, HomeIcon, EditIcon, SearchIcon, StarredIcon, ShapesIcon, TrashIcon, PlusIcon, } from "outline-icons"; import Flex from "components/Flex"; import Modal from "components/Modal"; import Invite from "scenes/Invite"; import AccountMenu from "menus/AccountMenu"; import Sidebar from "./Sidebar"; import Scrollable from "components/Scrollable"; import Section from "./components/Section"; import Collections from "./components/Collections"; import SidebarLink from "./components/SidebarLink"; import HeaderBlock from "./components/HeaderBlock"; import Bubble from "./components/Bubble"; import AuthStore from "stores/AuthStore"; import DocumentsStore from "stores/DocumentsStore"; import PoliciesStore from "stores/PoliciesStore"; import UiStore from "stores/UiStore"; import { observable } from "mobx"; type Props = { auth: AuthStore, documents: DocumentsStore, policies: PoliciesStore, ui: UiStore, }; @observer class MainSidebar extends React.Component { @observable inviteModalOpen: boolean = false; componentDidMount() { this.props.documents.fetchDrafts(); this.props.documents.fetchTemplates(); } handleCreateCollection = (ev: SyntheticEvent<>) => { ev.preventDefault(); this.props.ui.setActiveModal("collection-new"); }; handleInviteModalOpen = (ev: SyntheticEvent<>) => { ev.preventDefault(); this.inviteModalOpen = true; }; handleInviteModalClose = () => { this.inviteModalOpen = false; }; render() { const { auth, documents, policies } = this.props; const { user, team } = auth; if (!user || !team) return null; const draftDocumentsCount = documents.drafts.length; const can = policies.abilities(team.id); return ( } />
} exact={false} label="Home" /> } label="Search" exact={false} /> } exact={false} label="Starred" /> } exact={false} label="Templates" active={ documents.active ? documents.active.template : undefined } /> } label={ Drafts {draftDocumentsCount > 0 && ( )} } active={ documents.active ? !documents.active.publishedAt && !documents.active.isDeleted && !documents.active.isTemplate : undefined } />
} exact={false} label="Archive" active={ documents.active ? documents.active.isArchived && !documents.active.isDeleted : undefined } /> } exact={false} label="Trash" active={ documents.active ? documents.active.isDeleted : undefined } /> {can.invite && ( } label="Invite people…" /> )}
); } } const Drafts = styled(Flex)` height: 24px; `; export default inject("documents", "policies", "auth", "ui")(MainSidebar);