Пример #1
0
        internal static void SendMauVariable(MauComponent holder, string mauVarName)
        {
            PropertyInfo pInfo = holder.GetType().GetProperty(mauVarName);

            if (pInfo == null)
            {
                throw new ArgumentException("Variable not found", nameof(mauVarName));
            }
            if (!HasAttribute(pInfo))
            {
                throw new ArgumentException("Variable not 'MauVariable'", nameof(mauVarName));
            }

            // Ui not register yet (RegisterComponent function not called)
            if (string.IsNullOrWhiteSpace(holder.MauId))
            {
                return;
            }

            // Get Data
            var data = new JObject
            {
                { "varName", mauVarName },
                { "varValue", MyAngularUi.ParseMauDataToFrontEnd(pInfo.PropertyType, pInfo.GetValue(holder)) }
            };

            MyAngularUi.SendRequestAsync(holder.MauId, MyAngularUi.RequestType.SetVarValue, data);
        }
Пример #2
0
        internal static void SendMauProp(MauComponent holder, string mauPropName)
        {
            MauPropertyHolder mauPropHolder = holder.GetMauPropHolder(mauPropName);
            Type   propType  = holder.HandledProps[mauPropName].Holder.PropertyType;
            object propValue = holder.HandledProps[mauPropName].Holder.GetValue(holder);

            // bypass is for props not yet changed from .Net side
            // so it's just to not override angular prop value
            bool bypass = false;

            if (!mauPropHolder.Touched)
            {
                bypass = true;
            }
            else if (mauPropHolder.PropAttr.PropStatus == MauPropertyStatus.ReadOnly)
            {
                bypass = true;
            }
            else if (propType.IsEnum)
            {
                if (!MauEnumMemberAttribute.HasNotSetValue(propValue.GetType()))
                {
                    throw new Exception($"NotSet must to be in any MauProperty value is 'Enum', {propValue.GetType().FullName}");
                }

                if (MauEnumMemberAttribute.HasAttribute((Enum)propValue))
                {
                    propValue = MauEnumMemberAttribute.GetValue((Enum)propValue);
                }

                // If it's NotSet just ignore so the angular value will be set,
                // Angular value will be in .Net side, so the value will be correct here.
                // E.g: Color prop if it's NotSet in .Net then use and don't change
                // Angular value.
                switch (propValue)
                {
                case int:
                case long and 0:
                case string propValStr when string.IsNullOrWhiteSpace(propValStr):
                    bypass = true;

                    break;
                }
            }
            else if (propValue == null && propType == typeof(string))
            {
                // null not same as empty string
                bypass = true;
            }

            // Don't send .Net value and ask angular for it's value
            if (bypass)
            {
                holder.RequestPropValue(mauPropName);
                return;
            }

            var data = new JObject
            {
                { "propType", (int)mauPropHolder.PropAttr.PropType },
                { "propStatus", (int)mauPropHolder.PropAttr.PropStatus },
                { "propForce", mauPropHolder.PropAttr.ForceSet },
                { "propName", mauPropName },
                { "propVal", MyAngularUi.ParseMauDataToFrontEnd(propType, propValue) }
            };

            MyAngularUi.SendRequestAsync(holder.MauId, MyAngularUi.RequestType.SetPropValue, data);
        }