fix: parse multiple class in form script

(cherry picked from commit 39fa9c78f8bc673463b3bbfb822854d4e7674ef0)
This commit is contained in:
Shariq Ansari 2025-05-02 15:56:47 +05:30 committed by Mergify
parent cac40bc538
commit 6dcd290bb7

View File

@ -52,26 +52,30 @@ export function getScript(doctype, view = 'Form') {
let script = scriptStrings[scriptName]?.script let script = scriptStrings[scriptName]?.script
if (!script) continue if (!script) continue
try { try {
const className = getClassName(script) const classNames = getClassNames(script)
if (!className) { if (!classNames) continue
if (script.includes('setupForm(')) {
let message = __(
'setupForm() is deprecated, use class syntax instead. Check the documentation for more details.',
)
createToast({
title: __('Deprecation Warning'),
text: message,
icon: 'alert-triangle',
iconClasses: 'text-orange-500',
timeout: 10,
})
console.warn(message)
}
throw new Error(__('No class found in script'))
}
const FormClass = evaluateFormClass(script, className, helpers) classNames.forEach((className) => {
controllers[className] = setupFormController(FormClass, document) if (!className) {
if (script.includes('setupForm(')) {
let message = __(
'setupForm() is deprecated, use class syntax instead. Check the documentation for more details.',
)
createToast({
title: __('Deprecation Warning'),
text: message,
icon: 'alert-triangle',
iconClasses: 'text-orange-500',
timeout: 10,
})
console.warn(message)
}
throw new Error(__('No class found in script'))
}
const FormClass = evaluateFormClass(script, className, helpers)
controllers[className] = setupFormController(FormClass, document)
})
} catch (err) { } catch (err) {
console.error('Failed to load form controller:', err) console.error('Failed to load form controller:', err)
} }
@ -97,9 +101,12 @@ export function getScript(doctype, view = 'Form') {
} }
// utility function to setup a form controller // utility function to setup a form controller
function getClassName(script) { function getClassNames(script) {
const match = script.match(/class\s+([A-Za-z0-9_]+)/) return (
return match ? match[1] : null [...script.matchAll(/class\s+([A-Za-z0-9_]+)/g)].map(
(match) => match[1],
) || []
)
} }
function evaluateFormClass(script, className, helpers = {}) { function evaluateFormClass(script, className, helpers = {}) {