aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAli Kianian <ali.kianian@qt.io>2024-02-05 12:57:25 +0200
committerAli Kianian <ali.kianian@qt.io>2024-02-05 17:15:32 +0200
commit98e0a381da9db379467e01b7f144af61ede036ea (patch)
tree8a4696e62a04804b637efc84dcb8138eb4b4cc9d
parent59721758afe9d7034ca76f1a19c3c5c97610ceaa (diff)
QmlDesigner: Implement new local model structure for dataStore
Task-number: QDS-11779 Change-Id: I75bd54a54b094cd9281654ca8dbcad8083c4a6fb Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
-rw-r--r--src/imports/utils/JsonListModel.qml46
1 files changed, 45 insertions, 1 deletions
diff --git a/src/imports/utils/JsonListModel.qml b/src/imports/utils/JsonListModel.qml
index f2bdd53..d86084e 100644
--- a/src/imports/utils/JsonListModel.qml
+++ b/src/imports/utils/JsonListModel.qml
@@ -67,7 +67,7 @@ ListModel {
return
var objectArray = parseJSONString(fileReader.content)
- listModel.jsonObject = objectArray
+ listModel.jsonObject = fromLocalJson(objectArray)
invalidateChildModels()
}
@@ -77,6 +77,50 @@ ListModel {
return objectArray
}
+ function isObject(obj) {
+ return obj && obj.constructor === Object
+ }
+
+ function fromLocalJson(localJson) {
+ if (!isObject(localJson))
+ return {}
+
+ var parsedModel = {}
+ for (let collectionName in localJson) {
+ let collection = localJson[collectionName]
+ if (isObject(collection)) {
+ if (Array.isArray(collection.columns) && Array.isArray(collection.data)) {
+ let propertyNames = []
+ let extractedCollection = []
+
+ for (let columnId in collection.columns) {
+ let column = collection.columns[columnId]
+ propertyNames.push(isObject(column) ? column.name : null)
+ }
+
+ for (let rowId in collection.data) {
+ let extractedElement = {}
+ let row = collection.data[rowId]
+ if (Array.isArray(row)) {
+ let maxIdx = Math.min(row.length, propertyNames.length)
+ for (let idx = 0; idx < maxIdx; ++idx) {
+ let propertyName = propertyNames[idx]
+ if (propertyName !== "") {
+ let value = row[idx]
+ if (value !== undefined && value !== null)
+ extractedElement[propertyName] = value
+ }
+ }
+ }
+ extractedCollection.push(extractedElement)
+ }
+ parsedModel[collectionName] = extractedCollection
+ }
+ }
+ }
+ return parsedModel
+ }
+
function invalidateChildModels() {
for(var property in listModel) {
if (listModel[property].jsonObject !== undefined) {