@page "/" @using BlazorMonaco @using BlazorMonaco.Editor @using BlazorMonaco.Languages @using Inspectron.PrintServer.TemplateEditor.Services @inject IJSRuntime JSRuntime
@if (!string.IsNullOrEmpty(_loadedJsonFile)) { @_loadedJsonFile }
Editor
Preview
@code { private StandaloneCodeEditor _editor = null!; private string _editorContent = ""; private string? _loadedJsonFile; private readonly TemplateCompletionProvider _completionProvider = new(); private StandaloneEditorConstructionOptions EditorConstructionOptions(StandaloneCodeEditor editor) { return new StandaloneEditorConstructionOptions { AutomaticLayout = true, Language = "receipt-xml", Theme = "receipt-dark" }; } private async Task OnEditorInitAsync() { // Register custom language and theme await JSRuntime.InvokeVoidAsync("receiptLanguage.register"); await JSRuntime.InvokeVoidAsync("receiptLanguage.defineTheme"); // Apply the theme now that it's defined await BlazorMonaco.Editor.Global.SetTheme(JSRuntime, "receipt-dark"); // Wire up content accessor for the completion provider _completionProvider.SetEditorContentAccessor(() => _editorContent); // Register completion provider await BlazorMonaco.Languages.Global.RegisterCompletionItemProvider( JSRuntime, "receipt-xml", _completionProvider.ProvideCompletionItems, _completionProvider.ResolveCompletionItem); } private async Task OnContentChanged(ModelContentChangedEvent e) { _editorContent = await _editor.GetValue(); } private async Task LoadJsonAsync() { try { var result = await FilePicker.Default.PickAsync(new PickOptions { PickerTitle = "Select a JSON data file", FileTypes = new FilePickerFileType(new Dictionary> { { DevicePlatform.WinUI, new[] { ".json" } }, { DevicePlatform.macOS, new[] { "json" } }, { DevicePlatform.iOS, new[] { "public.json" } }, { DevicePlatform.Android, new[] { "application/json" } }, }) }); if (result is null) return; using var stream = await result.OpenReadAsync(); using var reader = new StreamReader(stream); var json = await reader.ReadToEndAsync(); var paths = JsonPathExtractor.Extract(json); _completionProvider.SetJsonPaths(paths); _loadedJsonFile = result.FileName; StateHasChanged(); } catch (Exception) { // User cancelled or file read failed } } }