n8n/packages/editor-ui/src/components/mixins/showMessage.ts

61 lines
1.4 KiB
TypeScript
Raw Normal View History

2019-06-23 03:35:23 -07:00
import { Notification } from 'element-ui';
import { ElNotificationOptions } from 'element-ui/types/notification';
import mixins from 'vue-typed-mixins';
import { externalHooks } from '@/components/mixins/externalHooks';
export const showMessage = mixins(externalHooks).extend({
2019-06-23 03:35:23 -07:00
methods: {
$showMessage(messageData: ElNotificationOptions) {
2019-06-23 03:35:23 -07:00
messageData.dangerouslyUseHTMLString = true;
if (messageData.position === undefined) {
messageData.position = 'bottom-right';
}
return Notification(messageData);
},
$showError(error: Error, title: string, message?: string) {
const messageLine = message ? `${message}<br/>` : '';
2019-06-23 03:35:23 -07:00
this.$showMessage({
title,
message: `
${messageLine}
<i>${error.message}</i>
${this.collapsableDetails(error)}`,
2019-06-23 03:35:23 -07:00
type: 'error',
duration: 0,
});
this.$externalHooks().run('showMessage.showError', {
title,
message,
errorMessage: error.message,
});
},
// @ts-ignore
collapsableDetails({ description, node }: Error) {
if (!description) return '';
const errorDescription =
description.length > 500
? `${description.slice(0, 500)}...`
: description;
return `
<br>
<br>
<details>
<summary
style="color: #ff6d5a; font-weight: bold; cursor: pointer;"
>
Show Details
</summary>
<p>${node.name}: ${errorDescription}</p>
</details>
`;
2019-06-23 03:35:23 -07:00
},
},
});