{"version":3,"file":"PreviewSidePanel.mjs","sources":["../../../../admin/src/preview/components/PreviewSidePanel.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useQueryParams, useTracking, useForm } from '@strapi/admin/strapi-admin';\nimport { Box, Button, Tooltip, type TooltipProps } from '@strapi/design-system';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link, useLocation } from 'react-router-dom';\n\nimport { useGetPreviewUrlQuery } from '../services/preview';\n\nimport type { PanelComponent } from '@strapi/content-manager/strapi-admin';\nimport type { UID } from '@strapi/types';\n\ninterface ConditionalTooltipProps {\n  isShown: boolean;\n  label: TooltipProps['label'];\n  children: React.ReactNode;\n}\n\nconst ConditionalTooltip = ({ isShown, label, children }: ConditionalTooltipProps) => {\n  if (isShown) {\n    return <Tooltip label={label}>{children}</Tooltip>;\n  }\n\n  return children;\n};\n\nconst PreviewSidePanel: PanelComponent = ({ model, documentId, document }) => {\n  const { formatMessage } = useIntl();\n  const { trackUsage } = useTracking();\n  const { pathname } = useLocation();\n  const [{ query }] = useQueryParams();\n  const isModified = useForm('PreviewSidePanel', (state) => state.modified);\n  const isUnsaved = Boolean(!document || !document.id);\n\n  const title = formatMessage({\n    id: 'content-manager.preview.panel.title',\n    defaultMessage: 'Preview',\n  });\n\n  /**\n   * The preview URL isn't used in this component, we just fetch it to know if preview is enabled\n   * for the content type. If it's not, the panel is not displayed. If it is, we display a link to\n   * /preview, and the URL will already be loaded in the RTK query cache.\n   */\n  const { data, error } = useGetPreviewUrlQuery(\n    {\n      params: {\n        contentType: model as UID.ContentType,\n      },\n      query: {\n        documentId,\n        locale: document?.locale,\n        status: document?.status,\n      },\n    },\n    // Don't bother making the request since we won't show any UI\n    { skip: isUnsaved }\n  );\n\n  if (isUnsaved) {\n    return null;\n  }\n\n  // Preview was not configured but not disabled either (otherwise it would be a success 204).\n  // So we encourage the user to set it up.\n  if (error && error.name === 'NotFoundError') {\n    return {\n      title,\n      content: (\n        <Button\n          variant=\"tertiary\"\n          tag={Link}\n          to=\"https://docs.strapi.io/cms/features/preview\"\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n          width=\"100%\"\n        >\n          {formatMessage({\n            id: 'content-manager.preview.panel.button-configuration',\n            defaultMessage: 'Set up preview',\n          })}\n        </Button>\n      ),\n    };\n  }\n\n  if (!data?.data?.url || error) {\n    return null;\n  }\n\n  const trackNavigation = () => {\n    // Append /preview to the current URL\n    const destinationPathname = pathname.replace(/\\/$/, '') + '/preview';\n    trackUsage('willNavigate', { from: pathname, to: destinationPathname });\n  };\n\n  return {\n    title,\n    content: (\n      <ConditionalTooltip\n        label={formatMessage({\n          id: 'content-manager.preview.panel.button-disabled-tooltip',\n          defaultMessage: 'Please save to open the preview',\n        })}\n        isShown={isModified}\n      >\n        <Box cursor=\"not-allowed\" width=\"100%\">\n          <Button\n            variant=\"tertiary\"\n            tag={Link}\n            to={{ pathname: 'preview', search: stringify(query, { encode: false }) }}\n            onClick={trackNavigation}\n            width=\"100%\"\n            disabled={isModified}\n            pointerEvents={isModified ? 'none' : undefined}\n            tabIndex={isModified ? -1 : undefined}\n          >\n            {formatMessage({\n              id: 'content-manager.preview.panel.button',\n              defaultMessage: 'Open preview',\n            })}\n          </Button>\n        </Box>\n      </ConditionalTooltip>\n    ),\n  };\n};\n\nexport { PreviewSidePanel };\n"],"names":["ConditionalTooltip","isShown","label","children","_jsx","Tooltip","PreviewSidePanel","model","documentId","document","formatMessage","useIntl","trackUsage","useTracking","pathname","useLocation","query","useQueryParams","isModified","useForm","state","modified","isUnsaved","Boolean","id","title","defaultMessage","data","error","useGetPreviewUrlQuery","params","contentType","locale","status","skip","name","content","Button","variant","tag","Link","to","target","rel","width","url","trackNavigation","destinationPathname","replace","from","Box","cursor","search","stringify","encode","onClick","disabled","pointerEvents","undefined","tabIndex"],"mappings":"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"}