From c9af7dea3411539d81d011e57a2403f2100b92cd Mon Sep 17 00:00:00 2001
From: Christiano Donke
Date: Thu, 11 Mar 2021 20:38:54 -0300
Subject: [PATCH 1/2] implement layout to errorCallout
---
.../BotRuntimeController/errorCallout.tsx | 96 ++++++++++++++++++-
1 file changed, 95 insertions(+), 1 deletion(-)
diff --git a/Composer/packages/client/src/components/BotRuntimeController/errorCallout.tsx b/Composer/packages/client/src/components/BotRuntimeController/errorCallout.tsx
index eb837af86f..7157210a82 100644
--- a/Composer/packages/client/src/components/BotRuntimeController/errorCallout.tsx
+++ b/Composer/packages/client/src/components/BotRuntimeController/errorCallout.tsx
@@ -32,6 +32,25 @@ const calloutLink = css`
margin-bottom: 24px;
`;
+const descriptionLabel = css`
+ font-weight: bold;
+ text-transform: capitalize;
+`;
+
+const descriptionText = css`
+ margin-left: 15px;
+ margin-bottom: 10px;
+`;
+
+const descriptionLongText = css`
+ overflow: auto;
+ font-size: small;
+`;
+const descriptionShow = css``;
+const descriptionHide = css`
+ display: none;
+`;
+
// -------------------- ErrorCallout -------------------- //
export interface IErrorCalloutProps {
@@ -47,8 +66,83 @@ export interface IErrorCalloutProps {
};
}
+interface IErrorMessage {
+ key: string;
+ value: any;
+ isPre: boolean;
+ visible: boolean;
+ order: number;
+}
+
+interface IField {
+ visible?: boolean;
+ name: string;
+ index?: number;
+}
+
+const fieldsWhiteList = new Map();
+fieldsWhiteList.set('message', { visible: true, name: 'Message', index: 1 });
+fieldsWhiteList.set('stack', { visible: true, name: 'Stack Trace', index: 3 });
+fieldsWhiteList.set('stdout', { visible: true, name: 'Output', index: 4 });
+fieldsWhiteList.set('cmd', { visible: true, name: 'Command', index: 2 });
+fieldsWhiteList.set('killed', { visible: false, name: 'killed' });
+fieldsWhiteList.set('code', { visible: false, name: 'code' });
+fieldsWhiteList.set('signal', { visible: false, name: 'signal' });
+fieldsWhiteList.set('stderr', { visible: false, name: 'stderr' });
+
export const ErrorCallout: React.FC = (props) => {
const { onDismiss, onTry, target, visible, error } = props;
+
+ const convertToJson = function (item): any {
+ if (typeof item === 'object') {
+ return item;
+ }
+
+ try {
+ return JSON.parse(item);
+ } catch (e) {
+ return null;
+ }
+ };
+ const parseObject = function (map): IErrorMessage[] {
+ let obj = Object.keys(map).map(function (k) {
+ let field: IField = fieldsWhiteList.get(k) || { visible: true, name: k };
+
+ return {
+ key: field.name,
+ value: map[k],
+ order: field.index || 1000,
+ isPre: map[k] != null && typeof map[k] == 'string' && map[k].length >= 75 && map[k].indexOf('\n') != -1,
+ visible:
+ field.visible ||
+ (map[k] != null && ((typeof map[k] == 'string' && map[k].trim() != '') || typeof map[k] != 'string')),
+ };
+ });
+
+ return obj.sort(function (left, right) {
+ return left.order - right.order;
+ });
+ };
+ const renderRow = function (obj: IErrorMessage) {
+ return (
+
+
{obj.key}:
+
{obj.isPre ?
{obj.value} : obj.value}
+
+ );
+ };
+
+ const buildErrorMessage = (error) => {
+ let jsonObj = convertToJson(error.message);
+ if (jsonObj === null) {
+ return error.message + ' ';
+ } else {
+ let parsed = parseObject(jsonObj);
+
+ return {parsed.map(renderRow)}
;
+ }
+ };
+
return (
= (props) => {
{error.title}
- {error.message + ' '}
+ {buildErrorMessage(error)}
{error.linkAfterMessage != null && (
{error.linkAfterMessage.text}
From 276794800d40e366dfff486a265a7f13cdeb680d Mon Sep 17 00:00:00 2001
From: Christiano Donke
Date: Fri, 12 Mar 2021 13:11:01 -0300
Subject: [PATCH 2/2] Fix linting issues
---
.../BotRuntimeController/errorCallout.tsx | 38 +++++++++----------
1 file changed, 19 insertions(+), 19 deletions(-)
diff --git a/Composer/packages/client/src/components/BotRuntimeController/errorCallout.tsx b/Composer/packages/client/src/components/BotRuntimeController/errorCallout.tsx
index 7157210a82..e68ae8f4d6 100644
--- a/Composer/packages/client/src/components/BotRuntimeController/errorCallout.tsx
+++ b/Composer/packages/client/src/components/BotRuntimeController/errorCallout.tsx
@@ -105,23 +105,23 @@ export const ErrorCallout: React.FC = (props) => {
}
};
const parseObject = function (map): IErrorMessage[] {
- let obj = Object.keys(map).map(function (k) {
- let field: IField = fieldsWhiteList.get(k) || { visible: true, name: k };
-
- return {
- key: field.name,
- value: map[k],
- order: field.index || 1000,
- isPre: map[k] != null && typeof map[k] == 'string' && map[k].length >= 75 && map[k].indexOf('\n') != -1,
- visible:
- field.visible ||
- (map[k] != null && ((typeof map[k] == 'string' && map[k].trim() != '') || typeof map[k] != 'string')),
- };
- });
-
- return obj.sort(function (left, right) {
- return left.order - right.order;
- });
+ return Object.keys(map)
+ .map((k) => {
+ const field: IField = fieldsWhiteList.get(k) || { visible: true, name: k };
+
+ return {
+ key: field.name,
+ value: map[k],
+ order: field.index || 1000,
+ isPre: map[k] != null && typeof map[k] == 'string' && map[k].length >= 75 && map[k].indexOf('\n') != -1,
+ visible:
+ field.visible ||
+ (map[k] != null && ((typeof map[k] == 'string' && map[k].trim() != '') || typeof map[k] != 'string')),
+ };
+ })
+ .sort((left, right) => {
+ return left.order - right.order;
+ });
};
const renderRow = function (obj: IErrorMessage) {
return (
@@ -133,11 +133,11 @@ export const ErrorCallout: React.FC = (props) => {
};
const buildErrorMessage = (error) => {
- let jsonObj = convertToJson(error.message);
+ const jsonObj = convertToJson(error.message);
if (jsonObj === null) {
return error.message + ' ';
} else {
- let parsed = parseObject(jsonObj);
+ const parsed = parseObject(jsonObj);
return {parsed.map(renderRow)}
;
}