service-utilities
Version:
Utility Package for FIORI UI5
106 lines (88 loc) • 3.78 kB
JavaScript
/**
* @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;
}
);