UNPKG

@sanity/default-layout

Version:

The default layout components for Sanity

75 lines (74 loc) 3.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.RenderToolErrorScreen = RenderToolErrorScreen; var _react = _interopRequireDefault(require("react")); var _ui = require("@sanity/ui"); var _icons = require("@sanity/icons"); var _ErrorAccordion = require("./ErrorAccordion"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function getErrorWithStack(err) { var stack = err.stack.toString(); var message = err.message; return stack.indexOf(message) === -1 ? "".concat(message, "\n\n").concat(stack) : stack; } function limitStackLength(stack) { return stack.split('\n').slice(0, 15).join('\n'); } function formatStack(stack) { return stack // Prettify builder functions .replace(/\(\.\.\.\)\./g, '(...)\n .') // Remove webpack cruft from function names .replace(/__WEBPACK_IMPORTED_MODULE_\d+_+/g, '') // Remove default export postfix from function names .replace(/___default\./g, '.') // Replace full host path, leave only path to JS-file .replace(new RegExp(" \\(https?:\\/\\/".concat(window.location.host), 'g'), ' ('); } function RenderToolErrorScreen(props) { var activeTool = props.activeTool, error = props.error, info = props.info, onRetry = props.onRetry, showErrorDetails = props.showErrorDetails; var toolName = activeTool && (activeTool.title || activeTool.name) || 'active'; return /*#__PURE__*/_react.default.createElement(_ui.Card, { height: "fill", paddingX: [3, 4, 5, 7], paddingY: [5, 5, 6], sizing: "border", overflow: "auto" }, /*#__PURE__*/_react.default.createElement(_ui.Container, null, /*#__PURE__*/_react.default.createElement(_ui.Stack, { space: 4 }, /*#__PURE__*/_react.default.createElement(_ui.Heading, { as: "h1" }, "The ", /*#__PURE__*/_react.default.createElement("i", null, toolName), " tool crashed"), /*#__PURE__*/_react.default.createElement(_ui.Text, { as: "p", muted: true }, "An uncaught exception in the ", /*#__PURE__*/_react.default.createElement("i", null, toolName), " tool caused the Studio to crash."), /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_ui.Button, { text: "Retry", icon: _icons.SyncIcon, tone: "primary", onClick: onRetry }))), showErrorDetails && /*#__PURE__*/_react.default.createElement(_ui.Stack, { marginTop: 5, space: 4 }, error.stack ? /*#__PURE__*/_react.default.createElement(_ErrorAccordion.ErrorAccordion, { open: __DEV__, title: "Stack trace" }, /*#__PURE__*/_react.default.createElement(_ui.Code, { size: 1 }, formatStack(limitStackLength(getErrorWithStack(error))))) : /*#__PURE__*/_react.default.createElement(_ErrorAccordion.ErrorAccordion, { open: __DEV__, title: "Error" }, /*#__PURE__*/_react.default.createElement(_ui.Code, { size: 1 }, error.message)), info && info.componentStack && /*#__PURE__*/_react.default.createElement(_ErrorAccordion.ErrorAccordion, { open: __DEV__, title: "Component stack" }, /*#__PURE__*/_react.default.createElement(_ui.Code, { size: 1 }, info.componentStack.replace(/^\s*\n+/, '')))))); }