76 lines
2.5 KiB
JavaScript
76 lines
2.5 KiB
JavaScript
// Generic Schema Builder
|
|
function BuildDynamicForm(schema, currentData = {}, containerId = 'EditProductForm') {
|
|
let html = "";
|
|
const formClass = schema.formClass;
|
|
|
|
schema.fields.forEach(field => {
|
|
const key = field.key;
|
|
const label = field.label;
|
|
const value = currentData[field.dataKey || key.replace('Edit', '').toLowerCase()] || '';
|
|
const required = field.required || false;
|
|
|
|
switch (field.type) {
|
|
case 'text':
|
|
html += UIInputGroup(
|
|
field.placeholder || label,
|
|
'text',
|
|
key,
|
|
label,
|
|
formClass,
|
|
'',
|
|
'',
|
|
required,
|
|
value,
|
|
field.datalistUrl ? `${key}DataList` : ''
|
|
);
|
|
if (field.datalistUrl) {
|
|
html += ArraytoDatalist(`${key}DataList`, [], false);
|
|
QueryandReplaceDatalist(`${key}DataList`, field.datalistUrl, 'POST', null, true);
|
|
}
|
|
break;
|
|
|
|
case 'textarea':
|
|
html += UIInputGroupTEXTAREA(label, key, required, value, formClass);
|
|
break;
|
|
|
|
case 'number':
|
|
html += UIInputGroupNumber(
|
|
field.placeholder || label,
|
|
key,
|
|
label,
|
|
formClass,
|
|
value,
|
|
'',
|
|
'',
|
|
'',
|
|
required
|
|
);
|
|
break;
|
|
|
|
case 'filedrop':
|
|
html += UIInputGroupFileUploadDropzone(
|
|
field.key,
|
|
field.label,
|
|
field.uploadUrl
|
|
);
|
|
break;
|
|
|
|
default:
|
|
console.warn("Unknown field type:", field);
|
|
}
|
|
});
|
|
|
|
html += UIInputGroupButton('Submit', formClass, '', 'LoadDataPageFunc.TryToSubmit()', '');
|
|
html = CreateCardSimple(false, html);
|
|
|
|
document.getElementById(containerId).innerHTML = html;
|
|
|
|
// Initialize Dropzones if present
|
|
schema.fields.filter(f => f.type === 'filedrop').forEach(f => {
|
|
InitializeLoadDataPageFuncDropZonePhotoUpload(f.uploadUrl, f.key, '', 'clearuploadbutton', '', 100);
|
|
if (currentData.photourlDropzone)
|
|
currentDropzone[f.key].functions.ReplaceDropzoneFiles(currentData.photourlDropzone);
|
|
});
|
|
}
|
|
|