using Blazorise; using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components.Web; using Microsoft.JSInterop; using Seenginx.Models; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Seenginx.Components { public partial class FilesWithEditor : ComponentBase where CFile : ConfigFile { [Inject] public IJSRuntime JsRuntime { get; set; } [Parameter] public List Files { get; set; } = new List(); [Parameter] public EventCallback UpdateFile { get; set; } [Parameter] public RenderFragment Editor { get; set; } = null; [Parameter] public EventCallback TestConfiguration { get; set; } [Parameter] public EventCallback ShowAddFileModal { get; set; } [Parameter] public EventCallback DeleteFileCallback { get; set; } [Parameter] public EventCallback SelectedFileChanged { get; set; } [Parameter] public CFile SelectedFile { get; set; } = default; protected string SearchInput { get; set; } protected bool IsAnyFileSelected => SelectedFile != default; protected string IsSelectedFileDeletable { get { if (SelectedFile != null && SelectedFile.CanBeDeleted) return string.Empty; else return "is-hidden"; } } protected async override Task OnAfterRenderAsync(bool firstRender) { try { await JsRuntime.InvokeVoidAsync("InitEditor"); await base.OnAfterRenderAsync(firstRender); } catch (Exception ex) { throw ex; } } protected void SearchInputChanged(string searchInput) { SearchInput = searchInput; SearchFile(); } private void SearchFile() { Files.ForEach(f => { if (f.Name.ToLower().Contains(SearchInput.ToLower())) f.Unhide(); else f.Hide(); }); } protected async Task OnFileClick(MouseEventArgs e, CFile file) { Files.ForEach(f => f.Deselect()); file.Select(); await JsRuntime.InvokeVoidAsync("UpdateEditor", file.Body); await SelectedFileChanged.InvokeAsync(file); } protected async Task OnFileCloseClick(MouseEventArgs e) { Files.ForEach(f => f.Deselect()); SelectedFile = null; await JsRuntime.InvokeVoidAsync("ClearEditor"); } protected async Task OnSaveDraft(MouseEventArgs e) { var draftCode = await JsRuntime.InvokeAsync("GetEditorCode"); SelectedFile.DraftBody = draftCode; } protected async Task OnUndoChanges(MouseEventArgs e) { SelectedFile.DraftBody = SelectedFile.Body; await JsRuntime.InvokeVoidAsync("UpdateEditor", SelectedFile.Body); } protected async Task OnSave(MouseEventArgs e) { var draftCode = await JsRuntime.InvokeAsync("GetEditorCode"); SelectedFile.Body = draftCode; } protected async Task OnTest(MouseEventArgs e) { await TestConfiguration.InvokeAsync(null); } public async Task OnAddDialog() { await ShowAddFileModal.InvokeAsync(null); await JsRuntime.InvokeVoidAsync("ClearEditor"); if (SelectedFile != null) { await JsRuntime.InvokeVoidAsync("UpdateEditor", SelectedFile.Body); SearchInput = string.Empty; SearchFile(); } } protected async Task OnDeleteDialog() { await DeleteFileCallback.InvokeAsync(null); await JsRuntime.InvokeVoidAsync("ClearEditor"); SearchInput = string.Empty; SearchFile(); } } }