Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/new look #21

Merged
merged 3 commits into from
Jul 26, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions src/WireMockInspector/ViewModels/MainWindowViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,7 @@ public MainWindowViewModel()
{
LastHit = hitCalculator.GetFirstPerfectHitDateAfter(m.Guid, estimatedScenarioStateDate ?? DateTime.MinValue),
Description = $"[{m.WhenStateIs}] -> [{m.SetStateTo}]",
MappingDefinition =AsMarkdownCode("json", JsonConvert.SerializeObject(m, Formatting.Indented)).AsMarkdownSyntax(),
MappingDefinition = AsMarkdownCode("json", JsonConvert.SerializeObject(m, Formatting.Indented)),
TriggeredBy = new RequestLogViewModel()
{
MapToLogEntries(hitCalculator.GetPerfectHitCountAfter(m.Guid, estimatedScenarioStateDate))
Expand Down Expand Up @@ -269,7 +269,7 @@ public MainWindowViewModel()
ExpectedPaths = GetExpectedPathsDescription(model),
Description = model.Title != model.Description? model.Description: null,
UpdatedOn = model.UpdatedAt,
Content = AsMarkdownCode("json", JsonConvert.SerializeObject(model, Formatting.Indented)).AsMarkdownSyntax(),
Content = AsMarkdownCode("json", JsonConvert.SerializeObject(model, Formatting.Indented)),
PartialHitCount = partialHitCount,
PerfectHitCount = perfectHitCount,
PerfectMatches = new RequestLogViewModel()
Expand Down Expand Up @@ -435,7 +435,7 @@ await _settingsManager.UpdateSettings(settings =>
.ObserveOn(RxApp.MainThreadScheduler)
.Subscribe(code =>
{
SelectedMapping.Code = AsMarkdownCode("cs", code).AsMarkdownSyntax();
SelectedMapping.Code = AsMarkdownCode("cs", code);
});

this.WhenAnyValue(x => x.SelectedRequest)
Expand Down Expand Up @@ -917,7 +917,7 @@ public record ScenarioEdgeNode(string Id, bool Current, bool Hit):ScenarioNode(I
public record ScenarioTransition(string Id, ScenarioNode From, ScenarioNode To, bool Hit)
{
public string Description { get; set; }
public string MappingDefinition { get; set; }
public Markdown MappingDefinition { get; set; }
public RequestLogViewModel TriggeredBy { get; set; }
public DateTime? LastHit { get; set; }
};
Expand Down Expand Up @@ -991,19 +991,19 @@ public class MappingViewModel: ViewModelBase
public DateTime? UpdatedOn { get; set; }
public string? Title { get; set; }
public string? Description { get; set; }
public string Content { get; set; }
public Markdown Content { get; set; }

public int PerfectHitCount { get; set; }
public int PartialHitCount { get; set; }
public MappingHitType HitType { get; set; }

public string Code
public Markdown Code
{
get => _code;
set => this.RaiseAndSetIfChanged(ref _code, value);
}

private string _code;
private Markdown _code;

public Scenario Scenario { get; set; }
public RequestLogViewModel PerfectMatches { get; set; }
Expand Down
32 changes: 21 additions & 11 deletions src/WireMockInspector/ViewModels/MatchDetailsViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
using System.Reactive.Linq;
using System.Windows.Input;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Controls.ApplicationLifetimes;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using ReactiveUI;
Expand Down Expand Up @@ -41,25 +43,33 @@ public MatchDetailsViewModel()
{
CopyActualValue = ReactiveCommand.Create(async () =>
{
if (ActualValue is MarkdownActualValue {Value: {rawValue: var raw}})
if (Avalonia.Application.Current.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
{
await Application.Current!.Clipboard.SetTextAsync(raw);
}
else if (ActualValue is SimpleActualValue {Value: var simpleValue} )
{
await Application.Current!.Clipboard.SetTextAsync(simpleValue);
}
else if(ActualValue is KeyValueListActualValue{SelectedActualValueGridItem: {} selectedRow})
{
await Application.Current!.Clipboard.SetTextAsync($"{selectedRow.Key}:{selectedRow.Value}");
if (ActualValue is MarkdownActualValue {Value: {rawValue: var raw}})
{
await desktop.MainWindow.Clipboard.SetTextAsync(raw);
}
else if (ActualValue is SimpleActualValue {Value: var simpleValue} )
{
await desktop.MainWindow.Clipboard.SetTextAsync(simpleValue);
}
else if(ActualValue is KeyValueListActualValue{SelectedActualValueGridItem: {} selectedRow})
{
await desktop.MainWindow.Clipboard.SetTextAsync($"{selectedRow.Key}:{selectedRow.Value}");
}
}


});

CopyExpectations = ReactiveCommand.Create(async () =>
{
if (Expectations is Markdown{rawValue: var value})
{
await Application.Current!.Clipboard.SetTextAsync(value);
if (Avalonia.Application.Current.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
{
await desktop.MainWindow!.Clipboard.SetTextAsync(value);
}
}
});

Expand Down
76 changes: 76 additions & 0 deletions src/WireMockInspector/Views/CodeBlockViewer.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
using System;
using Avalonia;
using Avalonia.Media;
using Avalonia.Styling;
using AvaloniaEdit;
using AvaloniaEdit.Document;
using AvaloniaEdit.TextMate;
using TextMateSharp.Grammars;

namespace WireMockInspector.Views;

public class CodeBlockViewer:TextEditor, IStyleable
{
Type IStyleable.StyleKey => typeof(TextEditor);
public CodeBlockViewer()
{
this.Loaded += (sender, args) =>
{

};


this.Initialized += (sender, args) =>
{
//First of all you need to have a reference for your TextEditor for it to be used inside AvaloniaEdit.TextMate project.
var _textEditor = this;
_textEditor.Background = new SolidColorBrush(Color.FromRgb(30, 30, 30));
_textEditor.TextArea.TextView.Margin = new Thickness(10);
_textEditor.ShowLineNumbers = true;
_textEditor.IsReadOnly = true;
_textEditor.FontFamily = "Cascadia Code,Consolas,Menlo,Monospace";
};
this.PropertyChanged+= (sender, args) =>
{
if (args.Property.Name == nameof(Code))
{
SetMarkdown(args.NewValue as ViewModels.Markdown);
}
};
}

private void SetMarkdown(ViewModels.Markdown md)
{
if (md is not null)
{
this.Document = new TextDocument(md.rawValue);
if (_currentLang != md.lang)
{
_currentLang = md.lang;
CodeBlockViewer _textEditor = this;

var _registryOptions = new RegistryOptions(ThemeName.DarkPlus);
var _textMateInstallation = _textEditor.InstallTextMate(_registryOptions);
_textMateInstallation.SetGrammar(_registryOptions.GetScopeByLanguageId(_registryOptions.GetLanguageByExtension("."+md.lang).Id));
}
}
else
{
this.Document = new TextDocument("");
}

}

private string? _currentLang;
public ViewModels.Markdown Code
{
get { return GetValue(CodeProperty); }
set
{
SetValue(CodeProperty, value);
SetMarkdown(value);
}
}

public static readonly StyledProperty<ViewModels.Markdown> CodeProperty = AvaloniaProperty.Register<CodeBlockViewer, ViewModels.Markdown>(nameof(Code));
}
16 changes: 9 additions & 7 deletions src/WireMockInspector/Views/MainWindow.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,14 @@
TransparencyLevelHint="AcrylicBlur"
Background="Transparent"
Width="1250"
ExtendClientAreaToDecorationsHint="True"
d:DataContext="{x:Static viewModels:DesignTimeData.MainViewModel}"
Name="MW"
>
<Panel>
<Border BorderThickness="1,1,1,1"
BorderBrush="#3baced">
<Panel>
<Panel.Styles>
<Style Selector="avaloniaEdit|TextEditor">
<Setter Property="ShowLineNumbers" Value="True"></Setter>
<Setter Property="Padding" Value="5,5,5,20"></Setter>
</Style>
</Panel.Styles>
<ExperimentalAcrylicBorder IsHitTestVisible="False">
<ExperimentalAcrylicBorder.Material>
Expand All @@ -33,6 +33,7 @@
MaterialOpacity="0.65" />
</ExperimentalAcrylicBorder.Material>
</ExperimentalAcrylicBorder>
<TextBlock Margin="10" HorizontalAlignment="Center" IsHitTestVisible="False" Text="{Binding Path=#MW.Title}"></TextBlock>
<Grid RowDefinitions="Auto,*" Margin="40" >
<Grid.Styles>
<Style Selector="DockPanel.first">
Expand All @@ -45,7 +46,7 @@
<StackPanel>
<views:NewVersionInfo DataContext="{Binding NewVersion}" IsVisible="{Binding IsVisible}"></views:NewVersionInfo>
<Grid ColumnDefinitions="*, Auto" >
<TextBox MinWidth="1" Text="{Binding AdminUrl, Mode=TwoWay}" Watermark="Admin API URL"></TextBox>
<TextBox MinWidth="1" Text="{Binding AdminUrl, Mode=TwoWay}" Watermark="Admin API URL" Name="AdminUrlCtr" ></TextBox>
<Button Grid.Column="1" Command="{Binding LoadRequestsCommand}" Margin="10,0,0,0" ToolTip.Tip="Load requests">
<PathIcon Data="{StaticResource arrow_sync_circle_regular}" HorizontalAlignment="Center" VerticalAlignment="Center" ></PathIcon>
</Button>
Expand All @@ -64,7 +65,7 @@
</TabItem>
<TabItem Header="Settings">
<Grid RowDefinitions="*, Auto">
<DataGrid Items="{Binding Settings}"
<DataGrid ItemsSource="{Binding Settings}"
CanUserReorderColumns="False"
CanUserResizeColumns="True"
AutoGenerateColumns="False"
Expand Down Expand Up @@ -133,4 +134,5 @@
</Grid>
</Panel>

</Border>
</Window>
29 changes: 13 additions & 16 deletions src/WireMockInspector/Views/MainWindow.axaml.cs
Original file line number Diff line number Diff line change
@@ -1,16 +1,13 @@
using System.Reactive.Disposables;
using System.Reactive.Linq;
using Avalonia.ReactiveUI;
using MessageBox.Avalonia.Enums;
using ReactiveUI;
using WireMockInspector.ViewModels;
using System;
using System.Collections.Generic;
using System.Reflection;
using System.Threading.Tasks;
using Avalonia.Controls;
using WireMock.Admin.Mappings;
using WireMock.Admin.Requests;
using MsBox.Avalonia;
using MsBox.Avalonia.Enums;


namespace WireMockInspector.Views
Expand All @@ -30,33 +27,33 @@ public MainWindow()
ViewModel!.LoadRequestsCommand
.ThrownExceptions
.ObserveOn(RxApp.MainThreadScheduler)
.Subscribe(_ =>
.Subscribe(async _ =>
{
var msg = MessageBox.Avalonia.MessageBoxManager.GetMessageBoxStandardWindow("Error",
var msg = MessageBoxManager.GetMessageBoxStandard("Error",
"Cannot connect to WireMock Admin API.\r\n\r\nMake sure that:\r\n- The URL is correct\r\n- WireMock is started with Admin API enabled", ButtonEnum.Ok,
MessageBox.Avalonia.Enums.Icon.Error, WindowStartupLocation.CenterOwner);
msg.ShowDialog(this);
MsBox.Avalonia.Enums.Icon.Error, WindowStartupLocation.CenterOwner);
await msg.ShowAsync();
}).DisposeWith(disposables);

ViewModel.SaveServerSettings
.ThrownExceptions
.ObserveOn(RxApp.MainThreadScheduler)
.Subscribe(ex =>
.Subscribe(async ex =>
{
var msg = MessageBox.Avalonia.MessageBoxManager.GetMessageBoxStandardWindow("Error",
var msg = MessageBoxManager.GetMessageBoxStandard("Error",
$"Cannot save server settings.\r\n\r\n {ex.Message}", ButtonEnum.Ok,
MessageBox.Avalonia.Enums.Icon.Error, WindowStartupLocation.CenterOwner);
msg.ShowDialog(this);
MsBox.Avalonia.Enums.Icon.Error, WindowStartupLocation.CenterOwner);
await msg.ShowAsync();
}).DisposeWith(disposables);

if (Settings != null)
{
ViewModel.AdminUrl = Settings.AdminUrl;
if (Settings.AutoLoad)
{
ViewModel.LoadRequestsCommand.Execute().Subscribe().DisposeWith(disposables);
}

if (string.IsNullOrWhiteSpace(Settings.InstanceName) == false)
{
SetInstanceName(Settings.InstanceName);
Expand Down
8 changes: 4 additions & 4 deletions src/WireMockInspector/Views/MappingPage.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:viewModels="clr-namespace:WireMockInspector.ViewModels"
xmlns:views="clr-namespace:WireMockInspector.Views"
xmlns:avalonia="clr-namespace:Markdown.Avalonia;assembly=Markdown.Avalonia"
xmlns:md="clr-namespace:Markdown.Avalonia;assembly=Markdown.Avalonia"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:DataType="viewModels:MainWindowViewModel"
x:Class="WireMockInspector.Views.MappingPage">
Expand Down Expand Up @@ -77,7 +77,7 @@
<StackPanel Orientation="Vertical">
<SelectableTextBlock Text="{Binding Title}" IsVisible="{Binding Title, Converter={x:Static ObjectConverters.IsNotNull}}" Foreground="white" VerticalAlignment="Center" Margin="5,5"></SelectableTextBlock>
<StackPanel Orientation="Horizontal" Margin="0,5,0,0">
<ItemsControl Items="{Binding ExpectedMethods}">
<ItemsControl ItemsSource="{Binding ExpectedMethods}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left"></StackPanel>
Expand Down Expand Up @@ -106,7 +106,7 @@
<views:ContentWithSidebar.Sidebar>
<TabControl Classes="minor">
<TabItem Header="Definition">
<avalonia:MarkdownScrollViewer Markdown="{Binding SelectedMapping.Content }"></avalonia:MarkdownScrollViewer>
<views:CodeBlockViewer Code="{Binding SelectedMapping.Content}" />
</TabItem>
<TabItem Header="Matches">
<ScrollViewer>
Expand Down Expand Up @@ -146,7 +146,7 @@
</Grid>
</TabItem>
<TabItem Header="Code">
<avalonia:MarkdownScrollViewer Markdown="{Binding SelectedMapping.Code }"></avalonia:MarkdownScrollViewer>
<views:CodeBlockViewer Code="{Binding SelectedMapping.Code}" />
</TabItem>
</TabControl>
</views:ContentWithSidebar.Sidebar>
Expand Down
7 changes: 4 additions & 3 deletions src/WireMockInspector/Views/RequestDetails.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
xmlns:md="clr-namespace:Markdown.Avalonia;assembly=Markdown.Avalonia"
xmlns:generic="clr-namespace:System.Collections.Generic;assembly=System.Collections"
xmlns:viewModels="clr-namespace:WireMockInspector.ViewModels"
xmlns:views="clr-namespace:WireMockInspector.Views"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:DataType="viewModels:MatchDetailsList"
x:Class="WireMockInspector.Views.RequestDetails">
Expand Down Expand Up @@ -76,10 +77,10 @@
<SelectableTextBlock Margin="5,0,0,0" TextWrapping="Wrap" VerticalAlignment="Center" Text="{Binding Value}" FontWeight="Bold"></SelectableTextBlock>
</DataTemplate>
<DataTemplate DataType="{x:Type viewModels:MarkdownActualValue}">
<md:MarkdownScrollViewer Markdown="{Binding Value}"></md:MarkdownScrollViewer>
<views:CodeBlockViewer Code="{Binding Value}" />
</DataTemplate>
<DataTemplate DataType="{x:Type viewModels:KeyValueListActualValue}">
<DataGrid Items="{Binding Items}" SelectedItem="{Binding SelectedActualValueGridItem}" CanUserReorderColumns="False" CanUserResizeColumns="True" AutoGenerateColumns="False" AreRowGroupHeadersFrozen="True" GridLinesVisibility="All" ClipboardCopyMode="ExcludeHeader" SelectionMode="Single">
<DataGrid ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedActualValueGridItem}" CanUserReorderColumns="False" CanUserResizeColumns="True" AutoGenerateColumns="False" AreRowGroupHeadersFrozen="True" GridLinesVisibility="All" ClipboardCopyMode="ExcludeHeader" SelectionMode="Single">
<DataGrid.Styles>
<Style Selector="DataGridColumnHeader">
<Setter Property="Background" Value="#505050"></Setter>
Expand Down Expand Up @@ -114,7 +115,7 @@
</SplitButton>
</DockPanel>
</Border>
<md:MarkdownScrollViewer Markdown="{Binding Expectations}" IsVisible="{Binding !NoExpectations}"></md:MarkdownScrollViewer>
<views:CodeBlockViewer Code="{Binding Expectations}" IsVisible="{Binding !NoExpectations}"/>
<TextBlock FontSize="10" Margin="5,5,0,0" IsVisible="{Binding NoExpectations}">(No Expectations)</TextBlock>
</StackPanel>
</Expander>
Expand Down
4 changes: 2 additions & 2 deletions src/WireMockInspector/Views/RequestListFilters.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:viewModels="clr-namespace:WireMockInspector.ViewModels"
xmlns:avalonia="clr-namespace:Markdown.Avalonia;assembly=Markdown.Avalonia"
xmlns:md="clr-namespace:Markdown.Avalonia;assembly=Markdown.Avalonia"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:DataType="viewModels:MainWindowViewModel"
x:Class="WireMockInspector.Views.RequestListFilters">
Expand All @@ -27,7 +27,7 @@
</Button.Styles>
<Button.Flyout>
<Flyout >
<avalonia:MarkdownScrollViewer Width="650" Height="700" Margin="10" Source="avares://WireMockInspector/Assets/request_search.md" />
<md:MarkdownScrollViewer Width="650" Height="700" Margin="10" Source="avares://WireMockInspector/Assets/request_search.md" />
</Flyout>
</Button.Flyout>
<PathIcon Data="{StaticResource question_circle_regular}">
Expand Down
Loading
Loading