-
Notifications
You must be signed in to change notification settings - Fork 20
/
Copy pathMessageModal.ts
126 lines (108 loc) · 2.96 KB
/
MessageModal.ts
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
import { UALJsAbstractBaseComponent } from '../UALJsAbstractBaseComponent'
export enum MessageTypes {
ERROR = 1,
SUCCESS = 2
}
export interface ModalMessage {
title?: string,
message: string,
type?: MessageTypes,
onClose?: any
}
export class MessageModal extends UALJsAbstractBaseComponent {
private onClose = () => { return }
public generateStyles(): string {
return `
#ual-modal-message-description {
color: rgb(20, 35, 93);
width: 265px;
font-size: 2em;
margin: .7em auto
}
#ual-modal-message-content {
font-family: 'Source Sans Pro', sans-serif;
background-color: #fefefe;
margin: 10% auto;
padding: 30px;
border: 1px solid #888;
border-radius: 6px;
width: 370px;
}
#ual-modal-message {
margin: .7em auto;
width: 260px;
}
@media only screen and (max-width: 480px) {
#ual-modal-message-content {
width: calc(100% - 30px);
border: 0px;
border-radius: 0px;
padding: 15px;
height: calc(100% - 30px);
margin: 0px;
}
}
`
}
/**
* Generates the Modal DOM and binds close handler
*/
protected generateDom(): HTMLElement {
const component = document.createElement('div')
component.innerHTML = `
<div id="ual-modal-message-content">
<span class="ual-modal-close">×</span>
<p id="ual-modal-message-description"></p>
<p>
<div id="ual-modal-message"></div>
</p>
</div>
`
component.querySelector('.ual-modal-close')!.addEventListener('click', () => {
this.close()
})
return component
}
/**
* Sets the message content of the modal
*
* @param modalMessage ModalMessage
*/
public setMessage(modalMessage: ModalMessage) {
const { title = '', message, type = null } = modalMessage
const modalMessageDescription = this.dom.querySelector('#ual-modal-message-description')
const modalMessageContent = this.dom.querySelector('#ual-modal-message') as HTMLDivElement
modalMessageDescription!.innerHTML = title
modalMessageContent!.innerHTML = message
switch (type) {
case MessageTypes.ERROR:
modalMessageContent!.style.color = 'red'
break
case MessageTypes.SUCCESS:
modalMessageContent!.style.color = 'green'
break
default:
modalMessageContent!.style.color = 'black'
}
}
/**
* Sets the message for the modal and also shows it
*
* @param modalMessage ModalMessage
*/
public showMessage(modalMessage: ModalMessage) {
this.setMessage(modalMessage)
this.show()
if (modalMessage.onClose) {
this.onClose = modalMessage.onClose
}
}
public close() {
// only hide and call close if we aren't already visible
if (this.dom.style.display !== 'none') {
this.hide()
this.onClose()
this.onClose = () => { return }
}
}
}