diff --git a/ayanova/devdocs/todo.txt b/ayanova/devdocs/todo.txt index 611bfa04..368deaf8 100644 --- a/ayanova/devdocs/todo.txt +++ b/ayanova/devdocs/todo.txt @@ -78,7 +78,8 @@ todo: Administration - Attached files manager way to implement is to include the two column names of the values to use as the tid column at server end like the db table names but instead they are column names - + todo: pass function to grid to generate virtual column from client side? + But then sort and filter and ....blah blah blah todo: BUG widget form now always dirty for some fucking reason, fuck this shit, fuck. diff --git a/ayanova/src/api/locale.js b/ayanova/src/api/locale.js index c247e0dd..f15bf64a 100644 --- a/ayanova/src/api/locale.js +++ b/ayanova/src/api/locale.js @@ -228,5 +228,34 @@ export default { return new Intl.NumberFormat(languageName, { minimumFractionDigits: 2 }).format(value); + }, + /////////////////////////////////////////// + // Turn a file / memory size number into a local + // decimal format display and in reasonable human readable range + // + humanFileSize(bytes, languageName, si = false, dp = 1) { + const thresh = si ? 1000 : 1024; + + if (Math.abs(bytes) < thresh) { + return bytes + " B"; + } + + const units = si + ? ["kB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"] + : ["KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB"]; + let u = -1; + const r = 10 ** dp; + + do { + bytes /= thresh; + ++u; + } while ( + Math.round(Math.abs(bytes) * r) / r >= thresh && + u < units.length - 1 + ); + + return ( + this.decimalLocalized(bytes.toFixed(dp), languageName) + " " + units[u] + ); } }; diff --git a/ayanova/src/api/open-object-handler.js b/ayanova/src/api/open-object-handler.js index 8b64d445..0415e2b0 100644 --- a/ayanova/src/api/open-object-handler.js +++ b/ayanova/src/api/open-object-handler.js @@ -34,6 +34,29 @@ export default { params: { recordid: tid.id } }); break; + case ayatype.FileAttachment: + //lookup the actual type + //then call this method again to do the actual open + + (async () => { + try { + let res = await window.$gz.api.get("attachment/parent/" + tid.id); + console.log("res is", res); + if (res.error) { + throw res.error; + } + if (res.data.id && res.data.id != 0) { + this.handleOpenObjectClick(vm, res.data); + return; + } + } catch (e) { + throw e; + } + })(); + + //error here? or do nothing, doing nothing for now, should only apply if it's an orphan record and that is kind of obvious + //or error "Can't open nothing" + break; case ayatype.Translation: vm.$router.push({ name: "adm-translation", diff --git a/ayanova/src/components/custom-fields-control.vue b/ayanova/src/components/custom-fields-control.vue index d2029194..6898bf91 100644 --- a/ayanova/src/components/custom-fields-control.vue +++ b/ayanova/src/components/custom-fields-control.vue @@ -276,7 +276,8 @@ export default { Enum = 10, EmailAddress = 11, HTTP = 12, - InternalId = 13 + InternalId = 13, + MemorySize=14 */ switch (ctrlType) { //DateLike? diff --git a/ayanova/src/components/gz-data-table.vue b/ayanova/src/components/gz-data-table.vue index 9d877c84..53ab8f17 100644 --- a/ayanova/src/components/gz-data-table.vue +++ b/ayanova/src/components/gz-data-table.vue @@ -81,7 +81,7 @@