Files
metabuilder/qml/MetaBuilder/SchemaEditorDBAL.js
johndoe6345789 827387d807 style(qt6): enforce 80-character line margin across all QML and JS files
88 files reformatted — zero logic changes:
- All views, components, and JS modules wrapped to 80-char margin
- Long property bindings, ternaries, and strings broken at natural points
- Theme.qml theme definitions expanded to multi-line
- StyleVariables tokens wrapped
- Section comment rulers trimmed to 80 chars

Trade-off: LOC increases from line wrapping (compact single-line properties
now span 2-3 lines). Content unchanged.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 15:20:01 +00:00

143 lines
4.1 KiB
JavaScript

.pragma library
// DBAL persistence and schema CRUD helpers
// for schema editor.
function loadSchemas(dbal, callback) {
dbal.execute("core/schema", {},
function(result, error) {
if (!error && result && result.items) {
var parsed = []
for (var i = 0;
i < result.items.length; i++) {
var item = result.items[i]
var fields = []
if (item.fields) {
for (var j = 0;
j < item.fields.length;
j++) {
var f = item.fields[j]
fields.push({
name: f.name || "",
type: f.type
|| "string",
required:
f.required || false,
defaultValue:
f.defaultValue
|| f["default"]
|| "",
description:
f.description || ""
})
}
}
parsed.push({
name: item.name || "",
description:
item.description || "",
fields: fields
})
}
if (parsed.length > 0)
callback(parsed)
}
})
}
function currentSchema(schemas, idx) {
return schemas[idx] || null
}
function currentFields(schemas, idx) {
var s = currentSchema(schemas, idx)
return s ? s.fields : []
}
function currentField(schemas, schemaIdx,
fieldIdx) {
var fields = currentFields(schemas, schemaIdx)
return (fieldIdx >= 0
&& fieldIdx < fields.length)
? fields[fieldIdx] : null
}
function updateField(schemas, schemaIdx,
fieldIdx, key, value) {
var copy = JSON.parse(JSON.stringify(schemas))
copy[schemaIdx].fields[fieldIdx][key] = value
return copy
}
function addSchema(schemas, name, description,
dbal, loadFn) {
if (name.trim() === "") return null
var schemaData = {
name: name.trim(),
description: description.trim(),
fields: [{
name: "id", type: "string",
required: true,
defaultValue: "uuid()",
description: "Primary key"
}]
}
if (dbal && dbal.connected) {
dbal.create("schema", schemaData,
function(result, error) {
if (!error) loadFn()
})
}
var copy = JSON.parse(JSON.stringify(schemas))
copy.push(schemaData)
return {
schemas: copy,
selectedIndex: copy.length - 1
}
}
function deleteSchema(schemas, selectedIndex) {
if (schemas.length <= 1) return null
var copy = JSON.parse(JSON.stringify(schemas))
copy.splice(selectedIndex, 1)
var newIdx = selectedIndex >= copy.length
? copy.length - 1 : selectedIndex
return {
schemas: copy, selectedIndex: newIdx
}
}
function addField(schemas, schemaIdx, fieldData) {
if (fieldData.name.trim() === "") return null
var copy = JSON.parse(JSON.stringify(schemas))
copy[schemaIdx].fields.push({
name: fieldData.name.trim(),
type: fieldData.type,
required: fieldData.required,
defaultValue: fieldData.defaultValue,
description: fieldData.description
})
return {
schemas: copy,
selectedFieldIndex:
copy[schemaIdx].fields.length - 1
}
}
function deleteField(schemas, schemaIdx,
fieldIdx) {
if (fieldIdx < 0) return schemas
var copy = JSON.parse(JSON.stringify(schemas))
copy[schemaIdx].fields.splice(fieldIdx, 1)
return copy
}
function loadJson(relativePath) {
var xhr = new XMLHttpRequest()
xhr.open("GET", relativePath, false)
xhr.send()
if (xhr.status === 200 || xhr.status === 0)
return JSON.parse(xhr.responseText)
return []
}