CreateWizards

This commit is contained in:
Adam 2024-01-08 19:21:36 +01:00
parent c29cc3fcc1
commit f5301076f8
21 changed files with 495 additions and 237 deletions

View File

@ -123,6 +123,15 @@ namespace TIAM.Resources {
} }
} }
/// <summary>
/// Looks up a localized string similar to Send.
/// </summary>
public static string ButtonSend {
get {
return ResourceManager.GetString("ButtonSend", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to Confirm Email. /// Looks up a localized string similar to Confirm Email.
/// </summary> /// </summary>
@ -240,6 +249,15 @@ namespace TIAM.Resources {
} }
} }
/// <summary>
/// Looks up a localized string similar to Html content.
/// </summary>
public static string HtmlContent {
get {
return ResourceManager.GetString("HtmlContent", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to Login. /// Looks up a localized string similar to Login.
/// </summary> /// </summary>
@ -249,6 +267,24 @@ namespace TIAM.Resources {
} }
} }
/// <summary>
/// Looks up a localized string similar to New message.
/// </summary>
public static string NewMessage {
get {
return ResourceManager.GetString("NewMessage", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Let&apos;s send them a message!.
/// </summary>
public static string NewMessageSubtitle {
get {
return ResourceManager.GetString("NewMessageSubtitle", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to Passengers. /// Looks up a localized string similar to Passengers.
/// </summary> /// </summary>
@ -303,6 +339,15 @@ namespace TIAM.Resources {
} }
} }
/// <summary>
/// Looks up a localized string similar to Receiver Id.
/// </summary>
public static string ReceiverId {
get {
return ResourceManager.GetString("ReceiverId", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to Register. /// Looks up a localized string similar to Register.
/// </summary> /// </summary>
@ -357,6 +402,15 @@ namespace TIAM.Resources {
} }
} }
/// <summary>
/// Looks up a localized string similar to Subject.
/// </summary>
public static string Subject {
get {
return ResourceManager.GetString("Subject", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to This works!. /// Looks up a localized string similar to This works!.
/// </summary> /// </summary>
@ -375,6 +429,15 @@ namespace TIAM.Resources {
} }
} }
/// <summary>
/// Looks up a localized string similar to Let&apos;s book a transfer!.
/// </summary>
public static string TransferSubtitle {
get {
return ResourceManager.GetString("TransferSubtitle", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to New Transfer. /// Looks up a localized string similar to New Transfer.
/// </summary> /// </summary>
@ -384,6 +447,15 @@ namespace TIAM.Resources {
} }
} }
/// <summary>
/// Looks up a localized string similar to Trip date.
/// </summary>
public static string TripDate {
get {
return ResourceManager.GetString("TripDate", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to Wizard. /// Looks up a localized string similar to Wizard.
/// </summary> /// </summary>

View File

@ -138,6 +138,9 @@
<data name="ButtonSave" xml:space="preserve"> <data name="ButtonSave" xml:space="preserve">
<value>Mentés</value> <value>Mentés</value>
</data> </data>
<data name="ButtonSend" xml:space="preserve">
<value>Küldés</value>
</data>
<data name="ConfirmEmail" xml:space="preserve"> <data name="ConfirmEmail" xml:space="preserve">
<value>E-mail cím megerősítése</value> <value>E-mail cím megerősítése</value>
</data> </data>
@ -177,9 +180,18 @@
<data name="FullName" xml:space="preserve"> <data name="FullName" xml:space="preserve">
<value>Teljes név</value> <value>Teljes név</value>
</data> </data>
<data name="HtmlContent" xml:space="preserve">
<value>Html tartalom</value>
</data>
<data name="Login" xml:space="preserve"> <data name="Login" xml:space="preserve">
<value>Belépés</value> <value>Belépés</value>
</data> </data>
<data name="NewMessage" xml:space="preserve">
<value>Új üzenet</value>
</data>
<data name="NewMessageSubtitle" xml:space="preserve">
<value>Küldjünk neki egy üzenetet!</value>
</data>
<data name="NumberOfPassengers" xml:space="preserve"> <data name="NumberOfPassengers" xml:space="preserve">
<value>Utasok száma</value> <value>Utasok száma</value>
</data> </data>
@ -198,6 +210,9 @@
<data name="Price" xml:space="preserve"> <data name="Price" xml:space="preserve">
<value>Ár</value> <value>Ár</value>
</data> </data>
<data name="ReceiverId" xml:space="preserve">
<value>Címzett azonosítója</value>
</data>
<data name="Register" xml:space="preserve"> <data name="Register" xml:space="preserve">
<value>Regisztráció</value> <value>Regisztráció</value>
</data> </data>
@ -216,15 +231,24 @@
<data name="ServiceProviderTitle" xml:space="preserve"> <data name="ServiceProviderTitle" xml:space="preserve">
<value>Új szolgáltató</value> <value>Új szolgáltató</value>
</data> </data>
<data name="Subject" xml:space="preserve">
<value>Tárgy</value>
</data>
<data name="Test" xml:space="preserve"> <data name="Test" xml:space="preserve">
<value>Müxik!</value> <value>Müxik!</value>
</data> </data>
<data name="TransferDestinationTitle" xml:space="preserve"> <data name="TransferDestinationTitle" xml:space="preserve">
<value>Új uticél</value> <value>Új uticél</value>
</data> </data>
<data name="TransferSubtitle" xml:space="preserve">
<value>Rendeljünk egy transzfert!</value>
</data>
<data name="TransferTitle" xml:space="preserve"> <data name="TransferTitle" xml:space="preserve">
<value>Új transzfer</value> <value>Új transzfer</value>
</data> </data>
<data name="TripDate" xml:space="preserve">
<value>Utazás napja</value>
</data>
<data name="Wizard" xml:space="preserve"> <data name="Wizard" xml:space="preserve">
<value>Varázsló</value> <value>Varázsló</value>
</data> </data>

View File

@ -138,6 +138,9 @@
<data name="ButtonSave" xml:space="preserve"> <data name="ButtonSave" xml:space="preserve">
<value>Save</value> <value>Save</value>
</data> </data>
<data name="ButtonSend" xml:space="preserve">
<value>Send</value>
</data>
<data name="ConfirmEmail" xml:space="preserve"> <data name="ConfirmEmail" xml:space="preserve">
<value>Confirm Email</value> <value>Confirm Email</value>
</data> </data>
@ -177,9 +180,18 @@
<data name="FullName" xml:space="preserve"> <data name="FullName" xml:space="preserve">
<value>Full name</value> <value>Full name</value>
</data> </data>
<data name="HtmlContent" xml:space="preserve">
<value>Html content</value>
</data>
<data name="Login" xml:space="preserve"> <data name="Login" xml:space="preserve">
<value>Login</value> <value>Login</value>
</data> </data>
<data name="NewMessage" xml:space="preserve">
<value>New message</value>
</data>
<data name="NewMessageSubtitle" xml:space="preserve">
<value>Let's send them a message!</value>
</data>
<data name="NumberOfPassengers" xml:space="preserve"> <data name="NumberOfPassengers" xml:space="preserve">
<value>Passengers</value> <value>Passengers</value>
</data> </data>
@ -198,6 +210,9 @@
<data name="Price" xml:space="preserve"> <data name="Price" xml:space="preserve">
<value>Price</value> <value>Price</value>
</data> </data>
<data name="ReceiverId" xml:space="preserve">
<value>Receiver Id</value>
</data>
<data name="Register" xml:space="preserve"> <data name="Register" xml:space="preserve">
<value>Register</value> <value>Register</value>
</data> </data>
@ -216,15 +231,24 @@
<data name="ServiceProviderTitle" xml:space="preserve"> <data name="ServiceProviderTitle" xml:space="preserve">
<value>New Service provider</value> <value>New Service provider</value>
</data> </data>
<data name="Subject" xml:space="preserve">
<value>Subject</value>
</data>
<data name="Test" xml:space="preserve"> <data name="Test" xml:space="preserve">
<value>This works!</value> <value>This works!</value>
</data> </data>
<data name="TransferDestinationTitle" xml:space="preserve"> <data name="TransferDestinationTitle" xml:space="preserve">
<value>New destination</value> <value>New destination</value>
</data> </data>
<data name="TransferSubtitle" xml:space="preserve">
<value>Let's book a transfer!</value>
</data>
<data name="TransferTitle" xml:space="preserve"> <data name="TransferTitle" xml:space="preserve">
<value>New Transfer</value> <value>New Transfer</value>
</data> </data>
<data name="TripDate" xml:space="preserve">
<value>Trip date</value>
</data>
<data name="Wizard" xml:space="preserve"> <data name="Wizard" xml:space="preserve">
<value>Wizard</value> <value>Wizard</value>
</data> </data>

View File

@ -1,4 +1,5 @@
using AyCode.Blazor.Components; using AyCode.Blazor.Components;
using DevExpress.Blazor;
using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;

View File

@ -23,8 +23,7 @@
</div> </div>
</div> </div>
<p class="mt-2 cw-480"> <p class="mt-2 cw-480">
<h3> @localizer.GetString("DestinationName")</h3>
@_formSubmitResult @_formSubmitResult
</p> </p>

View File

@ -15,6 +15,8 @@ using TIAMWebApp.Shared.Application.Interfaces;
using System.Reflection; using System.Reflection;
using TIAMWebApp.Shared.Application.Models; using TIAMWebApp.Shared.Application.Models;
using DevExpress.XtraPrinting; using DevExpress.XtraPrinting;
using TIAMSharedUI.Shared;
using DevExpress.Pdf.Native.BouncyCastle.Asn1.Cms;
namespace TIAMSharedUI.Pages.Components namespace TIAMSharedUI.Pages.Components
@ -25,7 +27,7 @@ namespace TIAMSharedUI.Pages.Components
public required LogToBrowserConsole LogToBrowserConsole { get; set; } public required LogToBrowserConsole LogToBrowserConsole { get; set; }
[Inject] [Inject]
IStringLocalizer<TIAMResources> localizer { get; set; } IStringLocalizer<TIAMResources> localizer { get; set; }
public Dictionary<int, Guid> FormSteps { get; set; } = new Dictionary<int, Guid>(); public Dictionary<int, Guid> FormSteps { get; set; } = new Dictionary<int, Guid>();
public int CurrentStep { get; set; } = 0; public int CurrentStep { get; set; } = 0;
@ -34,6 +36,8 @@ namespace TIAMSharedUI.Pages.Components
[Parameter] [Parameter]
public string TitleResourceString { get; set; } = "Wizard"; public string TitleResourceString { get; set; } = "Wizard";
[Parameter]
public string SubtitleResourceString { get; set; } = "Let's fill in this form"; public string SubtitleResourceString { get; set; } = "Let's fill in this form";
[Parameter] [Parameter]
@ -45,8 +49,12 @@ namespace TIAMSharedUI.Pages.Components
[Parameter] [Parameter]
public string SubmitButtonText { get; set; } = "Submit"; public string SubmitButtonText { get; set; } = "Submit";
[Required]
[Parameter]
public List<string> IgnoreReflection { get; set; }
string _formSubmitResult = ""; string _formSubmitResult = "";
private string _spinnerClass = ""; private string _spinnerClass = "";
@ -70,7 +78,7 @@ namespace TIAMSharedUI.Pages.Components
_formSubmitResult = debugString; _formSubmitResult = debugString;
_spinnerClass = ""; _spinnerClass = "";
await OnSubmit.InvokeAsync(Data); await OnSubmit.InvokeAsync(Data);
} }
@ -98,33 +106,35 @@ namespace TIAMSharedUI.Pages.Components
LogToBrowserConsole.LogToBC("Hellooooo " + _type.AssemblyQualifiedName); LogToBrowserConsole.LogToBC("Hellooooo " + _type.AssemblyQualifiedName);
var propertyList = _type.GetProperties(); var propertyList = _type.GetProperties();
var _length = propertyList.Length - IgnoreReflection.Count;
//var propertyList = typeof(TestUserData).GetProperties(); //var propertyList = typeof(TestUserData).GetProperties();
formLayoutBuilder.OpenComponent<DxFormLayout>(0); formLayoutBuilder.OpenComponent<DxFormLayout>(0);
formLayoutBuilder.AddAttribute(1, "ChildContent", (RenderFragment)((layoutItemBuilder) => formLayoutBuilder.AddAttribute(1, "ChildContent", (RenderFragment)((layoutItemBuilder) =>
{ {
int i = 0; int i = 0;
int j = 0; int k = 0;
foreach (var property in propertyList) foreach (var property in propertyList)
{ {
bool isActive = j == CurrentStep; bool isActive = k == CurrentStep;
//if (property.Name == "Id" || property.Name == "Latitude" || property.Name == "Longitude" || property.Name == "Created" || property.Name == "Modified") //if (property.Name == "Id" || property.Name == "Latitude" || property.Name == "Longitude" || property.Name == "Created" || property.Name == "Modified")
//if (property.Name == "Id" || property.Name == "Created" || property.Name == "Modified") //if (property.Name == "Id" || property.Name == "Created" || property.Name == "Modified")
if (property.Name == "Id" || property.Name == "Price" || property.Name == "Created" || property.Name == "Modified") if (IgnoreReflection.Contains(property.Name))
{ {
continue; continue;
} }
Guid _stepID = Guid.Empty; Guid _stepID = Guid.Empty;
if (!FormSteps.ContainsKey(j)) if (!FormSteps.ContainsKey(k))
{ {
_stepID = Guid.NewGuid(); _stepID = Guid.NewGuid();
FormSteps.Add(j, _stepID); LogToBrowserConsole.LogToBC($"Adding step {k}, {_stepID}, for {property.Name}");
FormSteps.Add(k, _stepID);
} }
else else
{ {
_stepID = FormSteps[j]; _stepID = FormSteps[k];
} }
//the following line creates an expression that accesses the property value by name //the following line creates an expression that accesses the property value by name
@ -138,7 +148,7 @@ namespace TIAMSharedUI.Pages.Components
layoutItemBuilder.AddAttribute(i++, "id", _stepID.ToString()); layoutItemBuilder.AddAttribute(i++, "id", _stepID.ToString());
layoutItemBuilder.AddAttribute(i++, "class", "disply-flex align-items-center "); layoutItemBuilder.AddAttribute(i++, "class", "disply-flex align-items-center ");
layoutItemBuilder.AddAttribute(i++, "style", "width: 100%;"); layoutItemBuilder.AddAttribute(i++, "style", "width: 100%;");
if (j != CurrentStep) if (k != CurrentStep)
{ {
layoutItemBuilder.AddAttribute(i++, "hidden", "true"); layoutItemBuilder.AddAttribute(i++, "hidden", "true");
} }
@ -146,7 +156,7 @@ namespace TIAMSharedUI.Pages.Components
{ {
//this input should be focused, so we set a flag //this input should be focused, so we set a flag
LogToBrowserConsole.LogToBC($"Setting focus to {property.Name}"); LogToBrowserConsole.LogToBC($"Setting focus to {property.Name}");
} }
DataTypeAttribute attrList = (DataTypeAttribute)property.GetCustomAttributes(typeof(DataTypeAttribute), false).First(); DataTypeAttribute attrList = (DataTypeAttribute)property.GetCustomAttributes(typeof(DataTypeAttribute), false).First();
@ -159,7 +169,7 @@ namespace TIAMSharedUI.Pages.Components
layoutItemBuilder.AddAttribute(i++, "Template", (RenderFragment<object>)((context) => ((editor) => layoutItemBuilder.AddAttribute(i++, "Template", (RenderFragment<object>)((context) => ((editor) =>
{ {
j = 0; var j = 0;
switch (attrList.DataType) switch (attrList.DataType)
{ {
@ -170,8 +180,8 @@ namespace TIAMSharedUI.Pages.Components
editor.AddAttribute(j++, "Text", property.GetValue(Data)); editor.AddAttribute(j++, "Text", property.GetValue(Data));
editor.AddAttribute(j++, "TextExpression", lambda); editor.AddAttribute(j++, "TextExpression", lambda);
editor.AddAttribute(j++, "CssClass", "form-field"); editor.AddAttribute(j++, "CssClass", "form-field");
if(isActive) if (isActive)
{ {
editor.AddAttribute(j++, "Id", "ActiveInput"); editor.AddAttribute(j++, "Id", "ActiveInput");
} }
@ -196,18 +206,24 @@ namespace TIAMSharedUI.Pages.Components
{ {
editor.OpenComponent<DxMaskedInput<string>>(j++); editor.OpenComponent<DxMaskedInput<string>>(j++);
editor.AddAttribute(j++, "Value", property.GetValue(Data)); editor.AddAttribute(j++, "Value", property.GetValue(Data));
editor.AddAttribute(j++, "Mask", TIAMRegularExpressions.PhoneNumberMask); editor.AddAttribute(j++, "Mask", TIAMRegularExpressions.PhoneNumberMask);
editor.AddAttribute(j++, "MaskMode", MaskMode.RegEx); editor.AddAttribute(j++, "MaskMode", MaskMode.RegEx);
editor.AddAttribute(j++, "BindValueMode", BindValueMode.OnInput); editor.AddAttribute(j++, "BindValueMode", BindValueMode.OnLostFocus);
editor.AddAttribute(j++, "ValueExpression", lambda); editor.AddAttribute(j++, "ValueExpression", lambda);
editor.AddAttribute(j++, "NullText", "+11234567890"); editor.AddAttribute(j++, "NullText", "+11234567890");
editor.AddAttribute(j++, "TextChanged", EventCallback.Factory.Create<string>(this, str => SetPhoneNumber(property, Data, str))); editor.AddAttribute(j++, "MaskAutoCompleteMode", MaskAutoCompleteMode.None);
//editor.AddAttribute(j++, "Placeholder", "#");
//editor.AddAttribute(j++, "PlaceholdersVisible", false);
editor.AddAttribute(j++, "ValueChanged", EventCallback.Factory.Create<string>(this, str => SetPhoneNumber(property, Data, str)));
//editor.AddAttribute(j++, "TextChanged", EventCallback.Factory.Create<string>(this, str => { property.SetValue(Data, str); })); //editor.AddAttribute(j++, "TextChanged", EventCallback.Factory.Create<string>(this, str => { property.SetValue(Data, str); }));
editor.AddAttribute(i++, "Template", (RenderFragment<object>)((context) => ((editor2) => editor.AddAttribute(i++, "Template", (RenderFragment<object>)((context) => ((regexProperties) =>
{ {
editor2.OpenComponent<DxRegExMaskProperties>(j++); var l = 0;
editor2.AddAttribute(j++, "PlaceholdersVisible", false); regexProperties.OpenComponent<DxRegExMaskProperties>(l++);
editor2.CloseComponent(); regexProperties.AddAttribute(l++, "Placeholder", "#");
regexProperties.AddAttribute(l++, "PlaceholdersVisible", false);
regexProperties.CloseComponent();
}))); })));
editor.CloseComponent(); editor.CloseComponent();
break; break;
@ -218,11 +234,25 @@ namespace TIAMSharedUI.Pages.Components
editor.AddAttribute(j++, "Value", property.GetValue(Data)); editor.AddAttribute(j++, "Value", property.GetValue(Data));
editor.AddAttribute(j++, "Mask", TIAMRegularExpressions.EmailMask); editor.AddAttribute(j++, "Mask", TIAMRegularExpressions.EmailMask);
editor.AddAttribute(j++, "MaskMode", MaskMode.RegEx); editor.AddAttribute(j++, "MaskMode", MaskMode.RegEx);
editor.AddAttribute(j++, "BindValueMode", BindValueMode.OnInput);
editor.AddAttribute(j++, "BindValueMode", BindValueMode.OnLostFocus);
//MaskAutoCompleteMode="@((MaskAutoCompleteMode)AutoCompleteMode)" //MaskAutoCompleteMode="@((MaskAutoCompleteMode)AutoCompleteMode)"
editor.AddAttribute(j++, "MaskAutoCompleteMode", MaskAutoCompleteMode.Strong); editor.AddAttribute(j++, "MaskAutoCompleteMode", MaskAutoCompleteMode.None);
editor.AddAttribute(j++, "ValueExpression", lambda); editor.AddAttribute(j++, "NullText", "example@example.com");
editor.AddAttribute(j++, "ValueExpression", lambda);
editor.AddAttribute(j++, "Placeholder", "#");
editor.AddAttribute(j++, "PlaceholdersVisible", false);
editor.AddAttribute(j++, "ValueChanged", EventCallback.Factory.Create<string>(this, str => { property.SetValue(Data, str); })); editor.AddAttribute(j++, "ValueChanged", EventCallback.Factory.Create<string>(this, str => { property.SetValue(Data, str); }));
//editor.AddAttribute(j++, "Template", (RenderFragment<object>)((context) => ((editor2) =>
//{
// var l = 0;
// editor2.OpenComponent<DxRegExMaskProperties>(l++);
// editor2.AddAttribute(l++, "Placeholder", "#");
// editor2.AddAttribute(l++, "PlaceholdersVisible", "false");
// editor2.CloseComponent();
//})));
editor.CloseComponent(); editor.CloseComponent();
break; break;
} }
@ -281,14 +311,14 @@ namespace TIAMSharedUI.Pages.Components
else if (property.PropertyType == typeof(DriverModel) && property.Name == "Driver") else if (property.PropertyType == typeof(DriverModel) && property.Name == "Driver")
{ {
//load possible drivers for this serviceprovider //load possible drivers for this serviceprovider
//DriverModel driver = (DriverModel)property.GetValue(Data); //DriverModel driver = (DriverModel)property.GetValue(Data);
IEnumerable<DriverModel> drivers = new DriverModel[] { IEnumerable<DriverModel> drivers = new DriverModel[] {
new DriverModel(Guid.NewGuid(), Guid.NewGuid(), "John Doe"), new DriverModel(Guid.NewGuid(), Guid.NewGuid(), "John Doe"),
new DriverModel(Guid.NewGuid(), Guid.NewGuid(), "Jane Doe"), new DriverModel(Guid.NewGuid(), Guid.NewGuid(), "Jane Doe"),
new DriverModel(Guid.NewGuid(), Guid.NewGuid(), "James Doe") new DriverModel(Guid.NewGuid(), Guid.NewGuid(), "James Doe")
}; };
var defaultDriver = drivers.FirstOrDefault(); var defaultDriver = drivers.FirstOrDefault();
//editor.OpenElement(j++, "p"); //editor.OpenElement(j++, "p");
@ -296,7 +326,7 @@ namespace TIAMSharedUI.Pages.Components
//editor.CloseElement(); //editor.CloseElement();
editor.OpenComponent<DxComboBox<DriverModel, DriverModel>>(j); editor.OpenComponent<DxComboBox<DriverModel, DriverModel>>(j);
editor.AddAttribute(j++, "Data", drivers); editor.AddAttribute(j++, "Data", drivers);
editor.AddAttribute(j++, "TextFieldName", nameof (defaultDriver.Name)); editor.AddAttribute(j++, "TextFieldName", nameof(defaultDriver.Name));
editor.AddAttribute(j++, "Value", drivers.FirstOrDefault()); editor.AddAttribute(j++, "Value", drivers.FirstOrDefault());
//editor.AddAttribute(j++, "Text", defaultDriver); //editor.AddAttribute(j++, "Text", defaultDriver);
editor.AddAttribute(j++, "CssClass", "form-field"); editor.AddAttribute(j++, "CssClass", "form-field");
@ -306,10 +336,30 @@ namespace TIAMSharedUI.Pages.Components
editor.CloseComponent(); editor.CloseComponent();
break; break;
} }
else if (property.PropertyType == typeof(TransferDestination)) //string.Compare(metadata.CustomDataType, "BoldRed", true) == 0
//else if (property.PropertyType == typeof(string) && property.Name == "Destination")
else if (property.PropertyType == typeof(string) && string.Compare(attrList.CustomDataType, "TransferDestination", true) == 0)
{ {
editor.OpenComponent<ChooseDestination>(j);
editor.OpenComponent<SliderItemSelector>(j);
editor.AddAttribute(j++, "OnSliderChanged", EventCallback.Factory.Create<string>(this, result =>
{
LogToBrowserConsole.LogToBC($"Slider changed to {result}");
property.SetValue(Data, result);
LogToBrowserConsole.LogToBC($"Data.Destination = {property.GetValue(Data)}");
StateHasChanged(); // Add this line to refresh the UI
}));
editor.CloseComponent(); editor.CloseComponent();
editor.OpenComponent<DxTextBox>(j++);
editor.AddAttribute(j++, "CssClass", "form-field");
editor.AddAttribute(j++, "NullText", "Slide or type");
editor.AddAttribute(j++, "Text", property.GetValue(Data));
editor.AddAttribute(j++, "TextExpression", lambda);
editor.AddAttribute(j++, "TextChanged", EventCallback.Factory.Create<string>(this, str => { property.SetValue(Data, str); }));
editor.CloseComponent();
} }
break; break;
@ -332,16 +382,18 @@ namespace TIAMSharedUI.Pages.Components
}))); })));
layoutItemBuilder.CloseComponent(); //close dxformlayoutitem layoutItemBuilder.CloseComponent(); //close dxformlayoutitem
if (j < propertyList.Length - 1)
if (k < _length - 1)
{ {
layoutItemBuilder.OpenComponent<DxButton>(i++); layoutItemBuilder.OpenComponent<DxButton>(i++);
layoutItemBuilder.AddAttribute(i++, "Click", EventCallback.Factory.Create<MouseEventArgs>(this, OnNext)); layoutItemBuilder.AddAttribute(i++, "Click", EventCallback.Factory.Create<MouseEventArgs>(this, OnNext));
layoutItemBuilder.AddAttribute(i++, "SubmitFormOnClick", false); layoutItemBuilder.AddAttribute(i++, "SubmitFormOnClick", false);
layoutItemBuilder.AddAttribute(i++, "CssClass", "btn btn-primary mt-3"); layoutItemBuilder.AddAttribute(i++, "CssClass", "btn btn-primary mt-3");
layoutItemBuilder.AddAttribute(i++, "style", "margin-left: auto;");
layoutItemBuilder.AddAttribute(i++, "Text", localizer.GetString(ResourceKeys.ButtonNext)); layoutItemBuilder.AddAttribute(i++, "Text", localizer.GetString(ResourceKeys.ButtonNext));
layoutItemBuilder.CloseComponent(); layoutItemBuilder.CloseComponent();
} }
if (j > 0) if (k > 0)
{ {
layoutItemBuilder.OpenComponent<DxButton>(i++); layoutItemBuilder.OpenComponent<DxButton>(i++);
layoutItemBuilder.AddAttribute(i++, "Click", EventCallback.Factory.Create<MouseEventArgs>(this, OnPrevious)); layoutItemBuilder.AddAttribute(i++, "Click", EventCallback.Factory.Create<MouseEventArgs>(this, OnPrevious));
@ -361,8 +413,8 @@ namespace TIAMSharedUI.Pages.Components
layoutItemBuilder.CloseElement(); layoutItemBuilder.CloseElement();
LogToBrowserConsole.LogToBC($"loop {j}, {propertyList.Length}"); LogToBrowserConsole.LogToBC($"loop {k}, length: {_length}, formSteps: {FormSteps.Count} ");
j++; k++;
} }
layoutItemBuilder.OpenComponent<DxFormLayoutItem>(i++); layoutItemBuilder.OpenComponent<DxFormLayoutItem>(i++);
@ -370,21 +422,21 @@ namespace TIAMSharedUI.Pages.Components
layoutItemBuilder.AddAttribute(i++, "CssClass", "full-width"); layoutItemBuilder.AddAttribute(i++, "CssClass", "full-width");
layoutItemBuilder.AddAttribute(i++, "Template", (RenderFragment<object>)((context) => ((editor) => layoutItemBuilder.AddAttribute(i++, "Template", (RenderFragment<object>)((context) => ((editor) =>
{ {
LogToBrowserConsole.LogToBC($"Submit button {CurrentStep}, {propertyList.Length}"); LogToBrowserConsole.LogToBC($"Submit button {CurrentStep}, {FormSteps.Count}");
editor.OpenElement(i++, "button"); editor.OpenElement(i++, "button");
editor.AddAttribute(i++, "type", "submit"); editor.AddAttribute(i++, "type", "submit");
editor.AddAttribute(i++, "class", "btn btn-primary mt-3"); editor.AddAttribute(i++, "class", "btn btn-primary mt-3");
if (CurrentStep < propertyList.Length - 1) if (CurrentStep < _length - 1)
{ {
editor.AddAttribute(i++, "disabled", "true"); editor.AddAttribute(i++, "disabled", "true");
} }
//editor.AddAttribute(i++, "disabled", "true"); //editor.AddAttribute(i++, "disabled", "true");
editor.OpenElement(i++, "span"); editor.OpenElement(i++, "span");
editor.AddAttribute(i++, "class", _spinnerClass); editor.AddAttribute(i++, "class", _spinnerClass);
editor.CloseElement(); editor.CloseElement();
editor.AddContent(i++, localizer.GetString(SubmitButtonText)); editor.AddContent(i++, localizer.GetString(SubmitButtonText));
editor.CloseElement(); editor.CloseElement();
@ -413,7 +465,7 @@ namespace TIAMSharedUI.Pages.Components
private void SetPhoneNumber(PropertyInfo property, object Data, string str) private void SetPhoneNumber(PropertyInfo property, object Data, string str)
{ {
LogToBrowserConsole.LogToBC($"SetPhoneNumber called with {str}"); LogToBrowserConsole.LogToBC($"SetPhoneNumber called with {str}");
property.SetValue(Data, str); property.SetValue(Data, str);
} }
} }
} }

View File

@ -41,9 +41,7 @@
public EventCallback<string> onNext { get; set; } public EventCallback<string> onNext { get; set; }
[Parameter] [Parameter]
public EventCallback<RegistrationModel> RegModelChanged { get; set; } public EventCallback<RegistrationModel> RegModelChanged { get; set; }
IEnumerable<char> PredefinedPlaceholders { get; set; } = new List<char>() { '_', '#' };
//string EmailMask { get; set; } = @"(\w|[.-])+@(\w|-)+\.(\w|-){2,4}"; //string EmailMask { get; set; } = @"(\w|[.-])+@(\w|-)+\.(\w|-){2,4}";
string EmailMask { get; set; } = TIAMRegularExpressions.EmailMask; string EmailMask { get; set; } = TIAMRegularExpressions.EmailMask;

View File

@ -11,20 +11,7 @@ namespace TIAMSharedUI.Pages.Components
base.OnInitialized(); base.OnInitialized();
this.CssClass = "dx-textbox tiam-textbox"; this.CssClass = "dx-textbox tiam-textbox";
} }
//need a textexpression that works with double? and string
[Parameter]
public new Expression<Func<string>> TextExpression {
get
{
return Model.TextExpression;
}
set
{
Model.TextExpression = value;
}
}
} }
} }

View File

@ -13,7 +13,11 @@
<DbTestComponent></DbTestComponent> <DbTestComponent></DbTestComponent>
<div class="target-container" @onclick="@(() => EulaVisible = true)"> <div class="target-container" @onclick="@(() => EulaVisible = true)">
<button class="btn btn-primary">NEW TRANSFERDESTINATION</button> <button class="btn btn-primary">NEW TRANSFERDESTINATION</button>
</div>
<div class="target-container" @onclick="@(() => EulaVisible2 = true)">
<button class="btn btn-primary">NEW TRANSFER</button> <button class="btn btn-primary">NEW TRANSFER</button>
</div> </div>
<DxPopup CssClass="popup-demo-events" <DxPopup CssClass="popup-demo-events"
@bind-Visible="@EulaVisible" @bind-Visible="@EulaVisible"
@ -25,7 +29,7 @@
Closing="EulaPopupClosing" Closing="EulaPopupClosing"
Closed="EulaPopupClosed"> Closed="EulaPopupClosed">
<BodyContentTemplate> <BodyContentTemplate>
<InputWizard Data=@myModel OnSubmit="SubmitForm"></InputWizard> <InputWizard Data=@myModel OnSubmit="SubmitForm" IgnoreReflection="@TransferDestinationIgnorList"></InputWizard>
</BodyContentTemplate> </BodyContentTemplate>
<FooterContentTemplate Context="Context"> <FooterContentTemplate Context="Context">
<div class="popup-demo-events-footer"> <div class="popup-demo-events-footer">
@ -36,17 +40,23 @@
</FooterContentTemplate> </FooterContentTemplate>
</DxPopup> </DxPopup>
<DxPopup CssClass="popup-demo-events" <DxPopup CssClass="popup-demo-events"
@bind-Visible="@EulaVisible" @bind-Visible="@EulaVisible2"
ShowFooter="true" ShowFooter="true"
CloseOnEscape="false" CloseOnEscape="false"
CloseOnOutsideClick="false" CloseOnOutsideClick="false"
ShowCloseButton="false" ShowCloseButton="false"
HeaderText="DevExpress EULA" HeaderText="New Transfer"
Closing="EulaPopupClosing" Closing="EulaPopupClosing"
Closed="EulaPopupClosed"> Closed="EulaPopupClosed">
<BodyContentTemplate> <BodyContentTemplate>
<InputWizard Data=@myModel2 OnSubmit="SubmitForm"></InputWizard> <InputWizard Data=@myModel2
OnSubmit="SubmitForm"
IgnoreReflection="@TransferIgnorList"
SubmitButtonText="ButtonSend"
TitleResourceString="TransferTitle"
SubtitleResourceString="TransferSubtitle"></InputWizard>
</BodyContentTemplate> </BodyContentTemplate>
<FooterContentTemplate Context="Context"> <FooterContentTemplate Context="Context">
<div class="popup-demo-events-footer"> <div class="popup-demo-events-footer">
<!--DxCheckBox CssClass="popup-demo-events-checkbox" @bind-Checked="@EulaAccepted">I accept the terms of the EULA</!--DxCheckBox--> <!--DxCheckBox CssClass="popup-demo-events-checkbox" @bind-Checked="@EulaAccepted">I accept the terms of the EULA</!--DxCheckBox-->
@ -64,7 +74,7 @@
<DxButton CssClass="popup-button my-1 ms-2" RenderStyle="ButtonRenderStyle.Secondary" Text="Cancel" Click="CancelEulaClick" /> <DxButton CssClass="popup-button my-1 ms-2" RenderStyle="ButtonRenderStyle.Secondary" Text="Cancel" Click="CancelEulaClick" />
</FooterContentTemplate> </FooterContentTemplate>
</DxPopup> </DxPopup>
<TiamDXTextBox></TiamDXTextBox>
</div> </div>
@code { @code {
@ -74,8 +84,22 @@
bool EulaAccepted { get; set; } bool EulaAccepted { get; set; }
bool EulaVisible { get; set; } bool EulaVisible { get; set; }
bool EulaVisible2 { get; set; }
bool MessageBoxVisible { get; set; } bool MessageBoxVisible { get; set; }
bool SkipEulaCheck { get; set; } bool SkipEulaCheck { get; set; }
public List<string> TransferIgnorList = new List<string>
{
"Id",
"Price"
};
public List<string> TransferDestinationIgnorList = new List<string>
{
"Id",
"Created",
"Modified"
};
void TryAgainClick() void TryAgainClick()
{ {
MessageBoxVisible = false; MessageBoxVisible = false;
@ -86,6 +110,7 @@
SkipEulaCheck = true; SkipEulaCheck = true;
MessageBoxVisible = false; MessageBoxVisible = false;
EulaVisible = false; EulaVisible = false;
EulaVisible2 = false;
} }
void EulaPopupClosed() void EulaPopupClosed()
{ {

View File

@ -9,7 +9,9 @@
</div> </div>
<SliderItemSelector @ref="slider" OnSliderChanged=@DisplaySlideData TextChanged="@changeDest"></SliderItemSelector> <SliderItemSelector @ref="slider" OwlId="owlSelector1" OnSliderChanged=@DisplaySlideData></SliderItemSelector>
<SliderItemSelector @ref="slider2" OwlId="owlSelector2" OnSliderChanged=@DisplaySlideData></SliderItemSelector>
<div class="wrapper"> <div class="wrapper">
@ -43,6 +45,7 @@
@code { @code {
SliderItemSelector slider; SliderItemSelector slider;
SliderItemSelector slider2;
public string message; public string message;
public string message2; public string message2;
public List<string> destinations = new List<string>() {"Liszt Ferenc Airport", "Buda Castle", "Chain Bridge"}; public List<string> destinations = new List<string>() {"Liszt Ferenc Airport", "Buda Castle", "Chain Bridge"};
@ -59,12 +62,7 @@
/*protected override void OnAfterRender(bool isFirst) /*protected override void OnAfterRender(bool isFirst)
{ {
message = " Target destination is " + slider.SliderElementId.ToString(); message = " Target destination is " + slider.SliderElementId.ToString();
}*/ }*/
void changeDest(string dest)
{
message2 = dest;
}
public void next() => navManager.NavigateTo("/transfer2"); public void next() => navManager.NavigateTo("/transfer2");

View File

@ -16,14 +16,14 @@
</div> </div>
<div> <div>
<h6 class="mb-0"> <a href="#">All settings</a> </h6> <!--h6 class="mb-0"> <a href="#">All settings</a> </h6-->
</div> </div>
</div> </div>
</div> </div>
<div class="card-body card-admin-body py-2 px-4"> <div class="card-body card-admin-body py-2 px-4">
<div class="d-flex flex-row mb-4 pb-2"> <div class="d-flex flex-row mb-4 pb-2">
<div class="flex-fill"> <div class="flex-fill">
<h5 class="bold">Your QR code</h5> <h4 class="bold">Your QR code</h4>
<p class="text-muted"> Use this in printed material, to gain referrals</p> <p class="text-muted"> Use this in printed material, to gain referrals</p>
</div> </div>
<div> <div>
@ -33,8 +33,10 @@
</div> </div>
<div class="d-flex flex-row mb-4 pb-2"> <div class="d-flex flex-column mb-4 pb-2">
<h4> Some <span class="small text-muted"> conclusion </span></h4> <h4> Hotel name: <span class="small text-muted"> Example hotel </span></h4>
<h4> Address: <span class="small text-muted"> Budapest, Minta u. 46 </span></h4>
<h4> Phone number: <span class="small text-muted"> +36 1 123 4567</span></h4>
</div> </div>
</div> </div>
<div class="card-footer py-2 px-4"> <div class="card-footer py-2 px-4">
@ -57,7 +59,7 @@
</div> </div>
<div> <div>
<h6 class="mb-0"> <a href="#">All settings</a> </h6> <h6 class="mb-0"> <a href="/user/transfers">All transfers</a> </h6>
</div> </div>
</div> </div>
</div> </div>

View File

@ -11,6 +11,9 @@ namespace TIAMSharedUI.Pages.User
{ {
public partial class HotelComponent: ComponentBase public partial class HotelComponent: ComponentBase
{ {
[Parameter]
public string? Id { get; set; }
[Inject] [Inject]
ISupplierService SupplierService { get; set; } ISupplierService SupplierService { get; set; }

View File

@ -62,15 +62,16 @@
CustomizeEditModel="Grid_CustomizeEditModel" CustomizeEditModel="Grid_CustomizeEditModel"
EditModelSaving="Grid_EditModelSaving" EditModelSaving="Grid_EditModelSaving"
DataItemDeleting="Grid_DataItemDeleting" DataItemDeleting="Grid_DataItemDeleting"
EditMode="GridEditMode.PopupEditForm" EditMode="GridEditMode.EditRow"
KeyboardNavigationEnabled="true"> KeyboardNavigationEnabled="true">
<Columns> <Columns>
<DxGridCommandColumn Width="160px" /> <DxGridCommandColumn Width="160px" />
<DxGridDataColumn FieldName="Name" MinWidth="80"> <DxGridDataColumn FieldName="Id" MinWidth="80">
<CellDisplayTemplate> <CellDisplayTemplate>
<a class="d-block text-left" href="transferdetails">@context.Value</a> <a class="d-block text-left" href="user/serviceprovider/@context.Value.ToString()">@context.Value</a>
</CellDisplayTemplate> </CellDisplayTemplate>
</DxGridDataColumn> </DxGridDataColumn>
<DxGridDataColumn FieldName="Name" MinWidth="80" />
<DxGridDataColumn FieldName="OwnerId" MinWidth="80" /> <DxGridDataColumn FieldName="OwnerId" MinWidth="80" />
</Columns> </Columns>

View File

@ -1,148 +1,158 @@
@page "/user/transfers" @page "/user/transfers"
@using AyCode.Models.Messages
@using TIAM.Entities.ServiceProviders @using TIAM.Entities.ServiceProviders
@using TIAM.Resources @using TIAM.Resources
@using TIAMSharedUI.Pages.Components @using TIAMSharedUI.Pages.Components
@using TIAMSharedUI.Shared @using TIAMSharedUI.Shared
@using TIAMWebApp.Shared.Application.Models @using TIAMWebApp.Shared.Application.Models
@using TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels @using TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels
@using TIAMWebApp.Shared.Application.Models.ClientSide.Messages
@using TIAMWebApp.Shared.Application.Utility @using TIAMWebApp.Shared.Application.Utility
@layout AdminLayout @layout AdminLayout
@inject LogToBrowserConsole logToBrowserConsole @inject LogToBrowserConsole logToBrowserConsole
@inject IStringLocalizer<TIAMResources> localizer @inject IStringLocalizer<TIAMResources> localizer
<PageTitle>Transfers</PageTitle> <PageTitle>Transfers</PageTitle>
<h3>Properties</h3>
<div class="container"> <div class="container">
<div class="row"> <div class="row">
<div class=" col-12"> <div class=" col-12">
<div class="card card-admin" style="border-radius: 16px; height: 80vh !important"> <h3>@localizer.GetString("Transfer")</h3>
<div class="card-header py-2 px-4"> <DxPopup CssClass="popup-demo-events"
<div class="d-flex justify-content-between align-items-center"> @bind-Visible="@PopupVisible"
<div> ShowFooter="true"
<span class="fw-bold text-body">Service providers list</span> CloseOnEscape="true"
CloseOnOutsideClick="false"
</div> ShowCloseButton="false"
<div> HeaderText="MessageBox"
<!--div class="target-container" @onclick="@(() => EulaVisible = true)"> Closing="EulaPopupClosing"
<button class="btn btn-primary">Create</button> Closed="EulaPopupClosed">
</div--> <BodyContentTemplate>
</div> <InputWizard Data=@messageWizardModel
OnSubmit="SubmitForm"
IgnoreReflection=@ignoreList
TitleResourceString="NewMessage"
SubtitleResourceString="NewMessageSubtitle"
SubmitButtonText="ButtonSend"></InputWizard>
</BodyContentTemplate>
<FooterContentTemplate Context="Context">
<div class="popup-demo-events-footer">
<!--DxCheckBox CssClass="popup-demo-events-checkbox" @bind-Checked="@EulaAccepted">I accept the terms of the EULA</!--DxCheckBox-->
<!--DxButton CssClass="popup-demo-events-button ms-2" RenderStyle="ButtonRenderStyle.Primary" Text="OK" Click="Context.CloseCallback" /-->
<DxButton CssClass="popup-demo-events-button ms-2" RenderStyle="ButtonRenderStyle.Secondary" Text="Cancel" Click="CancelCreateClick" />
</div> </div>
</FooterContentTemplate>
</DxPopup>
<div class="d-flex flex-column mb-4 pb-2">
<div class="align-self-end pl-2 pb-2">
<DxButton Text="Column Chooser"
RenderStyle="ButtonRenderStyle.Secondary"
IconCssClass="btn-column-chooser"
Click="ColumnChooserButton_Click" />
</div> </div>
<DxGrid @ref="Grid"
Data="TransferData"
PageSize="8"
KeyFieldName="Id"
ValidationEnabled="false"
CustomizeEditModel="Grid_CustomizeEditModel"
EditModelSaving="Grid_EditModelSaving"
DataItemDeleting="Grid_DataItemDeleting"
EditMode="GridEditMode.EditForm"
ColumnResizeMode="GridColumnResizeMode.NextColumn"
KeyboardNavigationEnabled="true"
ShowFilterRow="true">
<Columns>
<DxGridCommandColumn Width="8%" FixedPosition="GridColumnFixedPosition.Left" />
<div class="card-body card-admin-body py-2 px-4"> <DxGridDataColumn FieldName="Id" MinWidth="80" Width="10%" Visible="false" />
<div class="d-flex flex-column mb-4 pb-2"> <DxGridDataColumn FieldName="Destination" FixedPosition="GridColumnFixedPosition.Left" MinWidth="80" Width="10%">
<div class="align-self-end pl-2 pb-2"> <CellDisplayTemplate>
<DxButton Text="Column Chooser"
RenderStyle="ButtonRenderStyle.Secondary"
IconCssClass="btn-column-chooser"
Click="ColumnChooserButton_Click" />
</div>
<DxGrid @ref="Grid"
Data="TransferData"
PageSize="8"
KeyFieldName="Id"
ValidationEnabled="false"
CustomizeEditModel="Grid_CustomizeEditModel"
EditModelSaving="Grid_EditModelSaving"
DataItemDeleting="Grid_DataItemDeleting"
EditMode="GridEditMode.EditForm"
ColumnResizeMode="GridColumnResizeMode.NextColumn"
KeyboardNavigationEnabled="true"
ShowFilterRow="true">
<Columns>
<DxGridCommandColumn Width="8%" FixedPosition="GridColumnFixedPosition.Left" />
<DxGridDataColumn FieldName="Id" MinWidth="80" Width="10%" Visible="false" />
<DxGridDataColumn FieldName="Destination" FixedPosition="GridColumnFixedPosition.Left" MinWidth="80" Width="10%">
<CellDisplayTemplate>
@{
var keyField = context.Value;
<a class="d-block text-left" href="transferdetails">@context.Value</a>
}
</CellDisplayTemplate>
</DxGridDataColumn>
<DxGridDataColumn FieldName="PickupAddress" FixedPosition="GridColumnFixedPosition.Left" MinWidth="80" Width="15%" />
<DxGridDataColumn FieldName="TripDate" MinWidth="80" Width="10%" />
<DxGridDataColumn FieldName="NumberOfPassengers" MinWidth="40" Width="3%" />
<DxGridDataColumn FieldName="FullName" MinWidth="80" />
<DxGridDataColumn FieldName="PhoneNumber" MinWidth="80" Width="10%" />
<DxGridDataColumn FieldName="EmailAddress" MinWidth="80" Width="10%">
<CellDisplayTemplate>
@{
var keyField = context.Value;
string buttonText = "Contact";
<DxButton Click="() => SendMail(keyField)" Text="@buttonText" RenderStyle="ButtonRenderStyle.Primary" />
}
</CellDisplayTemplate>
</DxGridDataColumn>
<DxGridDataColumn FieldName="Driver" FixedPosition="GridColumnFixedPosition.Right" MinWidth="80" Width="15%">
<CellDisplayTemplate>
@{
DriverModel keyField = (DriverModel)context.Value;
string driverText = keyField.Name;
<p>@driverText</p>
}
</CellDisplayTemplate>
</DxGridDataColumn>
</Columns>
<EditFormTemplate Context="EditFormContext">
@{ @{
var transfer = (TransferWizardModel)EditFormContext.EditModel; var keyField = context.Value;
<a class="d-block text-left" href="transferdetails">@context.Value</a>
} }
<DxFormLayout CssClass="w-100"> </CellDisplayTemplate>
<DxFormLayoutItem Caption=@localizer.GetString(ResourceKeys.DestinationAddress) ColSpanMd="6"> </DxGridDataColumn>
@EditFormContext.GetEditor("Destination") <DxGridDataColumn FieldName="PickupAddress" FixedPosition="GridColumnFixedPosition.Left" MinWidth="80" Width="15%" />
</DxFormLayoutItem> <DxGridDataColumn FieldName="TripDate" MinWidth="80" Width="10%" />
<DxFormLayoutItem Caption=@localizer.GetString(ResourceKeys.PickupAddress) ColSpanMd="6"> <DxGridDataColumn FieldName="NumberOfPassengers" MinWidth="40" Width="3%" />
@EditFormContext.GetEditor("PickupAddress") <DxGridDataColumn FieldName="FullName" MinWidth="80" />
</DxFormLayoutItem> <DxGridDataColumn FieldName="PhoneNumber" MinWidth="80" Width="10%" />
<DxFormLayoutItem Caption="Trip date:" ColSpanMd="6"> <DxGridDataColumn FieldName="EmailAddress" MinWidth="80" Width="10%">
@EditFormContext.GetEditor("TripDate") <CellDisplayTemplate>
</DxFormLayoutItem> @{
<DxFormLayoutItem Caption="Passengers:" ColSpanMd="6"> var keyField = context.Value;
@EditFormContext.GetEditor("NumberOfPassengers") string buttonText = "Contact";
</DxFormLayoutItem> <DxButton Click="() => SendMail(keyField)" Text="@buttonText" RenderStyle="ButtonRenderStyle.Primary" />
<DxFormLayoutItem Caption="Full name:" ColSpanMd="6"> }
@EditFormContext.GetEditor("FullName") </CellDisplayTemplate>
</DxFormLayoutItem> </DxGridDataColumn>
<DxFormLayoutItem Caption="Phone number:" ColSpanMd="6"> <DxGridDataColumn FieldName="Driver" FixedPosition="GridColumnFixedPosition.Right" MinWidth="80" Width="15%">
@EditFormContext.GetEditor("PhoneNumber") <CellDisplayTemplate>
</DxFormLayoutItem> @{
<DxFormLayoutItem Caption="Email:" ColSpanMd="6"> DriverModel keyField = (DriverModel)context.Value;
@EditFormContext.GetEditor("EmailAddress") string driverText = keyField.Name;
</DxFormLayoutItem> <p>@driverText</p>
<DxFormLayoutItem Caption="Driver:" ColSpanMd="6"> }
<DxComboBox Data="@drivers" </CellDisplayTemplate>
NullText="Select driver..." </DxGridDataColumn>
FilteringMode="DataGridFilteringMode.Contains"
TextFieldName="Name" </Columns>
ValueFieldName="Name"
Value="@transfer.Driver.Name" <EditFormTemplate Context="EditFormContext">
ValueChanged="(string newCellValue) => { @{
var transfer = (TransferWizardModel)EditFormContext.EditModel;
}
<DxFormLayout CssClass="w-100">
<DxFormLayoutItem Caption=@localizer.GetString(ResourceKeys.DestinationAddress) ColSpanMd="6">
@EditFormContext.GetEditor("Destination")
</DxFormLayoutItem>
<DxFormLayoutItem Caption=@localizer.GetString(ResourceKeys.PickupAddress) ColSpanMd="6">
@EditFormContext.GetEditor("PickupAddress")
</DxFormLayoutItem>
<DxFormLayoutItem Caption="Trip date:" ColSpanMd="6">
@EditFormContext.GetEditor("TripDate")
</DxFormLayoutItem>
<DxFormLayoutItem Caption="Passengers:" ColSpanMd="6">
@EditFormContext.GetEditor("NumberOfPassengers")
</DxFormLayoutItem>
<DxFormLayoutItem Caption="Full name:" ColSpanMd="6">
@EditFormContext.GetEditor("FullName")
</DxFormLayoutItem>
<DxFormLayoutItem Caption="Phone number:" ColSpanMd="6">
@EditFormContext.GetEditor("PhoneNumber")
</DxFormLayoutItem>
<DxFormLayoutItem Caption="Email:" ColSpanMd="6">
@EditFormContext.GetEditor("EmailAddress")
</DxFormLayoutItem>
<DxFormLayoutItem Caption="Driver:" ColSpanMd="6">
<DxComboBox Data="@drivers"
NullText="Select driver..."
FilteringMode="DataGridFilteringMode.Contains"
TextFieldName="Name"
ValueFieldName="Name"
Value="@transfer.Driver.Name"
ValueChanged="(string newCellValue) => {
transfer.Driver = drivers.FirstOrDefault(x => x.Name == newCellValue); transfer.Driver = drivers.FirstOrDefault(x => x.Name == newCellValue);
logToBrowserConsole.LogToBC(newCellValue); logToBrowserConsole.LogToBC(newCellValue);
}"> }">
</DxComboBox> </DxComboBox>
</DxFormLayoutItem> </DxFormLayoutItem>
</DxFormLayout>
</EditFormTemplate>
</DxGrid> </DxFormLayout>
</EditFormTemplate>
</DxGrid>
</div>
<div class="d-flex flex-row mb-4 pb-2">
<h4> Some <span class="small text-muted"> conclusion </span></h4>
</div>
</div>
</div> </div>
</div> </div>
<div class=" col-12 col-xl-6"> <div class=" col-12 col-xl-6">
@ -159,8 +169,14 @@
public TransferWizardModel myModel = new TransferWizardModel(); public TransferWizardModel myModel = new TransferWizardModel();
bool EulaAccepted { get; set; } bool PopupVisible { get; set; }
bool EulaVisible { get; set; } public List<string> ignoreList = new List<string>
{
"ReceiverId"
};
public MessageWizardModel messageWizardModel = new MessageWizardModel();
//IEnumerable<DriverModel> drivers { get; set; } //IEnumerable<DriverModel> drivers { get; set; }
@ -185,22 +201,24 @@
void SendMail(object emailAddress) void SendMail(object emailAddress)
{ {
logToBrowserConsole.LogToBC($"Sending mail to {emailAddress}"); logToBrowserConsole.LogToBC($"Sending mail to {emailAddress}");
PopupVisible = true;
} }
void CancelCreateClick() void CancelCreateClick()
{ {
EulaVisible = false; PopupVisible = false;
} }
void EulaPopupClosed() void EulaPopupClosed()
{ {
EulaAccepted = false; //cancel clicked
} }
void EulaPopupClosing(PopupClosingEventArgs args) void EulaPopupClosing(PopupClosingEventArgs args)
{ {
myModel = new TransferWizardModel(); //myModel = new TransferWizardModel();
messageWizardModel = new MessageWizardModel();
} }
//----------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------

View File

@ -0,0 +1,22 @@
@page "/user/serviceprovider/{id}"
@using TIAMSharedUI.Shared
@using TIAMWebApp.Shared.Application.Models;
@using TIAMWebApp.Shared.Application.Interfaces;
@layout AdminLayout
@inject NavigationManager navigationManager
<div class="container">
<HotelComponent Id="@Id"></HotelComponent>
</div>
@code {
[Parameter]
public string Id { get; set; }
protected override void OnInitialized()
{
base.OnInitialized();
if (string.IsNullOrEmpty(Id))
navigationManager.NavigateTo("/user/properties");
}
}

View File

@ -12,11 +12,8 @@
<main> <main>
<article class="content"> <article class="content">
<TopRow></TopRow>
@Body @Body
</article> </article>
</main> </main>

View File

@ -1,4 +1,7 @@
 @using System.Linq.Expressions
@using TIAMWebApp.Shared.Application.Utility
@inject LogToBrowserConsole logToBrowserConsole
<style> <style>
.underlineInput{ .underlineInput{
padding-left: 10px; padding-left: 10px;
@ -13,28 +16,11 @@
} }
</style> </style>
<div id="owl-selector" class="owl-carousel owl-theme" style="padding-left: 20px; padding-right:20px; border-radius: 15px;"> <input type="hidden" id="PassingToJavaScript1" value=@OwlId>
<div class="item" id="0" style="background-color: rgba(0,0,0,0.1)">
<div class="item-desc text-center pt-3">
<h3>Please type an address or swipe to select from preset destinations!</h3>
<div class="wrapper" style="max-width: 800px; margin:0 auto">
<DxTextBox
TextChanged="@((newValue) => OnTextChanged(newValue))"
BindValueMode="@BindValueMode"
InputDelay="@InputDelay"
NullText="Type text..."
CssClass="cw-320 form-field underlineInput" />
</div> <div id=@OwlId class="owl-carousel owl-theme">
<p class="demo-text cw-320 mt-2">
Text: <b>@TextValue</b>
</p>
</div>
</div>
<div class="item" id="1" style="background-image: url(https://images.unsplash.com/photo-1551867633-194f125bddfa?auto=format&fit=crop&q=80&w=2070&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D); background-position: center;"> <div class="item" id="1" style="background-image: url(https://images.unsplash.com/photo-1551867633-194f125bddfa?auto=format&fit=crop&q=80&w=2070&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D); background-position: center;">
<div class="item-desc text-center pt-3"> <div class="item-desc text-center pt-3">
@ -55,11 +41,19 @@
</div> </div>
</div> </div>
</div> </div>
<h3>Please type an address or swipe to select from preset destinations!</h3>
@{
var jsOwlId = OwlId;
logToBrowserConsole.LogToBC(jsOwlId);
}
<script> <script>
var owl = $('#owl-selector'); var owlId = p1;
console.log('OwlId is ' + owlId);
var owl = $('#' + owlId);
var i = 0; var i = 0;
@ -123,23 +117,28 @@
</script> </script>
@code { @code {
[Parameter]
public string OwlId { get; set; }
public string TextValue { get; set; } = null; public string TextValue { get; set; } = null;
int? InputDelay { get; set; } = 3500; int? InputDelay { get; set; } = 3500;
BindValueMode BindValueMode { get; set; } = BindValueMode.OnInput; BindValueMode BindValueMode { get; set; } = BindValueMode.OnInput;
bool BindDelayEnabled { get { return BindValueMode == BindValueMode.OnDelayedInput; } } bool BindDelayEnabled { get { return BindValueMode == BindValueMode.OnDelayedInput; } }
[Parameter]
public EventCallback<string> TextChanged { get; set; }
public int SliderElementId = 0; public int SliderElementId = 0;
string content = ""; string content = "";
[Parameter] [Parameter]
public EventCallback<int> OnSliderChanged { get; set; } public EventCallback<string> OnSliderChanged { get; set; }
[Inject] [Inject]
public IJSRuntime JSRuntime { get; set; } public IJSRuntime JSRuntime { get; set; }
protected override void OnParametersSet()
{
logToBrowserConsole.LogToBC($"SliderItemSelector is initialized with OwlId: {OwlId}");
base.OnParametersSet();
}
protected override void OnAfterRender(bool firstRender) protected override void OnAfterRender(bool firstRender)
{ {
if(firstRender) if(firstRender)
@ -155,18 +154,14 @@
[JSInvokable] [JSInvokable]
public void ShowCoordinates(string coordinates, string itemId) public void ShowCoordinates(string coordinates, string itemId)
{ {
logToBrowserConsole.LogToBC($"Slider is changing: {coordinates}, {itemId}");
//content = coordinates + "item = " + itemId; //content = coordinates + "item = " + itemId;
SliderElementId = Convert.ToInt32(itemId); SliderElementId = Convert.ToInt32(itemId);
OnSliderChanged.InvokeAsync(Convert.ToInt32(itemId));
OnSliderChanged.InvokeAsync(itemId);
/*StateHasChanged();*/ /*StateHasChanged();*/
} }
void OnTextChanged(string newValue)
{
TextValue = newValue;
TextChanged.InvokeAsync(newValue);
}
} }

View File

@ -71,6 +71,10 @@ select {
/*my blazor overrides*/ /*my blazor overrides*/
.dxbl-col {
padding-left:0px;
padding-right:0px;
}
.dxbl-grid { .dxbl-grid {
--dxbl-grid-font-family: inherit !important; --dxbl-grid-font-family: inherit !important;

View File

@ -0,0 +1,35 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using TIAM.Resources;
namespace TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels
{
public class MessageWizardModel
{
[DataType(DataType.Text)]
[Display(Name = "ReceiverId", ResourceType = typeof(TIAMResources))]
public string ReceiverId { get; set; }
[Required(ErrorMessage = "The subject value should be specified.")]
[DataType(DataType.Text)]
[Display(Name = "Subject", ResourceType = typeof(TIAMResources))]
public string Subject { get; set; }
[Required(ErrorMessage = "The content value should be specified.")]
[DataType(DataType.MultilineText)]
[Display(Name = "HtmlContent", ResourceType = typeof(TIAMResources))]
public string Content { get; set; }
public MessageWizardModel() { }
public MessageWizardModel(string receiverId, string subject, string content)
{
ReceiverId = receiverId;
Subject = subject;
Content = content;
}
}
}

View File

@ -17,13 +17,13 @@ namespace TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels
//[Required(ErrorMessage = "The Username value should be specified.")] //[Required(ErrorMessage = "The Username value should be specified.")]
[Required(ErrorMessage = "The destination address should be specified.")] [Required(ErrorMessage = "The destination address should be specified.")]
[DataType(DataType.Text)] [DataType("TransferDestination")]
[Display(Name = ResourceKeys.Destination, ResourceType = typeof(TIAMResources))] [Display(Name = ResourceKeys.Destination, ResourceType = typeof(TIAMResources))]
public string? Destination { get; set; } public string? Destination { get; set; }
//[Required(ErrorMessage = "The Username value should be specified.")] //[Required(ErrorMessage = "The Username value should be specified.")]
[Required(ErrorMessage = "The pickup address should be specified.")] [Required(ErrorMessage = "The pickup address should be specified.")]
[DataType(DataType.Text)] [DataType("TransferDestination")]
[Display(Name = ResourceKeys.PickupAddress, ResourceType = typeof(TIAMResources))] [Display(Name = ResourceKeys.PickupAddress, ResourceType = typeof(TIAMResources))]
public string? PickupAddress { get; set; } public string? PickupAddress { get; set; }

View File

@ -10,6 +10,7 @@ namespace TIAMWebApp.Shared.Application.Utility
{ {
public const string EmailMask = @"(\w|[.-])+@(\w|-)+\.(\w|-){2,4}"; public const string EmailMask = @"(\w|[.-])+@(\w|-)+\.(\w|-){2,4}";
//public const string EmailMask = @"((\w|[.-])+@(\w|-)+\.(\w|-){2,4})?";
public const string PhoneNumberMask = "\\+(9[976]\\d|8[987530]\\d|6[987]\\d|5[90]\\d|42\\d|3[875]\\d|2[98654321]\\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|4[987654310]|3[9643210]|2[70]|7|1)\\W*\\d\\W*\\d\\W*\\d\\W*\\d\\W*\\d\\W*\\d\\W*\\d\\W*\\d\\W*(\\d{1,2})"; public const string PhoneNumberMask = "\\+(9[976]\\d|8[987530]\\d|6[987]\\d|5[90]\\d|42\\d|3[875]\\d|2[98654321]\\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|4[987654310]|3[9643210]|2[70]|7|1)\\W*\\d\\W*\\d\\W*\\d\\W*\\d\\W*\\d\\W*\\d\\W*\\d\\W*\\d\\W*(\\d{1,2})";
} }