diff --git a/ayanova/src/components/gz-data-table.vue b/ayanova/src/components/gz-data-table.vue index 300c9088..f00080da 100644 --- a/ayanova/src/components/gz-data-table.vue +++ b/ayanova/src/components/gz-data-table.vue @@ -142,7 +142,11 @@ export default { //build that.headers here that.headers = buildHeaders(res.columns); //Post process data here and then set that.records - that.records = buildRecords(res.data); + that.records = buildRecords( + res.data, + res.columns, + that.$options.filters + ); that.loading = false; that.totalRecords = res.paging.count; })(); @@ -186,7 +190,7 @@ function buildHeaders(columnData) { } //Called by getDataFromApi on retrieval of list with columnData -function buildRecords(listData) { +function buildRecords(listData, columndefinitions, filters) { //iterate data, build each object keyed with index name and display set to correct locale filter and then return if (!listData) { return; @@ -201,7 +205,31 @@ function buildRecords(listData) { var o = {}; for (var iColumn = 1; iColumn < row.length; iColumn++) { var column = row[iColumn]; - + var dataType = columndefinitions[iColumn].dt; + var display = column.v; + switch (dataType) { + case 1: //datetime format to shortdatetime + display = filters.shortdatelocalized(display); + break; + case 2: //date only + break; + case 3: //time only + break; + case 6: //bool + display = filters.boolastext(display); + break; + case 7: //decimal + display = filters.decimal(display); + break; + case 8: //currency + display = filters.currency(display); + break; + case 10: //enum + display = filters.enum(display, columndefinitions[iColumn].et); + break; + default: + //do nothing, allow it to stay as is + } o["c" + iColumn.toString()] = column.v; } ret.push(o); @@ -209,6 +237,20 @@ function buildRecords(listData) { return ret; } +/*UiDataTypes + NoType = 0, + DateTime = 1, + Date = 2, + Time = 3, + Text = 4, + Integer = 5, + Bool = 6, + Decimal = 7, + Currency = 8, + Tags = 9, + Enum = 10, + EmailAddress = 11 +*/ ////////////////////////////////////////////////////////// // // Ensures column names are present in locale table diff --git a/ayanova/src/main.js b/ayanova/src/main.js index af8de236..691db92a 100644 --- a/ayanova/src/main.js +++ b/ayanova/src/main.js @@ -154,14 +154,26 @@ Vue.filter("shortdatelocalized", function vueFilterShortDateLocalized(value) { .format(locale.format().shortDateAndTime); }); +//TODO: These need more work to format as proper numeric value (comma versus decimal etc) + Vue.filter("currency", function vueFilterCurrency(value) { if (!value) return ""; return locale.format().currencySymbol + value; }); +Vue.filter("decimal", function vueFilterDecimal(value) { + if (!value) return ""; + return "dec.fltr." + value; +}); + Vue.filter("boolastext", function vueFilterBoolAsText(value) { if (!value) return ""; - return value ? "Yes" : "Nope"; + return value ? "Yup" : "Nope"; +}); + +Vue.filter("enum", function vueFilterDecimal(value, enumtype) { + if (!value) return ""; + return enumtype + "." + value; }); /////////////////////////////////////////////////////////////