Browse Source

set properties dynamically

pull/13082/head
malik masis 4 years ago
parent
commit
d48a071531
  1. 23
      modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Pages/ContentParser.cs
  2. 5
      modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Pages/Default.cshtml
  3. 4
      modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Pages/WidgetContentFragment.cs

23
modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Pages/ContentParser.cs

@ -1,4 +1,3 @@
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
@ -10,6 +9,7 @@ namespace Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Pages;
public class ContentParser : IContentParser, ITransientDependency public class ContentParser : IContentParser, ITransientDependency
{ {
private const string delimeter = "----";
private readonly CmsKitContentWidgetOptions _options; private readonly CmsKitContentWidgetOptions _options;
public ContentParser(IOptions<CmsKitContentWidgetOptions> options) public ContentParser(IOptions<CmsKitContentWidgetOptions> options)
{ {
@ -26,7 +26,6 @@ public class ContentParser : IContentParser, ITransientDependency
}; };
} }
string delimeter = "----";
var replacedText = Regex.Replace(content, @"\[.*?\]", delimeter); var replacedText = Regex.Replace(content, @"\[.*?\]", delimeter);
var parsedList = new List<string>(); var parsedList = new List<string>();
@ -56,7 +55,6 @@ public class ContentParser : IContentParser, ITransientDependency
{ {
parsedList.Add(replacedText.Substring(0, index)); parsedList.Add(replacedText.Substring(0, index));
replacedText = replacedText.Substring(index, replacedText.Length - index); replacedText = replacedText.Substring(index, replacedText.Length - index);
} }
else else
{ {
@ -64,22 +62,27 @@ public class ContentParser : IContentParser, ITransientDependency
} }
} }
var name = _options.WidgetConfigs.FirstOrDefault(p => p.Key == "Poll").Value?.Name;
var pollNames = Regex.Matches(content, @"(?<=PollName="")(.*?)(?="")").Select(p => p.Value).ToList(); var pollNames = Regex.Matches(content, @"(?<=PollName="")(.*?)(?="")").Select(p => p.Value).ToList();
var polls = Regex.Matches(content, @"(?<=Widget Type="")(.*?)(?="")").Select(p => p.Value).ToList();
var contentFragments = new List<ContentFragment>(); var contentFragments = new List<ContentFragment>();
for (int i = 0, k = 0; i < parsedList.Count; i++) for (int i = 0, k = 0; i < parsedList.Count; i++)
{ {
if (parsedList[i] == delimeter) if (parsedList[i] == delimeter)
{ {
contentFragments.Add(new WidgetContentFragment(name) var name = _options.WidgetConfigs.Where(p => p.Key == polls[k]).Select(p => p.Value.Name).FirstOrDefault();
if (name is not null)
{ {
Properties = contentFragments.Add(new WidgetContentFragment(name)
{ {
{ "name", pollNames[k++] } Properties =
} {
}); { "Name", pollNames[k]}
}
});
}
k++;
} }
else else
{ {

5
modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Pages/Default.cshtml

@ -18,10 +18,7 @@
} }
else if (contentFragment is WidgetContentFragment widgetContentFragment) else if (contentFragment is WidgetContentFragment widgetContentFragment)
{ {
@await Component.InvokeAsync(widgetContentFragment.Name, new @await Component.InvokeAsync(widgetContentFragment.Name, widgetContentFragment.Properties)
{
name = widgetContentFragment.Properties.FirstOrDefault().Value
})
} }
} }
</abp-card-body> </abp-card-body>

4
modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Pages/WidgetContentFragment.cs

@ -8,11 +8,11 @@ public class WidgetContentFragment : ContentFragment
public string ViewComponentName { get; set; } public string ViewComponentName { get; set; }
public Dictionary<string, string> Properties { get; } public IDictionary<string, object> Properties { get; }
public WidgetContentFragment(string name) public WidgetContentFragment(string name)
{ {
Name = name; Name = name;
Properties = new Dictionary<string, string>(); Properties = new Dictionary<string, object>();
} }
} }
Loading…
Cancel
Save