@using Hushian.Application.Dtos
@using Hushian.Application.Dtos.Company
@using HushianWebApp.Components.UserPanel
@using HushianWebApp.Service
@using HushianWebApp.Services
@inject IJSRuntime JSRuntime
@inject CompanyService companyService
@inject GroupService groupService
@inject ILocalStorageService localStorageService;
@inject AuthService authService;
@inject BaseController baseController;
@inject ConversationService conversationService
@layout UserPanelLayout
@page "/UserPanel/{CompanyID:int}"
@page "/UserPanel/{CompanyID:int}/{ConversationID:int?}"
@if (!IsLogin)
{
}
@if (IsLogin)
{
@if (SelectedConversation == null)
{
@GCContent
@if (Conversations.Count > 0)
{
@ConversationsContent
}
}
else
{
}
}
@if (IsLogin && (Conversations.Count == 0 && SelectedConversation == null) || (Conversations.Count > 0 && SelectedConversation != null && SelectedConversation.status == Hushian.Enums.ConversationStatus.InProgress))
{
}
@code {
#region Parameter
[Parameter] public int CompanyID { get; set; }
[Parameter] public int? ConversationID { get; set; }
#endregion
#region Fild
public ConversationDto? SelectedConversation { get; set; } = null;
public List Conversations { get; set; } = new();
public List? SelectedConversationItems { get; set; } = null;
public RenderFragment GCContent { get; set; }
public RenderFragment ConversationsContent { get; set; }
List groups = new List();
public CompanyDto company { get; set; } = new();
int CountQueueCompany = 0;
public string CompanyName { get; set; } = "هوشیان";
public bool IsLogin { get; set; } = false;
public int? SelectedGroup { get; set; }
public string InputMessage { get; set; }
public bool Sending { get; set; } = false;
#endregion
}
@functions {
protected override async Task OnParametersSetAsync()
{
if (ConversationID.HasValue && ConversationID > 0 && Conversations.Count > 0)
await SelectedConv(ConversationID.Value);
await base.OnParametersSetAsync();
}
protected override async Task OnInitializedAsync()
{
await CheckOnline();
await base.OnInitializedAsync();
}
async Task CheckOnline()
{
var token = await localStorageService.GetItem("key");
if (string.IsNullOrEmpty(token))
{
IsLogin = false;
}
else
{
await baseController.RemoveToken();
await baseController.SetToken(token);
if (!await authService.IsOnline())
{
await baseController.RemoveToken();
IsLogin = false;
}
else
{
IsLogin = true;
await Login();
}
}
}
async Task CallBackSelectedGroup(int ID)
{
SelectedGroup = ID;
StateHasChanged();
}
async Task Login()
{
// اینجا منطق ورود کاربر را پیادهسازی کنید
IsLogin = true;
var _company = await companyService.GetCompany(CompanyID);
if (_company == null)
{
// not Founf Company
}
else
{
if (!_company.Available)
{
// not Available Company
}
else
{
CompanyName = _company.Fullname;
company = _company;
var _groups = await groupService.GetGroupsCompany(CompanyID);
if (_groups != null)
{
CountQueueCompany = await conversationService.GetCountQueueCompany(CompanyID);
groups = _groups;
GCContent =@
;
Conversations = await conversationService.MyConversationUserSide(CompanyID);
if (Conversations.Count > 0)
ConversationsContent =@
;
}
else
{
// ex Groups Company
}
}
}
StateHasChanged();
}
async Task SelectedConv(int ID)
{
if (Conversations.Any(f => f.ID == ID))
{
SelectedConversation = Conversations.FirstOrDefault(f => f.ID == ID);
SelectedConversationItems = await conversationService.GetConversationItems(ID);
SelectedGroup = SelectedConversation.GroupID;
StateHasChanged();
}
}
private void CloseChat()
{
// میتوان اینجا حالت مخفیسازی کامپوننت را تنظیم کرد
}
private void GoBack()
{
// برگشت به منوی قبلی یا وضعیت قبلی
}
async Task OnClickSendMssage()
{
Sending = true;
if (SelectedConversation != null)
{
var item = new ADDConversationItemDto()
{
ConversationID = SelectedConversation.ID,
text = InputMessage
};
}
else
{
var Item = new ADDConversationDto()
{
CompanyID = CompanyID,
GroupID = SelectedGroup,
Question = InputMessage
};
}
Sending = false;
}
}