remove logging - invert if

remove unused imports
remove unused variables
refactor namespace
minimize the number of visible toasts
bump CSS file name version
This commit is contained in:
Frede Hundewadt 2023-06-15 09:08:17 +02:00
parent 79ec577930
commit 1afb245c7c
7 changed files with 148 additions and 400 deletions

View file

@ -53,18 +53,15 @@ public class CabinetDrawerService : ICabinetDrawerService
{
var drawer = await _asyncStorageService
.GetItemAsync<ActivityDrawer>($"{companyId}.{ActivityDrawer.Label}");
if (drawer == null) force = true;
if (force)
if (drawer == null) force = true;
if (!force) return drawer ?? new ActivityDrawer();
var result = await _activityRepo.GetCustomerActivities(companyId);
drawer = new ActivityDrawer
{
var result = await _activityRepo.GetCustomerActivities(companyId);
drawer = new ActivityDrawer
{
LastDateModified = DateTime.Today,
Content = result
};
await StoreActivityDrawerAsync(companyId, drawer);
}
_logger.LogDebug("ActivityDrawer {}", JsonSerializer.Serialize(drawer, _options));
LastDateModified = DateTime.Today,
Content = result
};
await StoreActivityDrawerAsync(companyId, drawer);
return drawer ?? new ActivityDrawer();
}
@ -81,17 +78,14 @@ public class CabinetDrawerService : ICabinetDrawerService
.GetItemAsync<CatalogDrawer>($"{countryCode}.{CatalogDrawer.Label}");
if (drawer == null) force = true;
if (force)
if (!force) return drawer ?? new CatalogDrawer();
var result = await _catalogRepo.GetPriceList(countryCode);
drawer = new CatalogDrawer
{
var result = await _catalogRepo.GetPriceList(countryCode);
drawer = new CatalogDrawer
{
LastDateModified = DateTime.Today,
Content = result
};
await StoreCatalogDrawerAsync(countryCode, drawer);
}
_logger.LogDebug("CatalogDrawer {}", JsonSerializer.Serialize(drawer, _options));
LastDateModified = DateTime.Today,
Content = result
};
await StoreCatalogDrawerAsync(countryCode, drawer);
return drawer ?? new CatalogDrawer();
}
@ -108,17 +102,14 @@ public class CabinetDrawerService : ICabinetDrawerService
.GetItemAsync<InfoDrawer>($"{companyId}.{InfoDrawer.Label}");
if (drawer == null) force = true;
if (force)
if (!force) return drawer ?? new InfoDrawer();
var result = await _customerRepo.GetCompanyById(companyId);
drawer = new InfoDrawer
{
var result = await _customerRepo.GetCompanyById(companyId);
drawer = new InfoDrawer
{
LastDateModified = DateTime.Today,
Content = result
};
await StoreInfoDrawerAsync(companyId, drawer);
}
_logger.LogDebug("InfoDrawer {}", JsonSerializer.Serialize(drawer, _options));
LastDateModified = DateTime.Today,
Content = result
};
await StoreInfoDrawerAsync(companyId, drawer);
return drawer ?? new InfoDrawer();
}
@ -135,17 +126,14 @@ public class CabinetDrawerService : ICabinetDrawerService
.GetItemAsync<InventoryDrawer>($"{companyId}.{InventoryDrawer.Label}");
if (drawer == null) force = true;
if (force)
if (!force) return drawer ?? new InventoryDrawer();
var result = await _historyRepo.GetInventory(companyId);
drawer = new InventoryDrawer
{
var result = await _historyRepo.GetInventory(companyId);
drawer = new InventoryDrawer
{
LastDateModified = DateTime.Today,
Content = result
};
await StoreInventoryDrawerAsync(companyId, drawer);
}
_logger.LogDebug("InventoryDrawer {}", JsonSerializer.Serialize(drawer, _options));
LastDateModified = DateTime.Today,
Content = result
};
await StoreInventoryDrawerAsync(companyId, drawer);
return drawer ?? new InventoryDrawer();
}
@ -161,18 +149,14 @@ public class CabinetDrawerService : ICabinetDrawerService
var drawer = await _asyncStorageService
.GetItemAsync<InvoiceDrawer>($"{companyId}.{InvoiceDrawer.Label}");
if (drawer == null) force = true;
if (force)
if (!force) return drawer ?? new InvoiceDrawer();
var result = await _historyRepo.GetInvoiceList(companyId);
drawer = new InvoiceDrawer
{
var result = await _historyRepo.GetInvoiceList(companyId);
drawer = new InvoiceDrawer
{
LastDateModified = DateTime.Today,
Content = result
};
await StoreInvoiceDrawerAsync(companyId, drawer);
}
_logger.LogDebug("InvoiceDrawer {}", JsonSerializer.Serialize(drawer, _options));
LastDateModified = DateTime.Today,
Content = result
};
await StoreInvoiceDrawerAsync(companyId, drawer);
return drawer ?? new InvoiceDrawer();
}
@ -189,26 +173,23 @@ public class CabinetDrawerService : ICabinetDrawerService
.GetItemAsync<StatisticDrawer>($"{companyId}.{StatisticDrawer.Label}");
if (drawer == null) force = true;
if (force)
if (!force) return drawer ?? new StatisticDrawer();
var result = await _historyRepo.GetProductInvoiceLines(companyId);
var content = result.Select(x => new HistoryFilter
{
var result = await _historyRepo.GetProductInvoiceLines(companyId);
var content = result.Select(x => new HistoryFilter
{
DeliveryDate = DateTime.Parse(x.DeliveryDate),
Description = x.Description,
Discount = x.Discount,
Price = x.Price,
Quantity = x.Quantity,
Sku = x.Sku
}).ToList();
drawer = new StatisticDrawer
{
LastDateModified = DateTime.Today,
Content = content
};
await StoreStatisticDrawerAsync(companyId, drawer);
}
_logger.LogDebug("StatisticDrawer {}", JsonSerializer.Serialize(drawer, _options));
DeliveryDate = DateTime.Parse(x.DeliveryDate),
Description = x.Description,
Discount = x.Discount,
Price = x.Price,
Quantity = x.Quantity,
Sku = x.Sku
}).ToList();
drawer = new StatisticDrawer
{
LastDateModified = DateTime.Today,
Content = content
};
await StoreStatisticDrawerAsync(companyId, drawer);
return drawer ?? new StatisticDrawer();
}

