Skip to content

Commit 3f2c308

Browse files
authoredJun 2, 2022
Merge pull request #257 from MyEtherWallet/update/mew-table
add id to tableData
2 parents 5cfcc56 + cabb2a0 commit 3f2c308

File tree

2 files changed

+91
-39
lines changed

2 files changed

+91
-39
lines changed
 

‎package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@myetherwallet/mew-components",
3-
"version": "1.0.0",
3+
"version": "1.1.0",
44
"description": "MEW Components",
55
"main": "dist/mew-components.umd.js",
66
"module": "dist/mew-components.esm.js",

‎src/components/MewTable/MewTable.vue

+90-38
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,24 @@
66
=====================================================================================
77
-->
88
<v-data-table
9-
:class="['mew-table', hasSelect ? 'mew-select-table' : '', hasColor ? 'mew-super-primary-table' : '']"
10-
:items="tableData"
11-
:item-key="tableHeaders[0].value"
9+
v-model="selected"
10+
:class="[
11+
'mew-table',
12+
hasSelect ? 'mew-select-table' : '',
13+
hasColor ? 'mew-super-primary-table' : '',
14+
]"
15+
:items="indexedItems"
16+
item-key="id"
1217
:headers="tableHeaders"
1318
:show-select="hasSelect"
14-
:hide-default-footer="tableData && tableData.length <= 10"
19+
:hide-default-footer="indexedItems && indexedItems.length <= 10"
1520
:items-per-page="10"
1621
:loader-height="0"
1722
:loading="loading"
1823
:no-data-text="noDataText"
1924
@item-selected="onSelect"
2025
@toggle-select-all="onSelectAll"
21-
>
26+
>
2227
<!--
2328
=====================================================================================
2429
Loading Mew Table
@@ -27,7 +32,7 @@
2732
<template
2833
v-if="loading"
2934
#loading
30-
>
35+
>
3136
<v-skeleton-loader
3237
class="py-1"
3338
width="100%"
@@ -60,7 +65,7 @@
6065
-->
6166
<template
6267
v-if="!loading"
63-
v-slot:[`item.token`]="{item}"
68+
v-slot:[`item.token`]="{ item }"
6469
>
6570
<div class="d-flex align-center">
6671
<img
@@ -90,10 +95,13 @@
9095
inset
9196
:color="item.toggle.color"
9297
>
93-
<template #label>
98+
<template #label>
9499
<span
95100
v-if="item.toggle.label"
96-
:class="item.toggle.color + '--text font-weight-regular mew-body capitalize'"
101+
:class="
102+
item.toggle.color +
103+
'--text font-weight-regular mew-body capitalize'
104+
"
97105
>{{ item.toggle.label }}</span>
98106
</template>
99107
</v-switch>
@@ -116,8 +124,11 @@
116124
/> -->
117125
<span
118126
v-if="item.change !== ''"
119-
:class="[item.status === '+' ? 'primary--text' : 'error--text', 'd-flex']"
120-
>{{ item.change + '%' }}
127+
:class="[
128+
item.status === '+' ? 'primary--text' : 'error--text',
129+
'd-flex',
130+
]"
131+
>{{ item.change + "%" }}
121132
<v-icon
122133
class="primary--text"
123134
v-if="item.status === '+'"
@@ -159,7 +170,12 @@
159170
<mew-button
160171
v-for="(button, idx) in item.callToAction"
161172
:key="idx"
162-
:class="idx !== item.callToAction.length - 1 && item.callToAction.length > 1? 'mr-1' : ''"
173+
:class="
174+
idx !== item.callToAction.length - 1 &&
175+
item.callToAction.length > 1
176+
? 'mr-1'
177+
: ''
178+
"
163179
@click.native="button.method(item)"
164180
:title="button.title"
165181
:disabled="button.disabled"
@@ -231,11 +247,13 @@
231247
<div
232248
v-on="on"
233249
class="address-container font-weight-medium mew-address d-flex"
234-
>
250+
>
235251
<span
236252
class="mew-address truncate"
237253
v-if="item.resolvedAddr"
238-
>{{ item.address }}</span>
254+
>{{
255+
item.address
256+
}}</span>
239257
<mew-transform-hash
240258
v-if="!item.resolvedAddr"
241259
:hash="item.address"
@@ -246,12 +264,13 @@
246264
/>
247265
<a
248266
class="address-link"
249-
:href="'https://www.ethvm.com/address/' + (item.resolvedAddr ? item.resolvedAddr : item.address)"
267+
:href="
268+
'https://www.ethvm.com/address/' +
269+
(item.resolvedAddr ? item.resolvedAddr : item.address)
270+
"
250271
target="_blank"
251272
>
252-
<v-icon
253-
class="call-made"
254-
>
273+
<v-icon class="call-made">
255274
mdi-call-made
256275
</v-icon>
257276
</a>
@@ -277,69 +296,102 @@ export default {
277296
MewBlockie,
278297
MewButton,
279298
MewTransformHash,
280-
MewCopy
299+
MewCopy,
281300
},
282301
props: {
283302
/**
284-
* Applies skeleton loader
303+
* Selected values passable
304+
* from parent so values
305+
* can be preselected
306+
*/
307+
selectedValues: {
308+
type: Array,
309+
default: () => [],
310+
},
311+
/**
312+
* Applies skeleton loader
285313
* note: tableData has to be empty
286314
* for the prop to work correctly
287315
*/
288316
loading: {
289317
type: Boolean,
290-
default: false
318+
default: false,
291319
},
292320
/**
293321
* The table headers.
294322
*/
295323
tableHeaders: {
296324
type: Array,
297-
default: () => []
325+
default: () => [],
298326
},
299327
/**
300328
* The table data.
301329
*/
302330
tableData: {
303331
type: Array,
304-
default: () => []
332+
default: () => [],
305333
},
306334
/**
307-
* Applies select button to each row.
335+
* Applies select button to each row.
308336
*/
309337
hasSelect: {
310338
type: Boolean,
311-
default: false
339+
default: false,
312340
},
313341
/**
314342
* Applies superPrimary color to table.
315343
*/
316344
hasColor: {
317345
type: Boolean,
318-
default: false
346+
default: false,
319347
},
320348
/**
321349
* No data text
322350
*/
323351
noDataText: {
324352
type: String,
325-
default: ''
326-
}
353+
default: '',
354+
},
355+
},
356+
data() {
357+
return {
358+
selected: [],
359+
};
360+
},
361+
computed: {
362+
/**
363+
* adds id to tableData items
364+
*/
365+
indexedItems() {
366+
return this.tableData.map((item, index) => ({
367+
id: index,
368+
...item,
369+
}));
370+
},
371+
},
372+
watch: {
373+
selectedValues: {
374+
handler: function(newVal) {
375+
this.selected = newVal;
376+
},
377+
deep: true,
378+
},
327379
},
328380
methods: {
329381
/**
330382
* emits selectedRow when selecting a checkbox
331383
*/
332384
onSelectAll(item) {
333-
this.$emit('selectedAll', item)
385+
this.$emit('selectedAll', item);
334386
},
335387
/**
336388
* emits selectedRow when selecting a checkbox
337389
*/
338390
onSelect(item) {
339-
this.$emit('selectedRow', item)
391+
this.$emit('selectedRow', item);
340392
},
341-
}
342-
}
393+
},
394+
};
343395
</script>
344396

345397
<style lang="scss">
@@ -381,14 +433,14 @@ export default {
381433
font-size: 18px;
382434
}
383435
384-
/**
436+
/**
385437
* Table footer
386438
*/
387439
.v-data-footer {
388440
border-top: none;
389441
}
390442
391-
/**
443+
/**
392444
* Checkbox (not active)
393445
*/
394446
.v-simple-checkbox {
@@ -410,7 +462,6 @@ export default {
410462
color: inherit;
411463
}
412464
413-
414465
&.mew-select-table {
415466
.v-data-table__selected {
416467
background: inherit !important;
@@ -420,7 +471,7 @@ export default {
420471
}
421472
}
422473
423-
/**
474+
/**
424475
* Super primary color table
425476
*/
426477
&.mew-super-primary-table {
@@ -446,7 +497,8 @@ export default {
446497
.v-data-table__mobile-row__cell {
447498
width: 60%;
448499
449-
div, a {
500+
div,
501+
a {
450502
justify-content: flex-end;
451503
}
452504
}
@@ -456,4 +508,4 @@ export default {
456508
width: 100%;
457509
}
458510
}
459-
</style>
511+
</style>