1
1
<template >
2
2
<b-row no-gutters >
3
3
<b-card-body :title =" title" >
4
- <criterion-list-group class =" eglt-table-wrapper" >
4
+ <div class =" eglt-table-wrapper" >
5
5
<div class =" filtering-ui-wrapper container-fluid" >
6
6
<div class =" row filtering-ui-content" >
7
7
<div class =" col filter-col-md" >
8
8
<div class =" label" >Search</div >
9
- <input class =" col filter-col-md form-control" v-model =" filterString" />
9
+ <input
10
+ v-model =" filterString"
11
+ class =" col filter-col-md form-control"
12
+ debounce =" 500"
13
+ />
10
14
</div >
11
15
</div >
12
16
</div >
13
- </criterion-list-group >
17
+ </div >
14
18
<div class =" text-right mt-2 mb-2" >
15
19
<data-download
16
20
:data =" geneInfo"
26
30
:current-page =" currentPage"
27
31
:filter =" filterString"
28
32
small
33
+ @filtered =" onFiltered"
29
34
>
30
35
<!-- Custom rendering for known special cases -->
31
36
<template #cell (id)="data">
73
78
74
79
<b-pagination
75
80
v-model =" currentPage"
76
- :total-rows =" geneInfo.length "
81
+ :total-rows =" totalRows "
77
82
:per-page =" perPage"
78
83
:aria-controls =" id"
79
84
size =" sm"
@@ -103,13 +108,14 @@ export default Vue.component("TranslatorPredicateTable", {
103
108
},
104
109
data () {
105
110
return {
106
- id: this .geneSymbol + this .fields + this .title ,
111
+ id: this .geneSymbol + this .field + this .title ,
107
112
currentPage: 1 ,
108
113
perPage: 10 ,
109
114
rawGeneInfo: [],
110
115
myFilter : (id ) => true ,
111
116
context: null ,
112
117
filterString: " " ,
118
+ totalRows: 0 ,
113
119
};
114
120
},
115
121
computed: {
@@ -119,25 +125,28 @@ export default Vue.component("TranslatorPredicateTable", {
119
125
);
120
126
},
121
127
fields () {
122
- return Array .from (
123
- new Set (
124
- this .geneInfo .reduce (
125
- (acc , item ) => acc .concat (... Object .keys (item)),
126
- []
128
+ return (
129
+ Array .from (
130
+ new Set (
131
+ this .geneInfo .reduce (
132
+ (acc , item ) => acc .concat (... Object .keys (item)),
133
+ []
134
+ )
127
135
)
128
136
)
129
- )
130
- .sort ((a , b ) => {
131
- const sortMap = { id: 0 , source: 1 };
132
- if (a === " id" ) {
133
- return - 1 ;
134
- } else if (b === " id" ) {
135
- return 1 ;
136
- }
137
- })
138
- .filter (
139
- (el ) => ! [" evidence" , " gocategory" , " category" ].includes (el)
140
- );
137
+ .sort ((a , b ) => {
138
+ const sortMap = { id: 0 , source: 1 };
139
+ if (a === " id" ) {
140
+ return - 1 ;
141
+ } else if (b === " id" ) {
142
+ return 1 ;
143
+ }
144
+ })
145
+ .filter (
146
+ (el ) =>
147
+ ! [" evidence" , " gocategory" , " category" ].includes (el)
148
+ ) || []
149
+ );
141
150
},
142
151
tableFields () {
143
152
return this .fields .map ((key ) => ({
@@ -178,7 +187,7 @@ export default Vue.component("TranslatorPredicateTable", {
178
187
},
179
188
async created () {
180
189
this .context = await fetch (
181
- " https://raw.githubusercontent.com/biolink/biolink-model/master/context.jsonld"
190
+ " https://raw.githubusercontent.com/biolink/biolink-model/master/project/jsonld/biolink_model. context.jsonld"
182
191
)
183
192
.then ((response ) => response .json ())
184
193
.then ((json ) => json[" @context" ]);
@@ -247,6 +256,11 @@ export default Vue.component("TranslatorPredicateTable", {
247
256
return cellValue;
248
257
}
249
258
},
259
+ onFiltered (filteredItems ) {
260
+ // Trigger pagination to update the number of buttons/pages due to filtering
261
+ this .totalRows = filteredItems .length ;
262
+ this .currentPage = 1 ;
263
+ },
250
264
},
251
265
});
252
266
</script >
0 commit comments