View file

@ -16,8 +16,6 @@
using System.Text.Json;
using Blazored.LocalStorage;
using Microsoft.AspNetCore.DataProtection.KeyManagement;
using Wonky.Client.Models;
using Wonky.Entity.DTO;
namespace Wonky.Client.Local.Services;

View file

@ -15,7 +15,9 @@
using System.Text.Json;
using Blazored.LocalStorage;
using Blazored.Toast;
using Blazored.Toast.Services;
using Blazored.Toast.Configuration;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Forms;
using Microsoft.Extensions.Options;
@ -47,7 +49,7 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
[Inject] public VatInfoLookupService VatService { get; set; }
[Inject] public ILocalStorageService Storage { get; set; }
[Inject] public IUserInfoService UserInfoService { get; set; }
[Inject] public IOptions<AppInfo?>? AppInfo { get; set; }
[Inject] public IOptions<AppInfo>? AppInfo { get; set; }
[Inject] public ICabinetDrawerService DrawerService { get; set; }
// ###########################################################################
@ -65,8 +67,8 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
private List<ContactDto> _contacts = new();
private string VatState { get; set; } = "the-ugly";
private bool _validVat;
private bool _hasFolded;
private string _currentVat = "";
// private bool _hasFolded;
// private string _currentVat = "";
private string _countryCode = "dk";
private string _visitStateCss = "the-ugly";
private int _enableActivity = 1;
@ -81,14 +83,16 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
private string _invoiceLink = "";
private string _newActivityLink = "";
private int _enableLink = 1;
private ActivityDrawer _activityDrawer = new();
private InventoryDrawer _inventoryDrawer = new();
private InvoiceDrawer _invoiceDrawer = new();
private StatisticDrawer _statisticDrawer = new();
// private ActivityDrawer _activityDrawer = new();
// private InventoryDrawer _inventoryDrawer = new();
// private InvoiceDrawer _invoiceDrawer = new();
// private StatisticDrawer _statisticDrawer = new();
private UserManagerEditView _userInfo = new();
private InfoDrawer _infoDrawer = new();
private CompanyDto _company = new();
private string _companyId = "";
// private string _companyId = "";
protected override async Task OnInitializedAsync()
{
/*
@ -153,7 +157,7 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
* toggle view button text
*/
_toggleButtonText = _company.IsHidden == 0 ? "Udelad kunde i oversigt" : "Brug Normal Visning";
_currentVat = _company.VatNumber;
// _currentVat = _company.VatNumber;
_company.CountryCode = _userInfo.CountryCode.ToLower();
/*
* visit interval init
@ -193,7 +197,7 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
/*
* this is only used if user has selected to show closed companies
*/
_hasFolded = true;
// _hasFolded = true;
VatState = "the-dead";
_visitStateCss = "the-dead";
}
@ -206,14 +210,11 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
_validVat = _company.ValidVat == 1; // true/false flag set if InfoDrawer.Company has a valid vatNumber
VatState = _company.ValidVat == 1 ? "the-good" : "no-vat"; // assign css class
}
/*
* create search address from address
*/
if (_countryIsDk)
{
_companyVatAddress = PrepareVatAddress(_company);
}
await GetContacts(CompanyId);
}
/*
* remove loading image
@ -221,39 +222,43 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
_working = false;
}
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (string.IsNullOrWhiteSpace(_companyId))
if (firstRender)
{
_companyId = CompanyId;
await GetContacts(CompanyId);
_ = await HistoryRepo.RequestErpSync(CompanyId, _company.HistorySync, false);
_invoiceDrawer = await DrawerService.GetInvoiceDrawerAsync(CompanyId, true);
_inventoryDrawer = await DrawerService.GetInventoryDrawerAsync(CompanyId, true);
_activityDrawer = await DrawerService.GetActivityDrawerAsync(CompanyId, true);
_statisticDrawer = await DrawerService.GetStatisticDrawerAsync(CompanyId, true);
_ = await DrawerService.GetInvoiceDrawerAsync(CompanyId);
_ = await DrawerService.GetInventoryDrawerAsync(CompanyId);
_ = await DrawerService.GetActivityDrawerAsync(CompanyId);
_ = await DrawerService.GetStatisticDrawerAsync(CompanyId);
}
}
private async Task ReloadHistory()
{
Toaster.ShowInfo("Afventer svar fra tjenester ...");
_enableLink = 0;
_enableActivity = 0;
Toaster.ShowWarning("Arbejder på sagen ...");
var newSync = await HistoryRepo.RequestErpSync(CompanyId, _company.HistorySync, false);
var newSync = await HistoryRepo.RequestErpSync(CompanyId, _company.HistorySync, true);
if (!string.IsNullOrWhiteSpace(newSync))
{
_infoDrawer = await DrawerService.GetInfoDrawerAsync(CompanyId, true);
_invoiceDrawer = await DrawerService.GetInvoiceDrawerAsync(CompanyId, true);
_inventoryDrawer = await DrawerService.GetInventoryDrawerAsync(CompanyId, true);
_activityDrawer = await DrawerService.GetActivityDrawerAsync(CompanyId, true);
_statisticDrawer = await DrawerService.GetStatisticDrawerAsync(CompanyId, true);
_company = _infoDrawer.Content;
_ = await DrawerService.GetInvoiceDrawerAsync(CompanyId, true);
_ = await DrawerService.GetInventoryDrawerAsync(CompanyId, true);
_ = await DrawerService.GetActivityDrawerAsync(CompanyId, true);
_ = await DrawerService.GetStatisticDrawerAsync(CompanyId, true);
}
Toaster.ShowSuccess("Data er snart klar ....");
_enableLink = 1;
_enableActivity = _company.ValidVat;
// StateHasChanged();
Toaster.ShowSuccess("Alle tjenester har svaret.");
}
private void ToggleErpEdit()
{
_erpEditDisabled = !_erpEditDisabled;
@ -280,6 +285,9 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
}
/*
* Request contacts for company
*/
private async Task GetContacts(string companyId)
{
/*
@ -293,12 +301,18 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
}
/*
* Show vat number lookup form only danish companies
*/
private void OpenVatLookupModal()
{
_vatLookupPopup.Show();
}
/*
* Callback from vat lookup overlay with registration infomration
*/
private void SelectedCompanyCallback(VirkRegInfo regInfo)
{
_validVat = regInfo.States[0].State.ToLower() == "normal";
@ -320,6 +334,9 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
}
/*
* Show contact overlay
*/
private void OpenContactPopup(ContactDto contact)
{
/*
@ -332,10 +349,11 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
_contactViewPopup.Show();
}
/// <summary>
/// Create request to update contact information
/// </summary>
/// <param name="contact"></param>
/*
* Callback from contact overlay
* Create / Update contact depending on contactId present
*/
private async Task WriteContactCallback(ContactDto contact)
{
if (_working)
@ -369,10 +387,10 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
_working = false;
}
/// <summary>
/// Delete contact information
/// </summary>
/// <param name="contactId"></param>
/*
* Delete contact callback
*/
private async Task DeleteContactCallback(string contactId)
{
if (_working)
@ -393,10 +411,10 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
_working = false;
}
/// <summary>
/// Update CRM data
/// </summary>
/// <returns>true/false</returns>
/*
* Execute post requset - updating CRM data (non ERP related)
*/
private async Task PostCrmData()
{
if (_working)
@ -417,10 +435,10 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
Toaster.ShowSuccess("Dine CRM data er opdateret.");
}
/// <summary>
/// Update ERP data
/// </summary>
/// <returns></returns>
/*
* Execute post requset - updating ERP data (notifying office)
*/
private async Task UpdateErpData()
{
if (_working)
@ -439,12 +457,19 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
Toaster.ShowSuccess("ERP data er opdateret. Notifikation til kontoret er sendt.");
}
/// <summary>
/// Update Vat Number
/// </summary>
/// <returns>true/false</returns>
/*
* Execute post requset - updating CVR/VAT/MOMS/ORG
* many names for the same thing
* execpt moms is local - VAT is global
*/
private async Task UpdateVatNumber()
{
/*
* prevent duped actions
*/
if (_working)
return;
/*
* VAT format validation
*/
@ -453,9 +478,6 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
Toaster.ShowError($"Moms Nummer ugyldigt");
return;
}
if (_working)
return;
_working = true;
_vatEditDisabled = true;
Toaster.ShowInfo("Vent venligst ...");
@ -469,12 +491,12 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
_working = false;
Toaster.ShowSuccess("Moms Nr. er opdateret.");
}
/// <summary>
/// Prepare vat address from InfoDrawer.Company model
/// </summary>
/// <param name="company"></param>
/// <returns></returns>
/*
* Prepare vat address
* used to lookup danish company
*/
private static VatAddress PrepareVatAddress(CompanyDto company)
{
var digits = "1234567890".ToCharArray();
@ -511,19 +533,18 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
}
/// <summary>
/// Force enable activity
/// </summary>
/*
* Force enable activioty - even if company has turned keys and shut down
*/
private void ForceActivity()
{
_enableActivity = _enableActivity == 0 ? 1 : 0;
}
/// <summary>
/// Context field change event callback
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
/*
* Input form field change event
*/
private void HandleFieldChanged(object? sender, FieldChangedEventArgs? e)
{
@ -544,11 +565,10 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
StateHasChanged();
}
/// <summary>
/// Context validation change event callback
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
/*
* Input form validation process
*/
private void ValidationChanged(object sender, ValidationStateChangedEventArgs e)
{
_erpContext.OnFieldChanged -= HandleFieldChanged;
@ -560,9 +580,10 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
_erpContext.OnValidationStateChanged += ValidationChanged!;
}
/// <summary>
/// Dispose
/// </summary>
/*
* Required IDispose interface implementation
*/
public void Dispose()
{
Interceptor.DisposeEvent();

View file

@ -93,7 +93,7 @@ public partial class SystemUserCreatePage : IDisposable
/*
* Map form input to a model the backend expects
*/
NewUserDto = Mapper.MapCreateUser(UserForm);
NewUserDto = MapUtils.MapCreateUser(UserForm);
/*
* Send Post Request
*/

View file

@ -34,7 +34,7 @@
<div class="content d-none d-print-block">
@Body
</div>
<BlazoredToasts Position="ToastPosition.TopRight" Timeout="10" />
<BlazoredToasts Position="ToastPosition.TopRight" Timeout="5" MaxToastCount="3" ShowProgressBar="true" />
</main>
</div>

View file

@ -1,252 +0,0 @@
body {
font-size: 16px;
}
.draft-expires-msg {
font-size: 0.8em;
}
.busy-signal {
float: right;
z-index: 100;
position: relative;
top: 1px;
right: 10px;
}
.workDate {
font-variant: small-caps;
}
.action-link-element {
cursor: pointer;
}
.i-larger {
font-size: 1.3rem;
}
.btn.btn-edit {
color: #030303;
background-color: #a2a2ec;
}
html, body {
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
}
h1,h2:focus {
outline: none;
}
a, .btn-link {
color: #0071c1;
}
/*.btn-primary {*/
/* color: #fff;*/
/* background-color: #1b6ec2;*/
/* border-color: #1861ac;*/
/*}*/
.inno {
color: #ffaa00;
}
.inno-display {
display: block;
}
.inno-hidden {
display: none;
}
.content {
padding-top: 1.1rem;
}
.valid.modified:not([type=checkbox]) {
outline: 1px solid #26b050;
}
.invalid {
outline: 1px solid red;
}
.validation-message {
color: red;
}
/* begin state elements */
.state {
width: 16px;
height: 16px;
min-width: 16px;
min-height: 16px;
}
.the-good {
color: green;
}
.the-bad {
color: orange;
}
.the-ugly {
color: red;
}
.the-dead {
color: black;
}
.the-fast {
color: orange;
}
.the-draw {
color: mediumpurple;
}
.the-good-bg {
background-color: green;
}
.the-bad-bg {
background-color: orange;
}
.the-ugly-bg {
background-color: red;
}
.the-draw-bg {
background-color: mediumpurple;
}
.no-vat-bg {
background-color: lightskyblue;
}
.the-dead-bg {
background-color: black;
}
/* end state elements */
/* led elements */
.led-box {
height: 24px;
width: 24px;
margin: auto;
float: left;
}
.led-red {
margin: 5px;
width: 24px;
height: 24px;
background-color: #F00;
border-radius: 50%;
box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 7px 1px, inset #441313 0 -1px 9px, rgba(255, 0, 0, 0.5) 0 2px 12px;
-webkit-animation: blinkRed 0.5s infinite;
-moz-animation: blinkRed 0.5s infinite;
-ms-animation: blinkRed 0.5s infinite;
-o-animation: blinkRed 0.5s infinite;
animation: blinkRed 0.5s infinite;
animation-iteration-count: infinite;
}
@-webkit-keyframes blinkRed {
from { background-color: #F00; }
50% { background-color: #A00; box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 7px 1px, inset #441313 0 -1px 9px, rgba(255, 0, 0, 0.5) 0 2px 0;}
to { background-color: #F00; }
}
@-moz-keyframes blinkRed {
from { background-color: #F00; }
50% { background-color: #A00; box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 7px 1px, inset #441313 0 -1px 9px, rgba(255, 0, 0, 0.5) 0 2px 0;}
to { background-color: #F00; }
}
@-ms-keyframes blinkRed {
from { background-color: #F00; }
50% { background-color: #A00; box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 7px 1px, inset #441313 0 -1px 9px, rgba(255, 0, 0, 0.5) 0 2px 0;}
to { background-color: #F00; }
}
@-o-keyframes blinkRed {
from { background-color: #F00; }
50% { background-color: #A00; box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 7px 1px, inset #441313 0 -1px 9px, rgba(255, 0, 0, 0.5) 0 2px 0;}
to { background-color: #F00; }
}
@keyframes blinkRed {
from { background-color: #F00; }
50% { background-color: #A00; box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 7px 1px, inset #441313 0 -1px 9px, rgba(255, 0, 0, 0.5) 0 2px 0;}
to { background-color: #F00; }
}
.led-yellow {
margin: 0 auto;
width: 24px;
height: 24px;
background-color: #FF0;
border-radius: 50%;
box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 7px 1px, inset #808002 0 -1px 9px, #FF0 0 2px 12px;
-webkit-animation: blinkYellow 1s infinite;
-moz-animation: blinkYellow 1s infinite;
-ms-animation: blinkYellow 1s infinite;
-o-animation: blinkYellow 1s infinite;
animation: blinkYellow 1s infinite;
}
@-webkit-keyframes blinkYellow {
from { background-color: #FF0; }
50% { background-color: #AA0; box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 7px 1px, inset #808002 0 -1px 9px, #FF0 0 2px 0; }
to { background-color: #FF0; }
}
@-moz-keyframes blinkYellow {
from { background-color: #FF0; }
50% { background-color: #AA0; box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 7px 1px, inset #808002 0 -1px 9px, #FF0 0 2px 0; }
to { background-color: #FF0; }
}
@-ms-keyframes blinkYellow {
from { background-color: #FF0; }
50% { background-color: #AA0; box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 7px 1px, inset #808002 0 -1px 9px, #FF0 0 2px 0; }
to { background-color: #FF0; }
}
@-o-keyframes blinkYellow {
from { background-color: #FF0; }
50% { background-color: #AA0; box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 7px 1px, inset #808002 0 -1px 9px, #FF0 0 2px 0; }
to { background-color: #FF0; }
}
@keyframes blinkYellow {
from { background-color: #FF0; }
50% { background-color: #AA0; box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 7px 1px, inset #808002 0 -1px 9px, #FF0 0 2px 0; }
to { background-color: #FF0; }
}
.led-green {
margin: 0 auto;
width: 24px;
height: 24px;
background-color: #ABFF00;
border-radius: 50%;
box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 7px 1px, inset #304701 0 -1px 9px, #89FF00 0 2px 12px;
}
.led-blue {
margin: 0 auto;
width: 24px;
height: 24px;
background-color: #24E0FF;
border-radius: 50%;
box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 7px 1px, inset #006 0 -1px 9px, #3F8CFF 0 2px 14px;
}
/* end led elements */
.footer {
border-top: 2px solid orange;
position: relative;
margin-top: -150px;
height: 150px;
width: 100%;
clear: both;
padding-top: 20px;
}
footer.version {
display: block;
font-weight: bold;
padding: 0 10px 0 0;
}
.back-to-top {
position: fixed;
bottom: 25px;
right: 25px;
display: none;
}

View file

@ -14,7 +14,7 @@
<link href="/bootstrap/css/bootstrap.min.css" rel="stylesheet" >
<link href="/bootstrap/css/bootstrap-icons.min.css" rel="stylesheet" >
<link href="/flag-icons/flag-icons.css" rel="stylesheet" >
<link href="/css/20230607.css" rel="stylesheet" >
<link href="/css/20230614.css" rel="stylesheet" >
<link href="/css/print.css" rel="stylesheet" >
<link href="/Wonky.Client.styles.css" rel="stylesheet" >
<link href="/_content/Blazored.Toast/blazored-toast.min.css" rel="stylesheet" >