diff --git a/ANAConversationPlatform/ANAConversationPlatform.csproj b/ANAConversationPlatform/ANAConversationPlatform.csproj
index c0eea9d..2ffe558 100644
--- a/ANAConversationPlatform/ANAConversationPlatform.csproj
+++ b/ANAConversationPlatform/ANAConversationPlatform.csproj
@@ -7,13 +7,13 @@
+
+
+
-
-
-
-
+
diff --git a/ANAConversationPlatform/Controllers/ConversationController.cs b/ANAConversationPlatform/Controllers/ConversationController.cs
index 6334098..60f6232 100644
--- a/ANAConversationPlatform/Controllers/ConversationController.cs
+++ b/ANAConversationPlatform/Controllers/ConversationController.cs
@@ -7,6 +7,7 @@
using ANAConversationPlatform.Models;
using ANAConversationPlatform.Models.Sections;
using Microsoft.Extensions.Logging;
+using static ANAConversationPlatform.Helpers.Constants;
namespace ANAConversationPlatform.Controllers
{
@@ -23,16 +24,23 @@ public ConversationController(ILogger log)
[HttpGet]
public ActionResult Chat()
{
- var chatNodes = MongoHelper.RetrieveRecordsFromChatNode();
- Debug.WriteLine(chatNodes.ToJson());
- if (chatNodes == null || chatNodes.Count == 0)
- return Ok(new object[] { });
+ try
+ {
+ var chatNodes = MongoHelper.RetrieveRecordsFromChatNode();
+ if (chatNodes == null || chatNodes.Count == 0)
+ return Ok(new object[] { });
- return Json(chatNodes, new JsonSerializerSettings()
+ return Json(chatNodes, new JsonSerializerSettings()
+ {
+ NullValueHandling = NullValueHandling.Ignore,
+ Converters = new List { new CustomStringEnumConverter() }
+ });
+ }
+ catch (System.Exception ex)
{
- NullValueHandling = NullValueHandling.Ignore,
- Converters = new List { new CustomStringEnumConverter() }
- });
+ _log.LogError(new EventId((int)LoggerEventId.CHAT_ACTION_ERROR), ex, ex.Message);
+ return StatusCode(500, new { Message = ex.Message });
+ }
}
[HttpGet]
@@ -45,75 +53,83 @@ public ActionResult RefreshContent()
[HttpGet]
public ActionResult HybridChat()
{
- var chatNodes = MongoHelper.RetrieveRecordsFromChatNode();
+ try
+ {
+ var chatNodes = MongoHelper.RetrieveRecordsFromChatNode();
- chatNodes.AddRange(new[] {
- new ChatNode("INIT_CHAT_NODE")
- {
- ApiMethod = "GET",
- ApiUrl = Url.Action("CreateUserSessionForHChat", "AgentChat", new { }, Request.Scheme),
- Emotion = EmotionEnum.Cool,
- Name = "Send Chat Text Node",
- NodeType = NodeTypeEnum.ApiCall,
- NextNodeId = "SEND_CHAT_HISTORY_TO_SERVER",
- RequiredVariables = new[] { "DEVICE_ID", "PERSON_NAME" },
- },
- new ChatNode("SEND_CHAT_HISTORY_TO_SERVER")
- {
- ApiMethod = "POST",
- ApiUrl = Url.Action("SubmitHistory", "AgentChat", new { }, Request.Scheme),
- Emotion = EmotionEnum.Cool,
- Name = "Send Chat History To Server",
- NodeType = NodeTypeEnum.ApiCall,
- NextNodeId = "GET_CHAT_TEXT_NODE",
- RequiredVariables = new[] { "CHAT_USER_ID", "CHAT_USER_TOKEN", "DEVICE_ID", "AGENT", "HISTORY" },
- },
- new ChatNode("GET_CHAT_TEXT_NODE")
+ chatNodes.AddRange(new[]
{
- Buttons = new List
+
diff --git a/ANAConversationSimulator/Helpers/Utils.cs b/ANAConversationSimulator/Helpers/Utils.cs
index cb92295..ed3344a 100644
--- a/ANAConversationSimulator/Helpers/Utils.cs
+++ b/ANAConversationSimulator/Helpers/Utils.cs
@@ -39,9 +39,14 @@ public static IPropertySet LocalStore
}
public static void InitMemoryStack()
+ {
+ InitDeviceIdInMemoryStack();
+ }
+
+ public static void InitDeviceIdInMemoryStack()
{
if (!Utils.LocalStore.ContainsKey("DEVICE_ID"))
- Utils.LocalStore["DEVICE_ID"] = Utils.DeviceId;
+ Utils.LocalStore["DEVICE_ID"] = Utils.GetFinalDeviceId();
}
public static void ShowDialog(string txt)
@@ -163,17 +168,15 @@ public static ChatActivityEvent GetClickEvent(string nodeId, string userId, stri
};
}
- private static string _deviceId;
public static string DeviceId
{
get
{
- if (_deviceId == null)
- _deviceId = CalculateMD5Hash(GetDeviceId());
- return _deviceId;
+ return (string)Utils.LocalStore["DEVICE_ID"];
}
}
+ public static string GetFinalDeviceId() => CalculateMD5Hash(GetDeviceId());
private static string GetDeviceId()
{
if (Windows.Foundation.Metadata.ApiInformation.IsTypePresent("Windows.System.Profile.HardwareIdentification"))
diff --git a/ANAConversationSimulator/Helpers/VerbProcessor.cs b/ANAConversationSimulator/Helpers/VerbProcessor.cs
index 519a4f7..a83063d 100644
--- a/ANAConversationSimulator/Helpers/VerbProcessor.cs
+++ b/ANAConversationSimulator/Helpers/VerbProcessor.cs
@@ -1,9 +1,6 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
using System.Text.RegularExpressions;
-using System.Threading.Tasks;
namespace ANAConversationSimulator.Helpers
{
@@ -21,7 +18,7 @@ public static string Process(string input)
var varName = match.Groups[1].Value;
var value = ButtonActionHelper.GetSavedValue(varName);
if (!string.IsNullOrWhiteSpace(value + ""))
- input = input.Replace(match.Value, value + "");
+ input = input.Replace(match.Value, JsonConvert.SerializeObject(value + "").Trim('"'));
}
}
return input;
diff --git a/ANAConversationSimulator/Models/Chat/Button.cs b/ANAConversationSimulator/Models/Chat/Button.cs
index 585070b..6edb84e 100644
--- a/ANAConversationSimulator/Models/Chat/Button.cs
+++ b/ANAConversationSimulator/Models/Chat/Button.cs
@@ -21,10 +21,14 @@ public Button() { }
public bool Hidden { get; set; }
public string VariableValue { get; set; }
public string PlaceholderText { get; set; }
- public bool ConfirmInput { get; set; }
public string PrefixText { get; set; }
public string PostfixText { get; set; }
+ public string APIResponseMatchKey { get; set; }
+ public string APIResponseMatchValue { get; set; }
+
+ public bool PostToChat { get; set; } = true;
+
private Dictionary _items;
///
/// Contains visible/filtered items in case of
@@ -112,6 +116,7 @@ public enum ButtonTypeEnum
NextNode,
DeepLink,
GetAgent,
- ApiCall
+ ApiCall,
+ ShowConfirmation
}
}
\ No newline at end of file
diff --git a/ANAConversationSimulator/Models/Chat/ChatNode.cs b/ANAConversationSimulator/Models/Chat/ChatNode.cs
index 7ba42ac..797d7db 100644
--- a/ANAConversationSimulator/Models/Chat/ChatNode.cs
+++ b/ANAConversationSimulator/Models/Chat/ChatNode.cs
@@ -9,30 +9,41 @@ public ChatNode(string id)
this.Id = id;
}
- public string Name { get; set; } = null;
- public string HeaderText { get; set; } = null;
+ public string Name { get; set; }
+ public string HeaderText { get; set; }
public string Id { get; set; }
public EmotionEnum Emotion { get; set; }
public int TimeoutInMs { get; set; }
public NodeTypeEnum NodeType { get; set; } = NodeTypeEnum.Combination;
public List Sections { get; set; } = new List();
public List Buttons { get; set; } = new List();
- public string VariableName { get; set; } = null;
- public string ApiMethod { get; set; } = null;
- public string ApiUrl { get; set; } = null;
- public string[] RequiredVariables { get; set; } = null;
- public string NextNodeId { get; set; } = null;
+ public string VariableName { get; set; }
+ public string ApiMethod { get; set; }
+ public string ApiUrl { get; set; }
+ public string[] RequiredVariables { get; set; }
+ public string NextNodeId { get; set; }
public bool IsStartNode { get; set; }
public string GroupName { get; set; }
+
+ #region Card Node
+ public string CardHeader { get; set; }
+ public string CardFooter { get; set; }
+ public Placement? Placement { get; set; }
+ #endregion
}
public enum NodeTypeEnum
{
- Image, Text, Graph, Gif, Audio, Video, Link, EmbeddedHtml, ApiCall, Combination
- };
+ Image, Text, Graph, Gif, Audio, Video, Link, EmbeddedHtml, ApiCall, Combination, Card
+ }
public enum EmotionEnum
{
Cool, Happy, Excited, Neutral, Sad, Irritated, Angry
- };
+ }
+
+ public enum Placement
+ {
+ Incoming, Outgoing, Center
+ }
}
\ No newline at end of file
diff --git a/ANAConversationSimulator/Models/Chat/Sections/CarouselSection.cs b/ANAConversationSimulator/Models/Chat/Sections/CarouselSection.cs
index cdafa87..f360e75 100644
--- a/ANAConversationSimulator/Models/Chat/Sections/CarouselSection.cs
+++ b/ANAConversationSimulator/Models/Chat/Sections/CarouselSection.cs
@@ -1,40 +1,49 @@
-using System.Collections.Generic;
+using ANAConversationSimulator.Services.ChatInterfaceServices;
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Windows.Input;
namespace ANAConversationSimulator.Models.Chat.Sections
{
- public class CarouselSection : Section
- {
- public CarouselSection(string id, int delayInMs = 0) : base(id, SectionTypeEnum.Carousel, delayInMs)
- {
+ public class CarouselSection : Section
+ {
+ public CarouselSection()
+ {
+ SectionType = SectionTypeEnum.Carousel;
+ }
+ public List Items { get; set; } = new List();
+ }
- }
+ public class CarouselItem : BaseEntity
+ {
+ public string Title { get; set; }
+ public string Caption { get; set; }
+ public string ImageUrl { get; set; }
+ public List Buttons { get; set; } = new List();
+ }
- public List CarouselList { get; set; } = new List();
+ public class CarouselButton : BaseEntity
+ {
+ public string Text { get; set; }
+ public string Url { get; set; }
+ public CardButtonType Type { get; set; }
+ public string VariableValue { get; set; }
+ public string NextNodeId { get; set; }
- public void AddNewCarouselEntry(Carousel carouselEntry)
- {
- if (CarouselList == null)
- CarouselList = new List();
- CarouselList.Add(carouselEntry);
- }
+ [JsonIgnore]
+ public ICommand Action { get; set; } = new ButtonActionCommand();
- }
+ [JsonIgnore]
+ public string VariableName { get; set; }
+ [JsonIgnore]
+ public string NodeId { get; set; }
+ }
- public class Carousel
- {
- public Carousel(string title, string imageUrl)
- {
- this.Title = title;
- this.ImageUrl = imageUrl;
- }
- public string Title { get; set; }
- public string ImageUrl { get; set; } = null;
- public List Values { get; set; } = new List();
- public void AddValue(string value)
- {
- if (Values == null)
- Values = new List();
- Values.Add(value);
- }
- }
+ public enum CardButtonType
+ {
+ NextNode,
+ DeepLink,
+ OpenUrl
+ }
}
\ No newline at end of file
diff --git a/ANAConversationSimulator/Models/Chat/Sections/PrintOTPSection.cs b/ANAConversationSimulator/Models/Chat/Sections/PrintOTPSection.cs
new file mode 100644
index 0000000..4c9a128
--- /dev/null
+++ b/ANAConversationSimulator/Models/Chat/Sections/PrintOTPSection.cs
@@ -0,0 +1,13 @@
+using ANAConversationSimulator.Models.Chat;
+
+namespace ANAConversationSimulator.Models.Sections
+{
+ public class PrintOTPSection : Section
+ {
+ public int Length { get; set; }
+ public PrintOTPSection()
+ {
+ SectionType = SectionTypeEnum.PrintOTP;
+ }
+ }
+}
diff --git a/ANAConversationSimulator/Models/Chat/Sections/Section.cs b/ANAConversationSimulator/Models/Chat/Sections/Section.cs
index 7309033..65260dc 100644
--- a/ANAConversationSimulator/Models/Chat/Sections/Section.cs
+++ b/ANAConversationSimulator/Models/Chat/Sections/Section.cs
@@ -18,15 +18,15 @@ public Section(string id, SectionTypeEnum sectionType, int delayInMs)
public bool Hidden { get; set; } = false;
public int Sno { get; set; }
public MessageDirection Direction { get; set; }
- public string Title { get; set; } = null;
- public string Caption { get; set; } = null;
+ public string Title { get; set; }
+ public string Caption { get; set; }
public Section() { }
}
public enum SectionTypeEnum
{
- Image, Text, Graph, Gif, Audio, Video, Link, EmbeddedHtml, Carousel, Typing
- };
+ Image, Text, Graph, Gif, Audio, Video, Link, EmbeddedHtml, Carousel, Typing, PrintOTP
+ }
public enum MessageDirection { In, Out }
}
\ No newline at end of file
diff --git a/ANAConversationSimulator/Package.appxmanifest b/ANAConversationSimulator/Package.appxmanifest
index 9a1f684..986af33 100644
--- a/ANAConversationSimulator/Package.appxmanifest
+++ b/ANAConversationSimulator/Package.appxmanifest
@@ -1,6 +1,6 @@
-
+
ANA Conversation Simulator
diff --git a/ANAConversationSimulator/Services/ChatInterfaceServices/ButtonActionCommand.cs b/ANAConversationSimulator/Services/ChatInterfaceServices/ButtonActionCommand.cs
index 7ec7975..879d6b2 100644
--- a/ANAConversationSimulator/Services/ChatInterfaceServices/ButtonActionCommand.cs
+++ b/ANAConversationSimulator/Services/ChatInterfaceServices/ButtonActionCommand.cs
@@ -7,6 +7,8 @@
using System.Threading.Tasks;
using System.Collections.Generic;
using Windows.System.Threading;
+using ANAConversationSimulator.Models.Chat.Sections;
+using ANAConversationSimulator.ViewModels;
namespace ANAConversationSimulator.Services.ChatInterfaceServices
{
@@ -151,6 +153,12 @@ public async void Execute(object parameter)
if (!button.Hidden)
ButtonActionHelper.HandlePostTextToThread(button.ButtonText);
break;
+ case ButtonTypeEnum.GetAgent:
+ if (MainPageViewModel.CurrentInstance != null)
+ MainPageViewModel.CurrentInstance.AgentChat();
+ if (!button.Hidden)
+ ButtonActionHelper.HandlePostTextToThread(button.ButtonText);
+ break;
default:
Utils.ShowDialog($"Button type: {button.ButtonType} not supported");
break;
@@ -158,22 +166,70 @@ public async void Execute(object parameter)
trackViewEvent(button, userData);
ButtonActionHelper.NavigateToNode(button.NextNodeId);
}
+ else if (parameter is CarouselButton cButton)
+ {
+ var userData = new Dictionary();
+ switch (cButton.Type)
+ {
+ case CardButtonType.NextNode:
+ if (!string.IsNullOrWhiteSpace(cButton.VariableName) && cButton.VariableValue != null) //VariableValue should be != null only
+ {
+ ButtonActionHelper.HandleSaveTextInput(cButton.VariableName, cButton.VariableValue);
+ userData[cButton.VariableName] = cButton.VariableValue;
+ }
+ break;
+ case CardButtonType.DeepLink:
+ await ButtonActionHelper.HandleDeepLinkAsync(cButton.Url);
+ break;
+ case CardButtonType.OpenUrl:
+ ButtonActionHelper.HandleOpenUrl(cButton.Url);
+ break;
+ default:
+ Utils.ShowDialog($"Button type: {cButton.Type} not supported");
+ break;
+ }
+ trackViewEvent(cButton, userData);
+ ButtonActionHelper.NavigateToNode(cButton.NextNodeId);
+ }
}
private async void trackViewEvent(Button button, Dictionary userData)
{
await Task.Run(async () =>
{
- try
- {
- if (userData.Count == 0)
- userData = null;
- await APIHelper.TrackEvent(Utils.GetClickEvent(button.NodeId, Utils.DeviceId, button._id, button.ButtonText, userData));
- }
- catch (Exception ex)
+ await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async () =>
+ {
+ try
+ {
+ if (userData.Count == 0)
+ userData = null;
+ await APIHelper.TrackEvent(Utils.GetClickEvent(button.NodeId, Utils.DeviceId, button._id, button.ButtonText, userData));
+ }
+ catch (Exception ex)
+ {
+ await Utils.ShowDialogAsync(ex.ToString());
+ }
+ });
+ });
+ }
+ private async void trackViewEvent(CarouselButton cButton, Dictionary userData)
+ {
+ await Task.Run(async () =>
+ {
+ await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async () =>
{
- await Utils.ShowDialogAsync(ex.ToString());
- }
+ try
+ {
+ if (userData.Count == 0)
+ userData = null;
+ await APIHelper.TrackEvent(Utils.GetClickEvent(cButton.NodeId, Utils.DeviceId, cButton._id, cButton.Text, userData));
+ }
+ catch (Exception ex)
+ {
+ await Utils.ShowDialogAsync(ex.ToString());
+ }
+ });
+
});
}
}
diff --git a/ANAConversationSimulator/Styles/Custom.xaml b/ANAConversationSimulator/Styles/Custom.xaml
index 9571cdc..63b17f4 100644
--- a/ANAConversationSimulator/Styles/Custom.xaml
+++ b/ANAConversationSimulator/Styles/Custom.xaml
@@ -67,6 +67,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ANAConversationSimulator/ViewModels/MainPageViewModel.cs b/ANAConversationSimulator/ViewModels/MainPageViewModel.cs
index 13d0ea0..05487d1 100644
--- a/ANAConversationSimulator/ViewModels/MainPageViewModel.cs
+++ b/ANAConversationSimulator/ViewModels/MainPageViewModel.cs
@@ -83,7 +83,11 @@ public async void StartChatting()
private DispatcherTimer buttonTimeoutTimer;
public async void ProcessNode(JToken node, JToken section = null)
{
- if (node == null) return;
+ if (node == null)
+ {
+ Utils.ShowDialog("Node not found!");
+ return;
+ }
ClearButtonTimer();
//Replaceing verbs
@@ -99,32 +103,41 @@ public async void ProcessNode(JToken node, JToken section = null)
try
{
var paramDict = new Dictionary();
- foreach (var reqParam in parsedNode.RequiredVariables)
- {
- if (reqParam == "HISTORY") //Custom Variable
- paramDict[reqParam] = ChatThread.Where(x => x.SectionType != SectionTypeEnum.Typing).ToArray();
- else
- paramDict[reqParam] = ButtonActionHelper.GetSavedValue(reqParam);
- }
+ if (parsedNode.RequiredVariables != null)
+ foreach (var reqParam in parsedNode.RequiredVariables)
+ {
+ if (reqParam == "HISTORY") //Custom Variable
+ paramDict[reqParam] = ChatThread.Where(x => x.SectionType != SectionTypeEnum.Typing).ToArray();
+ else
+ paramDict[reqParam] = ButtonActionHelper.GetSavedValue(reqParam);
+ }
var nextNodeId = parsedNode.NextNodeId; //Default
switch (parsedNode.ApiMethod.ToUpper())
{
case "GET":
{
var query = string.Join("&", paramDict.Select(x => $"{x.Key}={Uri.EscapeDataString(x.Value + "")}"));
- var api = string.IsNullOrWhiteSpace(query) ? parsedNode.ApiUrl : parsedNode.ApiUrl + "?" + query;
+ var api = string.IsNullOrWhiteSpace(query) ? parsedNode.ApiUrl : parsedNode.ApiUrl + (parsedNode.ApiUrl?.Contains("?") == true ? "&" : "?") + query;
+
+ var resp = await APIHelper.HitAsync(api);
- var resp = await APIHelper.HitAsync>(api);
- if (resp.ContainsKey("NextNodeId"))
+ if (!string.IsNullOrWhiteSpace(resp["NextNodeId"] + ""))
nextNodeId = resp["NextNodeId"] + "";
- ButtonActionHelper.HandleSaveMultiple(resp);
+
+ ButtonActionHelper.HandleSaveMultiple(resp.ToObject>());
+ var apiNextNodeId = ExtractNextNodeIdFromAPIResp(parsedNode, resp);
+ if (!string.IsNullOrWhiteSpace(apiNextNodeId))
+ nextNodeId = apiNextNodeId;
}
break;
case "POST":
{
- var resp = await APIHelper.HitPostAsync, Dictionary>(parsedNode.ApiUrl, paramDict);
- if (resp.ContainsKey("NextNodeId"))
+ var resp = await APIHelper.HitPostAsync, JObject>(parsedNode.ApiUrl, paramDict);
+ if (!string.IsNullOrWhiteSpace(resp["NextNodeId"] + ""))
nextNodeId = resp["NextNodeId"] + "";
+ var apiNextNodeId = ExtractNextNodeIdFromAPIResp(parsedNode, resp);
+ if (!string.IsNullOrWhiteSpace(apiNextNodeId))
+ nextNodeId = apiNextNodeId;
}
break;
default:
@@ -184,9 +197,19 @@ public async void ProcessNode(JToken node, JToken section = null)
case SectionTypeEnum.EmbeddedHtml:
parsedSection = currentSectionSource.ToObject();
break;
+ case SectionTypeEnum.Carousel:
+ parsedSection = currentSectionSource.ToObject();
+ (parsedSection as CarouselSection).Items
+ .SelectMany(x => x.Buttons)
+ .Where(X => X != null).ToList()
+ .ForEach(x =>
+ {
+ x.VariableName = parsedNode.VariableName;
+ x.NodeId = parsedNode.Id;
+ });
+ break;
case SectionTypeEnum.Link:
case SectionTypeEnum.Graph:
- case SectionTypeEnum.Carousel:
Utils.ShowDialog($"{secType} Coming soon!");
break;
default:
@@ -210,14 +233,17 @@ public async void ProcessNode(JToken node, JToken section = null)
{
await Task.Run(async () =>
{
- try
+ await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async () =>
{
- await APIHelper.TrackEvent(Utils.GetViewEvent(parsedNode.Id, Utils.DeviceId));
- }
- catch (Exception ex)
- {
- await Utils.ShowDialogAsync(ex.ToString());
- }
+ try
+ {
+ await APIHelper.TrackEvent(Utils.GetViewEvent(parsedNode.Id, Utils.DeviceId));
+ }
+ catch (Exception ex)
+ {
+ await Utils.ShowDialogAsync(ex.ToString());
+ }
+ });
});
}
AddIncommingSection(parsedSection);
@@ -352,7 +378,15 @@ public void NavigateToNode(string nextNodeId)
if (!string.IsNullOrWhiteSpace(nextNodeId))
ProcessNode(GetNodeById(nextNodeId));
}
-
+ private string ExtractNextNodeIdFromAPIResp(ChatNode node, JObject resp)
+ {
+ if (node.Buttons == null)
+ return null;
+ return node.Buttons.FirstOrDefault(btn =>
+ !string.IsNullOrWhiteSpace(btn.APIResponseMatchKey) && //resp[btn.APIResponseMatchKey] != null &&
+ resp.SelectToken(btn.APIResponseMatchKey) + "" == btn.APIResponseMatchValue + "")
+ ?.NextNodeId;
+ }
#region Default
public override async Task OnNavigatedToAsync(object parameter, NavigationMode mode, IDictionary suspensionState)
{
diff --git a/ANAConversationStudio/ANAConversationStudio.csproj b/ANAConversationStudio/ANAConversationStudio.csproj
index 6bc0424..8633b50 100644
--- a/ANAConversationStudio/ANAConversationStudio.csproj
+++ b/ANAConversationStudio/ANAConversationStudio.csproj
@@ -131,13 +131,19 @@
MSBuild:Compile
Designer
+
+
+
+
+ ChatElementCollectionEditorWindow.xaml
+
DBConnectionManager.xaml
@@ -166,10 +172,27 @@
+
+ EnterPassword.xaml
+
+
+ SetPassword.xaml
+
+
+ SettingsWindow.xaml
+
+
+ Designer
+ MSBuild:Compile
+
Designer
MSBuild:Compile
+
+ Designer
+ MSBuild:Compile
+
MSBuild:Compile
Designer
@@ -193,6 +216,14 @@
MSBuild:Compile
Designer
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
@@ -224,6 +255,9 @@
Settings.Designer.cs
+
+ PreserveNewest
+
@@ -233,6 +267,11 @@
+
+
+ PreserveNewest
+
+