< Summary - Syki

Information
Class: Syki.Front.Features.Academic.CreateWebhookSubscription.CreateWebhookSubscriptionDrawer
Assembly: Front
File(s): /home/runner/work/syki/syki/Front/Features/Academic/CreateWebhookSubscription/CreateWebhookSubscriptionDrawer.razor
Tag: 4_16869239191
Line coverage
0%
Covered lines: 0
Uncovered lines: 39
Coverable lines: 39
Total lines: 124
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 12
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
get_AfterSubmit()100%210%
.ctor()100%210%
OnInitializedAsync()0%620%
OnEventsChanged(...)100%210%
Open()0%620%
Close()100%210%
Submit()0%4260%

File(s)

/home/runner/work/syki/syki/Front/Features/Academic/CreateWebhookSubscription/CreateWebhookSubscriptionDrawer.razor

#LineLine coverage
 1@namespace Syki.Front.Features.Academic.CreateWebhookSubscription
 2
 3<MudDrawer @bind-Open="@_open" Width="@_width" Anchor="Anchor.Right" Elevation="1" Variant="@DrawerVariant.Temporary">
 4  <MudDrawerHeader Class="justify-space-between">
 5    <MudStack Row="true" Justify="Justify.FlexStart" AlignItems="AlignItems.Center" Spacing="3">
 6      <MudIcon Icon="@Icons.Material.Filled.Add" />
 7      <MudText Typo="Typo.h5"><b>Novo Webhook</b></MudText>
 8    </MudStack>
 9    <MudIconButton Icon="@Icons.Material.Filled.Close" OnClick="@Close" />
 10    </MudDrawerHeader>
 11
 12    <style>
 13        .mud-treeview-item-arrow {
 14            width: 0;
 15        }
 16    </style>
 17    <MudGrid Spacing="1" Class="px-6">
 018        <MudForm @ref="@_form" Style="width: 100%">
 019            <MudItem xs="12">
 020                <SykiTitleText Icon="@Icons.Material.Filled.Adjust" Text="Endpoint" />
 021                <SykiTextField Label="Nome" AutoFocus="true" @bind-Value="@_name" Class="py-2" />
 022                <SykiTextField Label="Url" @bind-Value="@_url" />
 023            </MudItem>
 24
 25            <MudItem xs="12" Class="mt-4">
 26                <SykiTitleText Icon="@Icons.Material.Filled.NotificationAdd" Text="Notificações" />
 27                <MudTreeView T="WebhookEventType" SelectionMode="SelectionMode.MultiSelection" TriState="false" Selected
 028                    @foreach (WebhookEventType eventType in Enum.GetValues<WebhookEventType>())
 29                    {
 30                        <MudTreeViewItem Value="@eventType" Text="@eventType.GetDescription()" />
 31                    }
 32                </MudTreeView>
 33            </MudItem>
 34
 35            <MudItem xs="12" Class="mt-4">
 36                <SykiTitleText Icon="@Icons.Material.Filled.LockPerson" Text="Autenticação" />
 37                <SykiTextField Label="ApiKey" @bind-Value="@_apiKey" Class="pt-2" />
 38            </MudItem>
 39        </MudForm>
 40    </MudGrid>
 41
 42    <MudStack Row="true" Justify="Justify.SpaceBetween" AlignItems="AlignItems.Center" Spacing="3" Class="px-2 pt-6">
 43        <DialogCancelButton OnClick="@Close" />
 44        <DialogSaveButton OnClick="@Submit" />
 45    </MudStack>
 46</MudDrawer>
 47
 48@inject ISnackbar Snackbar
 49@inject NavigationManager Nav
 50@inject IBrowserViewportService BrowserViewportService
 51@inject CreateWebhookSubscriptionClient CreateWebhookSubscriptionClient
 52
 53@code
 54{
 55    [Parameter]
 056    public EventCallback AfterSubmit { get; set; }
 57
 58    private bool _open;
 059    private string _width = "500px";
 60    private Breakpoint _breakpoint;
 61
 62    private MudForm _form;
 63    private bool _loading;
 64
 65    private string? _name;
 66    private string? _url;
 067    private List<WebhookEventType> _events = [];
 68    private WebhookAuthenticationType _authenticationType;
 69    private string? _apiKey;
 70
 71    protected override async Task OnInitializedAsync()
 72    {
 073        _breakpoint = await BrowserViewportService.GetCurrentBreakpointAsync();
 074        _width = _breakpoint == Breakpoint.Xs ? "100%" : "500px";
 075    }
 76
 77    private void OnEventsChanged(IEnumerable<WebhookEventType> values)
 78    {
 079        _events = values.ToList();
 080    }
 81
 82    public async Task Open()
 83    {
 084        _open = true;
 085        _name = null;
 086        _url = null;
 087        _events = [];
 088        _authenticationType = WebhookAuthenticationType.ApiKey;
 089        _apiKey = null;
 90
 091        await _form?.ResetAsync();
 92
 093        _loading = false;
 94
 095        StateHasChanged();
 096    }
 97
 98    private void Close()
 99    {
 0100        _open = false;
 0101    }
 102
 103    private async Task Submit()
 104    {
 0105        if (_loading) return;
 106
 0107        await _form.Validate();
 0108        if (!_form.IsValid) return;
 109
 0110        _loading = true;
 0111        var response = await CreateWebhookSubscriptionClient.Create(_name!, _url!, _events, _authenticationType, _apiKey
 0112        if (response.IsSuccess)
 113        {
 0114            Snackbar.Add("Webhook criado com sucesso!", Severity.Success);
 0115            await AfterSubmit.InvokeAsync();
 0116            _open = false;
 117        }
 118        else
 119        {
 0120            Snackbar.Add(response.Error.Message, Severity.Error);
 121        }
 0122        _loading = false;
 0123    }
 124}