* fix: add disclosure and transition * fix: keep collections expanded * fix: tune transition and collapsing conditions * fix: collectionIcon expanded props is no longer driven by expanded state * fix: sync issue * fix: managing state together * fix: remove comment * fix: simplify expanded state * fix: remove extra state * fix: remove animation and retain expanded state * fix: remove isCollectionDropped * fix: don't use ref * review suggestions * fix many functional and design issues * don't render every single document in the sidebar, just ones that the user has seen before * chore: Sidebar refinement (#3154) * stash * wip: More sidebar tweaks * Simplify draft bubble * disclosure refactor * wip wip * lint * tweak menu position * Use document emoji for starred docs where available * feat: Trigger cmd+k from sidebar (#3149) * feat: Trigger cmd+k from sidebar * Add hint when opening command bar from sidebar * fix: Clicking internal links in shared documents sometimes reroutes to Login * fix: Spacing issues on connected slack channels list * Merge * fix: Do not prefetch JS bundles on public share links * fix: Buttons show on collection empty state when user does not have permission to edit * fix: the hover area for the "collections" subheading was being obfuscated by the initial collection drop cursor * fix: top-align disclosures * fix: Disclosure color PR feedback fix: Starred no longer draggable * fix: Overflow on sidebar button * fix: Scrollbar in sidebar when command menu is open * Minor alignment issues, clarify back in settings sidebar * fix: Fade component causes SidebarButton missizing Co-authored-by: Nan Yu <thenanyu@gmail.com> Co-authored-by: Tom Moor <tom.moor@gmail.com> Co-authored-by: Nan Yu <thenanyu@gmail.com>
185 lines
4.7 KiB
TypeScript
185 lines
4.7 KiB
TypeScript
import {
|
|
HomeIcon,
|
|
SearchIcon,
|
|
ArchiveIcon,
|
|
TrashIcon,
|
|
EditIcon,
|
|
OpenIcon,
|
|
SettingsIcon,
|
|
ShapesIcon,
|
|
KeyboardIcon,
|
|
EmailIcon,
|
|
LogoutIcon,
|
|
ProfileIcon,
|
|
} from "outline-icons";
|
|
import * as React from "react";
|
|
import {
|
|
developersUrl,
|
|
changelogUrl,
|
|
mailToUrl,
|
|
githubIssuesUrl,
|
|
} from "@shared/utils/urlHelpers";
|
|
import stores from "~/stores";
|
|
import SearchQuery from "~/models/SearchQuery";
|
|
import KeyboardShortcuts from "~/scenes/KeyboardShortcuts";
|
|
import { createAction } from "~/actions";
|
|
import {
|
|
NavigationSection,
|
|
NoSection,
|
|
RecentSearchesSection,
|
|
} from "~/actions/sections";
|
|
import history from "~/utils/history";
|
|
import {
|
|
organizationSettingsPath,
|
|
profileSettingsPath,
|
|
homePath,
|
|
searchPath,
|
|
draftsPath,
|
|
templatesPath,
|
|
archivePath,
|
|
trashPath,
|
|
} from "~/utils/routeHelpers";
|
|
|
|
export const navigateToHome = createAction({
|
|
name: ({ t }) => t("Home"),
|
|
section: NavigationSection,
|
|
shortcut: ["d"],
|
|
icon: <HomeIcon />,
|
|
perform: () => history.push(homePath()),
|
|
visible: ({ location }) => location.pathname !== homePath(),
|
|
});
|
|
|
|
export const navigateToRecentSearchQuery = (searchQuery: SearchQuery) =>
|
|
createAction({
|
|
section: RecentSearchesSection,
|
|
name: searchQuery.query,
|
|
icon: <SearchIcon />,
|
|
perform: () => history.push(searchPath(searchQuery.query)),
|
|
});
|
|
|
|
export const navigateToSearchQuery = (searchQuery: string) =>
|
|
createAction({
|
|
id: "search",
|
|
section: NoSection,
|
|
name: ({ t }) =>
|
|
t(`Search documents for "{{searchQuery}}"`, { searchQuery }),
|
|
icon: <SearchIcon />,
|
|
perform: () => history.push(searchPath(searchQuery)),
|
|
visible: ({ location }) => location.pathname !== searchPath(),
|
|
});
|
|
|
|
export const navigateToDrafts = createAction({
|
|
name: ({ t }) => t("Drafts"),
|
|
section: NavigationSection,
|
|
icon: <EditIcon />,
|
|
perform: () => history.push(draftsPath()),
|
|
visible: ({ location }) => location.pathname !== draftsPath(),
|
|
});
|
|
|
|
export const navigateToTemplates = createAction({
|
|
name: ({ t }) => t("Templates"),
|
|
section: NavigationSection,
|
|
icon: <ShapesIcon />,
|
|
perform: () => history.push(templatesPath()),
|
|
visible: ({ location }) => location.pathname !== templatesPath(),
|
|
});
|
|
|
|
export const navigateToArchive = createAction({
|
|
name: ({ t }) => t("Archive"),
|
|
section: NavigationSection,
|
|
shortcut: ["g", "a"],
|
|
icon: <ArchiveIcon />,
|
|
perform: () => history.push(archivePath()),
|
|
visible: ({ location }) => location.pathname !== archivePath(),
|
|
});
|
|
|
|
export const navigateToTrash = createAction({
|
|
name: ({ t }) => t("Trash"),
|
|
section: NavigationSection,
|
|
icon: <TrashIcon />,
|
|
perform: () => history.push(trashPath()),
|
|
visible: ({ location }) => location.pathname !== trashPath(),
|
|
});
|
|
|
|
export const navigateToSettings = createAction({
|
|
name: ({ t }) => t("Settings"),
|
|
section: NavigationSection,
|
|
shortcut: ["g", "s"],
|
|
icon: <SettingsIcon />,
|
|
perform: () => history.push(organizationSettingsPath()),
|
|
});
|
|
|
|
export const navigateToProfileSettings = createAction({
|
|
name: ({ t }) => t("Profile"),
|
|
section: NavigationSection,
|
|
iconInContextMenu: false,
|
|
icon: <ProfileIcon />,
|
|
perform: () => history.push(profileSettingsPath()),
|
|
});
|
|
|
|
export const openAPIDocumentation = createAction({
|
|
name: ({ t }) => t("API documentation"),
|
|
section: NavigationSection,
|
|
iconInContextMenu: false,
|
|
icon: <OpenIcon />,
|
|
perform: () => window.open(developersUrl()),
|
|
});
|
|
|
|
export const openFeedbackUrl = createAction({
|
|
name: ({ t }) => t("Send us feedback"),
|
|
section: NavigationSection,
|
|
iconInContextMenu: false,
|
|
icon: <EmailIcon />,
|
|
perform: () => window.open(mailToUrl()),
|
|
});
|
|
|
|
export const openBugReportUrl = createAction({
|
|
name: ({ t }) => t("Report a bug"),
|
|
section: NavigationSection,
|
|
perform: () => window.open(githubIssuesUrl()),
|
|
});
|
|
|
|
export const openChangelog = createAction({
|
|
name: ({ t }) => t("Changelog"),
|
|
section: NavigationSection,
|
|
iconInContextMenu: false,
|
|
icon: <OpenIcon />,
|
|
perform: () => window.open(changelogUrl()),
|
|
});
|
|
|
|
export const openKeyboardShortcuts = createAction({
|
|
name: ({ t }) => t("Keyboard shortcuts"),
|
|
section: NavigationSection,
|
|
shortcut: ["?"],
|
|
iconInContextMenu: false,
|
|
icon: <KeyboardIcon />,
|
|
perform: ({ t }) => {
|
|
stores.dialogs.openGuide({
|
|
title: t("Keyboard shortcuts"),
|
|
content: <KeyboardShortcuts />,
|
|
});
|
|
},
|
|
});
|
|
|
|
export const logout = createAction({
|
|
name: ({ t }) => t("Log out"),
|
|
section: NavigationSection,
|
|
icon: <LogoutIcon />,
|
|
perform: () => stores.auth.logout(),
|
|
});
|
|
|
|
export const rootNavigationActions = [
|
|
navigateToHome,
|
|
navigateToDrafts,
|
|
navigateToTemplates,
|
|
navigateToArchive,
|
|
navigateToTrash,
|
|
navigateToSettings,
|
|
openAPIDocumentation,
|
|
openFeedbackUrl,
|
|
openBugReportUrl,
|
|
openChangelog,
|
|
openKeyboardShortcuts,
|
|
logout,
|
|
];
|