Large diffs are not rendered by default.

@@ -1,31 +1,24 @@
<template>
<div>
<table>
<thead>
<tr>
<th v-for="key in columns"
@click="sortBy(key)"
:class="{ active: sortKey == key }">
{{ keyHeadings[key] | capitalize }}
<span class="arrow" :class="sortOrders[key] > 0 ? 'asc' : 'dsc'">
</span>
</th>
</tr>
</thead>
<tbody>
<tr v-for="entry in filteredData">
<td v-for="key in columns">
<span v-html="entryFilter(entry[key])"></span>
</td>
</tr>
</tbody>
</table>

<h2>Debug</h2>
<p>Sort key: {{this.sortKey}}</p>
<p>Sort Order: {{this.sortOrders}}</p>
<p>Column types: {{this.columnsType}}</p>
</div>
<table>
<thead>
<tr>
<th v-for="key in columns"
@click="sortBy(key)"
:class="{ active: sortKey == key }">
{{ keyHeadings[key] | capitalize }}
<span class="arrow" v-if="sortKey == key" :class="sortOrder > 0 ? 'asc' : 'dsc'">
</span>
</th>
</tr>
</thead>
<tbody>
<tr v-for="entry in filteredData">
<td v-for="key in columns">
<span v-html="entryFilter(entry[key])"></span>
</td>
</tr>
</tbody>
</table>


</template>
@@ -76,31 +69,17 @@ export default {
}
},
data: function() {
var sortOrders = {};
this.columns.forEach(function(key) {
sortOrders[key] = 1;
});
var types = {};
for (var key in this.columns) {
//types[key] = typeof this.data[0][key];
types[this.columns[key]] = determineTypeOfStringData(
this.data[0][this.columns[key]]
);
}
return {
sortKey: "",
sortOrders: sortOrders,
columnsType: types
sortOrder: 1
};
},
computed: {
//filter the data according to string
filteredData: function() {
var sortKey = this.sortKey;
var filterKey = this.filterKey && this.filterKey.toLowerCase();
console.log("UPDATING WITH FOLLOWING SORT ORDER:");
var order = this.sortOrders[sortKey] || 1;
console.log(order);
var order = this.sortOrder;
var data = this.data;
//filter data from string
if (filterKey) {
@@ -120,15 +99,43 @@ export default {
data = data.sort(function(a, b) {
a = a[sortKey];
b = b[sortKey];
//put null entries at the bottom 'cause we don't care about them
if (a == null && b == null) {
return 0;
} else if (a == null && b !== null) {
return 1;
} else if (a !== null && b == null) {
return -1;
}
if (columnType) {
if (columnType === "number") {
return (+a === +b ? 0 : +a > +b ? 1 : -1) * order;
a = Number(a);
b = Number(b);
if (a > b) {
return 1 * order;
} else if (a < b) {
return -1 * order;
} else {
return 0;
}
}
}
return (a === b ? 0 : a > b ? 1 : -1) * order;
});
}
return data;
},
columnsType: function() {
var types = {};
for (var key in this.columns) {
//if you just find null data, just sort via string
//else determine type of sort
types[this.columns[key]] = determineTypeOfStringData(
this.data[0][this.columns[key]]
);
}
return types;
}
},
filters: {
@@ -139,8 +146,7 @@ export default {
methods: {
sortBy: function(key) {
this.sortKey = key;
this.sortOrders[key] = this.sortOrders[key] * -1;
this.$forceUpdate();
this.sortOrder *= -1;
},
entryFilter: function(str) {
/*if (!str) return " ";
@@ -162,12 +168,6 @@ export default {
newAdditions.push(newval[j]);
}
}
for (var k in newAdditions) {
this.sortOrders[newAdditions[k]] = 1;
this.columnsType[newAdditions[k]] = determineTypeOfStringData(
this.data[0][newAdditions[k]]
);
}
}
}
};
@@ -32,6 +32,21 @@ export default {
return {
searchQuery: "",
gridColumns: ["school.name", "2015.student.size"],
/*
gridData format:
[
{
key:val,
key:val,
...
},
{
key:val,
key:val,
...
}
]
*/
gridData: json,
gridHeadings: headerinfo.keysToHeadings
};