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,
|
"mandatory": field.reqd,
|
||||||
"read_only": field.read_only,
|
"read_only": field.read_only,
|
||||||
"hidden": field.hidden,
|
"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
|
return _fields
|
||||||
|
|||||||
@ -23,9 +23,11 @@
|
|||||||
<div v-for="field in section.fields" :key="field.name">
|
<div v-for="field in section.fields" :key="field.name">
|
||||||
<div
|
<div
|
||||||
v-if="
|
v-if="
|
||||||
field.type == 'Check' ||
|
(field.type == 'Check' ||
|
||||||
(field.read_only && data[field.name]) ||
|
(field.read_only && data[field.name]) ||
|
||||||
!field.read_only || !field.hidden
|
!field.read_only ||
|
||||||
|
!field.hidden) &&
|
||||||
|
field.display_depends_on
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
|
|||||||
@ -37,6 +37,7 @@ import {
|
|||||||
Spinner,
|
Spinner,
|
||||||
Badge,
|
Badge,
|
||||||
} from 'frappe-ui'
|
} from 'frappe-ui'
|
||||||
|
import { evaluate_depends_on_value } from '@/utils'
|
||||||
import { computed } from 'vue'
|
import { computed } from 'vue'
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
@ -90,6 +91,10 @@ const sections = computed(() => {
|
|||||||
} else {
|
} else {
|
||||||
_sections[_sections.length - 1].fields.push({
|
_sections[_sections.length - 1].fields.push({
|
||||||
...field,
|
...field,
|
||||||
|
display_depends_on: evaluate_depends_on_value(
|
||||||
|
field.depends_on,
|
||||||
|
data.doc,
|
||||||
|
),
|
||||||
name: field.value,
|
name: field.value,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@ -241,3 +241,45 @@ export function isTouchScreenDevice() {
|
|||||||
export function convertArrayToString(array) {
|
export function convertArrayToString(array) {
|
||||||
return array.map((item) => item).join(',')
|
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