Skip to content
Closed
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions packages/dts-generator/src/resources/typed-json-model.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ declare module "sap/ui/model/json/TypedJSONModel" {
import JSONModel from "sap/ui/model/json/JSONModel";
import TypedJSONContext from "sap/ui/model/json/TypedJSONContext";
import Context from "sap/ui/model/Context";
import Message from "sap/ui/core/message/Message";

/**
* TypedJSONModel is a subclass of JSONModel that provides type-safe access to the model data. It is only available when using UI5 with TypeScript.
Expand All @@ -19,6 +20,10 @@ declare module "sap/ui/model/json/TypedJSONModel" {
bReload?: boolean,
): TypedJSONContext<Data, Path>;
getData(): Data;
getMessagesByPath<Path extends AbsoluteBindingPath<Data>>(
sPath: Path,
bPrefixMatch?: boolean,
): Message[];
getProperty<Path extends AbsoluteBindingPath<Data>>(
sPath: Path,
): PropertyByAbsoluteBindingPath<Data, Path>;
Expand Down
5 changes: 5 additions & 0 deletions test-packages/typed-json-model/webapp/model/model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import {
PropertyByRelativeBindingPath,
RelativeBindingPath,
} from "./typing";
import Message from "sap/ui/core/message/Message";

export class TypedJSONContext<Data extends object, Root extends AbsoluteBindingPath<Data>> extends Context {
constructor(oModel: TypedJSONModel<Data>, sPath: Root) {
Expand Down Expand Up @@ -43,6 +44,10 @@ export class TypedJSONModel<Data extends object> extends JSONModel {
return super.getData() as Data;
}

getMessagesByPath<Path extends AbsoluteBindingPath<Data>>(sPath: Path, bPrefixMatch?: boolean): Message[] {
return super.getMessagesByPath(sPath, bPrefixMatch);
}

getProperty<Path extends AbsoluteBindingPath<Data>>(sPath: Path): PropertyByAbsoluteBindingPath<Data, Path>;
getProperty<Path extends RelativeBindingPath<Data, Root>, Root extends AbsoluteBindingPath<Data>>(
sPath: Path,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
* @file Various edge cases to test the TypedJSONModel
*/

import Message from "sap/ui/core/message/Message";
import { TypedJSONModel } from "../../model";

/***********************************************************************************************************************
Expand Down Expand Up @@ -65,3 +66,34 @@ const model4 = new TypedJSONModel(edgeCase);
/** @expect ok */ model4.setProperty("/anIntersection", { a: 1, b: "b" });
/** @expect ts2345 */ model4.setProperty("/anIntersection", { a: 1 });
/** @expect ts2322 */ model4.setProperty("/anIntersection", { a: 1, b: 2 });

/***********************************************************************************************************************
* Check model.getMessagesByPath
**********************************************************************************************************************/

const data = {
aString: "string",
anObject: { a: "foo" },
anArray: [],
anArrayOfObjects: [{ aNumber: 1 }],
};

const model5 = new TypedJSONModel(data);

/** @expect ok */ model5.getMessagesByPath("/aString");
/** @expect ok */ model5.getMessagesByPath("/aString", true);

/** @expect ok */ const messages: Message[] = model5.getMessagesByPath("/anObject");
/** @expect ok */ model5.getMessagesByPath("/anObject", true);

/** @expect ok */ model5.getMessagesByPath("/anObject/a");
/** @expect ok */ model5.getMessagesByPath("/anObject/a", true);

/** @expect ok */ model5.getMessagesByPath("/anArrayOfObjects/0/aNumber");
/** @expect ok */ model5.getMessagesByPath("/anArrayOfObjects/0/aNumber", true);

/** @expect ts2345 */ model5.getMessagesByPath("anObject");
/** @expect ts2345 */ model5.getMessagesByPath("anObject", true);

/** @expect ts2345 */ model5.getMessagesByPath("/anArray/0/doesNotExist");
/** @expect ts2345 */ model5.getMessagesByPath("/anArray/0/doesNotExist", true);
Loading