diff options
author | Ali Kianian <ali.kianian@qt.io> | 2024-02-05 12:57:25 +0200 |
---|---|---|
committer | Ali Kianian <ali.kianian@qt.io> | 2024-02-05 17:15:32 +0200 |
commit | 98e0a381da9db379467e01b7f144af61ede036ea (patch) | |
tree | 8a4696e62a04804b637efc84dcb8138eb4b4cc9d | |
parent | 59721758afe9d7034ca76f1a19c3c5c97610ceaa (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.qml | 46 |
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) { |