Files
posh-powerplatformtoolkit/bin/pac/tools/JS/PublishedAppTesting.js
2025-04-16 09:55:57 -04:00

185 lines
8.5 KiB
JavaScript

// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
function parseControl(controlName, controlObject) {
var propertiesList = [];
var properties = Object.keys(controlObject.modelProperties);
var controls = [];
if (controlObject.controlWidget.replicatedContextManager) {
var childrenControlContext = controlObject.controlWidget.replicatedContextManager.authoringAreaBindingContext.controlContexts;
var childControlNames = Object.keys(childrenControlContext);
childControlNames.forEach((childControlName) => {
var childControlObject = childrenControlContext[childControlName];
var childControlsList = parseControl(childControlName, childControlObject);
controls = controls.concat(childControlsList);
});
}
var componentBindingContext = AppMagic.Controls.GlobalContextManager.bindingContext.componentBindingContexts.lookup(controlName);
if (componentBindingContext) {
var componentChildrenControlContext = componentBindingContext.controlContexts;
var componentChildrenControlNames = Object.keys(componentChildrenControlContext);
componentChildrenControlNames.forEach((childControlName) => {
if (childControlName !== controlName) {
var componentChildControlObject = componentChildrenControlContext[childControlName];
var childControlsList = parseControl(childControlName, componentChildControlObject);
controls = controls.concat(childControlsList);
propertiesList.push({ propertyName: childControlName, propertyType: childControlName });
}
});
}
properties.forEach((propertyName) => {
var propertyType = controlObject.controlWidget.controlProperties[propertyName].propertyType;
propertiesList.push({ propertyName: propertyName, propertyType: propertyType });
})
var control = { name: controlName, properties: propertiesList };
controls.push(control);
return controls;
}
function buildControlObjectModel() {
var controls = [];
var controlContext = AppMagic.Controls.GlobalContextManager.bindingContext.controlContexts;
var controlNames = Object.keys(controlContext);
controlNames.forEach((controlName) => {
var control = controlContext[controlName];
var controlList = parseControl(controlName, control);
controls = controls.concat(controlList);
});
return controls;
}
function fetchArrayItemCount(itemPath) {
if (itemPath.parentControl && itemPath.parentControl.index === null) {
// Components do not have an item count
throw "Not a gallery, no item count available. Most likely a component";
}
var replicatedContexts = AppMagic.Controls.GlobalContextManager.bindingContext.replicatedContexts
if (itemPath.parentControl && itemPath.parentControl.index !== null) {
// Nested gallery - Power Apps only supports one level of nesting so we don't have to go recursively to find it
// Get parent replicated context
replicatedContexts = OpenAjax.widget.byId(itemPath.parentControl.controlName).OpenAjax.getAuthoringControlContext()._replicatedContext.bindingContextAt(itemPath.parentControl.index).replicatedContexts;
}
var replicatedContext = OpenAjax.widget.byId(itemPath.controlName).OpenAjax.getAuthoringControlContext()._replicatedContext;
if (!replicatedContext) {
// This is not a gallery
throw "Not a gallery, no item count available. Most likely a control";
}
var managerId = replicatedContext.manager.managerId;
return replicatedContexts[managerId].getBindingContextCount()
}
function getBindingContext(itemPath) {
var bindingContext = AppMagic.Controls.GlobalContextManager.bindingContext;
if (itemPath.parentControl) {
// Control is inside a component or gallery
bindingContext = getBindingContext(itemPath.parentControl);
}
if (itemPath.index !== null) {
// Gallery control
var managerId = OpenAjax.widget.byId(itemPath.controlName).OpenAjax.getAuthoringControlContext()._replicatedContext.manager.managerId;
return bindingContext.replicatedContexts[managerId].bindingContextAt(itemPath.index);
}
var componentBindingContext = AppMagic.Controls.GlobalContextManager.bindingContext.componentBindingContexts.lookup(itemPath.controlName);
if (typeof componentBindingContext !== 'undefined') {
// Component control
return componentBindingContext;
}
return bindingContext;
}
function getPropertyValueFromControl(itemPath) {
var bindingContext = getBindingContext(itemPath);
var propertyValue = bindingContext.controlContexts[itemPath.controlName].modelProperties[itemPath.propertyName].getValue();
return {
propertyValue: propertyValue
};
}
function selectControl(itemPath) {
var screenId = AppMagic.AuthoringTool.Runtime.getNamedControl(AppMagic.AuthoringTool.Runtime.getCurrentScreenName()).OpenAjax.uniqueId;
if (itemPath.parentControl && itemPath.parentControl.index !== null ) {
// Gallery
var bindingContext = AppMagic.Controls.GlobalContextManager.bindingContext;
if (itemPath.parentControl.parentControl) {
// Nested gallery
bindingContext = getBindingContext(itemPath.parentControl);
var currentControl = bindingContext.controlContexts[itemPath.controlName].controlWidget;
return AppMagic.Functions.select(null,
bindingContext,
currentControl.control,
null, // row number
null, // child control
screenId)
}
else {
// One level gallery - the nested gallery approach doesn't work for one level so we have to do it differently
// select function is starts with 1, while the C# code indexes from 0
rowOrColumnNumber = itemPath.parentControl.index + 1;
return AppMagic.Functions.select(null,
bindingContext,
AppMagic.AuthoringTool.Runtime.getNamedControl(itemPath.parentControl.controlName),
rowOrColumnNumber,
AppMagic.AuthoringTool.Runtime.getNamedControl(itemPath.controlName).OpenAjax._icontrol,
screenId)
}
}
if (itemPath.parentControl) {
// Component
var bindingContext = AppMagic.Controls.GlobalContextManager.bindingContext.componentBindingContexts.lookup(itemPath.parentControl.controlName);
var buttonWidget = bindingContext.controlContexts[itemPath.controlName].controlWidget;
var controlContext = buttonWidget.getOnSelectControlContext(bindingContext);
buttonWidget.select(controlContext);
return true;
}
return AppMagic.Functions.select(null,
AppMagic.Controls.GlobalContextManager.bindingContext,
AppMagic.AuthoringTool.Runtime.getNamedControl(itemPath.controlName),
null,
null,
screenId);
}
function setPropertyValueForControl(itemPath, value) {
if (itemPath.parentControl && itemPath.parentControl.index !== null) {
// Gallery & Nested gallery
var galleryBindingContext = getBindingContext(itemPath.parentControl);
return AppMagic.AuthoringTool.Runtime.getNamedControl(itemPath.controlName, galleryBindingContext).OpenAjax.setPropertyValueInternal(itemPath.propertyName, value, galleryBindingContext)
}
if (itemPath.parentControl) {
// Component
var componentBindingContext = AppMagic.Controls.GlobalContextManager.bindingContext.componentBindingContexts.lookup(itemPath.parentControl.controlName);
return (AppMagic.AuthoringTool.Runtime.getNamedControl(itemPath.controlName, componentBindingContext).OpenAjax.setPropertyValueInternal(itemPath.propertyName, value, componentBindingContext));
}
return AppMagic.AuthoringTool.Runtime.getNamedControl(itemPath.controlName, AppMagic.Controls.GlobalContextManager.bindingContext).OpenAjax.setPropertyValueInternal(itemPath.propertyName, value, AppMagic.Controls.GlobalContextManager.bindingContext);
}
function interactWithControl(itemPath, value) {
var e = AppMagic.AuthoringTool.Runtime.getNamedControl(itemPath.controlName, AppMagic.Controls.GlobalContextManager.bindingContext).OpenAjax.interactWithControlAsync(AppMagic.Controls.GlobalContextManager.bindingContext.controlContexts[itemPath.controlName], value).then(() => true,() => false);
return e._value;
}