import { useState } from "react"; import { Button, Indicator, Loader, Modal, Stack, Tabs, Text, Center, } from "@mantine/core"; import { useDisclosure } from "@mantine/hooks"; import { IconWorld, IconLock } from "@tabler/icons-react"; import { useTranslation } from "react-i18next"; import { useParams } from "react-router-dom"; import { extractPageSlugId } from "@/lib"; import { usePageQuery } from "@/features/page/queries/page-query"; import { usePageRestrictionInfoQuery } from "@/ee/page-permission/queries/page-permission-query"; import { PagePermissionTab } from "@/ee/page-permission"; import { PublishTab } from "./publish-tab"; import { useShareForPageQuery } from "@/features/share/queries/share-query"; import { useHasFeature } from "@/ee/hooks/use-feature"; import { Feature } from "@/ee/features"; import { useAtom } from "jotai"; import { workspaceAtom } from "@/features/user/atoms/current-user-atom"; import { useSpaceQuery } from "@/features/space/queries/space-query"; type PageShareModalProps = { readOnly?: boolean; }; export function PageShareModal({ readOnly }: PageShareModalProps) { const { t } = useTranslation(); const { pageSlug, spaceSlug } = useParams(); const pageSlugId = extractPageSlugId(pageSlug); const [opened, { open, close }] = useDisclosure(false); const hasPagePermissions = useHasFeature(Feature.PAGE_PERMISSIONS); const [activeTab, setActiveTab] = useState( hasPagePermissions ? "access" : "publish", ); const [workspace] = useAtom(workspaceAtom); const { data: space } = useSpaceQuery(spaceSlug); const workspaceSharingDisabled = workspace?.settings?.sharing?.disabled === true; const spaceSharingDisabled = space?.settings?.sharing?.disabled === true; const { data: page } = usePageQuery({ pageId: pageSlugId }); const pageId = page?.id; const isRestricted = page?.permissions?.hasRestriction ?? false; const { data: share } = useShareForPageQuery(pageId); const isPubliclyShared = !!share; const { data: restrictionInfo, isLoading: restrictionLoading } = usePageRestrictionInfoQuery(opened && hasPagePermissions ? pageId : undefined); return ( <> {t("Access")} ) : null } > {t("Publish")} {!hasPagePermissions ? ( {t("Page permissions")} {t( "Control who can view and edit individual pages. Available with an enterprise license.", )} ) : restrictionLoading || !pageId || !restrictionInfo ? (
) : ( )}
); }