UNPKG

service-utilities

Version:

Utility Package for FIORI UI5

106 lines (88 loc) 3.78 kB
/** * @module ServiceModelResource * @description Model Data Utility * @author jpanti * @version 1.0.0 * @created 2025-08-01 * @lastModified 2025-08-01 * @license ISC */ sap.ui.define( ["sap/ui/model/json/JSONModel", "./AbstractController"], (JSONModel, AbstractController) => { "use strict"; class ServiceModelResource extends AbstractController { // Utilities ======================================== toJSONModel = (oData) => new JSONModel(oData); getTargetView = (setToGlobal) => setToGlobal ? this.getController().getOwnerComponent() : this.getController().getView(); // ================================================== // Private Core Methods ============================= #getModel(modelname, setToGlobal = false) { if (!this.getController()) return undefined; // returns undefined // Gets the target view components const targetView = this.getTargetView(setToGlobal); // Gets the model via modelname and target view const oModel = !modelname || modelname.trim() === "" ? targetView.getModel() : targetView.getModel(modelname); return oModel; } #setModel(modelname, oData, setToGlobal = false) { if (!this.getController()) return undefined; // returns undefined if (!oData || Object.keys(oData).length === 0) return undefined; // returns undefined // Gets the model via modelname const oModel = this.getModel(modelname, setToGlobal); const doModelExists = !!oModel; // Create the model if not exists if (doModelExists) { for (const key in oData) { if (oData.hasOwnProperty(key)) { oModel.getData()[key] = oData[key]; } } oModel.updateBindings(true); // Update the model if it exists } else { const targetView = this.getTargetView(); if (!modelname || modelname.trim() === "") targetView.setModel(this.toJSONModel(oData)); else targetView.setModel(this.toJSONModel(oData), modelname); } return { ...oData }; // returns a shallow copy of the data } #updateModel(modelname, setToGlobal = false) { if (!this.getController()) return false; const oModel = this.#getModel(modelname, setToGlobal); if (!oModel) return false; oModel.updateBindings(true); return true; } // ================================================== // Controller-based Core Methods ==================== getModel = (modelname, setToGlobal = false) => this.#getModel(modelname, setToGlobal); getModelResource = (modelname, setToGlobal = false) => this.#getModel(modelname, setToGlobal).getData(); setModel = (modelname, oData, setToGlobal = false) => this.#setModel(modelname, oData, setToGlobal); updateModel = (modelname, setToGlobal = false) => this.#updateModel(modelname, setToGlobal); // ================================================== // Controller-based Core Extension Methods ========== getModelSchema = (oData, setToGlobal = false) => this.#getModel(oData.modelname, setToGlobal); getModelResourceSchema = (oData, setToGlobal = false) => this.#getModel(oData.modelname, setToGlobal).getData(); setModelSchema = (oData, setToGlobal = false) => this.#setModel(oData.modelname, oData, setToGlobal); updateModelSchema = (oData, setToGlobal = false) => this.#updateModel(oData.modelname, setToGlobal); // ================================================== } return ServiceModelResource; } );