From 6322ad268c226fdf2ae004fe8b4fdab58e267012 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Fri, 13 Sep 2024 12:28:43 +0530 Subject: [PATCH 1/3] feat: display depends on in settings page --- crm/api/doc.py | 3 ++ frontend/src/components/Fields.vue | 8 ++-- .../src/components/Settings/SettingsPage.vue | 5 +++ frontend/src/utils/index.js | 42 +++++++++++++++++++ 4 files changed, 55 insertions(+), 3 deletions(-) diff --git a/crm/api/doc.py b/crm/api/doc.py index aeb76a6f..a5a7c51e 100644 --- a/crm/api/doc.py +++ b/crm/api/doc.py @@ -682,6 +682,9 @@ def get_fields(doctype: str, allow_all_fieldtypes: bool = False): "mandatory": field.reqd, "read_only": field.read_only, "hidden": field.hidden, + "depends_on": field.depends_on, + "mandatory_depends_on": field.mandatory_depends_on, + "read_only_depends_on": field.read_only_depends_on, }) return _fields diff --git a/frontend/src/components/Fields.vue b/frontend/src/components/Fields.vue index fe723d8b..80cea4ba 100644 --- a/frontend/src/components/Fields.vue +++ b/frontend/src/components/Fields.vue @@ -23,9 +23,11 @@
{ } else { _sections[_sections.length - 1].fields.push({ ...field, + display_depends_on: evaluate_depends_on_value( + field.depends_on, + data.doc, + ), name: field.value, }) } diff --git a/frontend/src/utils/index.js b/frontend/src/utils/index.js index f7cbbd0c..c233668d 100644 --- a/frontend/src/utils/index.js +++ b/frontend/src/utils/index.js @@ -241,3 +241,45 @@ export function isTouchScreenDevice() { export function convertArrayToString(array) { return array.map((item) => item).join(',') } + +export function _eval(code, context = {}) { + let variable_names = Object.keys(context) + let variables = Object.values(context) + code = `let out = ${code}; return out` + try { + let expression_function = new Function(...variable_names, code) + return expression_function(...variables) + } catch (error) { + console.log('Error evaluating the following expression:') + console.error(code) + throw error + } +} + +export function evaluate_depends_on_value(expression, doc) { + if (!expression) return true + if (!doc) return true + + let out = null + + if (typeof expression === 'boolean') { + out = expression + } else if (typeof expression === 'function') { + out = expression(doc) + } else if (expression.substr(0, 5) == 'eval:') { + try { + out = _eval(expression.substr(5), { doc }) + } catch (e) { + out = true + } + } else { + let value = doc[expression] + if (Array.isArray(value)) { + out = !!value.length + } else { + out = !!value + } + } + + return out +} \ No newline at end of file From 419b54383d46b3209c4c226507dcd501d013c8c2 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Fri, 13 Sep 2024 14:42:46 +0530 Subject: [PATCH 2/3] fix: show error & success message in settings page --- .../src/components/Settings/SettingsPage.vue | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/frontend/src/components/Settings/SettingsPage.vue b/frontend/src/components/Settings/SettingsPage.vue index 000aed5e..3d73917d 100644 --- a/frontend/src/components/Settings/SettingsPage.vue +++ b/frontend/src/components/Settings/SettingsPage.vue @@ -37,7 +37,7 @@ import { Spinner, Badge, } from 'frappe-ui' -import { evaluate_depends_on_value } from '@/utils' +import { evaluate_depends_on_value, createToast } from '@/utils' import { computed } from 'vue' const props = defineProps({ @@ -45,6 +45,10 @@ const props = defineProps({ type: String, required: true, }, + successMessage: { + type: String, + default: 'Updated Successfully', + }, }) const fields = createResource({ @@ -63,6 +67,24 @@ const data = createDocumentResource({ fields: ['*'], cache: props.doctype, auto: true, + setValue: { + onSuccess: () => { + createToast({ + title: __('Success'), + text: __(props.successMessage), + icon: 'check', + iconClasses: 'text-green-600', + }) + }, + onError: (err) => { + createToast({ + title: __('Error'), + text: err.message + ': ' + err.messages[0], + icon: 'x', + iconClasses: 'text-red-600', + }) + }, + }, }) const sections = computed(() => { From 9c979b213d39309c4e409dfee3b4132e28661d0e Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Fri, 13 Sep 2024 14:51:22 +0530 Subject: [PATCH 3/3] chore: updated CRMLogo svg --- frontend/src/components/Icons/CRMLogo.vue | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/frontend/src/components/Icons/CRMLogo.vue b/frontend/src/components/Icons/CRMLogo.vue index e891797f..f2b9dced 100644 --- a/frontend/src/components/Icons/CRMLogo.vue +++ b/frontend/src/components/Icons/CRMLogo.vue @@ -1,18 +1,18 @@