import { observer } from "mobx-react"; import { MoreIcon, QuestionMarkIcon, UserIcon } from "outline-icons"; import * as React from "react"; import { useTranslation } from "react-i18next"; import { useTheme } from "styled-components"; import Squircle from "@shared/components/Squircle"; import { CollectionPermission } from "@shared/types"; import type Collection from "~/models/Collection"; import type Document from "~/models/Document"; import Flex from "~/components/Flex"; import Text from "~/components/Text"; import useCurrentUser from "~/hooks/useCurrentUser"; import useRequest from "~/hooks/useRequest"; import useStores from "~/hooks/useStores"; import Avatar from "../../Avatar"; import { AvatarSize } from "../../Avatar/Avatar"; import CollectionIcon from "../../Icons/CollectionIcon"; import Tooltip from "../../Tooltip"; import { ListItem } from "../components/ListItem"; type Props = { /** The document being shared. */ document: Document; children: React.ReactNode; }; export const OtherAccess = observer(({ document, children }: Props) => { const { t } = useTranslation(); const theme = useTheme(); const collection = document.collection; const usersInCollection = useUsersInCollection(collection); const user = useCurrentUser(); return ( <> {collection ? ( <> {collection.permission ? ( } title={t("All members")} subtitle={t("Everyone in the workspace")} actions={ {collection?.permission === CollectionPermission.ReadWrite ? t("Can edit") : t("Can view")} } /> ) : usersInCollection ? ( } title={collection.name} subtitle={t("Everyone in the collection")} actions={{t("Can view")}} /> ) : ( } title={user.name} subtitle={t("You have full access")} actions={{t("Can edit")}} /> )} {children} ) : document.isDraft ? ( <> } title={document.createdBy?.name} actions={ {t("Can edit")} } /> {children} ) : ( <> {children} } title={t("Other people")} subtitle={t("Other workspace members may have access")} actions={ } /> )} ); }); const AccessTooltip = ({ children, content, }: { children?: React.ReactNode; content?: string; }) => { const { t } = useTranslation(); return ( {children} ); }; function useUsersInCollection(collection?: Collection) { const { users, memberships } = useStores(); const { request } = useRequest(() => memberships.fetchPage({ limit: 1, id: collection!.id }) ); React.useEffect(() => { if (collection && !collection.permission) { void request(); } }, [collection]); return collection ? collection.permission ? true : users.inCollection(collection.id).length > 1 : false; }