diff --git a/src/controller/QueryUtil.ts b/src/controller/QueryUtil.ts index 0dafe99e9..2f92412f4 100644 --- a/src/controller/QueryUtil.ts +++ b/src/controller/QueryUtil.ts @@ -11,17 +11,25 @@ import ListBinding from "sap/ui/model/ListBinding"; export default class QueryUtil { private view: View; - // create constructor constructor(view: View) { this.view = view; } + /** + * triggered from liveChange event of MultiInput in App View + * sets search value to global JSONModel settings + * applys search values to list binding + * @param event + */ public liveSearch(event: Event): void { const value = event.getParameter("value").trim(); (this.view.getModel("settings") as JSONModel).setProperty("/search", value); this.applySearchFilter(); } + /** + * applys search and filter values to list binding AllPackages + */ public applySearchFilter(): void { let value = this.view.getModel("settings").getProperty("/search"); const valueTypes = this.view.getModel("settings").getProperty("/tokens"); @@ -30,8 +38,7 @@ export default class QueryUtil { } const list = this.view.byId("listAllPackages"); const listBinding = list.getBinding("items") as ListBinding; - - // filter by input field on name and description + // filter name and description with search value const nameFilter = new Filter({ path: "name", operator: FilterOperator.Contains, @@ -42,12 +49,7 @@ export default class QueryUtil { operator: FilterOperator.Contains, value1: value, }); - // filter valueTypes by type "tag" - const valueTypesTags = valueTypes.filter(function (obj) { - return obj.type === "tag"; - }); - - // filter tag array on object + // check if any tags are match of the package const tagsFilter = new Filter( "tags", function (array: Array) { @@ -57,8 +59,7 @@ export default class QueryUtil { } }.bind(this) ); - - // filter types on object + // check if type machtes the package const typeFilters = []; for (let i = 0; i < valueTypes.length; i++) { if (valueTypes[i].type === "type") { @@ -74,41 +75,17 @@ export default class QueryUtil { filters: typeFilters, and: true, }); - - // filter license on object - const licenseFilters = []; - for (let i = 0; i < valueTypes.length; i++) { - if (valueTypes[i].type === "license") { - const licenseFilter = new Filter({ - path: "licenseSource", - operator: FilterOperator.EQ, - value1: valueTypes[i].key, - }); - licenseFilters.push(licenseFilter); - } - } - const licenseFilter = new Filter({ - filters: licenseFilters, - and: true, - }); - const filters = []; - if (valueTypesTags.length > 0) { - filters.push(tagsFilter); - } - if (typeFilter.aFilters && typeFilter.aFilters.length > 0) { - filters.push(typeFilter); - } - if (licenseFilter.aFilters && licenseFilter.aFilters.length > 0) { - filters.push(licenseFilter); - } + // search for tags and types with or condition const typesTagsFilter = new Filter({ filters: filters, and: true, }); + // search for name and description with or condition const searchFilter = new Filter({ filters: [nameFilter, descFilter], and: false, }); + // apply filters to list binding if (valueTypes.length > 0) { listBinding.filter( new Filter({ @@ -119,16 +96,23 @@ export default class QueryUtil { } else { listBinding.filter(searchFilter); } + // set search values to url to be able to share the url and bookmark it this.setQueryParameters(); } - public onSelectionChange(event: Event): void { + /** + * apply changes in token on MultiInput in App View + * @param event + */ + public onUpdateToken(event: Event): void { const model = this.view.getModel("settings"); let tokenArray = model.getProperty("/tokens"); - const selected = event.getParameter("selected"); - if (selected) { - const keyArray = event.getParameter("changedItem").getKey().split(";"); + // token can be removed or added + const addOrRemove = event.getParameter("type"); + if (addOrRemove === "added") { + // token has two informations: key and type (i.e. middleware;type) + const keyArray = event.getParameter("addedTokens")[0].getProperty("key").split(";"); const tokenObject = { key: keyArray[0], type: keyArray[1], @@ -148,6 +132,10 @@ export default class QueryUtil { (this.view.getModel("settings") as JSONModel).setProperty("/tokens", tokenArray); } + /** + * parse url parameters and set them to global JSONModel settings + * @param eventArguments + */ public getParameterFromQuery(eventArguments: any): void { if ("search" in eventArguments) { (this.view.getModel("settings") as JSONModel).setProperty("/search", eventArguments.search); @@ -172,6 +160,9 @@ export default class QueryUtil { } } + /** + * set url parameters from global JSONModel settings + */ public setQueryParameters(): void { const searchParameter: string = (this.view.getModel("settings") as JSONModel).getProperty("/search"); const tokens: any = (this.view.getModel("settings") as JSONModel).getProperty("/tokens"); diff --git a/src/controller/Tags.controller.ts b/src/controller/Tags.controller.ts index 16822de76..71fb06fa1 100644 --- a/src/controller/Tags.controller.ts +++ b/src/controller/Tags.controller.ts @@ -17,6 +17,10 @@ export default class Tags extends AppController { this.getView().getParent().getParent().getParent().scrollTo(this.getView().getModel("scrollState").getProperty("/tags")); } + /** + * filter the list of tags with the segmented button + * @param {sap.ui.base.Event} event + */ public onSelectionChange(event: Event): void { const binding = this.getView().byId("tagsLits").getBinding("items"); const key = event.getParameter("item").getKey(); @@ -32,6 +36,12 @@ export default class Tags extends AppController { } } + /** + * when clicking on an tag in the list, the token object for filtering is extracted and set + * as the filter for the AllPackages List + * @param event + */ + public onPress(event: Event): void { const item = event.getSource().getBindingContext("data").getObject(); const tokenArray = []; diff --git a/src/controller/Timeline.controller.ts b/src/controller/Timeline.controller.ts index c3e11e6f4..ea0708aa5 100644 --- a/src/controller/Timeline.controller.ts +++ b/src/controller/Timeline.controller.ts @@ -10,12 +10,21 @@ export default class Timeline extends BaseController { this.getRouter().getRoute("timeline").attachPatternMatched(this.onPatternMatched, this); } + /** + * route to package when clicking on item in timeline list + * @param event + */ public onNameClick(event: Event): void { this.navTo("RouteObjectView", { name: event.getSource().getBindingContext("versions").getObject().name, }); } + /** + * headerkey defines the emphasized button in linkheader + * set headerKey Property of the JSONModel settings + * @param event + */ public onPatternMatched(event: Event): void { (this.getView().getModel("settings") as JSONModel).setProperty("/headerKey", "timeline"); this.getView().getParent().getParent().getParent().scrollTo(this.getView().getModel("scrollState").getProperty("/timeline"));