feat: display depends on in settings page
This commit is contained in:
parent
ee12e3b3fd
commit
6322ad268c
@ -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
|
||||
|
||||
@ -23,9 +23,11 @@
|
||||
<div v-for="field in section.fields" :key="field.name">
|
||||
<div
|
||||
v-if="
|
||||
field.type == 'Check' ||
|
||||
(field.read_only && data[field.name]) ||
|
||||
!field.read_only || !field.hidden
|
||||
(field.type == 'Check' ||
|
||||
(field.read_only && data[field.name]) ||
|
||||
!field.read_only ||
|
||||
!field.hidden) &&
|
||||
field.display_depends_on
|
||||
"
|
||||
>
|
||||
<div
|
||||
|
||||
@ -37,6 +37,7 @@ import {
|
||||
Spinner,
|
||||
Badge,
|
||||
} from 'frappe-ui'
|
||||
import { evaluate_depends_on_value } from '@/utils'
|
||||
import { computed } from 'vue'
|
||||
|
||||
const props = defineProps({
|
||||
@ -90,6 +91,10 @@ const sections = computed(() => {
|
||||
} else {
|
||||
_sections[_sections.length - 1].fields.push({
|
||||
...field,
|
||||
display_depends_on: evaluate_depends_on_value(
|
||||
field.depends_on,
|
||||
data.doc,
|
||||
),
|
||||
name: field.value,
|
||||
})
|
||||
}
|
||||
|
||||
@ -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
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user