forked from SonjayaJetBrain/Super-Brocoli
-
Notifications
You must be signed in to change notification settings - Fork 1
/
editor-error.tsx
106 lines (92 loc) · 2.77 KB
/
editor-error.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
import * as React from 'react'
import {
Dialog,
DialogContent,
DialogFooter,
DefaultDialogFooter,
OkCancelButtonGroup,
} from '../dialog'
import { shell } from '../../lib/app-shell'
import { suggestedExternalEditor } from '../../lib/editors/shared'
interface IEditorErrorProps {
/**
* Event triggered when the dialog is dismissed by the user in the
* ways described in the Dialog component's dismissable prop.
*/
readonly onDismissed: () => void
/**
* Event to trigger if the user navigates to the Preferences dialog
*/
readonly showPreferencesDialog: () => void
/**
* The text to display to the user relating to this error.
*/
readonly message: string
/** Render the "Install ${Default}" link as the default action */
readonly suggestDefaultEditor?: boolean
/** Render the "Open Preferences" link as the default action */
readonly viewPreferences?: boolean
}
/**
* A dialog indicating something went wrong with launching an external editor,
* with guidance to get the user back to a happy places
*/
export class EditorError extends React.Component<IEditorErrorProps, {}> {
public constructor(props: IEditorErrorProps) {
super(props)
}
private onExternalLink = () => {
shell.openExternal(suggestedExternalEditor.url)
}
private onShowPreferencesDialog = (
e: React.MouseEvent<HTMLButtonElement>
) => {
e.preventDefault()
this.props.onDismissed()
this.props.showPreferencesDialog()
}
private renderFooter() {
const { viewPreferences, suggestDefaultEditor } = this.props
if (viewPreferences) {
return (
<DialogFooter>
<OkCancelButtonGroup
okButtonText="Close"
cancelButtonText={__DARWIN__ ? 'Open Preferences' : 'Open options'}
onCancelButtonClick={this.onShowPreferencesDialog}
/>
</DialogFooter>
)
} else if (suggestDefaultEditor) {
return (
<DialogFooter>
<OkCancelButtonGroup
okButtonText="Close"
cancelButtonText={`Download ${suggestedExternalEditor.name}`}
onCancelButtonClick={this.onExternalLink}
/>
</DialogFooter>
)
}
return <DefaultDialogFooter />
}
public render() {
const title = __DARWIN__
? 'Unable to Open External Editor'
: 'Unable to open external editor'
return (
<Dialog
id="external-editor-error"
type="error"
title={title}
onSubmit={this.props.onDismissed}
onDismissed={this.props.onDismissed}
>
<DialogContent>
<p>{this.props.message}</p>
</DialogContent>
{this.renderFooter()}
</Dialog>
)
}
}