diff --git a/Areas/Identity/Pages/Account/Login.cshtml b/Areas/Identity/Pages/Account/Login.cshtml index 6354164..78c166d 100644 --- a/Areas/Identity/Pages/Account/Login.cshtml +++ b/Areas/Identity/Pages/Account/Login.cshtml @@ -1,6 +1,7 @@ @page +@using Sidio.Sitemap.Blazor @model LoginModel - +@attribute [Sitemap] @{ ViewData["Title"] = "Log in"; } diff --git a/Areas/Identity/Pages/Account/Register.cshtml b/Areas/Identity/Pages/Account/Register.cshtml index 6fbfc8f..6762874 100644 --- a/Areas/Identity/Pages/Account/Register.cshtml +++ b/Areas/Identity/Pages/Account/Register.cshtml @@ -1,5 +1,7 @@ @page +@using Sidio.Sitemap.Blazor @model RegisterModel +@attribute [Sitemap] @{ ViewData["Title"] = "Register"; } diff --git a/BLAIzor.csproj b/BLAIzor.csproj index 3e39377..2a947ee 100644 --- a/BLAIzor.csproj +++ b/BLAIzor.csproj @@ -31,6 +31,7 @@ + @@ -41,7 +42,9 @@ - + + Always + @@ -60,6 +63,189 @@ Always + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + Always @@ -105,6 +291,57 @@ Always + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + diff --git a/Components/Layout/MainLayout.razor b/Components/Layout/MainLayout.razor index 6e2519c..1ec84bc 100644 --- a/Components/Layout/MainLayout.razor +++ b/Components/Layout/MainLayout.razor @@ -48,6 +48,18 @@ }; + + @code{ } diff --git a/Components/Pages/EditTemplate.razor b/Components/Pages/EditTemplate.razor index a142a7c..d5f6349 100644 --- a/Components/Pages/EditTemplate.razor +++ b/Components/Pages/EditTemplate.razor @@ -140,8 +140,8 @@ else await JSRuntime.InvokeVoidAsync("setSessionId", SessionId); await JSRuntime.InvokeVoidAsync("setHtmlEditorSourceMode"); await LoadTemplate(); - var cssPath = await CssTemplateService.SaveTempCssFileAsync(currentCssTemplate.CssContent, SessionId); - await JSRuntime.InvokeVoidAsync("seemgen.injectCssFile", cssPath); + //var cssPath = await CssTemplateService.SaveTempCssFileAsync(currentCssTemplate.CssContent, SessionId); + //await JSRuntime.InvokeVoidAsync("seemgen.injectCssFile", cssPath); } } diff --git a/Components/Pages/Index.razor b/Components/Pages/Index.razor index 2e65a0d..779fb81 100644 --- a/Components/Pages/Index.razor +++ b/Components/Pages/Index.razor @@ -6,6 +6,7 @@ @using Microsoft.AspNetCore.Identity.UI.Services @using System.Text @using System.Text.Json +@using Sidio.Sitemap.Blazor @inject AIService ChatGptService @rendermode InteractiveServer @inject IJSRuntime jsRuntime; @@ -19,7 +20,7 @@ @inject DesignTemplateService DesignTemplateService @inject CssTemplateService CssTemplateService @inject CssInjectorService CssService - +@attribute [Sitemap]
@@ -31,7 +32,7 @@ @* - + *@
@@ -516,14 +517,22 @@ { HtmlContent.Clear(); var menu = await GetMenuList(); - await ChatGptService.ProcessContentRequest(sessionId, UserInput, SiteId, (int)SiteInfo.TemplateId!, collectionName, menu, forceUnmodified); + var menuItem = (await GetMenuItems()).Where(m => m.Name == input).FirstOrDefault(); + if(menuItem == null) + { + await ChatGptService.ProcessContentRequest(sessionId, input, SiteId, (int)SiteInfo.TemplateId!, collectionName, menu, forceUnmodified); + } + else + { + await ChatGptService.ProcessContentRequest(sessionId, menuItem, SiteId, (int)SiteInfo.TemplateId!, collectionName, menu, forceUnmodified); + } UserInput = string.Empty; } } private async Task GetMenuList() { - List menuItems = await _contentEditorService.GetMenuItemsBySiteIdAsync(SiteId); + List menuItems = (await _contentEditorService.GetMenuItemsBySiteIdAsync(SiteId)).Where(m => m.ShowInMainMenu == true).OrderBy(m => m.SortOrder).ToList(); string menuList = ""; foreach (MenuItem item in menuItems) { @@ -532,6 +541,12 @@ return menuList; } + private async Task> GetMenuItems() + { + List menuItems = (await _contentEditorService.GetMenuItemsBySiteIdAsync(SiteId)).Where(m => m.ShowInMainMenu == true).OrderBy(m => m.SortOrder).ToList(); + return menuItems; + } + private async void HandleBrandNameChanged() { selectedBrandName = _scopedContentService.SelectedBrandName; diff --git a/Components/Pages/Preview.razor b/Components/Pages/Preview.razor index 4235990..55fce54 100644 --- a/Components/Pages/Preview.razor +++ b/Components/Pages/Preview.razor @@ -289,7 +289,7 @@ if (_instances.TryGetValue(sessionId, out var instance)) { - await instance.HandleJsCall("Please search for me: " + input, sessionId, forceUnmodified); + await instance.HandleJsCall(input, sessionId, forceUnmodified); } Console.Write("Button clicked:" + input); } @@ -505,14 +505,22 @@ { HtmlContent.Clear(); var menu = await GetMenuList(); - await ChatGptService.ProcessContentRequest(sessionId, UserInput, siteid, (int)SiteInfo.TemplateId!, collectionName, menu, forceUnmodified); + var menuItem = (await GetMenuItems()).Where(m => m.Name == input).FirstOrDefault(); + if (menuItem == null) + { + await ChatGptService.ProcessContentRequest(sessionId, input, siteid, (int)SiteInfo.TemplateId!, collectionName, menu, forceUnmodified); + } + else + { + await ChatGptService.ProcessContentRequest(sessionId, menuItem, siteid, (int)SiteInfo.TemplateId!, collectionName, menu, forceUnmodified); + } UserInput = string.Empty; } } private async Task GetMenuList() { - List menuItems = await _contentEditorService.GetMenuItemsBySiteIdAsync(siteid); + List menuItems = (await _contentEditorService.GetMenuItemsBySiteIdAsync(siteid)).Where(m => m.ShowInMainMenu == true).OrderBy(m => m.SortOrder).ToList(); string menuList = ""; foreach (MenuItem item in menuItems) { @@ -521,6 +529,12 @@ return menuList; } + private async Task> GetMenuItems() + { + List menuItems = (await _contentEditorService.GetMenuItemsBySiteIdAsync(siteid)).Where(m => m.ShowInMainMenu == true).OrderBy(m => m.SortOrder).ToList(); + return menuItems; + } + private async void HandleBrandNameChanged() { selectedBrandName = _scopedContentService.SelectedBrandName; diff --git a/Components/Pages/RadzenGridTest.razor b/Components/Pages/RadzenGridTest.razor new file mode 100644 index 0000000..dfdec5c --- /dev/null +++ b/Components/Pages/RadzenGridTest.razor @@ -0,0 +1,220 @@ +@page "/reordergridtest/{siteId:int}" +@using BLAIzor.Components.Layout +@using BLAIzor.Components.Partials +@using BLAIzor.Models +@using BLAIzor.Services +@using System.Collections.ObjectModel +@using Microsoft.JSInterop +@using Newtonsoft.Json +@inject ScopedContentService scopedContentService +@inject ContentEditorService contentEditorService +@inject QDrantService qDrantService +@layout AdminLayout + +@* @inherits DbContextPage *@ + +@inject IJSRuntime JSRuntime; + + + +@if (menuItems == null) +{ +

Loading...

+} +else +{ + + + + @{ + + @(allowReorder? "Cancel" : "Reorder") + + } + + + + + + @* *@ + + @* *@ + + + + + + + + + Site: + @* @selectedMenuItems.FirstOrDefault()?.SiteInfo.SiteName *@ + + + + + + + @* + + + + + + + + + + + + *@ + + + + + + + +} + + + + +@code { + [Parameter] + public int siteId { get; set; } + ObservableCollection menuItems; + IList selectedMenuItems; + private string document = ""; + private string subject = ""; + public bool hasCollection = false; + public bool MenuItemsSaved = false; + private bool allowReorder = false; + private int pagesize = 5; + private List ExtractedMenuItems = new(); + MenuItem draggedItem; + MenuItemModel SelectedMenuItemModel = new(""); + private RadzenDataGrid dataGrid; + + protected override async Task OnParametersSetAsync() + { + await base.OnParametersSetAsync(); + var siteInfo = await scopedContentService.GetSiteInfoByIdAsync(siteId); + // var menuItems1 = await contentEditorService.GetMenuItemsBySiteIdAsync(1); + + menuItems = new ObservableCollection(await contentEditorService.GetMenuItemsBySiteIdAsync(siteId)); + + selectedMenuItems = new List() { menuItems.FirstOrDefault() }; + + var collectionResult = await qDrantService.GetCollectionBySiteIdAsync(siteId); + if (!string.IsNullOrEmpty(collectionResult)) + { + //create colection + hasCollection = true; + Console.Write("Has collection already"); + } + if (menuItems.Count() > 0) + { + foreach (var menuItem in menuItems) + { + + string content; + MenuItemModel model = new MenuItemModel(""); + //try to get content from qDrant + if (menuItem.QdrantPointId != null) + { + content = await qDrantService.GetContentAsync(siteId, menuItem.SortOrder); + var selectedPoint = JsonConvert.DeserializeObject(content)!; + if (selectedPoint != null) + { + model.Content = selectedPoint.result.payload.content; + Console.Write($"Found point: {selectedPoint.result.payload.content}"); + } + + } + model.MenuItem.Name = menuItem.Name; + + ExtractedMenuItems.Add(model); + // UpdateMenuItem(model); + } + + + SelectedMenuItemModel.MenuItem.Name = selectedMenuItems.FirstOrDefault().Name; + SelectedMenuItemModel.Content = (ExtractedMenuItems.Where(x => x.MenuItem.Name == selectedMenuItems.FirstOrDefault().Name).FirstOrDefault()).Content; + + MenuItemsSaved = true; + } + + } + + async void ToggleReorder() + { + if (!allowReorder) + { + pagesize = 20; + } + else + { + pagesize = 5; + } + allowReorder = !allowReorder; + } + + void Select(MenuItem menuItem) + { + SelectedMenuItemModel.MenuItem.Name = menuItem.Name; + SelectedMenuItemModel.Content = ExtractedMenuItems.Where(x => x.MenuItem.Name == menuItem.Name).FirstOrDefault().Content; + } + + void OnRowSelect(MenuItem menuItem) + { + Select(menuItem); + } + + private void UpdateMenuItem(MenuItemModel updatedItem) + { + var item = ExtractedMenuItems!.FirstOrDefault(i => i.MenuItem.Name == updatedItem.MenuItem.Name); + if (item != null) + { + item.Content = updatedItem.Content; + } + } + + void RowRender(RowRenderEventArgs args) + { + if(allowReorder) + { + args.Attributes.Add("title", "Drag row to reorder"); + args.Attributes.Add("style", "cursor:grab"); + args.Attributes.Add("draggable", "true"); + args.Attributes.Add("ondragover", "event.preventDefault();event.target.closest('.rz-data-row').classList.add('my-class')"); + args.Attributes.Add("ondragleave", "event.target.closest('.rz-data-row').classList.remove('my-class')"); + args.Attributes.Add("ondragstart", EventCallback.Factory.Create(this, () => draggedItem = args.Data)); + args.Attributes.Add("ondrop", EventCallback.Factory.Create(this, () => + { + var draggedIndex = menuItems.IndexOf(draggedItem); + var droppedIndex = menuItems.IndexOf(args.Data); + menuItems.Remove(draggedItem); + menuItems.Insert(draggedIndex <= droppedIndex ? droppedIndex++ : droppedIndex, draggedItem); + foreach (var menuItemToReorder in menuItems) + { + menuItemToReorder.SortOrder = menuItems.IndexOf(menuItemToReorder); + } + JSRuntime.InvokeVoidAsync("eval", $"document.querySelector('.my-class').classList.remove('my-class')"); + })); + } + + } + +} \ No newline at end of file diff --git a/Components/Partials/GenerateFromDocument.razor b/Components/Partials/GenerateFromDocument.razor index b32451a..6423dc1 100644 --- a/Components/Partials/GenerateFromDocument.razor +++ b/Components/Partials/GenerateFromDocument.razor @@ -2,9 +2,11 @@ @using Microsoft.AspNetCore.Components.Forms @using BLAIzor.Services @using Newtonsoft.Json +@using System.Collections.ObjectModel @inject ContentEditorService ContentEditorService @inject HtmlSnippetProcessor HtmlSnippetProcessor @inject QDrantService QDrantService +@inject IJSRuntime JSRuntime

Upload Document to Generate Menu Items

@@ -19,78 +21,57 @@ } else if (ExtractedMenuItems.Any()) { -

Suggested Menu Items

+

Menu Items

+ + @{ + + @(allowReorder ? "Done" : "Reorder") + + } - Change("Panel expanded")) Collapse=@(() => Change("Panel collapsed"))> - - - Orders - - - - - - - - - - - - @ExtractedMenuItems.Count() menu items - - - - - - @* - - @foreach (var item in ExtractedMenuItems) - { - - @{ - if (MenuItemsSaved) - { - - + } - - } - + - } + } + + + + } - - *@
@* @foreach (var item in menuItems) { @@ -121,7 +102,7 @@ else if (ExtractedMenuItems.Any())
- + } else if (!string.IsNullOrEmpty(ErrorMessage)) { @@ -137,11 +118,20 @@ else if (!string.IsNullOrEmpty(ErrorMessage)) private bool IsLoading = false; private string? ErrorMessage; private bool MenuItemsSaved = false; + + ObservableCollection menuItems; + IList selectedMenuItems; + private string subject; private string document; private bool hasCollection; private List ExtractedMenuItems = new(); + private bool allowReorder = false; + private RadzenDataGrid dataGrid; + MenuItem draggedItem; + MenuItemModel SelectedMenuItemModel = new(""); + void Change(string text) { Console.Write($"{text}"); @@ -150,7 +140,7 @@ else if (!string.IsNullOrEmpty(ErrorMessage)) protected override async Task OnParametersSetAsync() { //get menu items from DB - List Site = await ContentEditorService.GetMenuItemsBySiteIdAsync(SiteId); + menuItems = new ObservableCollection((await ContentEditorService.GetMenuItemsBySiteIdAsync(SiteId)).OrderBy(x => x.SortOrder)); var collectionResult = await QDrantService.GetCollectionBySiteIdAsync(SiteId); if (!string.IsNullOrEmpty(collectionResult)) { @@ -158,13 +148,13 @@ else if (!string.IsNullOrEmpty(ErrorMessage)) hasCollection = true; Console.Write("Has collection already"); } - if (Site.Count() > 0) + if (menuItems.Count() > 0) { - foreach (var menuItem in Site) + foreach (var menuItem in menuItems) { string content; - MenuItemModel model = new MenuItemModel(); + MenuItemModel model = new MenuItemModel(""); //try to get content from qDrant if (menuItem.QdrantPointId != null) { @@ -177,8 +167,7 @@ else if (!string.IsNullOrEmpty(ErrorMessage)) } } - model.Name = menuItem.Name; - + model.MenuItem = menuItem; ExtractedMenuItems.Add(model); // UpdateMenuItem(model); } @@ -219,7 +208,7 @@ else if (!string.IsNullOrEmpty(ErrorMessage)) { var prompt2 = $"Analyze the following text and based on the sections suggest a list of menu items for a website. Do not attach any explanation. Text:\n\n`{document}`."; var response2 = await ContentEditorService.GetMenuSuggestionsAsync(SessionId, prompt2); - ExtractedMenuItems = response2.Select(name => new MenuItemModel { Name = name }).ToList(); + ExtractedMenuItems = response2.Select(name => new MenuItemModel(name)).ToList(); } // Send the content to ChatGPT } @@ -244,23 +233,25 @@ else if (!string.IsNullOrEmpty(ErrorMessage)) IsLoading = true; ErrorMessage = null; - ExtractedMenuItems.Add(new MenuItemModel { Name = "New menu item", Content = "" }); + ExtractedMenuItems.Add(new MenuItemModel ("New menu item", "" )); IsLoading = false; } private void UpdateMenuItem(MenuItemModel updatedItem) { - var item = ExtractedMenuItems!.FirstOrDefault(i => i.Name == updatedItem.Name); + var item = ExtractedMenuItems!.FirstOrDefault(i => i.MenuItem.Id == updatedItem.MenuItem.Id); if (item != null) { + //item.MenuItem. item.Content = updatedItem.Content; } } - private async Task SaveMenuItems() + private async Task SaveMenuItems(bool updateVectorDatabase) { - var result = await ContentEditorService.ProcessMenuItems(SiteId, hasCollection, ExtractedMenuItems, subject, MenuItemsSaved); + //bool valami = updateVectorDatabase; + var result = await ContentEditorService.ProcessMenuItems(SiteId, hasCollection, ExtractedMenuItems, subject, MenuItemsSaved, updateVectorDatabase); if (result == "OK") { MenuItemsSaved = true; @@ -271,4 +262,61 @@ else if (!string.IsNullOrEmpty(ErrorMessage)) //Error } } + + void RowRender(RowRenderEventArgs args) + { + if (allowReorder) + { + args.Attributes.Add("title", "Drag row to reorder"); + args.Attributes.Add("style", "cursor:grab"); + args.Attributes.Add("draggable", "true"); + args.Attributes.Add("ondragover", "event.preventDefault();event.target.closest('.rz-data-row').classList.add('my-class')"); + args.Attributes.Add("ondragleave", "event.target.closest('.rz-data-row').classList.remove('my-class')"); + args.Attributes.Add("ondragstart", EventCallback.Factory.Create(this, () => draggedItem = args.Data)); + args.Attributes.Add("ondrop", EventCallback.Factory.Create(this, () => + { + var draggedIndex = menuItems.IndexOf(draggedItem); + MenuItemModel draggedExtractedMenuItem = ExtractedMenuItems[draggedIndex]; + var droppedIndex = menuItems.IndexOf(args.Data); + menuItems.Remove(draggedItem); + menuItems.Insert(draggedIndex <= droppedIndex ? droppedIndex++ : droppedIndex, draggedItem); + ExtractedMenuItems.Remove(draggedExtractedMenuItem); + ExtractedMenuItems.Insert(draggedIndex <= droppedIndex ? droppedIndex++ : droppedIndex, draggedExtractedMenuItem); + foreach (var menuItemToReorder in menuItems) + { + menuItemToReorder.SortOrder = menuItems.IndexOf(menuItemToReorder); + } + foreach (var extractedMenuItemToReorder in ExtractedMenuItems) + { + extractedMenuItemToReorder.MenuItem.SortOrder = ExtractedMenuItems.IndexOf(extractedMenuItemToReorder); + } + JSRuntime.InvokeVoidAsync("eval", $"document.querySelector('.my-class').classList.remove('my-class')"); + })); + } + + } + + void Select(MenuItem menuItem) + { + SelectedMenuItemModel.MenuItem.Name = menuItem.Name; + SelectedMenuItemModel.Content = ExtractedMenuItems.Where(x => x.MenuItem.Name == menuItem.Name).FirstOrDefault().Content; + SelectedMenuItemModel.MenuItem.SortOrder = menuItem.SortOrder; + SelectedMenuItemModel.MenuItem.ShowInMainMenu = menuItem.ShowInMainMenu; + } + + void OnRowSelect(MenuItem menuItem) + { + Select(menuItem); + } + + async void ToggleReorder() + { + if(allowReorder) + { + await SaveMenuItems(false); + } + allowReorder = !allowReorder; + await InvokeAsync(StateHasChanged); + } + } diff --git a/Components/Partials/GenerateFromScratch.razor b/Components/Partials/GenerateFromScratch.razor index d665045..2d437b0 100644 --- a/Components/Partials/GenerateFromScratch.razor +++ b/Components/Partials/GenerateFromScratch.razor @@ -2,9 +2,11 @@ @using BLAIzor.Services @using Newtonsoft.Json @using BLAIzor.Components.Partials +@using System.Collections.ObjectModel @inject ContentEditorService ContentEditorService @inject HtmlSnippetProcessor HtmlSnippetProcessor @inject QDrantService QDrantService +@inject IJSRuntime JSRuntime
@@ -16,39 +18,68 @@ {

Loading suggestions...

} -else if (menuItems.Any()) +else if (extractedMenuItems.Any()) {

Suggested Menu Items

- - - @foreach (var item in menuItems) - { - - @{ - if (MenuItemsSaved) - { - - - + + + @{ + + @(allowReorder ? "Done" : "Reorder") + + } + + + @if (allowReorder) + { + + + + @* *@ + + @* *@ + + + + } + else + { + + + + + @foreach (var item in extractedMenuItems) + { + + @{ + if (MenuItemsSaved) + { + + + + } } - } - + - } + } - - + + + + }
- + } else if (!string.IsNullOrEmpty(errorMessage)) { @@ -61,15 +92,24 @@ else if (!string.IsNullOrEmpty(errorMessage)) [Parameter] public string SessionId { get; set; } private string subject = string.Empty; - private List menuItems = new(); + + ObservableCollection menuItems; + IList selectedMenuItems; + + private List extractedMenuItems = new(); private bool MenuItemsSaved = false; private bool isLoading = false; private string? errorMessage; - private bool hasCollection = false; + private bool hasCollection = false; + + private bool allowReorder = false; + private RadzenDataGrid dataGrid; + MenuItem draggedItem; + MenuItemModel SelectedMenuItemModel = new(""); protected override async Task OnParametersSetAsync() { - List Site = await ContentEditorService.GetMenuItemsBySiteIdAsync(SiteId); + menuItems = new ObservableCollection((await ContentEditorService.GetMenuItemsBySiteIdAsync(SiteId)).OrderBy(x => x.SortOrder)); var collectionResult = await QDrantService.GetCollectionBySiteIdAsync(SiteId); if (!string.IsNullOrEmpty(collectionResult)) { @@ -77,13 +117,13 @@ else if (!string.IsNullOrEmpty(errorMessage)) hasCollection = true; Console.Write("Has collection already"); } - if (Site.Count() > 0) + if (menuItems.Count() > 0) { - foreach (var menuItem in Site) + foreach (var menuItem in menuItems) { string content; - MenuItemModel model = new MenuItemModel(); + MenuItemModel model = new MenuItemModel(""); //try to get content from qDrant if (menuItem.QdrantPointId != null) { @@ -97,9 +137,9 @@ else if (!string.IsNullOrEmpty(errorMessage)) } } - model.Name = menuItem.Name; + model.MenuItem = menuItem; - menuItems.Add(model); + extractedMenuItems.Add(model); // UpdateMenuItem(model); } MenuItemsSaved = true; @@ -122,7 +162,7 @@ else if (!string.IsNullOrEmpty(errorMessage)) { var prompt = $"Suggest a list of menu items for a website about: {subject}. Please do not attach any explanation."; var response = await ContentEditorService.GetMenuSuggestionsAsync(SessionId, prompt); - menuItems = response.Select(name => new MenuItemModel { Name = name }).ToList(); + extractedMenuItems = response.Select(name => new MenuItemModel(name)).ToList(); } catch (Exception ex) { @@ -139,31 +179,32 @@ else if (!string.IsNullOrEmpty(errorMessage)) isLoading = true; errorMessage = null; - menuItems.Add(new()); + extractedMenuItems.Add(new("New menu item")); } private void RemoveMenuItem(MenuItemModel item) { - menuItems.Remove(item); + extractedMenuItems.Remove(item); } private void UpdateMenuItem(MenuItemModel updatedItem) { Console.Write("Updating menu item"); - var item = menuItems.FirstOrDefault(i => i.Name == updatedItem.Name); + var item = extractedMenuItems.FirstOrDefault(i => i.MenuItem.Name == updatedItem.MenuItem.Name); if (item != null) { item.Content = updatedItem.Content; } - else{ + else + { Console.Write("Not found"); } } - private async Task SaveAllContent() + private async Task SaveMenuItems(bool updateVectorDatabase) { - var result = await ContentEditorService.ProcessMenuItems(SiteId, hasCollection, menuItems, subject, MenuItemsSaved); + var result = await ContentEditorService.ProcessMenuItems(SiteId, hasCollection, extractedMenuItems, subject, MenuItemsSaved, updateVectorDatabase); if (result == "OK") { MenuItemsSaved = true; @@ -176,4 +217,60 @@ else if (!string.IsNullOrEmpty(errorMessage)) } } + void RowRender(RowRenderEventArgs args) + { + if (allowReorder) + { + args.Attributes.Add("title", "Drag row to reorder"); + args.Attributes.Add("style", "cursor:grab"); + args.Attributes.Add("draggable", "true"); + args.Attributes.Add("ondragover", "event.preventDefault();event.target.closest('.rz-data-row').classList.add('my-class')"); + args.Attributes.Add("ondragleave", "event.target.closest('.rz-data-row').classList.remove('my-class')"); + args.Attributes.Add("ondragstart", EventCallback.Factory.Create(this, () => draggedItem = args.Data)); + args.Attributes.Add("ondrop", EventCallback.Factory.Create(this, () => + { + var draggedIndex = menuItems.IndexOf(draggedItem); + MenuItemModel draggedExtractedMenuItem = extractedMenuItems[draggedIndex]; + var droppedIndex = menuItems.IndexOf(args.Data); + menuItems.Remove(draggedItem); + menuItems.Insert(draggedIndex <= droppedIndex ? droppedIndex++ : droppedIndex, draggedItem); + extractedMenuItems.Remove(draggedExtractedMenuItem); + extractedMenuItems.Insert(draggedIndex <= droppedIndex ? droppedIndex++ : droppedIndex, draggedExtractedMenuItem); + foreach (var menuItemToReorder in menuItems) + { + menuItemToReorder.SortOrder = menuItems.IndexOf(menuItemToReorder); + } + foreach (var extractedMenuItemToReorder in extractedMenuItems) + { + extractedMenuItemToReorder.MenuItem.SortOrder = extractedMenuItems.IndexOf(extractedMenuItemToReorder); + } + JSRuntime.InvokeVoidAsync("eval", $"document.querySelector('.my-class').classList.remove('my-class')"); + })); + } + + } + + void Select(MenuItem menuItem) + { + SelectedMenuItemModel.MenuItem.Name = menuItem.Name; + SelectedMenuItemModel.Content = extractedMenuItems.Where(x => x.MenuItem.Name == menuItem.Name).FirstOrDefault().Content; + SelectedMenuItemModel.MenuItem.SortOrder = menuItem.SortOrder; + SelectedMenuItemModel.MenuItem.ShowInMainMenu = menuItem.ShowInMainMenu; + } + + void OnRowSelect(MenuItem menuItem) + { + Select(menuItem); + } + + async void ToggleReorder() + { + if (allowReorder) + { + await SaveMenuItems(false); + } + allowReorder = !allowReorder; + await InvokeAsync(StateHasChanged); + } + } diff --git a/Components/Partials/MenuItemContentEditor.razor b/Components/Partials/MenuItemContentEditor.razor index 984bb7d..85499bb 100644 --- a/Components/Partials/MenuItemContentEditor.razor +++ b/Components/Partials/MenuItemContentEditor.razor @@ -35,7 +35,7 @@ [Parameter] public string Subject { get; set; } = string.Empty; [Parameter] public string WordFile { get; set; } = string.Empty; [Parameter] public string SessionId { get; set; } = string.Empty; - [Parameter] public MenuItemModel MenuItem { get; set; } = new(); + [Parameter] public MenuItemModel MenuItem { get; set; } = new(""); [Parameter] public EventCallback OnContentUpdated { get; set; } private bool IsLoading = false; @@ -63,7 +63,7 @@ try { Console.Write($"Subject: {Subject}"); - var prompt = $"Generate website content for a page titled '{MenuItem.Name}' of a '{Subject}' website. Please do not attach any explanation."; + var prompt = $"Generate website content for a page titled '{MenuItem.MenuItem.Name}' of a '{Subject}' website. Please do not attach any explanation."; GeneratedContent = await ContentEditorService.GetGeneratedContentAsync(SessionId, prompt); MenuItem.Content = GeneratedContent; await OnContentUpdated.InvokeAsync(MenuItem); @@ -84,7 +84,7 @@ try { Console.Write($"Subject: {Subject}"); - var prompt = $"This is the provided text: {WordFile}. Look for the relevant content for a page titled '{MenuItem.Name}' of a '{Subject}' website. Please do not attach any explanation."; + var prompt = $"This is the provided text: {WordFile}. Look for the relevant content for a page titled '{MenuItem.MenuItem.Name}' of a '{Subject}' website. Please do not attach any explanation."; GeneratedContent = await ContentEditorService.GetGeneratedContentAsync(SessionId, prompt); MenuItem.Content = GeneratedContent; await OnContentUpdated.InvokeAsync(MenuItem); diff --git a/Components/Partials/NavMenu.razor b/Components/Partials/NavMenu.razor index b1bf232..4d02dc8 100644 --- a/Components/Partials/NavMenu.razor +++ b/Components/Partials/NavMenu.razor @@ -29,7 +29,7 @@ { } } @@ -70,9 +70,10 @@ "Hungarian", "English", "German" }; - public void MenuClicked(string menuName) + public async Task MenuClickedAsync(string menuName) { OnMenuClicked?.Invoke(menuName); + await JS.InvokeVoidAsync("collapseNavbar"); } public void HomeClick() @@ -102,34 +103,7 @@ MenuList = MenuString.Split(","); } await base.OnParametersSetAsync(); - } - - protected override async Task OnAfterRenderAsync(bool firstRender) - { - if(firstRender) - { - // var subdomain = HttpContextAccessor.HttpContext?.Items["Subdomain"]?.ToString(); - // var SiteInfo = await _scopedContentService.GetSiteInfoByNameAsync(subdomain); - // if (SiteInfo != null && SiteInfo.IsPublished) - // { - - // SiteId = SiteInfo.Id; - // } - // else - // { - // SiteId = 1; - // } - - // MenuString = await GetMenuList(); - // if (MenuString != null) - // { - // MenuList = MenuString.Split(","); - // } - - } - - await base.OnAfterRenderAsync(firstRender); - } + } public void OnLanguageSelected(ChangeEventArgs e) { @@ -140,19 +114,6 @@ Console.WriteLine($"Language selected: {SelectedLanguage}"); _scopedContentService.SelectedLanguage = SelectedLanguage; } - } - - // private async Task GetMenuList() - // { - // RenderCounter++; - // Console.Write($"\n \n Render:{RenderCounter} \n \n"); - // List menuItems = await _contentEditorService.GetMenuItemsBySiteIdAsync(SiteId); - // string menuList = ""; - // foreach (MenuItem item in menuItems) - // { - // menuList += item.Name + ","; - // } - // return menuList; - // } + } } diff --git a/Components/Partials/VideoComponent.razor b/Components/Partials/VideoComponent.razor index 62345f5..75d4107 100644 --- a/Components/Partials/VideoComponent.razor +++ b/Components/Partials/VideoComponent.razor @@ -1,6 +1,25 @@ - + + +
+ +
+ + + \ No newline at end of file