UNPKG

@sanity/form-builder

Version:
115 lines (113 loc) • 7.19 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CrossDatasetReferencePreview = CrossDatasetReferencePreview; var _react = _interopRequireWildcard(require("react")); var _ui = require("@sanity/ui"); var _icons = require("@sanity/icons"); var _components = require("@sanity/base/components"); var _imageUrl = _interopRequireDefault(require("@sanity/image-url")); var _assetUtils = require("@sanity/asset-utils"); var _CrossDatasetReferencePreview = require("./CrossDatasetReferencePreview.styled"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function UnavailableMessage(props) { return /*#__PURE__*/_react.default.createElement(_CrossDatasetReferencePreview.TooltipContent, { padding: 3 }, /*#__PURE__*/_react.default.createElement(_ui.Box, { flex: 1 }, /*#__PURE__*/_react.default.createElement(_ui.Box, null, /*#__PURE__*/_react.default.createElement(_ui.Text, { as: "p", size: 1 }, props.children)))); } /** * Used to preview a referenced type * Takes the reference type as props * @param props * @constructor */ function CrossDatasetReferencePreview(props) { var _preview$published, _preview$published2, _preview$published3; var refType = props.refType, showStudioUrlIcon = props.showStudioUrlIcon, hasStudioUrl = props.hasStudioUrl, showTypeLabel = props.showTypeLabel, availability = props.availability, preview = props.preview, id = props.id, dataset = props.dataset, projectId = props.projectId; var notFound = availability.reason === 'NOT_FOUND'; var insufficientPermissions = availability.reason === 'PERMISSION_DENIED'; var previewMedia = (_preview$published = preview.published) === null || _preview$published === void 0 ? void 0 : _preview$published.media; var media = (0, _react.useMemo)(() => { if (previewMedia) { var isValidImageAsset = typeof (previewMedia === null || previewMedia === void 0 ? void 0 : previewMedia.asset) !== 'undefined' && (0, _assetUtils.isImageSource)(previewMedia); var isValidElement = /*#__PURE__*/_react.default.isValidElement(previewMedia); if (!isValidImageAsset && !isValidElement) { return null; } return function MediaPreview(_ref) { var dimensions = _ref.dimensions; return isValidElement ? previewMedia : isValidImageAsset && /*#__PURE__*/_react.default.createElement("img", { src: (0, _imageUrl.default)({ dataset, projectId }).image(previewMedia).withOptions(dimensions).url(), alt: "Image preview of referenced document", referrerPolicy: "strict-origin-when-cross-origin" }); }; } return refType !== null && refType !== void 0 && refType.icon ? /*#__PURE__*/(0, _react.createElement)(refType.icon) : null; }, [previewMedia, dataset, projectId, refType === null || refType === void 0 ? void 0 : refType.icon]); return /*#__PURE__*/_react.default.createElement(_CrossDatasetReferencePreview.StyledPreviewFlex, { align: "center", justify: "center", flex: 1, "data-testid": "preview" }, availability.available ? /*#__PURE__*/_react.default.createElement(_ui.Box, { flex: 1 }, /*#__PURE__*/_react.default.createElement(_components.DefaultPreview, { title: (_preview$published2 = preview.published) === null || _preview$published2 === void 0 ? void 0 : _preview$published2.title, subtitle: (_preview$published3 = preview.published) === null || _preview$published3 === void 0 ? void 0 : _preview$published3.subtitle, media: media || false })) : /*#__PURE__*/_react.default.createElement(_ui.Box, { flex: 1 }, /*#__PURE__*/_react.default.createElement(_ui.Flex, { align: "center" }, /*#__PURE__*/_react.default.createElement(_ui.Box, { flex: 1, paddingY: 2 }, /*#__PURE__*/_react.default.createElement(_ui.Text, { muted: true }, "Document unavailable")))), /*#__PURE__*/_react.default.createElement(_ui.Box, { paddingLeft: 3 }, /*#__PURE__*/_react.default.createElement(_ui.Inline, { space: 4 }, refType && showTypeLabel && /*#__PURE__*/_react.default.createElement(_ui.Label, { size: 1, muted: true }, refType.title || refType.type), (insufficientPermissions || notFound) && /*#__PURE__*/_react.default.createElement(_ui.Box, null, /*#__PURE__*/_react.default.createElement(_ui.Tooltip, { portal: true, content: notFound ? /*#__PURE__*/_react.default.createElement(UnavailableMessage, null, "The referenced document no longer exist and might have been deleted.", /*#__PURE__*/_react.default.createElement("br", null), "(id: ", /*#__PURE__*/_react.default.createElement("code", null, id), ")") : /*#__PURE__*/_react.default.createElement(UnavailableMessage, null, "The referenced document could not be accessed due to insufficient permissions") }, /*#__PURE__*/_react.default.createElement(_components.TextWithTone, { tone: "default" }, insufficientPermissions ? /*#__PURE__*/_react.default.createElement(_icons.AccessDeniedIcon, null) : /*#__PURE__*/_react.default.createElement(_icons.HelpCircleIcon, null)))), !(notFound || insufficientPermissions) && showStudioUrlIcon && /*#__PURE__*/_react.default.createElement(_ui.Box, null, /*#__PURE__*/_react.default.createElement(_ui.Tooltip, { portal: true, content: /*#__PURE__*/_react.default.createElement(_CrossDatasetReferencePreview.TooltipContent, { padding: 2 }, hasStudioUrl ? /*#__PURE__*/_react.default.createElement(_ui.Text, { size: 1 }, "This document opens in another Studio") : /*#__PURE__*/_react.default.createElement(_ui.Text, { size: 1 }, "This document cannot be opened ", /*#__PURE__*/_react.default.createElement("br", null), " (unable to resolve URL to Studio)")) }, /*#__PURE__*/_react.default.createElement(_components.TextWithTone, { size: 1, tone: "default", muted: !hasStudioUrl }, /*#__PURE__*/_react.default.createElement(_icons.LaunchIcon, null))))))); }