From 98e0a381da9db379467e01b7f144af61ede036ea Mon Sep 17 00:00:00 2001 From: Ali Kianian Date: Mon, 5 Feb 2024 12:57:25 +0200 Subject: QmlDesigner: Implement new local model structure for dataStore Task-number: QDS-11779 Change-Id: I75bd54a54b094cd9281654ca8dbcad8083c4a6fb Reviewed-by: Mahmoud Badri --- src/imports/utils/JsonListModel.qml | 46 ++++++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) 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) { -- cgit v1.2.3