From d2fd84b10e08f0f53bcbd53e7d85eb1bab6ab74d Mon Sep 17 00:00:00 2001 From: luNunezProcessmaker Date: Tue, 28 May 2024 12:49:14 -0400 Subject: [PATCH 1/4] feature/FOUR-15768 --- src/assets/no-priority.svg | 3 + src/assets/priority-header.svg | 3 + src/assets/priority.svg | 4 + src/components/renderer/form-tasks.vue | 155 ++++++++++++++++--------- 4 files changed, 113 insertions(+), 52 deletions(-) create mode 100755 src/assets/no-priority.svg create mode 100755 src/assets/priority-header.svg create mode 100755 src/assets/priority.svg diff --git a/src/assets/no-priority.svg b/src/assets/no-priority.svg new file mode 100755 index 000000000..3f80a4832 --- /dev/null +++ b/src/assets/no-priority.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/priority-header.svg b/src/assets/priority-header.svg new file mode 100755 index 000000000..fc79b7ec3 --- /dev/null +++ b/src/assets/priority-header.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/priority.svg b/src/assets/priority.svg new file mode 100755 index 000000000..5647e92e3 --- /dev/null +++ b/src/assets/priority.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/components/renderer/form-tasks.vue b/src/components/renderer/form-tasks.vue index f6e9e43f2..30885ac69 100755 --- a/src/components/renderer/form-tasks.vue +++ b/src/components/renderer/form-tasks.vue @@ -1,48 +1,51 @@ + + @@ -334,17 +368,6 @@ export default { this.pmql = searchData; this.fetch(); }, - sanitizeTooltip(html) { - let cleanHtml = html.replace(/[\s\S]*?<\/script>/gi, ""); - cleanHtml = cleanHtml.replace(/[\s\S]*?<\/style>/gi, ""); - cleanHtml = cleanHtml.replace( - /<(?!img|input|meta|time|button|select|textarea|datalist|progress|meter)[^>]*>/gi, - "" - ); - cleanHtml = cleanHtml.replace(/\s+/g, " "); - - return cleanHtml; - }, formatRemainingTime(date) { const millisecondsPerDay = 1000 * 60 * 60 * 24; const remaining = this.remainingTime(date); diff --git a/src/mixins/datatable.js b/src/mixins/datatable.js index 5d0bdcfc9..3cdffe394 100644 --- a/src/mixins/datatable.js +++ b/src/mixins/datatable.js @@ -1,3 +1,5 @@ +import { get } from 'lodash'; + export default { data() { return { @@ -28,6 +30,31 @@ export default { } this.orderDirection = sortOrder[0].direction; this.fetch(); - } + }, + getNestedPropertyValue(obj, header) { + return this.format(get(obj, header.field), header); + }, + format(value, header) { + let config = ""; + if (header.format === "datetime") { + config = ProcessMaker.user.datetime_format; + value = this.convertUTCToLocal(value, config) + } + if (header.format === "date") { + config = ProcessMaker.user.datetime_format.replace(/[\sHh:msaAzZ]/g, ""); + value = this.convertUTCToLocal(value, config) + } + return value; + }, + convertUTCToLocal(value, config) { + if (value) { + if (moment(value).isValid()) { + return window.moment(value) + .format(config); + } + return value; + } + return "-"; + }, } }; From 9016d994ac3338c66a77f2fcc218865e0fa7f649 Mon Sep 17 00:00:00 2001 From: luNunezProcessmaker Date: Tue, 28 May 2024 15:09:02 -0400 Subject: [PATCH 3/4] feature/FOUR-15768 --- src/assets/no-priority.svg | 3 --- src/assets/priority.svg | 4 ---- src/components/renderer/form-tasks.vue | 4 ++-- 3 files changed, 2 insertions(+), 9 deletions(-) delete mode 100755 src/assets/no-priority.svg delete mode 100755 src/assets/priority.svg diff --git a/src/assets/no-priority.svg b/src/assets/no-priority.svg deleted file mode 100755 index 3f80a4832..000000000 --- a/src/assets/no-priority.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/assets/priority.svg b/src/assets/priority.svg deleted file mode 100755 index 5647e92e3..000000000 --- a/src/assets/priority.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/src/components/renderer/form-tasks.vue b/src/components/renderer/form-tasks.vue index cfdfc03fc..50f86d94a 100755 --- a/src/components/renderer/form-tasks.vue +++ b/src/components/renderer/form-tasks.vue @@ -48,8 +48,8 @@ Date: Tue, 28 May 2024 15:43:46 -0400 Subject: [PATCH 4/4] some corrections --- src/components/renderer/form-tasks.vue | 160 ++++++++++++++++++------- src/mixins/datatable.js | 71 ++++++++++- 2 files changed, 184 insertions(+), 47 deletions(-) diff --git a/src/components/renderer/form-tasks.vue b/src/components/renderer/form-tasks.vue index 50f86d94a..7d5d586e9 100755 --- a/src/components/renderer/form-tasks.vue +++ b/src/components/renderer/form-tasks.vue @@ -31,51 +31,77 @@ - - - @@ -190,8 +216,9 @@ export default { .then((response) => { this.showTable = response.data.data.length !== 0; for (const record of response.data.data) { - // format Status - record.case_title = record.process_request.case_title; + record["case_title"] = this.formatCaseTitle(record.process_request, record); + record["color_badge"] = this.formatColorBadge(record["due_at"]); + record["element_name"] = this.formatActiveTask(record); } this.tableData = response.data; this.countResponse = this.tableData.meta.total; @@ -216,6 +243,31 @@ export default { }); }); }, + formatActiveTask(row) { + return ` + + ${row.element_name} + `; + }, + formatColorBadge(date) { + const days = this.remainingTime(date); + return days >= 0 ? "primary" : "danger"; + }, + formatCaseTitle(processRequest, record) { + return ` + + ${ + processRequest.case_title_formatted || + processRequest.case_title || + record.case_title || + "" + } + `; + }, + openTask() {}, getColumns() { const columns = [ { @@ -386,6 +438,32 @@ export default { } return date.diff(this.now); }, + sanitizeTooltip(html) { + let cleanHtml = html.replace(/[\s\S]*?<\/script>/gi, ""); + cleanHtml = cleanHtml.replace(/[\s\S]*?<\/style>/gi, ""); + cleanHtml = cleanHtml.replace( + /<(?!img|input|meta|time|button|select|textarea|datalist|progress|meter)[^>]*>/gi, + "" + ); + cleanHtml = cleanHtml.replace(/\s+/g, " "); + + return cleanHtml; + } } }; + + diff --git a/src/mixins/datatable.js b/src/mixins/datatable.js index 3cdffe394..d14ee455d 100644 --- a/src/mixins/datatable.js +++ b/src/mixins/datatable.js @@ -1,4 +1,4 @@ -import { get } from 'lodash'; +import { get } from "lodash"; export default { data() { @@ -38,23 +38,82 @@ export default { let config = ""; if (header.format === "datetime") { config = ProcessMaker.user.datetime_format; - value = this.convertUTCToLocal(value, config) + value = this.convertUTCToLocal(value, config); } if (header.format === "date") { - config = ProcessMaker.user.datetime_format.replace(/[\sHh:msaAzZ]/g, ""); - value = this.convertUTCToLocal(value, config) + config = ProcessMaker.user.datetime_format.replace( + /[\sHh:msaAzZ]/g, + "" + ); + value = this.convertUTCToLocal(value, config); } return value; }, convertUTCToLocal(value, config) { if (value) { if (moment(value).isValid()) { - return window.moment(value) - .format(config); + return window.moment(value).format(config); } return value; } return "-"; }, + containsHTML(text) { + const doc = new DOMParser().parseFromString(text, "text/html"); + return Array.from(doc.body.childNodes).some( + (node) => node.nodeType === Node.ELEMENT_NODE + ); + }, + isComponent(content) { + if (content && typeof content === "object") { + return content.component && typeof content.props === "object"; + } + return false; + }, + sanitize(html) { + return this.removeScripts(html); + }, + removeScripts(input) { + const doc = new DOMParser().parseFromString(input, "text/html"); + + const scripts = doc.querySelectorAll("script"); + scripts.forEach((script) => { + script.remove(); + }); + + const styles = doc.querySelectorAll("style"); + styles.forEach((style) => { + style.remove(); + }); + + return doc.body.innerHTML; + }, + changePage(page) { + this.page = page; + this.fetch(); + }, + changePerPage(value) { + this.perPage = value; + this.fetch(); + }, + formatAvatar(user) { + return { + component: "AvatarImage", + props: { + size: "25", + "input-data": user, + "hide-name": false, + "name-clickable": true + } + }; + }, + formatCategory(categories) { + return categories.map((item) => item.name).join(", "); + }, + checkIfTooltipIsNeeded(e, v) { + if (e.target.offsetWidth >= e.target.scrollWidth) { + e.preventDefault(); + } + } } };