Hi @cala
Sorry to hear that. We'll release a new 1.0 version for LeptonX as soon as possible. Thanks for your patience.
Also your credit is refunded.
Thanks, we reproduce the problem. We're working on it and solve it asap
You can provide different values per tenant while resolving service according to your requirement.
You can use the following way to use your services for making the configuration depending on tenants
https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration/options?view=aspnetcore-7.0#use-di-services-to-configure-options
We couldn't reproduce the issue. Can you provide a reproducible project to us? You can send it to support@abp.io
We can't reproduce the issue. can you provide a sample project that reproduces the issue?
Configuring a blazor wasm project as Asp.NET Core Hosted isn't hard topic. It can be achieved easily. We don't provide this template for now but we're thinking of a much simpler blazor wasm template and it'll be aspnetcore hosted.
Can you try the following option?
Configure<LeptonXThemeBlazorOptions>(options =>
{
// This will render only first 2 items
options.MobileMenuSelector = (menuItems) => menuItems.Take(2);
});
You don'T have to save database all the changes, you can keep data in Blazor component until saving it.
I'll present a simple example how to achieve that and how to modify items in memory in blazor ui
public partial Class MyPage
{
public Dictionary<string, string> MyList {get;} = new();
public string Key { get; set; }
public string Value { get; set; }
public void AddOption()
{
MyList.Add(Key, Value);
}
public async Task SaveAsync()
{
// TODO: Save 'MyList'.
}
}
@foreach(var item in MyList)
{
<Field>
<FieldLabel>@item.Key</FieldLabel>
<FieldBody>
<TextEdit @bind-Value="@MyList[@item.Key].Value" />
</FieldBody>
</Field>
}
</hr />
<Field>
<FieldLabel>Key</FieldLabel>
<FieldBody>
<TextEdit @bind-Value="@Key" />
</FieldBody>
</Field>
<Field>
<FieldLabel>Key</FieldLabel>
<FieldBody>
<TextEdit @bind-Value="@Value" />
</FieldBody>
</Field>
<Button OnClick="()=>AddOption("")" />
Text="</Button>Add Option
<Button OnClick="SaveAsync" >Save</Button>
We work on angular solution not mvc. What about per tenant payment gateway settings? Each tenant will have their own payment gateway settings? Do you have a sample for that how to change host payment settings for each individual tenant when they do payments?
Ok, You mean that tenants will receive payments instead of system owner receives payment from tenants. In that case, unfortunetely Payment module doesn't have tenant based configuration, you can configure it per application at the moment.
Oh sorry, I misunderstood the question.
All integration should go through payment request?
Yes, all the integration is on PaymentReques. After creating a payment request, you should redirect to a gateway selection page and users can pick one of configured payment ways and continue payment. Mostly payment completion is done synchronized with callback from payment provider.
You can see the available implemented providers packages from here
You can even add your own custom provider to show gateway selection page
Configure<PaymentOptions>(options =>
{
options.Gateways.Add(
new PaymentGatewayConfiguration(
"MyPaymentGatewayName",
new FixedLocalizableString("MyPaymentGatewayName"),
typeof(MyPaymentGateway)
)
);
});
/Payment/GatewaySelection
route and you can redirect to that route with paymentRequestId
querystring parameter after creating a payment request. On that page, if you configured more than one provider, users will see a payment gateway selection page otherwise, they'll be redirected to the payment page (paypal, stripe etc...)public virtual async Task<IActionResult> OnPost()
{
var paymentRequest = await _paymentRequestAppService.CreateAsync(new PaymentRequestCreateDto()
{
Currency= "USD",
Products = new List<PaymentRequestProductCreateDto>()
{
new PaymentRequestProductCreateDto
{
Code = "Product_01",
Name = "LEGO Super Mario",
Count = 2,
UnitPrice = 60,
TotalPrice = 200
}
}
});
return LocalRedirectPreserveMethod("/Payment/GatewaySelection?paymentRequestId=" + paymentRequest.Id);
}