Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
4 changes: 4 additions & 0 deletions src/PAModel/EditorState/DynamicPropertyState.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.

using System.Text.Json;
using System.Text.Json.Serialization;

namespace Microsoft.PowerPlatform.Formulas.Tools.EditorState;
Expand All @@ -15,6 +16,9 @@ public class DynamicPropertyState

public PropertyState Property { get; set; }

// Object with additional properties like AFDDataSourceName, etc.
public JsonElement? ControlPropertyState { get; set; }

[JsonExtensionData]
public Dictionary<string, object> ExtensionData { get; set; }
}
1 change: 1 addition & 0 deletions src/PAModel/EditorState/PropertyState.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ public class PropertyState
public string PropertyName { get; set; }
public string NameMap { get; set; }
public string RuleProviderType { get; set; } // = "Unknown";
public string Category { get; set; }
[JsonExtensionData]
public Dictionary<string, JsonElement> ExtensionData { get; set; }
}
15 changes: 11 additions & 4 deletions src/PAModel/IR/IRStateHelpers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -292,14 +292,14 @@ private static (PropertyNode prop, PropertyState state) SplitProperty(RuleEntry
{
var script = rule.InvariantScript;
var prop = new PropertyNode() { Expression = new ExpressionNode() { Expression = script }, Identifier = rule.Property };
var state = new PropertyState() { PropertyName = rule.Property, ExtensionData = rule.ExtensionData, NameMap = rule.NameMap, RuleProviderType = rule.RuleProviderType };
var state = new PropertyState() { PropertyName = rule.Property, ExtensionData = rule.ExtensionData, NameMap = rule.NameMap, RuleProviderType = rule.RuleProviderType, Category = rule.Category };
return (prop, state);
}

private static (PropertyNode prop, DynamicPropertyState state) SplitDynamicProperty(DynamicPropertyJson dynamicProperty)
{
var (prop, propertyState) = SplitProperty(dynamicProperty.Rule);
var state = new DynamicPropertyState() { PropertyName = propertyState.PropertyName, Property = propertyState, ExtensionData = dynamicProperty.ExtensionData };
var state = new DynamicPropertyState() { PropertyName = propertyState.PropertyName, Property = propertyState, ExtensionData = dynamicProperty.ExtensionData, ControlPropertyState = dynamicProperty.ControlPropertyState };
return (prop, state);
}

Expand Down Expand Up @@ -359,7 +359,8 @@ private static (Item item, int index) CombineIRAndState(BlockNode blockNode, Err
foreach (var propIR in blockNode.Properties)
{
// Dynamic properties could be null for the galleryTemplateTemplate
if (isInResponsiveLayout && state.DynamicProperties != null && DynamicProperties.IsResponsiveLayoutProperty(propIR.Identifier))
// Check if property is dynamic (responsive layout or has metadata)
if (state.DynamicProperties != null && ((isInResponsiveLayout && DynamicProperties.IsResponsiveLayoutProperty(propIR.Identifier)) || state.DynamicProperties.Any(dp => dp.PropertyName == propIR.Identifier)))
Comment thread
marcelbf marked this conversation as resolved.
{
dynamicProperties.Add(CombineDynamicPropertyIRAndState(propIR, state));
}
Expand All @@ -374,7 +375,8 @@ private static (Item item, int index) CombineIRAndState(BlockNode blockNode, Err
// Add dummy dynamic output props in the state at the end
foreach (var dynPropState in state.DynamicProperties.Where(propState => propState.Property == null))
{
dynamicProperties.Add(new DynamicPropertyJson() { PropertyName = dynPropState.PropertyName });
var dummyProp = new DynamicPropertyJson() { PropertyName = dynPropState.PropertyName, ControlPropertyState = dynPropState.ControlPropertyState };
dynamicProperties.Add(dummyProp);
}

// Reorder to preserve roundtripping
Expand Down Expand Up @@ -603,6 +605,7 @@ private static RuleEntry GetPropertyEntry(ControlState state, ErrorContainer err
property.ExtensionData = propState.ExtensionData;
property.NameMap = propState.NameMap;
property.RuleProviderType = propState.RuleProviderType;
property.Category = propState.Category;
}
else
{
Expand Down Expand Up @@ -634,12 +637,16 @@ private static DynamicPropertyJson GetDynamicPropertyEntry(ControlState state, s
{
InvariantScript = expression,
Property = propName,
Category = propState.Property.Category,
ExtensionData = propState.Property.ExtensionData,
NameMap = propState.Property.NameMap,
RuleProviderType = propState.Property.RuleProviderType
};
property.ExtensionData = propState.ExtensionData;
}

// Preserve ControlPropertyState
property.ControlPropertyState = propState.ControlPropertyState;
}
else
{
Expand Down
6 changes: 6 additions & 0 deletions src/PAModel/Schemas/adhoc/Control.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ public class RuleEntry

public string RuleProviderType { get; set; } // = "Unknown";

public string Category { get; set; }

[JsonExtensionData]
public Dictionary<string, JsonElement> ExtensionData { get; set; }

Expand Down Expand Up @@ -105,6 +107,10 @@ public class DynamicPropertyJson
{
public string PropertyName { get; set; }
public RuleEntry Rule { get; set; }

// object with additional properties
public JsonElement? ControlPropertyState { get; set; }

[JsonExtensionData]
public Dictionary<string, object> ExtensionData { get; set; }

Expand Down
Binary file not shown.
Loading