UNPKG

ui5_easy_use

Version:

CLI tool for SAP ui5 and SAPUI5 projects to initialize apps, generate pages, insert form and table components, manage routing, and automate i18n bindings

101 lines (86 loc) 3.18 kB
sap.ui.define([ "sap/ui/model/json/JSONModel" ], function (JSONModel) { "use strict"; return class LoadJson { constructor(controller) { this._controller = controller; this.sNamespace = "${ez5.appName}"; } async loadModelsJson(modelsJson) { try { return await Promise.all((modelsJson || []).map(this._loadModelConfig.bind(this))); } catch (error) { console.error("Failed to load one or more JSON models", error); throw error; } } async loadAndSetModel(modelName, modelPath) { const oModel = this._createJsonModel(); try { await this._loadJSONData(oModel, modelPath); this._setControllerModel(oModel, modelName); return oModel; } catch (error) { console.error(`Failed to load model "${modelName}" from ${modelPath}`, error); throw error; } } /** * Loads JSON data into a model using promise-based API. * @param {sap.ui.model.json.JSONModel} oModel - Model to load data into. * @param {string} sPath - Path to the JSON file. * @returns {Promise<void>} * @private */ _loadJSONData(oModel, sPath) { return new Promise((resolve, reject) => { oModel.loadData(sPath); oModel.attachRequestCompleted(() => { resolve(oModel); }); oModel.attachRequestFailed((event) => { const error = event.getParameter("response") || event; reject(error); }); }); } generateModelConfig(modelsList, basePath = "model/") { return (modelsList || []).map(function (modelName) { return this._toModelConfig(modelName, basePath); }, this); } async getModel(modelsJsonList) { const modelsJson = this.generateModelConfig(modelsJsonList); let modelsData = []; try { modelsData = await this.loadModelsJson(modelsJson); } catch (error) { console.warn("Some models failed to load", error); } return { modelsJson, modelsData }; } async _loadModelConfig(model) { const oModel = await this.loadAndSetModel(model.modelName, model.modelPath); return { modelName: model.modelName, data: oModel.getData() }; } _createJsonModel() { return new JSONModel(); } _setControllerModel(oModel, modelName) { this._controller.setModel(oModel, modelName); } _toModelConfig(modelName, basePath) { return { modelName: modelName, modelPath: sap.ui.require.toUrl(`${this.sNamespace}/${basePath}${modelName}.json`) }; } }; });