Hi
We haven’t release the patch version You can use the temporary solution
Hi,
I did not reproduce this problem using the website you shared, can you share the full steps to reproduce? thanks.
HI,
Can you explain it in detail? thanks.
Hi,
This is a known issue, we fixed it in the patch version.
Your ticket refunded.
You can check this: https://support.abp.io/QA/Questions/5186/What-wrong-with-my-menu-construction-May-ABP-framework-throw-detail-exception-for-us-to-debug
Hi,
We have an example may can help you: https://github.com/abpframework/abp-samples/tree/master/DomainTenantResolver/OpenIddict/NG
Hi,
We will fix it in the next patch version. Your ticket was refunded.
You can try putting the Index.js file in the Pages/SettingManagement folder.
(function ($) {
var l = abp.localization.getResource('AbpSettingManagement');
$('#tabs-nav .nav-item .nav-link').click(function () {
var _this = $(this);
var id = _this.data("id")
abp.ui.block({
elm: '#tab-content',
busy: true,
promise: abp.ajax({
type: 'POST',
url: 'SettingManagement?handler=RenderView&id=' + id,
dataType: "html",
contentType: false,
processData: false
}).done(function (response) {
$('#tab-content').children('.tab-pane').removeClass('show').removeClass('active');
_this.attr('data-bs-target', '#' + $.escapeSelector($.escapeSelector(id)));
$('#tab-content').append('<div id=' + $.escapeSelector(id) + ' class="tab-pane fade active show">' + response + '</div>');
})
});
});
$(document).on('AbpSettingSaved', function () {
abp.notify.success(l('SuccessfullySaved'));
abp.ajax({
url: abp.appPath + 'SettingManagement?handler=RefreshConfiguration'
});
});
})(jQuery);
Hi,
You can try this:
EmptyLayout.razor
@inherits LayoutComponentBase
@Body
Test page
@page "test"
@inject IOptions<LeptonXThemeBlazorOptions> LayoutOptions
@layout EmptyLayout
if(Url == "kiosk")
{
<h3>Hello world</h3>
}else
{
<LayoutView Layout="@LayoutOptions.Value.Layout">
<h3>Hello world</h3>
</LayoutView>
}
Hi,
We will fix it, thanks for your report.
Sorry for the wrong place in my previous answer.
We created an internal issue and it will fixed in the next patch version.
Hi,
We will fix the problem in the next patch version.
You can try this:
[ExposeServices(typeof(IConversationAppService))]
public class MyConversationAppService : ConversationAppService
{
private readonly MyMessagingManager _myMessagingManager;
private readonly IChatUserLookupService _chatUserLookupService;
public MyConversationAppService(
MessagingManager messagingManager,
IChatUserLookupService chatUserLookupService,
IConversationRepository conversationRepository,
IRealTimeChatMessageSender realTimeChatMessageSender,
IAuthorizationService authorizationService,
MyMessagingManager myMessagingManager) : base(messagingManager, chatUserLookupService, conversationRepository, realTimeChatMessageSender, authorizationService)
{
_chatUserLookupService = chatUserLookupService;
_myMessagingManager = myMessagingManager;
}
public override async Task<ChatConversationDto> GetConversationAsync(GetConversationInput input)
{
var targetUser = await _chatUserLookupService.FindByIdAsync(input.TargetUserId);
if (targetUser == null)
{
throw new BusinessException("Volo.Chat:010003");
}
var chatConversation = new ChatConversationDto
{
TargetUserInfo = new ChatTargetUserInfo
{
UserId = targetUser.Id,
Name = targetUser.Name,
Surname = targetUser.Surname,
Username = targetUser.UserName,
},
Messages = new List<ChatMessageDto>()
};
var messages = await _myMessagingManager.ReadMessagesAsync(targetUser.Id, input.SkipCount, input.MaxResultCount);
chatConversation.Messages.AddRange(
messages.Select(x => new ChatMessageDto
{
Message = x.Message.Text,
MessageDate = x.Message.CreationTime,
ReadDate = x.Message.ReadTime ?? DateTime.MaxValue,
IsRead = x.Message.IsAllRead,
Side = x.UserMessage.Side
})
);
return chatConversation;
}
}
[ExposeServices(typeof(MessagingManager), typeof(MyMessagingManager))]
public class MyMessagingManager : MessagingManager
{
private readonly IUnitOfWorkManager _unitOfWorkManager;
private readonly IUserMessageRepository _userMessageRepository;
private readonly IConversationRepository _conversationRepository;
private readonly IMessageRepository _messageRepository;
public MyMessagingManager(
IMessageRepository messageRepository,
IUserMessageRepository userMessageRepository,
IChatUserLookupService chatUserLookupService,
IConversationRepository conversationRepository,
ICurrentUser currentUser,
IUnitOfWorkManager unitOfWorkManager)
: base(messageRepository, userMessageRepository, chatUserLookupService, conversationRepository, currentUser)
{
_messageRepository = messageRepository;
_userMessageRepository = userMessageRepository;
_conversationRepository = conversationRepository;
_unitOfWorkManager = unitOfWorkManager;
}
public new async Task<List<MessageWithDetails>> ReadMessagesAsync(Guid targetUserId, int skipCount, int maxResultCount)
{
var messages = await _userMessageRepository.GetMessagesAsync(CurrentUser.GetId(), targetUserId, skipCount, maxResultCount);
//TODO: Optimize
var readMessages = new List<Message>();
foreach (var message in messages.Where(m => !m.UserMessage.IsRead).ToArray())
{
message.UserMessage.MarkAsRead(Clock.Now);
await _userMessageRepository.UpdateAsync(message.UserMessage);
message.Message.MarkAsAllRead(Clock.Now);
readMessages.Add(message.Message);
}
var conversationPair = await _conversationRepository.FindPairAsync(CurrentUser.GetId(), targetUserId);
if (conversationPair != null)
{
conversationPair.SenderConversation.ResetUnreadMessageCount();
await _conversationRepository.UpdateAsync(conversationPair.SenderConversation);
await _conversationRepository.UpdateAsync(conversationPair.TargetConversation);
}
try
{
using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: _unitOfWorkManager.Current?.Options.IsTransactional ?? false))
{
foreach (var message in readMessages)
{
await _messageRepository.UpdateAsync(message);
}
await uow.CompleteAsync();
}
}
catch (AbpDbConcurrencyException e)
{
// The messages are change by another request. So, we can ignore this exception.
}
return messages;
}
}