@sanity/default-layout
Version:
The default layout components for Sanity
75 lines (74 loc) • 3.2 kB
JavaScript
"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+/, ''))))));
}