Verified bug.
I'm creating an internal issue for this. I'll inform you in this issue after finding a workaround in your version
Also your credit is refunded.
Hi @serdar.genc
Unfortunetely ABP Framework doesn't support multi-lingual entities now.
I can suggest to you creating different blogs with language names like en, fr and add new blogposts to them according to the language of the post language.
It's not compatible with the ABP language system. You should make custom implementation to redirect current blog.
share 1 link as i got it in search engine.
https://support.abp.io/QA/Questions/1643/Add-cms-kit-as-separate-web-mvc-project-in-angular-project
Not sure if this is viable and working solution
Yes the solution of that link is suitable. You can install CmsKit to your existing HttpApi.Host project and consume it from angular.
After successfully adding CmsKit to your backend application, you can Service Proxies to consume Http endpoints.
abp generate-proxy -t ng
Module names are like below:
cms-kitcms-kit-admincms-kit-procms-kit-pro-adminYou can use those module names while generating client-proxy like below:
abp generate-proxy -t ng -m cms-kit-pro-admin
Then, you can start to develop pages that you need in angular application.
Does the following article help you? https://community.abp.io/posts/configuring-multiple-dbcontexts-in-an-abp-framework-project-uoz5is3o
All of them are solved and released.
For the blazor wasm, you have to run abp bundle command after updating leptonx theme
Hi @shobhit We don't have any official CMS Kit Angular implementation yet. If you do that, you have to implement it manually.
Things you have to do:
You have to upgrade your project to at least v4.3 _(This is the first version that CMS Kit appears)
Then you can consume CmsKit endpoints via generating Client Proxies on your angular project.
Thanks for your feedback. All of them will be solved with LeptonX 1.0.0-rc.4 release. It'll be available today.
Thanks for your feedback.
Additionally, Local Event Bus can be used in this scenario, but regular csharp events are much more useful for UI changes. Also, creating a new object like NotificationData allows to manage component's data independently from the component, so it's an abstraction over UI.
Hi @thaithiendi
Can you try using data-bs-dismiss="modal" since ABP uses Bootstrap 5.
https://getbootstrap.com/docs/5.0/components/modal/#modal-components
Hi @TonyH
You can publish an event inside the application to call StateHasChanged() method.
I'll share an example for UnreadCount for notifications.
Firstly I'll create a NotificationData class and register it as scoped into service collection. Scoped is important here because if you define it as Transient, a new instance will be created each time and it can't keep its state. If you define it as Singleton, it's ok in Blazor WASM but it won't work on Blazor Server, all the connected users will use the same instance of that object. So, Scoped is the best way in here.
1- Define NotificationData.cs first.
public class NotificationData : IScopedDependency
{
private int unreadCount;
public int UnreadCount
{
get => unreadCount;
set
{
unreadCount = value;
UnreadCountChanged?.Invoke(this, new EventArgs());
}
}
public event EventHandler UnreadCountChanged;
}
2- Create a notification component with name NotificationsComponent.razor for toolbar
@inject NotificationData NotificationData
<div class="nav-link">
<i class="fa fa-bell"></i>
@if (NotificationData.UnreadCount > 0)
{
<span class="position-absolute top-0 badge rounded-pill bg-danger">
@NotificationData.UnreadCount
<span class="visually-hidden">unread messages</span>
</span>
}
</div>
@code{
protected override Task OnInitializedAsync()
{
NotificationData.UnreadCountChanged += (s, e) => StateHasChanged();
return base.OnInitializedAsync();
}
}
3- Add it to the toolbar
public class MyToolbarContributor : IToolbarContributor
{
public Task ConfigureToolbarAsync(IToolbarConfigurationContext context)
{
if(context.Toolbar.Name == StandardToolbars.Main)
{
context.Toolbar.Items.Add(new ToolbarItem(typeof(NotificationsComponent)));
}
return Task.CompletedTask;
}
}
4- Don't forget to configure it in the module file
Configure<AbpToolbarOptions>(options =>
{
options.Contributors.Add(new MyToolbarContributor());
});
5- Inject the NotificationData wherever you want and make changes. (In my case I've injected it into Index.razor)
@inject NotificationData NotificationData
<Button Color="Color.Success" @onclick="@(()=> NotificationData.UnreadCount++)" >Increase Unread Count</Button>
<Button Color="Color.Danger" @onclick="@(()=> NotificationData.UnreadCount--)" >Decrease Unread Count</Button>
6- See the result: