3
3
<div class =" toolbar" >
4
4
<VueIcon icon =" cached" />
5
5
<div class =" title" >{{ $t('org.vue.components.file-diff-view.files-changed') }}</div >
6
- <div class =" file-count" >{{ fileDiffs.length }}</div >
6
+ <div class =" file-count" >{{ fileDiffs && fileDiffs .length }}</div >
7
7
<div class =" vue-ui-spacer" />
8
8
<VueInput
9
9
v-model =" search"
22
22
/>
23
23
</div >
24
24
<div class =" list" >
25
- <FileDiff
26
- v-for =" fileDiff of filteredList"
27
- :key =" fileDiff.id"
28
- :file-diff =" fileDiff"
29
- :collapsed =" !!collapsed[fileDiff.id]"
30
- @update:collapsed =" value => $set(collapsed, fileDiff.id, value)"
31
- />
25
+ <div v-if =" error || !fileDiffs" class =" vue-ui-empty" >
26
+ <VueIcon icon =" error" class =" empty-icon" />
27
+ <span >{{ $t('org.vue.components.file-diff-view.error') }}</span >
28
+ </div >
32
29
33
- <div v-if =" !filteredList.length" class =" vue-ui-empty" >
30
+ <div v-else- if =" !filteredList.length" class =" vue-ui-empty" >
34
31
<VueIcon icon =" check_circle" class =" empty-icon" />
35
32
<span >{{ $t('org.vue.components.file-diff-view.empty') }}</span >
36
33
</div >
34
+
35
+ <template v-else >
36
+ <FileDiff
37
+ v-for =" fileDiff of filteredList"
38
+ :key =" fileDiff.id"
39
+ :file-diff =" fileDiff"
40
+ :collapsed =" !!collapsed[fileDiff.id]"
41
+ @update:collapsed =" value => $set(collapsed, fileDiff.id, value)"
42
+ />
43
+ </template >
37
44
</div >
38
45
<div class =" actions-bar" >
39
- <template v-if =" fileDiffs .length " >
46
+ <template v-if =" ! error && fileDiffs && fileDiffs .length " >
40
47
<VueButton
41
48
icon-left =" vertical_align_bottom"
42
49
:label =" $t('org.vue.components.file-diff-view.actions.commit')"
@@ -133,7 +140,8 @@ export default {
133
140
search: ' ' ,
134
141
loading: 0 ,
135
142
commitMessage: ' ' ,
136
- showCommitModal: false
143
+ showCommitModal: false ,
144
+ error: null
137
145
}
138
146
},
139
147
@@ -142,7 +150,16 @@ export default {
142
150
query: FILE_DIFFS ,
143
151
loadingKey: ' loading' ,
144
152
fetchPolicy: ' network-only' ,
145
- result () {
153
+ error (error ) {
154
+ this .error = error
155
+ },
156
+ result (result ) {
157
+ if (result .errors && result .errors .length ) {
158
+ this .error = result .errors [0 ]
159
+ return
160
+ }
161
+
162
+ this .error = null
146
163
this .fileDiffs .forEach (fileDiff => {
147
164
if (typeof this .collapsed [fileDiff .id ] === ' undefined' && (
148
165
fileDiff .binary ||
@@ -158,12 +175,14 @@ export default {
158
175
159
176
computed: {
160
177
allCollapsed () {
178
+ if (! this .fileDiffs ) return false
161
179
return ! this .fileDiffs .find (
162
180
fileDiff => ! this .collapsed [fileDiff .id ]
163
181
)
164
182
},
165
183
166
184
filteredList () {
185
+ if (! this .fileDiffs ) return []
167
186
const search = this .search .trim ()
168
187
if (search) {
169
188
const reg = new RegExp (search .replace (/ \s + / g , ' .*' ), ' i' )
0 commit comments