UNPKG

@gooddata/react-components

Version:

GoodData.UI - A powerful JavaScript library for building analytical applications

144 lines • 6.33 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var errorStates_1 = require("../constants/errorStates"); var get = require("lodash/get"); var includes = require("lodash/includes"); var HttpStatusCodes = require("http-status-codes"); var RuntimeError_1 = require("../errors/RuntimeError"); var utils_1 = require("./utils"); function getJSONFromText(data) { try { return JSON.parse(data); } catch (e) { return null; } } function isApiResponseError(error) { return error && error.response !== undefined; } exports.isApiResponseError = isApiResponseError; function generateErrorMap(intl) { var _a; var errorMap = (_a = {}, _a[errorStates_1.ErrorStates.DATA_TOO_LARGE_TO_DISPLAY] = { icon: "icon-cloud-rain", message: intl.formatMessage({ id: "visualization.ErrorMessageDataTooLarge" }), description: intl.formatMessage({ id: "visualization.ErrorDescriptionDataTooLarge" }), }, _a[errorStates_1.ErrorStates.NOT_FOUND] = { message: intl.formatMessage({ id: "visualization.ErrorMessageNotFound" }), description: intl.formatMessage({ id: "visualization.ErrorDescriptionNotFound" }), }, _a[errorStates_1.ErrorStates.UNAUTHORIZED] = { message: intl.formatMessage({ id: "visualization.ErrorMessageUnauthorized" }), description: intl.formatMessage({ id: "visualization.ErrorDescriptionUnauthorized" }), }, _a[errorStates_1.ErrorStates.NO_DATA] = { icon: "icon-filter", message: intl.formatMessage({ id: "visualization.ErrorMessageNoData" }), description: intl.formatMessage({ id: "visualization.ErrorDescriptionNoData" }), }, _a[errorStates_1.ErrorStates.UNKNOWN_ERROR] = { message: intl.formatMessage({ id: "visualization.ErrorMessageGeneric" }), description: intl.formatMessage({ id: "visualization.ErrorDescriptionGeneric" }), }, _a[errorStates_1.ErrorStates.GEO_MAPBOX_TOKEN_MISSING] = { message: intl.formatMessage({ id: "visualization.ErrorMessageGeneric" }), description: intl.formatMessage({ id: "visualization.ErrorDescriptionMissingMapboxToken" }), }, _a); return errorMap; } exports.generateErrorMap = generateErrorMap; // CAREFUL: error can also be of different type than listed function convertErrors(error) { if (!isApiResponseError(error)) { return new RuntimeError_1.RuntimeError(error.message, error); } var errorCode = error.response.status; switch (errorCode) { case HttpStatusCodes.NO_CONTENT: return new RuntimeError_1.RuntimeError(errorStates_1.ErrorStates.NO_DATA, error); case HttpStatusCodes.REQUEST_TOO_LONG: return new RuntimeError_1.RuntimeError(errorStates_1.ErrorStates.DATA_TOO_LARGE_TO_COMPUTE, error); case HttpStatusCodes.BAD_REQUEST: var message = get(getJSONFromText(error.responseBody), "error.message", ""); if (includes(message, "Attempt to execute protected report unsafely")) { return new RuntimeError_1.RuntimeError(errorStates_1.ErrorStates.PROTECTED_REPORT, error); } else { return new RuntimeError_1.RuntimeError(errorStates_1.ErrorStates.BAD_REQUEST, error); } case HttpStatusCodes.NOT_FOUND: return new RuntimeError_1.RuntimeError(errorStates_1.ErrorStates.NOT_FOUND, error); case HttpStatusCodes.UNAUTHORIZED: return new RuntimeError_1.RuntimeError(errorStates_1.ErrorStates.UNAUTHORIZED, error); case errorStates_1.ErrorCodes.EMPTY_AFM: return new RuntimeError_1.RuntimeError(errorStates_1.ErrorStates.EMPTY_AFM); case errorStates_1.ErrorCodes.INVALID_BUCKETS: return new RuntimeError_1.RuntimeError(errorStates_1.ErrorStates.INVALID_BUCKETS); default: return new RuntimeError_1.RuntimeError(errorStates_1.ErrorStates.UNKNOWN_ERROR); } } exports.convertErrors = convertErrors; /** @deprecated */ function isNullExecutionResult(responses) { return responses.executionResult === null; } function hasEmptyData(responses) { return responses.executionResult.data.length === 0; } function hasMissingHeaderItems(responses) { return !responses.executionResult.headerItems; } function isEmptyDataResult(responses) { return hasEmptyData(responses) && hasMissingHeaderItems(responses); } /** * isEmptyResult * is a function that returns true if the execution result is empty (no data points) and false otherwise. * @param responses:Execution.IExecutionResponses - object with execution response and result * @return boolean * @internal */ function isEmptyResult(responses) { return isNullExecutionResult(responses) || isEmptyDataResult(responses); } exports.isEmptyResult = isEmptyResult; function checkEmptyResult(responses) { if (isEmptyResult(responses)) { throw { name: "EmptyResultError", response: { status: HttpStatusCodes.NO_CONTENT, json: function () { return Promise.resolve(responses); }, text: function () { return Promise.resolve(null); }, }, }; } return responses; } exports.checkEmptyResult = checkEmptyResult; exports.hasDuplicateIdentifiers = function (buckets) { var buffer = []; var duplicates = []; buckets.forEach(function (_a) { var items = _a.items; items.forEach(function (bucketItem) { var localIdentifier = utils_1.unwrap(bucketItem).localIdentifier; var isDuplicate = buffer.includes(localIdentifier); buffer.push(localIdentifier); if (isDuplicate && !duplicates.includes(localIdentifier)) { duplicates.push(localIdentifier); } }); }); if (duplicates.length > 0) { // tslint:disable-next-line:no-console max-line-length console.warn("Duplicate identifier" + (duplicates.length > 1 ? "s" : "") + " '" + duplicates.join(", ") + "' detected in PivotTable. Please make sure all localIdentifiers are unique."); } return duplicates.length > 0; }; //# sourceMappingURL=errorHandlers.js.map