-
Notifications
You must be signed in to change notification settings - Fork 1
/
common-mixin.js
125 lines (115 loc) · 2.88 KB
/
common-mixin.js
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
import {getTranslation} from './translate';
export const CommonMixin = (baseClass) =>
class extends baseClass {
static get properties() {
return {
uploadInProgress: {
type: Boolean,
reflect: true,
attribute: 'upload-in-progress'
},
label: {
type: String,
reflect: true
},
required: {
type: Boolean,
reflect: true
},
readonly: {
type: Boolean,
reflect: true
},
accept: String,
autoUpload: {
type: Boolean,
reflect: true,
attribute: 'auto-upload'
},
disabled: {
type: Boolean,
reflect: true
},
invalid: {
type: Boolean,
reflect: true
},
autoValidate: {
type: Boolean,
reflect: true,
attribute: 'auto-validate'
},
errorMessage: {
type: String,
reflect: true,
attribute: 'error-message'
},
openInNewTab: {
type: Boolean,
reflect: true,
attribute: 'open-in-new-tab'
}
};
}
set invalid(invalid) {
const old = this._invalid;
this._invalid = invalid;
if (this._invalid !== old) {
this._invalidChanged();
}
this.requestUpdate();
}
get invalid() {
return this._invalid;
}
constructor() {
super();
this.uploadInProgress = false;
this.label = '';
this.required = false;
this.readonly = false;
this.autoUpload = true;
this.disabled = false;
this._invalid = false;
this.autoValidate = false;
this.errorMessage = '';
this.openInNewTab = true;
}
// abstract method
_invalidChanged() {}
_showLabel(label) {
return label !== '';
}
_openFileChooser() {
const fileEl = this.shadowRoot.querySelector('#fileInput');
if (fileEl) {
fileEl.dispatchEvent(new MouseEvent('click', {bubbles: true, cancelable: true, view: window}));
}
}
fireEvent(evName, detail) {
this.dispatchEvent(
new CustomEvent(evName, {
detail: detail,
bubbles: true,
composed: true
})
);
}
downloadFile(filename, url, openInNewTab) {
const a = document.createElement('a');
a.href = url;
if (openInNewTab) {
a.target = '_blank';
}
a.download = filename;
a.dispatchEvent(new MouseEvent('click', {bubbles: true, cancelable: true, view: window}));
window.URL.revokeObjectURL(url);
}
prepareErrorMessage(lang, error) {
const message = (error.request ? error.error.message : error.message) || '';
if (message.includes('413')) {
return getTranslation(lang, 'FILE_TOO_LARGE');
}
return message;
}
};